pulumi-kubernetes 4.23.0a1746129859__py3-none-any.whl → 4.23.0a1746138483__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pulumi-kubernetes might be problematic. Click here for more details.

Files changed (116) hide show
  1. pulumi_kubernetes/__init__.py +36 -2
  2. pulumi_kubernetes/admissionregistration/v1alpha1/_inputs.py +30 -30
  3. pulumi_kubernetes/admissionregistration/v1alpha1/outputs.py +20 -20
  4. pulumi_kubernetes/apps/v1/ReplicaSetList.py +4 -4
  5. pulumi_kubernetes/apps/v1/_inputs.py +109 -56
  6. pulumi_kubernetes/apps/v1/outputs.py +129 -56
  7. pulumi_kubernetes/autoscaling/v2/_inputs.py +92 -12
  8. pulumi_kubernetes/autoscaling/v2/outputs.py +66 -10
  9. pulumi_kubernetes/batch/v1/_inputs.py +12 -42
  10. pulumi_kubernetes/batch/v1/outputs.py +8 -32
  11. pulumi_kubernetes/certificates/v1alpha1/ClusterTrustBundle.py +2 -0
  12. pulumi_kubernetes/certificates/v1alpha1/ClusterTrustBundlePatch.py +2 -0
  13. pulumi_kubernetes/certificates/v1beta1/ClusterTrustBundle.py +229 -0
  14. pulumi_kubernetes/certificates/v1beta1/ClusterTrustBundleList.py +219 -0
  15. pulumi_kubernetes/certificates/v1beta1/ClusterTrustBundlePatch.py +240 -0
  16. pulumi_kubernetes/certificates/v1beta1/__init__.py +3 -0
  17. pulumi_kubernetes/certificates/v1beta1/_inputs.py +292 -0
  18. pulumi_kubernetes/certificates/v1beta1/outputs.py +241 -0
  19. pulumi_kubernetes/coordination/v1alpha1/LeaseCandidate.py +1 -1
  20. pulumi_kubernetes/coordination/v1alpha1/LeaseCandidatePatch.py +1 -1
  21. pulumi_kubernetes/coordination/v1alpha2/LeaseCandidate.py +1 -1
  22. pulumi_kubernetes/coordination/v1alpha2/LeaseCandidatePatch.py +1 -1
  23. pulumi_kubernetes/coordination/v1alpha2/_inputs.py +6 -6
  24. pulumi_kubernetes/coordination/v1alpha2/outputs.py +4 -4
  25. pulumi_kubernetes/coordination/v1beta1/LeaseCandidate.py +220 -0
  26. pulumi_kubernetes/coordination/v1beta1/LeaseCandidateList.py +219 -0
  27. pulumi_kubernetes/coordination/v1beta1/LeaseCandidatePatch.py +232 -0
  28. pulumi_kubernetes/coordination/v1beta1/__init__.py +3 -0
  29. pulumi_kubernetes/coordination/v1beta1/_inputs.py +371 -0
  30. pulumi_kubernetes/coordination/v1beta1/outputs.py +292 -0
  31. pulumi_kubernetes/core/v1/Endpoints.py +8 -0
  32. pulumi_kubernetes/core/v1/EndpointsList.py +2 -2
  33. pulumi_kubernetes/core/v1/EndpointsPatch.py +8 -0
  34. pulumi_kubernetes/core/v1/_inputs.py +240 -66
  35. pulumi_kubernetes/core/v1/outputs.py +251 -51
  36. pulumi_kubernetes/discovery/v1/EndpointSlice.py +10 -10
  37. pulumi_kubernetes/discovery/v1/EndpointSlicePatch.py +10 -10
  38. pulumi_kubernetes/discovery/v1/_inputs.py +159 -44
  39. pulumi_kubernetes/discovery/v1/outputs.py +107 -32
  40. pulumi_kubernetes/networking/v1/IPAddress.py +220 -0
  41. pulumi_kubernetes/networking/v1/IPAddressList.py +219 -0
  42. pulumi_kubernetes/networking/v1/IPAddressPatch.py +232 -0
  43. pulumi_kubernetes/networking/v1/ServiceCIDR.py +230 -0
  44. pulumi_kubernetes/networking/v1/ServiceCIDRList.py +219 -0
  45. pulumi_kubernetes/networking/v1/ServiceCIDRPatch.py +242 -0
  46. pulumi_kubernetes/networking/v1/__init__.py +6 -0
  47. pulumi_kubernetes/networking/v1/_inputs.py +599 -0
  48. pulumi_kubernetes/networking/v1/outputs.py +461 -0
  49. pulumi_kubernetes/networking/v1alpha1/IPAddress.py +1 -1
  50. pulumi_kubernetes/networking/v1alpha1/IPAddressPatch.py +1 -1
  51. pulumi_kubernetes/networking/v1alpha1/ServiceCIDR.py +1 -1
  52. pulumi_kubernetes/networking/v1alpha1/ServiceCIDRPatch.py +1 -1
  53. pulumi_kubernetes/networking/v1beta1/IPAddress.py +1 -1
  54. pulumi_kubernetes/networking/v1beta1/IPAddressPatch.py +1 -1
  55. pulumi_kubernetes/networking/v1beta1/ServiceCIDR.py +1 -1
  56. pulumi_kubernetes/networking/v1beta1/ServiceCIDRPatch.py +1 -1
  57. pulumi_kubernetes/policy/v1/_inputs.py +0 -12
  58. pulumi_kubernetes/policy/v1/outputs.py +0 -8
  59. pulumi_kubernetes/pulumi-plugin.json +1 -1
  60. pulumi_kubernetes/resource/__init__.py +3 -0
  61. pulumi_kubernetes/resource/v1alpha1/ResourceClaim.py +1 -1
  62. pulumi_kubernetes/resource/v1alpha1/ResourceClaimPatch.py +1 -1
  63. pulumi_kubernetes/resource/v1alpha1/ResourceClaimTemplate.py +1 -1
  64. pulumi_kubernetes/resource/v1alpha1/ResourceClaimTemplatePatch.py +1 -1
  65. pulumi_kubernetes/resource/v1alpha2/ResourceClaim.py +1 -1
  66. pulumi_kubernetes/resource/v1alpha2/ResourceClaimPatch.py +1 -1
  67. pulumi_kubernetes/resource/v1alpha2/ResourceClaimTemplate.py +1 -1
  68. pulumi_kubernetes/resource/v1alpha2/ResourceClaimTemplatePatch.py +1 -1
  69. pulumi_kubernetes/resource/v1alpha2/ResourceSlice.py +1 -1
  70. pulumi_kubernetes/resource/v1alpha2/ResourceSlicePatch.py +1 -1
  71. pulumi_kubernetes/resource/v1alpha3/DeviceClass.py +1 -1
  72. pulumi_kubernetes/resource/v1alpha3/DeviceClassPatch.py +1 -1
  73. pulumi_kubernetes/resource/v1alpha3/DeviceTaintRule.py +227 -0
  74. pulumi_kubernetes/resource/v1alpha3/DeviceTaintRuleList.py +219 -0
  75. pulumi_kubernetes/resource/v1alpha3/DeviceTaintRulePatch.py +238 -0
  76. pulumi_kubernetes/resource/v1alpha3/ResourceClaim.py +1 -1
  77. pulumi_kubernetes/resource/v1alpha3/ResourceClaimPatch.py +1 -1
  78. pulumi_kubernetes/resource/v1alpha3/ResourceClaimTemplate.py +1 -1
  79. pulumi_kubernetes/resource/v1alpha3/ResourceClaimTemplatePatch.py +1 -1
  80. pulumi_kubernetes/resource/v1alpha3/ResourceSlice.py +1 -1
  81. pulumi_kubernetes/resource/v1alpha3/ResourceSlicePatch.py +1 -1
  82. pulumi_kubernetes/resource/v1alpha3/__init__.py +3 -0
  83. pulumi_kubernetes/resource/v1alpha3/_inputs.py +2559 -213
  84. pulumi_kubernetes/resource/v1alpha3/outputs.py +2037 -256
  85. pulumi_kubernetes/resource/v1beta1/DeviceClass.py +1 -1
  86. pulumi_kubernetes/resource/v1beta1/DeviceClassPatch.py +1 -1
  87. pulumi_kubernetes/resource/v1beta1/ResourceClaim.py +1 -1
  88. pulumi_kubernetes/resource/v1beta1/ResourceClaimPatch.py +1 -1
  89. pulumi_kubernetes/resource/v1beta1/ResourceClaimTemplate.py +1 -1
  90. pulumi_kubernetes/resource/v1beta1/ResourceClaimTemplatePatch.py +1 -1
  91. pulumi_kubernetes/resource/v1beta1/ResourceSlice.py +1 -1
  92. pulumi_kubernetes/resource/v1beta1/ResourceSlicePatch.py +1 -1
  93. pulumi_kubernetes/resource/v1beta1/_inputs.py +2044 -176
  94. pulumi_kubernetes/resource/v1beta1/outputs.py +1536 -134
  95. pulumi_kubernetes/resource/v1beta2/DeviceClass.py +241 -0
  96. pulumi_kubernetes/resource/v1beta2/DeviceClassList.py +219 -0
  97. pulumi_kubernetes/resource/v1beta2/DeviceClassPatch.py +252 -0
  98. pulumi_kubernetes/resource/v1beta2/ResourceClaim.py +236 -0
  99. pulumi_kubernetes/resource/v1beta2/ResourceClaimList.py +220 -0
  100. pulumi_kubernetes/resource/v1beta2/ResourceClaimPatch.py +247 -0
  101. pulumi_kubernetes/resource/v1beta2/ResourceClaimTemplate.py +233 -0
  102. pulumi_kubernetes/resource/v1beta2/ResourceClaimTemplateList.py +219 -0
  103. pulumi_kubernetes/resource/v1beta2/ResourceClaimTemplatePatch.py +244 -0
  104. pulumi_kubernetes/resource/v1beta2/ResourceSlice.py +250 -0
  105. pulumi_kubernetes/resource/v1beta2/ResourceSliceList.py +220 -0
  106. pulumi_kubernetes/resource/v1beta2/ResourceSlicePatch.py +261 -0
  107. pulumi_kubernetes/resource/v1beta2/__init__.py +22 -0
  108. pulumi_kubernetes/resource/v1beta2/_inputs.py +5681 -0
  109. pulumi_kubernetes/resource/v1beta2/outputs.py +4726 -0
  110. pulumi_kubernetes/storage/v1/_inputs.py +90 -0
  111. pulumi_kubernetes/storage/v1/outputs.py +110 -0
  112. pulumi_kubernetes/yaml/yaml.py +108 -0
  113. {pulumi_kubernetes-4.23.0a1746129859.dist-info → pulumi_kubernetes-4.23.0a1746138483.dist-info}/METADATA +1 -1
  114. {pulumi_kubernetes-4.23.0a1746129859.dist-info → pulumi_kubernetes-4.23.0a1746138483.dist-info}/RECORD +116 -86
  115. {pulumi_kubernetes-4.23.0a1746129859.dist-info → pulumi_kubernetes-4.23.0a1746138483.dist-info}/WHEEL +0 -0
  116. {pulumi_kubernetes-4.23.0a1746129859.dist-info → pulumi_kubernetes-4.23.0a1746138483.dist-info}/top_level.txt +0 -0
@@ -27,6 +27,9 @@ __all__ = [
27
27
  'BasicDevicePatch',
28
28
  'CELDeviceSelector',
29
29
  'CELDeviceSelectorPatch',
30
+ 'Counter',
31
+ 'CounterSet',
32
+ 'CounterSetPatch',
30
33
  'Device',
31
34
  'DeviceAllocationConfiguration',
32
35
  'DeviceAllocationConfigurationPatch',
@@ -45,6 +48,8 @@ __all__ = [
45
48
  'DeviceClassSpecPatch',
46
49
  'DeviceConstraint',
47
50
  'DeviceConstraintPatch',
51
+ 'DeviceCounterConsumption',
52
+ 'DeviceCounterConsumptionPatch',
48
53
  'DevicePatch',
49
54
  'DeviceRequest',
50
55
  'DeviceRequestAllocationResult',
@@ -52,6 +57,12 @@ __all__ = [
52
57
  'DeviceRequestPatch',
53
58
  'DeviceSelector',
54
59
  'DeviceSelectorPatch',
60
+ 'DeviceSubRequest',
61
+ 'DeviceSubRequestPatch',
62
+ 'DeviceTaint',
63
+ 'DeviceTaintPatch',
64
+ 'DeviceToleration',
65
+ 'DeviceTolerationPatch',
55
66
  'NetworkDeviceData',
56
67
  'NetworkDeviceDataPatch',
57
68
  'OpaqueDeviceConfiguration',
@@ -112,6 +123,8 @@ class AllocatedDeviceStatus(dict):
112
123
 
113
124
  Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
114
125
  :param Sequence['_meta.v1.ConditionArgs'] conditions: Conditions contains the latest observation of the device's state. If the device has been configured according to the class and claim config references, the `Ready` condition should be True.
126
+
127
+ Must not contain more than 8 entries.
115
128
  :param Any data: Data contains arbitrary driver-specific data.
116
129
 
117
130
  The length of the raw data must be smaller or equal to 10 Ki.
@@ -160,6 +173,8 @@ class AllocatedDeviceStatus(dict):
160
173
  def conditions(self) -> Optional[Sequence['_meta.v1.outputs.Condition']]:
161
174
  """
162
175
  Conditions contains the latest observation of the device's state. If the device has been configured according to the class and claim config references, the `Ready` condition should be True.
176
+
177
+ Must not contain more than 8 entries.
163
178
  """
164
179
  return pulumi.get(self, "conditions")
165
180
 
@@ -214,6 +229,8 @@ class AllocatedDeviceStatusPatch(dict):
214
229
  """
215
230
  AllocatedDeviceStatus contains the status of an allocated device, if the driver chooses to report it. This may include driver-specific information.
216
231
  :param Sequence['_meta.v1.ConditionPatchArgs'] conditions: Conditions contains the latest observation of the device's state. If the device has been configured according to the class and claim config references, the `Ready` condition should be True.
232
+
233
+ Must not contain more than 8 entries.
217
234
  :param Any data: Data contains arbitrary driver-specific data.
218
235
 
219
236
  The length of the raw data must be smaller or equal to 10 Ki.
@@ -244,6 +261,8 @@ class AllocatedDeviceStatusPatch(dict):
244
261
  def conditions(self) -> Optional[Sequence['_meta.v1.outputs.ConditionPatch']]:
245
262
  """
246
263
  Conditions contains the latest observation of the device's state. If the device has been configured according to the class and claim config references, the `Ready` condition should be True.
264
+
265
+ Must not contain more than 8 entries.
247
266
  """
248
267
  return pulumi.get(self, "conditions")
249
268
 
@@ -403,22 +422,91 @@ class BasicDevice(dict):
403
422
  """
404
423
  BasicDevice defines one device instance.
405
424
  """
425
+ @staticmethod
426
+ def __key_warning(key: str):
427
+ suggest = None
428
+ if key == "allNodes":
429
+ suggest = "all_nodes"
430
+ elif key == "consumesCounters":
431
+ suggest = "consumes_counters"
432
+ elif key == "nodeName":
433
+ suggest = "node_name"
434
+ elif key == "nodeSelector":
435
+ suggest = "node_selector"
436
+
437
+ if suggest:
438
+ pulumi.log.warn(f"Key '{key}' not found in BasicDevice. Access the value via the '{suggest}' property getter instead.")
439
+
440
+ def __getitem__(self, key: str) -> Any:
441
+ BasicDevice.__key_warning(key)
442
+ return super().__getitem__(key)
443
+
444
+ def get(self, key: str, default = None) -> Any:
445
+ BasicDevice.__key_warning(key)
446
+ return super().get(key, default)
447
+
406
448
  def __init__(__self__, *,
449
+ all_nodes: Optional[builtins.bool] = None,
407
450
  attributes: Optional[Mapping[str, 'outputs.DeviceAttribute']] = None,
408
- capacity: Optional[Mapping[str, 'outputs.DeviceCapacity']] = None):
451
+ capacity: Optional[Mapping[str, 'outputs.DeviceCapacity']] = None,
452
+ consumes_counters: Optional[Sequence['outputs.DeviceCounterConsumption']] = None,
453
+ node_name: Optional[builtins.str] = None,
454
+ node_selector: Optional['_core.v1.outputs.NodeSelector'] = None,
455
+ taints: Optional[Sequence['outputs.DeviceTaint']] = None):
409
456
  """
410
457
  BasicDevice defines one device instance.
458
+ :param builtins.bool all_nodes: AllNodes indicates that all nodes have access to the device.
459
+
460
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
411
461
  :param Mapping[str, 'DeviceAttributeArgs'] attributes: Attributes defines the set of attributes for this device. The name of each attribute must be unique in that set.
412
462
 
413
463
  The maximum number of attributes and capacities combined is 32.
414
464
  :param Mapping[str, 'DeviceCapacityArgs'] capacity: Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.
415
465
 
416
466
  The maximum number of attributes and capacities combined is 32.
467
+ :param Sequence['DeviceCounterConsumptionArgs'] consumes_counters: ConsumesCounters defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.
468
+
469
+ There can only be a single entry per counterSet.
470
+
471
+ The total number of device counter consumption entries must be <= 32. In addition, the total number in the entire ResourceSlice must be <= 1024 (for example, 64 devices with 16 counters each).
472
+ :param builtins.str node_name: NodeName identifies the node where the device is available.
473
+
474
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
475
+ :param '_core.v1.NodeSelectorArgs' node_selector: NodeSelector defines the nodes where the device is available.
476
+
477
+ Must use exactly one term.
478
+
479
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
480
+ :param Sequence['DeviceTaintArgs'] taints: If specified, these are the driver-defined taints.
481
+
482
+ The maximum number of taints is 4.
483
+
484
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
417
485
  """
486
+ if all_nodes is not None:
487
+ pulumi.set(__self__, "all_nodes", all_nodes)
418
488
  if attributes is not None:
419
489
  pulumi.set(__self__, "attributes", attributes)
420
490
  if capacity is not None:
421
491
  pulumi.set(__self__, "capacity", capacity)
492
+ if consumes_counters is not None:
493
+ pulumi.set(__self__, "consumes_counters", consumes_counters)
494
+ if node_name is not None:
495
+ pulumi.set(__self__, "node_name", node_name)
496
+ if node_selector is not None:
497
+ pulumi.set(__self__, "node_selector", node_selector)
498
+ if taints is not None:
499
+ pulumi.set(__self__, "taints", taints)
500
+
501
+ @property
502
+ @pulumi.getter(name="allNodes")
503
+ def all_nodes(self) -> Optional[builtins.bool]:
504
+ """
505
+ AllNodes indicates that all nodes have access to the device.
506
+
507
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
508
+ """
509
+ return pulumi.get(self, "all_nodes")
422
510
 
423
511
  @property
424
512
  @pulumi.getter
@@ -440,28 +528,143 @@ class BasicDevice(dict):
440
528
  """
441
529
  return pulumi.get(self, "capacity")
442
530
 
531
+ @property
532
+ @pulumi.getter(name="consumesCounters")
533
+ def consumes_counters(self) -> Optional[Sequence['outputs.DeviceCounterConsumption']]:
534
+ """
535
+ ConsumesCounters defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.
536
+
537
+ There can only be a single entry per counterSet.
538
+
539
+ The total number of device counter consumption entries must be <= 32. In addition, the total number in the entire ResourceSlice must be <= 1024 (for example, 64 devices with 16 counters each).
540
+ """
541
+ return pulumi.get(self, "consumes_counters")
542
+
543
+ @property
544
+ @pulumi.getter(name="nodeName")
545
+ def node_name(self) -> Optional[builtins.str]:
546
+ """
547
+ NodeName identifies the node where the device is available.
548
+
549
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
550
+ """
551
+ return pulumi.get(self, "node_name")
552
+
553
+ @property
554
+ @pulumi.getter(name="nodeSelector")
555
+ def node_selector(self) -> Optional['_core.v1.outputs.NodeSelector']:
556
+ """
557
+ NodeSelector defines the nodes where the device is available.
558
+
559
+ Must use exactly one term.
560
+
561
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
562
+ """
563
+ return pulumi.get(self, "node_selector")
564
+
565
+ @property
566
+ @pulumi.getter
567
+ def taints(self) -> Optional[Sequence['outputs.DeviceTaint']]:
568
+ """
569
+ If specified, these are the driver-defined taints.
570
+
571
+ The maximum number of taints is 4.
572
+
573
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
574
+ """
575
+ return pulumi.get(self, "taints")
576
+
443
577
 
444
578
  @pulumi.output_type
445
579
  class BasicDevicePatch(dict):
446
580
  """
447
581
  BasicDevice defines one device instance.
448
582
  """
583
+ @staticmethod
584
+ def __key_warning(key: str):
585
+ suggest = None
586
+ if key == "allNodes":
587
+ suggest = "all_nodes"
588
+ elif key == "consumesCounters":
589
+ suggest = "consumes_counters"
590
+ elif key == "nodeName":
591
+ suggest = "node_name"
592
+ elif key == "nodeSelector":
593
+ suggest = "node_selector"
594
+
595
+ if suggest:
596
+ pulumi.log.warn(f"Key '{key}' not found in BasicDevicePatch. Access the value via the '{suggest}' property getter instead.")
597
+
598
+ def __getitem__(self, key: str) -> Any:
599
+ BasicDevicePatch.__key_warning(key)
600
+ return super().__getitem__(key)
601
+
602
+ def get(self, key: str, default = None) -> Any:
603
+ BasicDevicePatch.__key_warning(key)
604
+ return super().get(key, default)
605
+
449
606
  def __init__(__self__, *,
607
+ all_nodes: Optional[builtins.bool] = None,
450
608
  attributes: Optional[Mapping[str, 'outputs.DeviceAttribute']] = None,
451
- capacity: Optional[Mapping[str, 'outputs.DeviceCapacity']] = None):
609
+ capacity: Optional[Mapping[str, 'outputs.DeviceCapacity']] = None,
610
+ consumes_counters: Optional[Sequence['outputs.DeviceCounterConsumptionPatch']] = None,
611
+ node_name: Optional[builtins.str] = None,
612
+ node_selector: Optional['_core.v1.outputs.NodeSelectorPatch'] = None,
613
+ taints: Optional[Sequence['outputs.DeviceTaintPatch']] = None):
452
614
  """
453
615
  BasicDevice defines one device instance.
616
+ :param builtins.bool all_nodes: AllNodes indicates that all nodes have access to the device.
617
+
618
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
454
619
  :param Mapping[str, 'DeviceAttributeArgs'] attributes: Attributes defines the set of attributes for this device. The name of each attribute must be unique in that set.
455
620
 
456
621
  The maximum number of attributes and capacities combined is 32.
457
622
  :param Mapping[str, 'DeviceCapacityArgs'] capacity: Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.
458
623
 
459
624
  The maximum number of attributes and capacities combined is 32.
625
+ :param Sequence['DeviceCounterConsumptionPatchArgs'] consumes_counters: ConsumesCounters defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.
626
+
627
+ There can only be a single entry per counterSet.
628
+
629
+ The total number of device counter consumption entries must be <= 32. In addition, the total number in the entire ResourceSlice must be <= 1024 (for example, 64 devices with 16 counters each).
630
+ :param builtins.str node_name: NodeName identifies the node where the device is available.
631
+
632
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
633
+ :param '_core.v1.NodeSelectorPatchArgs' node_selector: NodeSelector defines the nodes where the device is available.
634
+
635
+ Must use exactly one term.
636
+
637
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
638
+ :param Sequence['DeviceTaintPatchArgs'] taints: If specified, these are the driver-defined taints.
639
+
640
+ The maximum number of taints is 4.
641
+
642
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
460
643
  """
644
+ if all_nodes is not None:
645
+ pulumi.set(__self__, "all_nodes", all_nodes)
461
646
  if attributes is not None:
462
647
  pulumi.set(__self__, "attributes", attributes)
463
648
  if capacity is not None:
464
649
  pulumi.set(__self__, "capacity", capacity)
650
+ if consumes_counters is not None:
651
+ pulumi.set(__self__, "consumes_counters", consumes_counters)
652
+ if node_name is not None:
653
+ pulumi.set(__self__, "node_name", node_name)
654
+ if node_selector is not None:
655
+ pulumi.set(__self__, "node_selector", node_selector)
656
+ if taints is not None:
657
+ pulumi.set(__self__, "taints", taints)
658
+
659
+ @property
660
+ @pulumi.getter(name="allNodes")
661
+ def all_nodes(self) -> Optional[builtins.bool]:
662
+ """
663
+ AllNodes indicates that all nodes have access to the device.
664
+
665
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
666
+ """
667
+ return pulumi.get(self, "all_nodes")
465
668
 
466
669
  @property
467
670
  @pulumi.getter
@@ -483,6 +686,52 @@ class BasicDevicePatch(dict):
483
686
  """
484
687
  return pulumi.get(self, "capacity")
485
688
 
689
+ @property
690
+ @pulumi.getter(name="consumesCounters")
691
+ def consumes_counters(self) -> Optional[Sequence['outputs.DeviceCounterConsumptionPatch']]:
692
+ """
693
+ ConsumesCounters defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.
694
+
695
+ There can only be a single entry per counterSet.
696
+
697
+ The total number of device counter consumption entries must be <= 32. In addition, the total number in the entire ResourceSlice must be <= 1024 (for example, 64 devices with 16 counters each).
698
+ """
699
+ return pulumi.get(self, "consumes_counters")
700
+
701
+ @property
702
+ @pulumi.getter(name="nodeName")
703
+ def node_name(self) -> Optional[builtins.str]:
704
+ """
705
+ NodeName identifies the node where the device is available.
706
+
707
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
708
+ """
709
+ return pulumi.get(self, "node_name")
710
+
711
+ @property
712
+ @pulumi.getter(name="nodeSelector")
713
+ def node_selector(self) -> Optional['_core.v1.outputs.NodeSelectorPatch']:
714
+ """
715
+ NodeSelector defines the nodes where the device is available.
716
+
717
+ Must use exactly one term.
718
+
719
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
720
+ """
721
+ return pulumi.get(self, "node_selector")
722
+
723
+ @property
724
+ @pulumi.getter
725
+ def taints(self) -> Optional[Sequence['outputs.DeviceTaintPatch']]:
726
+ """
727
+ If specified, these are the driver-defined taints.
728
+
729
+ The maximum number of taints is 4.
730
+
731
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
732
+ """
733
+ return pulumi.get(self, "taints")
734
+
486
735
 
487
736
  @pulumi.output_type
488
737
  class CELDeviceSelector(dict):
@@ -641,6 +890,112 @@ class CELDeviceSelectorPatch(dict):
641
890
  return pulumi.get(self, "expression")
642
891
 
643
892
 
893
+ @pulumi.output_type
894
+ class Counter(dict):
895
+ """
896
+ Counter describes a quantity associated with a device.
897
+ """
898
+ def __init__(__self__, *,
899
+ value: builtins.str):
900
+ """
901
+ Counter describes a quantity associated with a device.
902
+ :param builtins.str value: Value defines how much of a certain device counter is available.
903
+ """
904
+ pulumi.set(__self__, "value", value)
905
+
906
+ @property
907
+ @pulumi.getter
908
+ def value(self) -> builtins.str:
909
+ """
910
+ Value defines how much of a certain device counter is available.
911
+ """
912
+ return pulumi.get(self, "value")
913
+
914
+
915
+ @pulumi.output_type
916
+ class CounterSet(dict):
917
+ """
918
+ CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.
919
+
920
+ The counters are not allocatable by themselves, but can be referenced by devices. When a device is allocated, the portion of counters it uses will no longer be available for use by other devices.
921
+ """
922
+ def __init__(__self__, *,
923
+ counters: Mapping[str, 'outputs.Counter'],
924
+ name: builtins.str):
925
+ """
926
+ CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.
927
+
928
+ The counters are not allocatable by themselves, but can be referenced by devices. When a device is allocated, the portion of counters it uses will no longer be available for use by other devices.
929
+ :param Mapping[str, 'CounterArgs'] counters: Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.
930
+
931
+ The maximum number of counters is 32.
932
+ :param builtins.str name: Name defines the name of the counter set. It must be a DNS label.
933
+ """
934
+ pulumi.set(__self__, "counters", counters)
935
+ pulumi.set(__self__, "name", name)
936
+
937
+ @property
938
+ @pulumi.getter
939
+ def counters(self) -> Mapping[str, 'outputs.Counter']:
940
+ """
941
+ Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.
942
+
943
+ The maximum number of counters is 32.
944
+ """
945
+ return pulumi.get(self, "counters")
946
+
947
+ @property
948
+ @pulumi.getter
949
+ def name(self) -> builtins.str:
950
+ """
951
+ Name defines the name of the counter set. It must be a DNS label.
952
+ """
953
+ return pulumi.get(self, "name")
954
+
955
+
956
+ @pulumi.output_type
957
+ class CounterSetPatch(dict):
958
+ """
959
+ CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.
960
+
961
+ The counters are not allocatable by themselves, but can be referenced by devices. When a device is allocated, the portion of counters it uses will no longer be available for use by other devices.
962
+ """
963
+ def __init__(__self__, *,
964
+ counters: Optional[Mapping[str, 'outputs.Counter']] = None,
965
+ name: Optional[builtins.str] = None):
966
+ """
967
+ CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.
968
+
969
+ The counters are not allocatable by themselves, but can be referenced by devices. When a device is allocated, the portion of counters it uses will no longer be available for use by other devices.
970
+ :param Mapping[str, 'CounterArgs'] counters: Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.
971
+
972
+ The maximum number of counters is 32.
973
+ :param builtins.str name: Name defines the name of the counter set. It must be a DNS label.
974
+ """
975
+ if counters is not None:
976
+ pulumi.set(__self__, "counters", counters)
977
+ if name is not None:
978
+ pulumi.set(__self__, "name", name)
979
+
980
+ @property
981
+ @pulumi.getter
982
+ def counters(self) -> Optional[Mapping[str, 'outputs.Counter']]:
983
+ """
984
+ Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.
985
+
986
+ The maximum number of counters is 32.
987
+ """
988
+ return pulumi.get(self, "counters")
989
+
990
+ @property
991
+ @pulumi.getter
992
+ def name(self) -> Optional[builtins.str]:
993
+ """
994
+ Name defines the name of the counter set. It must be a DNS label.
995
+ """
996
+ return pulumi.get(self, "name")
997
+
998
+
644
999
  @pulumi.output_type
645
1000
  class Device(dict):
646
1001
  """
@@ -689,6 +1044,8 @@ class DeviceAllocationConfiguration(dict):
689
1044
  :param builtins.str source: Source records whether the configuration comes from a class and thus is not something that a normal user would have been able to set or from a claim.
690
1045
  :param 'OpaqueDeviceConfigurationArgs' opaque: Opaque provides driver-specific configuration parameters.
691
1046
  :param Sequence[builtins.str] requests: Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.
1047
+
1048
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the configuration applies to all subrequests.
692
1049
  """
693
1050
  pulumi.set(__self__, "source", source)
694
1051
  if opaque is not None:
@@ -717,6 +1074,8 @@ class DeviceAllocationConfiguration(dict):
717
1074
  def requests(self) -> Optional[Sequence[builtins.str]]:
718
1075
  """
719
1076
  Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.
1077
+
1078
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the configuration applies to all subrequests.
720
1079
  """
721
1080
  return pulumi.get(self, "requests")
722
1081
 
@@ -734,6 +1093,8 @@ class DeviceAllocationConfigurationPatch(dict):
734
1093
  DeviceAllocationConfiguration gets embedded in an AllocationResult.
735
1094
  :param 'OpaqueDeviceConfigurationPatchArgs' opaque: Opaque provides driver-specific configuration parameters.
736
1095
  :param Sequence[builtins.str] requests: Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.
1096
+
1097
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the configuration applies to all subrequests.
737
1098
  :param builtins.str source: Source records whether the configuration comes from a class and thus is not something that a normal user would have been able to set or from a claim.
738
1099
  """
739
1100
  if opaque is not None:
@@ -756,6 +1117,8 @@ class DeviceAllocationConfigurationPatch(dict):
756
1117
  def requests(self) -> Optional[Sequence[builtins.str]]:
757
1118
  """
758
1119
  Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.
1120
+
1121
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the configuration applies to all subrequests.
759
1122
  """
760
1123
  return pulumi.get(self, "requests")
761
1124
 
@@ -986,6 +1349,8 @@ class DeviceClaimConfiguration(dict):
986
1349
  DeviceClaimConfiguration is used for configuration parameters in DeviceClaim.
987
1350
  :param 'OpaqueDeviceConfigurationArgs' opaque: Opaque provides driver-specific configuration parameters.
988
1351
  :param Sequence[builtins.str] requests: Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.
1352
+
1353
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the configuration applies to all subrequests.
989
1354
  """
990
1355
  if opaque is not None:
991
1356
  pulumi.set(__self__, "opaque", opaque)
@@ -1005,6 +1370,8 @@ class DeviceClaimConfiguration(dict):
1005
1370
  def requests(self) -> Optional[Sequence[builtins.str]]:
1006
1371
  """
1007
1372
  Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.
1373
+
1374
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the configuration applies to all subrequests.
1008
1375
  """
1009
1376
  return pulumi.get(self, "requests")
1010
1377
 
@@ -1021,6 +1388,8 @@ class DeviceClaimConfigurationPatch(dict):
1021
1388
  DeviceClaimConfiguration is used for configuration parameters in DeviceClaim.
1022
1389
  :param 'OpaqueDeviceConfigurationPatchArgs' opaque: Opaque provides driver-specific configuration parameters.
1023
1390
  :param Sequence[builtins.str] requests: Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.
1391
+
1392
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the configuration applies to all subrequests.
1024
1393
  """
1025
1394
  if opaque is not None:
1026
1395
  pulumi.set(__self__, "opaque", opaque)
@@ -1040,6 +1409,8 @@ class DeviceClaimConfigurationPatch(dict):
1040
1409
  def requests(self) -> Optional[Sequence[builtins.str]]:
1041
1410
  """
1042
1411
  Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.
1412
+
1413
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the configuration applies to all subrequests.
1043
1414
  """
1044
1415
  return pulumi.get(self, "requests")
1045
1416
 
@@ -1335,6 +1706,8 @@ class DeviceConstraint(dict):
1335
1706
 
1336
1707
  Must include the domain qualifier.
1337
1708
  :param Sequence[builtins.str] requests: Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.
1709
+
1710
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the constraint applies to all subrequests.
1338
1711
  """
1339
1712
  if match_attribute is not None:
1340
1713
  pulumi.set(__self__, "match_attribute", match_attribute)
@@ -1358,6 +1731,8 @@ class DeviceConstraint(dict):
1358
1731
  def requests(self) -> Optional[Sequence[builtins.str]]:
1359
1732
  """
1360
1733
  Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.
1734
+
1735
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the constraint applies to all subrequests.
1361
1736
  """
1362
1737
  return pulumi.get(self, "requests")
1363
1738
 
@@ -1395,6 +1770,8 @@ class DeviceConstraintPatch(dict):
1395
1770
 
1396
1771
  Must include the domain qualifier.
1397
1772
  :param Sequence[builtins.str] requests: Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.
1773
+
1774
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the constraint applies to all subrequests.
1398
1775
  """
1399
1776
  if match_attribute is not None:
1400
1777
  pulumi.set(__self__, "match_attribute", match_attribute)
@@ -1418,25 +1795,137 @@ class DeviceConstraintPatch(dict):
1418
1795
  def requests(self) -> Optional[Sequence[builtins.str]]:
1419
1796
  """
1420
1797
  Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.
1798
+
1799
+ References to subrequests must include the name of the main request and may include the subrequest using the format <main request>[/<subrequest>]. If just the main request is given, the constraint applies to all subrequests.
1421
1800
  """
1422
1801
  return pulumi.get(self, "requests")
1423
1802
 
1424
1803
 
1425
1804
  @pulumi.output_type
1426
- class DevicePatch(dict):
1805
+ class DeviceCounterConsumption(dict):
1427
1806
  """
1428
- Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.
1807
+ DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.
1429
1808
  """
1809
+ @staticmethod
1810
+ def __key_warning(key: str):
1811
+ suggest = None
1812
+ if key == "counterSet":
1813
+ suggest = "counter_set"
1814
+
1815
+ if suggest:
1816
+ pulumi.log.warn(f"Key '{key}' not found in DeviceCounterConsumption. Access the value via the '{suggest}' property getter instead.")
1817
+
1818
+ def __getitem__(self, key: str) -> Any:
1819
+ DeviceCounterConsumption.__key_warning(key)
1820
+ return super().__getitem__(key)
1821
+
1822
+ def get(self, key: str, default = None) -> Any:
1823
+ DeviceCounterConsumption.__key_warning(key)
1824
+ return super().get(key, default)
1825
+
1430
1826
  def __init__(__self__, *,
1431
- basic: Optional['outputs.BasicDevicePatch'] = None,
1432
- name: Optional[builtins.str] = None):
1827
+ counter_set: builtins.str,
1828
+ counters: Mapping[str, 'outputs.Counter']):
1433
1829
  """
1434
- Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.
1435
- :param 'BasicDevicePatchArgs' basic: Basic defines one device instance.
1436
- :param builtins.str name: Name is unique identifier among all devices managed by the driver in the pool. It must be a DNS label.
1830
+ DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.
1831
+ :param builtins.str counter_set: CounterSet is the name of the set from which the counters defined will be consumed.
1832
+ :param Mapping[str, 'CounterArgs'] counters: Counters defines the counters that will be consumed by the device.
1833
+
1834
+ The maximum number counters in a device is 32. In addition, the maximum number of all counters in all devices is 1024 (for example, 64 devices with 16 counters each).
1437
1835
  """
1438
- if basic is not None:
1439
- pulumi.set(__self__, "basic", basic)
1836
+ pulumi.set(__self__, "counter_set", counter_set)
1837
+ pulumi.set(__self__, "counters", counters)
1838
+
1839
+ @property
1840
+ @pulumi.getter(name="counterSet")
1841
+ def counter_set(self) -> builtins.str:
1842
+ """
1843
+ CounterSet is the name of the set from which the counters defined will be consumed.
1844
+ """
1845
+ return pulumi.get(self, "counter_set")
1846
+
1847
+ @property
1848
+ @pulumi.getter
1849
+ def counters(self) -> Mapping[str, 'outputs.Counter']:
1850
+ """
1851
+ Counters defines the counters that will be consumed by the device.
1852
+
1853
+ The maximum number counters in a device is 32. In addition, the maximum number of all counters in all devices is 1024 (for example, 64 devices with 16 counters each).
1854
+ """
1855
+ return pulumi.get(self, "counters")
1856
+
1857
+
1858
+ @pulumi.output_type
1859
+ class DeviceCounterConsumptionPatch(dict):
1860
+ """
1861
+ DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.
1862
+ """
1863
+ @staticmethod
1864
+ def __key_warning(key: str):
1865
+ suggest = None
1866
+ if key == "counterSet":
1867
+ suggest = "counter_set"
1868
+
1869
+ if suggest:
1870
+ pulumi.log.warn(f"Key '{key}' not found in DeviceCounterConsumptionPatch. Access the value via the '{suggest}' property getter instead.")
1871
+
1872
+ def __getitem__(self, key: str) -> Any:
1873
+ DeviceCounterConsumptionPatch.__key_warning(key)
1874
+ return super().__getitem__(key)
1875
+
1876
+ def get(self, key: str, default = None) -> Any:
1877
+ DeviceCounterConsumptionPatch.__key_warning(key)
1878
+ return super().get(key, default)
1879
+
1880
+ def __init__(__self__, *,
1881
+ counter_set: Optional[builtins.str] = None,
1882
+ counters: Optional[Mapping[str, 'outputs.Counter']] = None):
1883
+ """
1884
+ DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.
1885
+ :param builtins.str counter_set: CounterSet is the name of the set from which the counters defined will be consumed.
1886
+ :param Mapping[str, 'CounterArgs'] counters: Counters defines the counters that will be consumed by the device.
1887
+
1888
+ The maximum number counters in a device is 32. In addition, the maximum number of all counters in all devices is 1024 (for example, 64 devices with 16 counters each).
1889
+ """
1890
+ if counter_set is not None:
1891
+ pulumi.set(__self__, "counter_set", counter_set)
1892
+ if counters is not None:
1893
+ pulumi.set(__self__, "counters", counters)
1894
+
1895
+ @property
1896
+ @pulumi.getter(name="counterSet")
1897
+ def counter_set(self) -> Optional[builtins.str]:
1898
+ """
1899
+ CounterSet is the name of the set from which the counters defined will be consumed.
1900
+ """
1901
+ return pulumi.get(self, "counter_set")
1902
+
1903
+ @property
1904
+ @pulumi.getter
1905
+ def counters(self) -> Optional[Mapping[str, 'outputs.Counter']]:
1906
+ """
1907
+ Counters defines the counters that will be consumed by the device.
1908
+
1909
+ The maximum number counters in a device is 32. In addition, the maximum number of all counters in all devices is 1024 (for example, 64 devices with 16 counters each).
1910
+ """
1911
+ return pulumi.get(self, "counters")
1912
+
1913
+
1914
+ @pulumi.output_type
1915
+ class DevicePatch(dict):
1916
+ """
1917
+ Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.
1918
+ """
1919
+ def __init__(__self__, *,
1920
+ basic: Optional['outputs.BasicDevicePatch'] = None,
1921
+ name: Optional[builtins.str] = None):
1922
+ """
1923
+ Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.
1924
+ :param 'BasicDevicePatchArgs' basic: Basic defines one device instance.
1925
+ :param builtins.str name: Name is unique identifier among all devices managed by the driver in the pool. It must be a DNS label.
1926
+ """
1927
+ if basic is not None:
1928
+ pulumi.set(__self__, "basic", basic)
1440
1929
  if name is not None:
1441
1930
  pulumi.set(__self__, "name", name)
1442
1931
 
@@ -1461,18 +1950,18 @@ class DevicePatch(dict):
1461
1950
  class DeviceRequest(dict):
1462
1951
  """
1463
1952
  DeviceRequest is a request for devices required for a claim. This is typically a request for a single resource like a device, but can also ask for several identical devices.
1464
-
1465
- A DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.
1466
1953
  """
1467
1954
  @staticmethod
1468
1955
  def __key_warning(key: str):
1469
1956
  suggest = None
1470
- if key == "deviceClassName":
1471
- suggest = "device_class_name"
1472
- elif key == "adminAccess":
1957
+ if key == "adminAccess":
1473
1958
  suggest = "admin_access"
1474
1959
  elif key == "allocationMode":
1475
1960
  suggest = "allocation_mode"
1961
+ elif key == "deviceClassName":
1962
+ suggest = "device_class_name"
1963
+ elif key == "firstAvailable":
1964
+ suggest = "first_available"
1476
1965
 
1477
1966
  if suggest:
1478
1967
  pulumi.log.warn(f"Key '{key}' not found in DeviceRequest. Access the value via the '{suggest}' property getter instead.")
@@ -1486,26 +1975,23 @@ class DeviceRequest(dict):
1486
1975
  return super().get(key, default)
1487
1976
 
1488
1977
  def __init__(__self__, *,
1489
- device_class_name: builtins.str,
1490
1978
  name: builtins.str,
1491
1979
  admin_access: Optional[builtins.bool] = None,
1492
1980
  allocation_mode: Optional[builtins.str] = None,
1493
1981
  count: Optional[builtins.int] = None,
1494
- selectors: Optional[Sequence['outputs.DeviceSelector']] = None):
1982
+ device_class_name: Optional[builtins.str] = None,
1983
+ first_available: Optional[Sequence['outputs.DeviceSubRequest']] = None,
1984
+ selectors: Optional[Sequence['outputs.DeviceSelector']] = None,
1985
+ tolerations: Optional[Sequence['outputs.DeviceToleration']] = None):
1495
1986
  """
1496
1987
  DeviceRequest is a request for devices required for a claim. This is typically a request for a single resource like a device, but can also ask for several identical devices.
1497
-
1498
- A DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.
1499
- :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
1500
-
1501
- A class is required. Which classes are available depends on the cluster.
1502
-
1503
- Administrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.
1504
1988
  :param builtins.str name: Name can be used to reference this request in a pod.spec.containers[].resources.claims entry and in a constraint of the claim.
1505
1989
 
1506
- Must be a DNS label.
1990
+ Must be a DNS label and unique among all DeviceRequests in a ResourceClaim.
1507
1991
  :param builtins.bool admin_access: AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.
1508
1992
 
1993
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
1994
+
1509
1995
  This is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.
1510
1996
  :param builtins.str allocation_mode: AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
1511
1997
 
@@ -1514,16 +2000,43 @@ class DeviceRequest(dict):
1514
2000
  count field.
1515
2001
 
1516
2002
  - All: This request is for all of the matching devices in a pool.
2003
+ At least one device must exist on the node for the allocation to succeed.
1517
2004
  Allocation will fail if some devices are already allocated,
1518
2005
  unless adminAccess is requested.
1519
2006
 
1520
- If AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.
2007
+ If AllocationMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.
2008
+
2009
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
1521
2010
 
1522
2011
  More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
1523
2012
  :param builtins.int count: Count is used only when the count mode is "ExactCount". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.
2013
+
2014
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2015
+ :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
2016
+
2017
+ A class is required if no subrequests are specified in the firstAvailable list and no class can be set if subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.
2018
+
2019
+ Administrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.
2020
+ :param Sequence['DeviceSubRequestArgs'] first_available: FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the scheduler will only check the second one if it determines that the first one cannot be used.
2021
+
2022
+ This field may only be set in the entries of DeviceClaim.Requests.
2023
+
2024
+ DRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.
1524
2025
  :param Sequence['DeviceSelectorArgs'] selectors: Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.
2026
+
2027
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2028
+ :param Sequence['DeviceTolerationArgs'] tolerations: If specified, the request's tolerations.
2029
+
2030
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2031
+
2032
+ In addition, should any of the allocated devices get tainted with NoExecute after allocation and that effect is not tolerated, then all pods consuming the ResourceClaim get deleted to evict them. The scheduler will not let new pods reserve the claim while it has these tainted devices. Once all pods are evicted, the claim will get deallocated.
2033
+
2034
+ The maximum number of tolerations is 16.
2035
+
2036
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2037
+
2038
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
1525
2039
  """
1526
- pulumi.set(__self__, "device_class_name", device_class_name)
1527
2040
  pulumi.set(__self__, "name", name)
1528
2041
  if admin_access is not None:
1529
2042
  pulumi.set(__self__, "admin_access", admin_access)
@@ -1531,20 +2044,14 @@ class DeviceRequest(dict):
1531
2044
  pulumi.set(__self__, "allocation_mode", allocation_mode)
1532
2045
  if count is not None:
1533
2046
  pulumi.set(__self__, "count", count)
2047
+ if device_class_name is not None:
2048
+ pulumi.set(__self__, "device_class_name", device_class_name)
2049
+ if first_available is not None:
2050
+ pulumi.set(__self__, "first_available", first_available)
1534
2051
  if selectors is not None:
1535
2052
  pulumi.set(__self__, "selectors", selectors)
1536
-
1537
- @property
1538
- @pulumi.getter(name="deviceClassName")
1539
- def device_class_name(self) -> builtins.str:
1540
- """
1541
- DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
1542
-
1543
- A class is required. Which classes are available depends on the cluster.
1544
-
1545
- Administrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.
1546
- """
1547
- return pulumi.get(self, "device_class_name")
2053
+ if tolerations is not None:
2054
+ pulumi.set(__self__, "tolerations", tolerations)
1548
2055
 
1549
2056
  @property
1550
2057
  @pulumi.getter
@@ -1552,7 +2059,7 @@ class DeviceRequest(dict):
1552
2059
  """
1553
2060
  Name can be used to reference this request in a pod.spec.containers[].resources.claims entry and in a constraint of the claim.
1554
2061
 
1555
- Must be a DNS label.
2062
+ Must be a DNS label and unique among all DeviceRequests in a ResourceClaim.
1556
2063
  """
1557
2064
  return pulumi.get(self, "name")
1558
2065
 
@@ -1562,6 +2069,8 @@ class DeviceRequest(dict):
1562
2069
  """
1563
2070
  AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.
1564
2071
 
2072
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2073
+
1565
2074
  This is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.
1566
2075
  """
1567
2076
  return pulumi.get(self, "admin_access")
@@ -1577,10 +2086,13 @@ class DeviceRequest(dict):
1577
2086
  count field.
1578
2087
 
1579
2088
  - All: This request is for all of the matching devices in a pool.
2089
+ At least one device must exist on the node for the allocation to succeed.
1580
2090
  Allocation will fail if some devices are already allocated,
1581
2091
  unless adminAccess is requested.
1582
2092
 
1583
- If AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.
2093
+ If AllocationMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.
2094
+
2095
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
1584
2096
 
1585
2097
  More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
1586
2098
  """
@@ -1591,17 +2103,63 @@ class DeviceRequest(dict):
1591
2103
  def count(self) -> Optional[builtins.int]:
1592
2104
  """
1593
2105
  Count is used only when the count mode is "ExactCount". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.
2106
+
2107
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
1594
2108
  """
1595
2109
  return pulumi.get(self, "count")
1596
2110
 
2111
+ @property
2112
+ @pulumi.getter(name="deviceClassName")
2113
+ def device_class_name(self) -> Optional[builtins.str]:
2114
+ """
2115
+ DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
2116
+
2117
+ A class is required if no subrequests are specified in the firstAvailable list and no class can be set if subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.
2118
+
2119
+ Administrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.
2120
+ """
2121
+ return pulumi.get(self, "device_class_name")
2122
+
2123
+ @property
2124
+ @pulumi.getter(name="firstAvailable")
2125
+ def first_available(self) -> Optional[Sequence['outputs.DeviceSubRequest']]:
2126
+ """
2127
+ FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the scheduler will only check the second one if it determines that the first one cannot be used.
2128
+
2129
+ This field may only be set in the entries of DeviceClaim.Requests.
2130
+
2131
+ DRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.
2132
+ """
2133
+ return pulumi.get(self, "first_available")
2134
+
1597
2135
  @property
1598
2136
  @pulumi.getter
1599
2137
  def selectors(self) -> Optional[Sequence['outputs.DeviceSelector']]:
1600
2138
  """
1601
2139
  Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.
2140
+
2141
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
1602
2142
  """
1603
2143
  return pulumi.get(self, "selectors")
1604
2144
 
2145
+ @property
2146
+ @pulumi.getter
2147
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceToleration']]:
2148
+ """
2149
+ If specified, the request's tolerations.
2150
+
2151
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2152
+
2153
+ In addition, should any of the allocated devices get tainted with NoExecute after allocation and that effect is not tolerated, then all pods consuming the ResourceClaim get deleted to evict them. The scheduler will not let new pods reserve the claim while it has these tainted devices. Once all pods are evicted, the claim will get deallocated.
2154
+
2155
+ The maximum number of tolerations is 16.
2156
+
2157
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2158
+
2159
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2160
+ """
2161
+ return pulumi.get(self, "tolerations")
2162
+
1605
2163
 
1606
2164
  @pulumi.output_type
1607
2165
  class DeviceRequestAllocationResult(dict):
@@ -1630,7 +2188,8 @@ class DeviceRequestAllocationResult(dict):
1630
2188
  driver: builtins.str,
1631
2189
  pool: builtins.str,
1632
2190
  request: builtins.str,
1633
- admin_access: Optional[builtins.bool] = None):
2191
+ admin_access: Optional[builtins.bool] = None,
2192
+ tolerations: Optional[Sequence['outputs.DeviceToleration']] = None):
1634
2193
  """
1635
2194
  DeviceRequestAllocationResult contains the allocation result for one request.
1636
2195
  :param builtins.str device: Device references one device instance via its name in the driver's resource pool. It must be a DNS label.
@@ -1640,10 +2199,17 @@ class DeviceRequestAllocationResult(dict):
1640
2199
  :param builtins.str pool: This name together with the driver name and the device name field identify which device was allocated (`<driver name>/<pool name>/<device name>`).
1641
2200
 
1642
2201
  Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
1643
- :param builtins.str request: Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.
2202
+ :param builtins.str request: Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format <main request>/<subrequest>.
2203
+
2204
+ Multiple devices may have been allocated per request.
1644
2205
  :param builtins.bool admin_access: AdminAccess indicates that this device was allocated for administrative access. See the corresponding request field for a definition of mode.
1645
2206
 
1646
2207
  This is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.
2208
+ :param Sequence['DeviceTolerationArgs'] tolerations: A copy of all tolerations specified in the request at the time when the device got allocated.
2209
+
2210
+ The maximum number of tolerations is 16.
2211
+
2212
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
1647
2213
  """
1648
2214
  pulumi.set(__self__, "device", device)
1649
2215
  pulumi.set(__self__, "driver", driver)
@@ -1651,6 +2217,8 @@ class DeviceRequestAllocationResult(dict):
1651
2217
  pulumi.set(__self__, "request", request)
1652
2218
  if admin_access is not None:
1653
2219
  pulumi.set(__self__, "admin_access", admin_access)
2220
+ if tolerations is not None:
2221
+ pulumi.set(__self__, "tolerations", tolerations)
1654
2222
 
1655
2223
  @property
1656
2224
  @pulumi.getter
@@ -1684,7 +2252,9 @@ class DeviceRequestAllocationResult(dict):
1684
2252
  @pulumi.getter
1685
2253
  def request(self) -> builtins.str:
1686
2254
  """
1687
- Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.
2255
+ Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format <main request>/<subrequest>.
2256
+
2257
+ Multiple devices may have been allocated per request.
1688
2258
  """
1689
2259
  return pulumi.get(self, "request")
1690
2260
 
@@ -1698,6 +2268,18 @@ class DeviceRequestAllocationResult(dict):
1698
2268
  """
1699
2269
  return pulumi.get(self, "admin_access")
1700
2270
 
2271
+ @property
2272
+ @pulumi.getter
2273
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceToleration']]:
2274
+ """
2275
+ A copy of all tolerations specified in the request at the time when the device got allocated.
2276
+
2277
+ The maximum number of tolerations is 16.
2278
+
2279
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2280
+ """
2281
+ return pulumi.get(self, "tolerations")
2282
+
1701
2283
 
1702
2284
  @pulumi.output_type
1703
2285
  class DeviceRequestAllocationResultPatch(dict):
@@ -1726,7 +2308,8 @@ class DeviceRequestAllocationResultPatch(dict):
1726
2308
  device: Optional[builtins.str] = None,
1727
2309
  driver: Optional[builtins.str] = None,
1728
2310
  pool: Optional[builtins.str] = None,
1729
- request: Optional[builtins.str] = None):
2311
+ request: Optional[builtins.str] = None,
2312
+ tolerations: Optional[Sequence['outputs.DeviceTolerationPatch']] = None):
1730
2313
  """
1731
2314
  DeviceRequestAllocationResult contains the allocation result for one request.
1732
2315
  :param builtins.bool admin_access: AdminAccess indicates that this device was allocated for administrative access. See the corresponding request field for a definition of mode.
@@ -1739,7 +2322,14 @@ class DeviceRequestAllocationResultPatch(dict):
1739
2322
  :param builtins.str pool: This name together with the driver name and the device name field identify which device was allocated (`<driver name>/<pool name>/<device name>`).
1740
2323
 
1741
2324
  Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
1742
- :param builtins.str request: Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.
2325
+ :param builtins.str request: Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format <main request>/<subrequest>.
2326
+
2327
+ Multiple devices may have been allocated per request.
2328
+ :param Sequence['DeviceTolerationPatchArgs'] tolerations: A copy of all tolerations specified in the request at the time when the device got allocated.
2329
+
2330
+ The maximum number of tolerations is 16.
2331
+
2332
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
1743
2333
  """
1744
2334
  if admin_access is not None:
1745
2335
  pulumi.set(__self__, "admin_access", admin_access)
@@ -1751,6 +2341,8 @@ class DeviceRequestAllocationResultPatch(dict):
1751
2341
  pulumi.set(__self__, "pool", pool)
1752
2342
  if request is not None:
1753
2343
  pulumi.set(__self__, "request", request)
2344
+ if tolerations is not None:
2345
+ pulumi.set(__self__, "tolerations", tolerations)
1754
2346
 
1755
2347
  @property
1756
2348
  @pulumi.getter(name="adminAccess")
@@ -1778,95 +2370,529 @@ class DeviceRequestAllocationResultPatch(dict):
1778
2370
 
1779
2371
  Must be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver.
1780
2372
  """
1781
- return pulumi.get(self, "driver")
2373
+ return pulumi.get(self, "driver")
2374
+
2375
+ @property
2376
+ @pulumi.getter
2377
+ def pool(self) -> Optional[builtins.str]:
2378
+ """
2379
+ This name together with the driver name and the device name field identify which device was allocated (`<driver name>/<pool name>/<device name>`).
2380
+
2381
+ Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
2382
+ """
2383
+ return pulumi.get(self, "pool")
2384
+
2385
+ @property
2386
+ @pulumi.getter
2387
+ def request(self) -> Optional[builtins.str]:
2388
+ """
2389
+ Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format <main request>/<subrequest>.
2390
+
2391
+ Multiple devices may have been allocated per request.
2392
+ """
2393
+ return pulumi.get(self, "request")
2394
+
2395
+ @property
2396
+ @pulumi.getter
2397
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceTolerationPatch']]:
2398
+ """
2399
+ A copy of all tolerations specified in the request at the time when the device got allocated.
2400
+
2401
+ The maximum number of tolerations is 16.
2402
+
2403
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2404
+ """
2405
+ return pulumi.get(self, "tolerations")
2406
+
2407
+
2408
+ @pulumi.output_type
2409
+ class DeviceRequestPatch(dict):
2410
+ """
2411
+ DeviceRequest is a request for devices required for a claim. This is typically a request for a single resource like a device, but can also ask for several identical devices.
2412
+ """
2413
+ @staticmethod
2414
+ def __key_warning(key: str):
2415
+ suggest = None
2416
+ if key == "adminAccess":
2417
+ suggest = "admin_access"
2418
+ elif key == "allocationMode":
2419
+ suggest = "allocation_mode"
2420
+ elif key == "deviceClassName":
2421
+ suggest = "device_class_name"
2422
+ elif key == "firstAvailable":
2423
+ suggest = "first_available"
2424
+
2425
+ if suggest:
2426
+ pulumi.log.warn(f"Key '{key}' not found in DeviceRequestPatch. Access the value via the '{suggest}' property getter instead.")
2427
+
2428
+ def __getitem__(self, key: str) -> Any:
2429
+ DeviceRequestPatch.__key_warning(key)
2430
+ return super().__getitem__(key)
2431
+
2432
+ def get(self, key: str, default = None) -> Any:
2433
+ DeviceRequestPatch.__key_warning(key)
2434
+ return super().get(key, default)
2435
+
2436
+ def __init__(__self__, *,
2437
+ admin_access: Optional[builtins.bool] = None,
2438
+ allocation_mode: Optional[builtins.str] = None,
2439
+ count: Optional[builtins.int] = None,
2440
+ device_class_name: Optional[builtins.str] = None,
2441
+ first_available: Optional[Sequence['outputs.DeviceSubRequestPatch']] = None,
2442
+ name: Optional[builtins.str] = None,
2443
+ selectors: Optional[Sequence['outputs.DeviceSelectorPatch']] = None,
2444
+ tolerations: Optional[Sequence['outputs.DeviceTolerationPatch']] = None):
2445
+ """
2446
+ DeviceRequest is a request for devices required for a claim. This is typically a request for a single resource like a device, but can also ask for several identical devices.
2447
+ :param builtins.bool admin_access: AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.
2448
+
2449
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2450
+
2451
+ This is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.
2452
+ :param builtins.str allocation_mode: AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
2453
+
2454
+ - ExactCount: This request is for a specific number of devices.
2455
+ This is the default. The exact number is provided in the
2456
+ count field.
2457
+
2458
+ - All: This request is for all of the matching devices in a pool.
2459
+ At least one device must exist on the node for the allocation to succeed.
2460
+ Allocation will fail if some devices are already allocated,
2461
+ unless adminAccess is requested.
2462
+
2463
+ If AllocationMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.
2464
+
2465
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2466
+
2467
+ More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
2468
+ :param builtins.int count: Count is used only when the count mode is "ExactCount". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.
2469
+
2470
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2471
+ :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
2472
+
2473
+ A class is required if no subrequests are specified in the firstAvailable list and no class can be set if subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.
2474
+
2475
+ Administrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.
2476
+ :param Sequence['DeviceSubRequestPatchArgs'] first_available: FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the scheduler will only check the second one if it determines that the first one cannot be used.
2477
+
2478
+ This field may only be set in the entries of DeviceClaim.Requests.
2479
+
2480
+ DRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.
2481
+ :param builtins.str name: Name can be used to reference this request in a pod.spec.containers[].resources.claims entry and in a constraint of the claim.
2482
+
2483
+ Must be a DNS label and unique among all DeviceRequests in a ResourceClaim.
2484
+ :param Sequence['DeviceSelectorPatchArgs'] selectors: Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.
2485
+
2486
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2487
+ :param Sequence['DeviceTolerationPatchArgs'] tolerations: If specified, the request's tolerations.
2488
+
2489
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2490
+
2491
+ In addition, should any of the allocated devices get tainted with NoExecute after allocation and that effect is not tolerated, then all pods consuming the ResourceClaim get deleted to evict them. The scheduler will not let new pods reserve the claim while it has these tainted devices. Once all pods are evicted, the claim will get deallocated.
2492
+
2493
+ The maximum number of tolerations is 16.
2494
+
2495
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2496
+
2497
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2498
+ """
2499
+ if admin_access is not None:
2500
+ pulumi.set(__self__, "admin_access", admin_access)
2501
+ if allocation_mode is not None:
2502
+ pulumi.set(__self__, "allocation_mode", allocation_mode)
2503
+ if count is not None:
2504
+ pulumi.set(__self__, "count", count)
2505
+ if device_class_name is not None:
2506
+ pulumi.set(__self__, "device_class_name", device_class_name)
2507
+ if first_available is not None:
2508
+ pulumi.set(__self__, "first_available", first_available)
2509
+ if name is not None:
2510
+ pulumi.set(__self__, "name", name)
2511
+ if selectors is not None:
2512
+ pulumi.set(__self__, "selectors", selectors)
2513
+ if tolerations is not None:
2514
+ pulumi.set(__self__, "tolerations", tolerations)
2515
+
2516
+ @property
2517
+ @pulumi.getter(name="adminAccess")
2518
+ def admin_access(self) -> Optional[builtins.bool]:
2519
+ """
2520
+ AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.
2521
+
2522
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2523
+
2524
+ This is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.
2525
+ """
2526
+ return pulumi.get(self, "admin_access")
2527
+
2528
+ @property
2529
+ @pulumi.getter(name="allocationMode")
2530
+ def allocation_mode(self) -> Optional[builtins.str]:
2531
+ """
2532
+ AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
2533
+
2534
+ - ExactCount: This request is for a specific number of devices.
2535
+ This is the default. The exact number is provided in the
2536
+ count field.
2537
+
2538
+ - All: This request is for all of the matching devices in a pool.
2539
+ At least one device must exist on the node for the allocation to succeed.
2540
+ Allocation will fail if some devices are already allocated,
2541
+ unless adminAccess is requested.
2542
+
2543
+ If AllocationMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.
2544
+
2545
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2546
+
2547
+ More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
2548
+ """
2549
+ return pulumi.get(self, "allocation_mode")
2550
+
2551
+ @property
2552
+ @pulumi.getter
2553
+ def count(self) -> Optional[builtins.int]:
2554
+ """
2555
+ Count is used only when the count mode is "ExactCount". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.
2556
+
2557
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2558
+ """
2559
+ return pulumi.get(self, "count")
2560
+
2561
+ @property
2562
+ @pulumi.getter(name="deviceClassName")
2563
+ def device_class_name(self) -> Optional[builtins.str]:
2564
+ """
2565
+ DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
2566
+
2567
+ A class is required if no subrequests are specified in the firstAvailable list and no class can be set if subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.
2568
+
2569
+ Administrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.
2570
+ """
2571
+ return pulumi.get(self, "device_class_name")
2572
+
2573
+ @property
2574
+ @pulumi.getter(name="firstAvailable")
2575
+ def first_available(self) -> Optional[Sequence['outputs.DeviceSubRequestPatch']]:
2576
+ """
2577
+ FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the scheduler will only check the second one if it determines that the first one cannot be used.
2578
+
2579
+ This field may only be set in the entries of DeviceClaim.Requests.
2580
+
2581
+ DRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.
2582
+ """
2583
+ return pulumi.get(self, "first_available")
2584
+
2585
+ @property
2586
+ @pulumi.getter
2587
+ def name(self) -> Optional[builtins.str]:
2588
+ """
2589
+ Name can be used to reference this request in a pod.spec.containers[].resources.claims entry and in a constraint of the claim.
2590
+
2591
+ Must be a DNS label and unique among all DeviceRequests in a ResourceClaim.
2592
+ """
2593
+ return pulumi.get(self, "name")
2594
+
2595
+ @property
2596
+ @pulumi.getter
2597
+ def selectors(self) -> Optional[Sequence['outputs.DeviceSelectorPatch']]:
2598
+ """
2599
+ Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.
2600
+
2601
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2602
+ """
2603
+ return pulumi.get(self, "selectors")
2604
+
2605
+ @property
2606
+ @pulumi.getter
2607
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceTolerationPatch']]:
2608
+ """
2609
+ If specified, the request's tolerations.
2610
+
2611
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2612
+
2613
+ In addition, should any of the allocated devices get tainted with NoExecute after allocation and that effect is not tolerated, then all pods consuming the ResourceClaim get deleted to evict them. The scheduler will not let new pods reserve the claim while it has these tainted devices. Once all pods are evicted, the claim will get deallocated.
2614
+
2615
+ The maximum number of tolerations is 16.
2616
+
2617
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2618
+
2619
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2620
+ """
2621
+ return pulumi.get(self, "tolerations")
2622
+
2623
+
2624
+ @pulumi.output_type
2625
+ class DeviceSelector(dict):
2626
+ """
2627
+ DeviceSelector must have exactly one field set.
2628
+ """
2629
+ def __init__(__self__, *,
2630
+ cel: Optional['outputs.CELDeviceSelector'] = None):
2631
+ """
2632
+ DeviceSelector must have exactly one field set.
2633
+ :param 'CELDeviceSelectorArgs' cel: CEL contains a CEL expression for selecting a device.
2634
+ """
2635
+ if cel is not None:
2636
+ pulumi.set(__self__, "cel", cel)
2637
+
2638
+ @property
2639
+ @pulumi.getter
2640
+ def cel(self) -> Optional['outputs.CELDeviceSelector']:
2641
+ """
2642
+ CEL contains a CEL expression for selecting a device.
2643
+ """
2644
+ return pulumi.get(self, "cel")
2645
+
2646
+
2647
+ @pulumi.output_type
2648
+ class DeviceSelectorPatch(dict):
2649
+ """
2650
+ DeviceSelector must have exactly one field set.
2651
+ """
2652
+ def __init__(__self__, *,
2653
+ cel: Optional['outputs.CELDeviceSelectorPatch'] = None):
2654
+ """
2655
+ DeviceSelector must have exactly one field set.
2656
+ :param 'CELDeviceSelectorPatchArgs' cel: CEL contains a CEL expression for selecting a device.
2657
+ """
2658
+ if cel is not None:
2659
+ pulumi.set(__self__, "cel", cel)
2660
+
2661
+ @property
2662
+ @pulumi.getter
2663
+ def cel(self) -> Optional['outputs.CELDeviceSelectorPatch']:
2664
+ """
2665
+ CEL contains a CEL expression for selecting a device.
2666
+ """
2667
+ return pulumi.get(self, "cel")
2668
+
2669
+
2670
+ @pulumi.output_type
2671
+ class DeviceSubRequest(dict):
2672
+ """
2673
+ DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.
2674
+
2675
+ DeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.
2676
+ """
2677
+ @staticmethod
2678
+ def __key_warning(key: str):
2679
+ suggest = None
2680
+ if key == "deviceClassName":
2681
+ suggest = "device_class_name"
2682
+ elif key == "allocationMode":
2683
+ suggest = "allocation_mode"
2684
+
2685
+ if suggest:
2686
+ pulumi.log.warn(f"Key '{key}' not found in DeviceSubRequest. Access the value via the '{suggest}' property getter instead.")
2687
+
2688
+ def __getitem__(self, key: str) -> Any:
2689
+ DeviceSubRequest.__key_warning(key)
2690
+ return super().__getitem__(key)
2691
+
2692
+ def get(self, key: str, default = None) -> Any:
2693
+ DeviceSubRequest.__key_warning(key)
2694
+ return super().get(key, default)
2695
+
2696
+ def __init__(__self__, *,
2697
+ device_class_name: builtins.str,
2698
+ name: builtins.str,
2699
+ allocation_mode: Optional[builtins.str] = None,
2700
+ count: Optional[builtins.int] = None,
2701
+ selectors: Optional[Sequence['outputs.DeviceSelector']] = None,
2702
+ tolerations: Optional[Sequence['outputs.DeviceToleration']] = None):
2703
+ """
2704
+ DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.
2705
+
2706
+ DeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.
2707
+ :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.
2708
+
2709
+ A class is required. Which classes are available depends on the cluster.
2710
+
2711
+ Administrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.
2712
+ :param builtins.str name: Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format <main request>/<subrequest>.
2713
+
2714
+ Must be a DNS label.
2715
+ :param builtins.str allocation_mode: AllocationMode and its related fields define how devices are allocated to satisfy this subrequest. Supported values are:
2716
+
2717
+ - ExactCount: This request is for a specific number of devices.
2718
+ This is the default. The exact number is provided in the
2719
+ count field.
2720
+
2721
+ - All: This subrequest is for all of the matching devices in a pool.
2722
+ Allocation will fail if some devices are already allocated,
2723
+ unless adminAccess is requested.
2724
+
2725
+ If AllocationMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other subrequests must specify this field.
2726
+
2727
+ More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
2728
+ :param builtins.int count: Count is used only when the count mode is "ExactCount". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.
2729
+ :param Sequence['DeviceSelectorArgs'] selectors: Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this subrequest. All selectors must be satisfied for a device to be considered.
2730
+ :param Sequence['DeviceTolerationArgs'] tolerations: If specified, the request's tolerations.
2731
+
2732
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2733
+
2734
+ In addition, should any of the allocated devices get tainted with NoExecute after allocation and that effect is not tolerated, then all pods consuming the ResourceClaim get deleted to evict them. The scheduler will not let new pods reserve the claim while it has these tainted devices. Once all pods are evicted, the claim will get deallocated.
2735
+
2736
+ The maximum number of tolerations is 16.
2737
+
2738
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2739
+ """
2740
+ pulumi.set(__self__, "device_class_name", device_class_name)
2741
+ pulumi.set(__self__, "name", name)
2742
+ if allocation_mode is not None:
2743
+ pulumi.set(__self__, "allocation_mode", allocation_mode)
2744
+ if count is not None:
2745
+ pulumi.set(__self__, "count", count)
2746
+ if selectors is not None:
2747
+ pulumi.set(__self__, "selectors", selectors)
2748
+ if tolerations is not None:
2749
+ pulumi.set(__self__, "tolerations", tolerations)
2750
+
2751
+ @property
2752
+ @pulumi.getter(name="deviceClassName")
2753
+ def device_class_name(self) -> builtins.str:
2754
+ """
2755
+ DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.
2756
+
2757
+ A class is required. Which classes are available depends on the cluster.
2758
+
2759
+ Administrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.
2760
+ """
2761
+ return pulumi.get(self, "device_class_name")
2762
+
2763
+ @property
2764
+ @pulumi.getter
2765
+ def name(self) -> builtins.str:
2766
+ """
2767
+ Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format <main request>/<subrequest>.
2768
+
2769
+ Must be a DNS label.
2770
+ """
2771
+ return pulumi.get(self, "name")
2772
+
2773
+ @property
2774
+ @pulumi.getter(name="allocationMode")
2775
+ def allocation_mode(self) -> Optional[builtins.str]:
2776
+ """
2777
+ AllocationMode and its related fields define how devices are allocated to satisfy this subrequest. Supported values are:
2778
+
2779
+ - ExactCount: This request is for a specific number of devices.
2780
+ This is the default. The exact number is provided in the
2781
+ count field.
2782
+
2783
+ - All: This subrequest is for all of the matching devices in a pool.
2784
+ Allocation will fail if some devices are already allocated,
2785
+ unless adminAccess is requested.
2786
+
2787
+ If AllocationMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other subrequests must specify this field.
2788
+
2789
+ More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
2790
+ """
2791
+ return pulumi.get(self, "allocation_mode")
2792
+
2793
+ @property
2794
+ @pulumi.getter
2795
+ def count(self) -> Optional[builtins.int]:
2796
+ """
2797
+ Count is used only when the count mode is "ExactCount". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.
2798
+ """
2799
+ return pulumi.get(self, "count")
1782
2800
 
1783
2801
  @property
1784
2802
  @pulumi.getter
1785
- def pool(self) -> Optional[builtins.str]:
2803
+ def selectors(self) -> Optional[Sequence['outputs.DeviceSelector']]:
1786
2804
  """
1787
- This name together with the driver name and the device name field identify which device was allocated (`<driver name>/<pool name>/<device name>`).
1788
-
1789
- Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
2805
+ Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this subrequest. All selectors must be satisfied for a device to be considered.
1790
2806
  """
1791
- return pulumi.get(self, "pool")
2807
+ return pulumi.get(self, "selectors")
1792
2808
 
1793
2809
  @property
1794
2810
  @pulumi.getter
1795
- def request(self) -> Optional[builtins.str]:
2811
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceToleration']]:
1796
2812
  """
1797
- Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.
2813
+ If specified, the request's tolerations.
2814
+
2815
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2816
+
2817
+ In addition, should any of the allocated devices get tainted with NoExecute after allocation and that effect is not tolerated, then all pods consuming the ResourceClaim get deleted to evict them. The scheduler will not let new pods reserve the claim while it has these tainted devices. Once all pods are evicted, the claim will get deallocated.
2818
+
2819
+ The maximum number of tolerations is 16.
2820
+
2821
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
1798
2822
  """
1799
- return pulumi.get(self, "request")
2823
+ return pulumi.get(self, "tolerations")
1800
2824
 
1801
2825
 
1802
2826
  @pulumi.output_type
1803
- class DeviceRequestPatch(dict):
2827
+ class DeviceSubRequestPatch(dict):
1804
2828
  """
1805
- DeviceRequest is a request for devices required for a claim. This is typically a request for a single resource like a device, but can also ask for several identical devices.
2829
+ DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.
1806
2830
 
1807
- A DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.
2831
+ DeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.
1808
2832
  """
1809
2833
  @staticmethod
1810
2834
  def __key_warning(key: str):
1811
2835
  suggest = None
1812
- if key == "adminAccess":
1813
- suggest = "admin_access"
1814
- elif key == "allocationMode":
2836
+ if key == "allocationMode":
1815
2837
  suggest = "allocation_mode"
1816
2838
  elif key == "deviceClassName":
1817
2839
  suggest = "device_class_name"
1818
2840
 
1819
2841
  if suggest:
1820
- pulumi.log.warn(f"Key '{key}' not found in DeviceRequestPatch. Access the value via the '{suggest}' property getter instead.")
2842
+ pulumi.log.warn(f"Key '{key}' not found in DeviceSubRequestPatch. Access the value via the '{suggest}' property getter instead.")
1821
2843
 
1822
2844
  def __getitem__(self, key: str) -> Any:
1823
- DeviceRequestPatch.__key_warning(key)
2845
+ DeviceSubRequestPatch.__key_warning(key)
1824
2846
  return super().__getitem__(key)
1825
2847
 
1826
2848
  def get(self, key: str, default = None) -> Any:
1827
- DeviceRequestPatch.__key_warning(key)
2849
+ DeviceSubRequestPatch.__key_warning(key)
1828
2850
  return super().get(key, default)
1829
2851
 
1830
2852
  def __init__(__self__, *,
1831
- admin_access: Optional[builtins.bool] = None,
1832
2853
  allocation_mode: Optional[builtins.str] = None,
1833
2854
  count: Optional[builtins.int] = None,
1834
2855
  device_class_name: Optional[builtins.str] = None,
1835
2856
  name: Optional[builtins.str] = None,
1836
- selectors: Optional[Sequence['outputs.DeviceSelectorPatch']] = None):
2857
+ selectors: Optional[Sequence['outputs.DeviceSelectorPatch']] = None,
2858
+ tolerations: Optional[Sequence['outputs.DeviceTolerationPatch']] = None):
1837
2859
  """
1838
- DeviceRequest is a request for devices required for a claim. This is typically a request for a single resource like a device, but can also ask for several identical devices.
2860
+ DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.
1839
2861
 
1840
- A DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.
1841
- :param builtins.bool admin_access: AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.
1842
-
1843
- This is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.
1844
- :param builtins.str allocation_mode: AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
2862
+ DeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.
2863
+ :param builtins.str allocation_mode: AllocationMode and its related fields define how devices are allocated to satisfy this subrequest. Supported values are:
1845
2864
 
1846
2865
  - ExactCount: This request is for a specific number of devices.
1847
2866
  This is the default. The exact number is provided in the
1848
2867
  count field.
1849
2868
 
1850
- - All: This request is for all of the matching devices in a pool.
2869
+ - All: This subrequest is for all of the matching devices in a pool.
1851
2870
  Allocation will fail if some devices are already allocated,
1852
2871
  unless adminAccess is requested.
1853
2872
 
1854
- If AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.
2873
+ If AllocationMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other subrequests must specify this field.
1855
2874
 
1856
2875
  More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
1857
2876
  :param builtins.int count: Count is used only when the count mode is "ExactCount". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.
1858
- :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
2877
+ :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.
1859
2878
 
1860
2879
  A class is required. Which classes are available depends on the cluster.
1861
2880
 
1862
2881
  Administrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.
1863
- :param builtins.str name: Name can be used to reference this request in a pod.spec.containers[].resources.claims entry and in a constraint of the claim.
2882
+ :param builtins.str name: Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format <main request>/<subrequest>.
1864
2883
 
1865
2884
  Must be a DNS label.
1866
- :param Sequence['DeviceSelectorPatchArgs'] selectors: Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.
2885
+ :param Sequence['DeviceSelectorPatchArgs'] selectors: Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this subrequest. All selectors must be satisfied for a device to be considered.
2886
+ :param Sequence['DeviceTolerationPatchArgs'] tolerations: If specified, the request's tolerations.
2887
+
2888
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2889
+
2890
+ In addition, should any of the allocated devices get tainted with NoExecute after allocation and that effect is not tolerated, then all pods consuming the ResourceClaim get deleted to evict them. The scheduler will not let new pods reserve the claim while it has these tainted devices. Once all pods are evicted, the claim will get deallocated.
2891
+
2892
+ The maximum number of tolerations is 16.
2893
+
2894
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
1867
2895
  """
1868
- if admin_access is not None:
1869
- pulumi.set(__self__, "admin_access", admin_access)
1870
2896
  if allocation_mode is not None:
1871
2897
  pulumi.set(__self__, "allocation_mode", allocation_mode)
1872
2898
  if count is not None:
@@ -1877,32 +2903,24 @@ class DeviceRequestPatch(dict):
1877
2903
  pulumi.set(__self__, "name", name)
1878
2904
  if selectors is not None:
1879
2905
  pulumi.set(__self__, "selectors", selectors)
1880
-
1881
- @property
1882
- @pulumi.getter(name="adminAccess")
1883
- def admin_access(self) -> Optional[builtins.bool]:
1884
- """
1885
- AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.
1886
-
1887
- This is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.
1888
- """
1889
- return pulumi.get(self, "admin_access")
2906
+ if tolerations is not None:
2907
+ pulumi.set(__self__, "tolerations", tolerations)
1890
2908
 
1891
2909
  @property
1892
2910
  @pulumi.getter(name="allocationMode")
1893
2911
  def allocation_mode(self) -> Optional[builtins.str]:
1894
2912
  """
1895
- AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
2913
+ AllocationMode and its related fields define how devices are allocated to satisfy this subrequest. Supported values are:
1896
2914
 
1897
2915
  - ExactCount: This request is for a specific number of devices.
1898
2916
  This is the default. The exact number is provided in the
1899
2917
  count field.
1900
2918
 
1901
- - All: This request is for all of the matching devices in a pool.
2919
+ - All: This subrequest is for all of the matching devices in a pool.
1902
2920
  Allocation will fail if some devices are already allocated,
1903
2921
  unless adminAccess is requested.
1904
2922
 
1905
- If AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.
2923
+ If AllocationMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other subrequests must specify this field.
1906
2924
 
1907
2925
  More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
1908
2926
  """
@@ -1920,7 +2938,7 @@ class DeviceRequestPatch(dict):
1920
2938
  @pulumi.getter(name="deviceClassName")
1921
2939
  def device_class_name(self) -> Optional[builtins.str]:
1922
2940
  """
1923
- DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
2941
+ DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.
1924
2942
 
1925
2943
  A class is required. Which classes are available depends on the cluster.
1926
2944
 
@@ -1932,7 +2950,7 @@ class DeviceRequestPatch(dict):
1932
2950
  @pulumi.getter
1933
2951
  def name(self) -> Optional[builtins.str]:
1934
2952
  """
1935
- Name can be used to reference this request in a pod.spec.containers[].resources.claims entry and in a constraint of the claim.
2953
+ Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format <main request>/<subrequest>.
1936
2954
 
1937
2955
  Must be a DNS label.
1938
2956
  """
@@ -1942,55 +2960,351 @@ class DeviceRequestPatch(dict):
1942
2960
  @pulumi.getter
1943
2961
  def selectors(self) -> Optional[Sequence['outputs.DeviceSelectorPatch']]:
1944
2962
  """
1945
- Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.
2963
+ Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this subrequest. All selectors must be satisfied for a device to be considered.
1946
2964
  """
1947
2965
  return pulumi.get(self, "selectors")
1948
2966
 
2967
+ @property
2968
+ @pulumi.getter
2969
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceTolerationPatch']]:
2970
+ """
2971
+ If specified, the request's tolerations.
2972
+
2973
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2974
+
2975
+ In addition, should any of the allocated devices get tainted with NoExecute after allocation and that effect is not tolerated, then all pods consuming the ResourceClaim get deleted to evict them. The scheduler will not let new pods reserve the claim while it has these tainted devices. Once all pods are evicted, the claim will get deallocated.
2976
+
2977
+ The maximum number of tolerations is 16.
2978
+
2979
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2980
+ """
2981
+ return pulumi.get(self, "tolerations")
2982
+
1949
2983
 
1950
2984
  @pulumi.output_type
1951
- class DeviceSelector(dict):
2985
+ class DeviceTaint(dict):
1952
2986
  """
1953
- DeviceSelector must have exactly one field set.
2987
+ The device this taint is attached to has the "effect" on any claim which does not tolerate the taint and, through the claim, to pods using the claim.
1954
2988
  """
2989
+ @staticmethod
2990
+ def __key_warning(key: str):
2991
+ suggest = None
2992
+ if key == "timeAdded":
2993
+ suggest = "time_added"
2994
+
2995
+ if suggest:
2996
+ pulumi.log.warn(f"Key '{key}' not found in DeviceTaint. Access the value via the '{suggest}' property getter instead.")
2997
+
2998
+ def __getitem__(self, key: str) -> Any:
2999
+ DeviceTaint.__key_warning(key)
3000
+ return super().__getitem__(key)
3001
+
3002
+ def get(self, key: str, default = None) -> Any:
3003
+ DeviceTaint.__key_warning(key)
3004
+ return super().get(key, default)
3005
+
1955
3006
  def __init__(__self__, *,
1956
- cel: Optional['outputs.CELDeviceSelector'] = None):
3007
+ effect: builtins.str,
3008
+ key: builtins.str,
3009
+ time_added: Optional[builtins.str] = None,
3010
+ value: Optional[builtins.str] = None):
1957
3011
  """
1958
- DeviceSelector must have exactly one field set.
1959
- :param 'CELDeviceSelectorArgs' cel: CEL contains a CEL expression for selecting a device.
3012
+ The device this taint is attached to has the "effect" on any claim which does not tolerate the taint and, through the claim, to pods using the claim.
3013
+ :param builtins.str effect: The effect of the taint on claims that do not tolerate the taint and through such claims on the pods using them. Valid effects are NoSchedule and NoExecute. PreferNoSchedule as used for nodes is not valid here.
3014
+ :param builtins.str key: The taint key to be applied to a device. Must be a label name.
3015
+ :param builtins.str time_added: TimeAdded represents the time at which the taint was added. Added automatically during create or update if not set.
3016
+ :param builtins.str value: The taint value corresponding to the taint key. Must be a label value.
1960
3017
  """
1961
- if cel is not None:
1962
- pulumi.set(__self__, "cel", cel)
3018
+ pulumi.set(__self__, "effect", effect)
3019
+ pulumi.set(__self__, "key", key)
3020
+ if time_added is not None:
3021
+ pulumi.set(__self__, "time_added", time_added)
3022
+ if value is not None:
3023
+ pulumi.set(__self__, "value", value)
1963
3024
 
1964
3025
  @property
1965
3026
  @pulumi.getter
1966
- def cel(self) -> Optional['outputs.CELDeviceSelector']:
3027
+ def effect(self) -> builtins.str:
1967
3028
  """
1968
- CEL contains a CEL expression for selecting a device.
3029
+ The effect of the taint on claims that do not tolerate the taint and through such claims on the pods using them. Valid effects are NoSchedule and NoExecute. PreferNoSchedule as used for nodes is not valid here.
1969
3030
  """
1970
- return pulumi.get(self, "cel")
3031
+ return pulumi.get(self, "effect")
3032
+
3033
+ @property
3034
+ @pulumi.getter
3035
+ def key(self) -> builtins.str:
3036
+ """
3037
+ The taint key to be applied to a device. Must be a label name.
3038
+ """
3039
+ return pulumi.get(self, "key")
3040
+
3041
+ @property
3042
+ @pulumi.getter(name="timeAdded")
3043
+ def time_added(self) -> Optional[builtins.str]:
3044
+ """
3045
+ TimeAdded represents the time at which the taint was added. Added automatically during create or update if not set.
3046
+ """
3047
+ return pulumi.get(self, "time_added")
3048
+
3049
+ @property
3050
+ @pulumi.getter
3051
+ def value(self) -> Optional[builtins.str]:
3052
+ """
3053
+ The taint value corresponding to the taint key. Must be a label value.
3054
+ """
3055
+ return pulumi.get(self, "value")
1971
3056
 
1972
3057
 
1973
3058
  @pulumi.output_type
1974
- class DeviceSelectorPatch(dict):
3059
+ class DeviceTaintPatch(dict):
1975
3060
  """
1976
- DeviceSelector must have exactly one field set.
3061
+ The device this taint is attached to has the "effect" on any claim which does not tolerate the taint and, through the claim, to pods using the claim.
1977
3062
  """
3063
+ @staticmethod
3064
+ def __key_warning(key: str):
3065
+ suggest = None
3066
+ if key == "timeAdded":
3067
+ suggest = "time_added"
3068
+
3069
+ if suggest:
3070
+ pulumi.log.warn(f"Key '{key}' not found in DeviceTaintPatch. Access the value via the '{suggest}' property getter instead.")
3071
+
3072
+ def __getitem__(self, key: str) -> Any:
3073
+ DeviceTaintPatch.__key_warning(key)
3074
+ return super().__getitem__(key)
3075
+
3076
+ def get(self, key: str, default = None) -> Any:
3077
+ DeviceTaintPatch.__key_warning(key)
3078
+ return super().get(key, default)
3079
+
1978
3080
  def __init__(__self__, *,
1979
- cel: Optional['outputs.CELDeviceSelectorPatch'] = None):
3081
+ effect: Optional[builtins.str] = None,
3082
+ key: Optional[builtins.str] = None,
3083
+ time_added: Optional[builtins.str] = None,
3084
+ value: Optional[builtins.str] = None):
3085
+ """
3086
+ The device this taint is attached to has the "effect" on any claim which does not tolerate the taint and, through the claim, to pods using the claim.
3087
+ :param builtins.str effect: The effect of the taint on claims that do not tolerate the taint and through such claims on the pods using them. Valid effects are NoSchedule and NoExecute. PreferNoSchedule as used for nodes is not valid here.
3088
+ :param builtins.str key: The taint key to be applied to a device. Must be a label name.
3089
+ :param builtins.str time_added: TimeAdded represents the time at which the taint was added. Added automatically during create or update if not set.
3090
+ :param builtins.str value: The taint value corresponding to the taint key. Must be a label value.
3091
+ """
3092
+ if effect is not None:
3093
+ pulumi.set(__self__, "effect", effect)
3094
+ if key is not None:
3095
+ pulumi.set(__self__, "key", key)
3096
+ if time_added is not None:
3097
+ pulumi.set(__self__, "time_added", time_added)
3098
+ if value is not None:
3099
+ pulumi.set(__self__, "value", value)
3100
+
3101
+ @property
3102
+ @pulumi.getter
3103
+ def effect(self) -> Optional[builtins.str]:
1980
3104
  """
1981
- DeviceSelector must have exactly one field set.
1982
- :param 'CELDeviceSelectorPatchArgs' cel: CEL contains a CEL expression for selecting a device.
3105
+ The effect of the taint on claims that do not tolerate the taint and through such claims on the pods using them. Valid effects are NoSchedule and NoExecute. PreferNoSchedule as used for nodes is not valid here.
1983
3106
  """
1984
- if cel is not None:
1985
- pulumi.set(__self__, "cel", cel)
3107
+ return pulumi.get(self, "effect")
1986
3108
 
1987
3109
  @property
1988
3110
  @pulumi.getter
1989
- def cel(self) -> Optional['outputs.CELDeviceSelectorPatch']:
3111
+ def key(self) -> Optional[builtins.str]:
1990
3112
  """
1991
- CEL contains a CEL expression for selecting a device.
3113
+ The taint key to be applied to a device. Must be a label name.
1992
3114
  """
1993
- return pulumi.get(self, "cel")
3115
+ return pulumi.get(self, "key")
3116
+
3117
+ @property
3118
+ @pulumi.getter(name="timeAdded")
3119
+ def time_added(self) -> Optional[builtins.str]:
3120
+ """
3121
+ TimeAdded represents the time at which the taint was added. Added automatically during create or update if not set.
3122
+ """
3123
+ return pulumi.get(self, "time_added")
3124
+
3125
+ @property
3126
+ @pulumi.getter
3127
+ def value(self) -> Optional[builtins.str]:
3128
+ """
3129
+ The taint value corresponding to the taint key. Must be a label value.
3130
+ """
3131
+ return pulumi.get(self, "value")
3132
+
3133
+
3134
+ @pulumi.output_type
3135
+ class DeviceToleration(dict):
3136
+ """
3137
+ The ResourceClaim this DeviceToleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.
3138
+ """
3139
+ @staticmethod
3140
+ def __key_warning(key: str):
3141
+ suggest = None
3142
+ if key == "tolerationSeconds":
3143
+ suggest = "toleration_seconds"
3144
+
3145
+ if suggest:
3146
+ pulumi.log.warn(f"Key '{key}' not found in DeviceToleration. Access the value via the '{suggest}' property getter instead.")
3147
+
3148
+ def __getitem__(self, key: str) -> Any:
3149
+ DeviceToleration.__key_warning(key)
3150
+ return super().__getitem__(key)
3151
+
3152
+ def get(self, key: str, default = None) -> Any:
3153
+ DeviceToleration.__key_warning(key)
3154
+ return super().get(key, default)
3155
+
3156
+ def __init__(__self__, *,
3157
+ effect: Optional[builtins.str] = None,
3158
+ key: Optional[builtins.str] = None,
3159
+ operator: Optional[builtins.str] = None,
3160
+ toleration_seconds: Optional[builtins.int] = None,
3161
+ value: Optional[builtins.str] = None):
3162
+ """
3163
+ The ResourceClaim this DeviceToleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.
3164
+ :param builtins.str effect: Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule and NoExecute.
3165
+ :param builtins.str key: Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys. Must be a label name.
3166
+ :param builtins.str operator: Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a ResourceClaim can tolerate all taints of a particular category.
3167
+ :param builtins.int toleration_seconds: TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system. If larger than zero, the time when the pod needs to be evicted is calculated as <time when taint was adedd> + <toleration seconds>.
3168
+ :param builtins.str value: Value is the taint value the toleration matches to. If the operator is Exists, the value must be empty, otherwise just a regular string. Must be a label value.
3169
+ """
3170
+ if effect is not None:
3171
+ pulumi.set(__self__, "effect", effect)
3172
+ if key is not None:
3173
+ pulumi.set(__self__, "key", key)
3174
+ if operator is not None:
3175
+ pulumi.set(__self__, "operator", operator)
3176
+ if toleration_seconds is not None:
3177
+ pulumi.set(__self__, "toleration_seconds", toleration_seconds)
3178
+ if value is not None:
3179
+ pulumi.set(__self__, "value", value)
3180
+
3181
+ @property
3182
+ @pulumi.getter
3183
+ def effect(self) -> Optional[builtins.str]:
3184
+ """
3185
+ Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule and NoExecute.
3186
+ """
3187
+ return pulumi.get(self, "effect")
3188
+
3189
+ @property
3190
+ @pulumi.getter
3191
+ def key(self) -> Optional[builtins.str]:
3192
+ """
3193
+ Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys. Must be a label name.
3194
+ """
3195
+ return pulumi.get(self, "key")
3196
+
3197
+ @property
3198
+ @pulumi.getter
3199
+ def operator(self) -> Optional[builtins.str]:
3200
+ """
3201
+ Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a ResourceClaim can tolerate all taints of a particular category.
3202
+ """
3203
+ return pulumi.get(self, "operator")
3204
+
3205
+ @property
3206
+ @pulumi.getter(name="tolerationSeconds")
3207
+ def toleration_seconds(self) -> Optional[builtins.int]:
3208
+ """
3209
+ TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system. If larger than zero, the time when the pod needs to be evicted is calculated as <time when taint was adedd> + <toleration seconds>.
3210
+ """
3211
+ return pulumi.get(self, "toleration_seconds")
3212
+
3213
+ @property
3214
+ @pulumi.getter
3215
+ def value(self) -> Optional[builtins.str]:
3216
+ """
3217
+ Value is the taint value the toleration matches to. If the operator is Exists, the value must be empty, otherwise just a regular string. Must be a label value.
3218
+ """
3219
+ return pulumi.get(self, "value")
3220
+
3221
+
3222
+ @pulumi.output_type
3223
+ class DeviceTolerationPatch(dict):
3224
+ """
3225
+ The ResourceClaim this DeviceToleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.
3226
+ """
3227
+ @staticmethod
3228
+ def __key_warning(key: str):
3229
+ suggest = None
3230
+ if key == "tolerationSeconds":
3231
+ suggest = "toleration_seconds"
3232
+
3233
+ if suggest:
3234
+ pulumi.log.warn(f"Key '{key}' not found in DeviceTolerationPatch. Access the value via the '{suggest}' property getter instead.")
3235
+
3236
+ def __getitem__(self, key: str) -> Any:
3237
+ DeviceTolerationPatch.__key_warning(key)
3238
+ return super().__getitem__(key)
3239
+
3240
+ def get(self, key: str, default = None) -> Any:
3241
+ DeviceTolerationPatch.__key_warning(key)
3242
+ return super().get(key, default)
3243
+
3244
+ def __init__(__self__, *,
3245
+ effect: Optional[builtins.str] = None,
3246
+ key: Optional[builtins.str] = None,
3247
+ operator: Optional[builtins.str] = None,
3248
+ toleration_seconds: Optional[builtins.int] = None,
3249
+ value: Optional[builtins.str] = None):
3250
+ """
3251
+ The ResourceClaim this DeviceToleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.
3252
+ :param builtins.str effect: Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule and NoExecute.
3253
+ :param builtins.str key: Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys. Must be a label name.
3254
+ :param builtins.str operator: Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a ResourceClaim can tolerate all taints of a particular category.
3255
+ :param builtins.int toleration_seconds: TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system. If larger than zero, the time when the pod needs to be evicted is calculated as <time when taint was adedd> + <toleration seconds>.
3256
+ :param builtins.str value: Value is the taint value the toleration matches to. If the operator is Exists, the value must be empty, otherwise just a regular string. Must be a label value.
3257
+ """
3258
+ if effect is not None:
3259
+ pulumi.set(__self__, "effect", effect)
3260
+ if key is not None:
3261
+ pulumi.set(__self__, "key", key)
3262
+ if operator is not None:
3263
+ pulumi.set(__self__, "operator", operator)
3264
+ if toleration_seconds is not None:
3265
+ pulumi.set(__self__, "toleration_seconds", toleration_seconds)
3266
+ if value is not None:
3267
+ pulumi.set(__self__, "value", value)
3268
+
3269
+ @property
3270
+ @pulumi.getter
3271
+ def effect(self) -> Optional[builtins.str]:
3272
+ """
3273
+ Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule and NoExecute.
3274
+ """
3275
+ return pulumi.get(self, "effect")
3276
+
3277
+ @property
3278
+ @pulumi.getter
3279
+ def key(self) -> Optional[builtins.str]:
3280
+ """
3281
+ Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys. Must be a label name.
3282
+ """
3283
+ return pulumi.get(self, "key")
3284
+
3285
+ @property
3286
+ @pulumi.getter
3287
+ def operator(self) -> Optional[builtins.str]:
3288
+ """
3289
+ Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a ResourceClaim can tolerate all taints of a particular category.
3290
+ """
3291
+ return pulumi.get(self, "operator")
3292
+
3293
+ @property
3294
+ @pulumi.getter(name="tolerationSeconds")
3295
+ def toleration_seconds(self) -> Optional[builtins.int]:
3296
+ """
3297
+ TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system. If larger than zero, the time when the pod needs to be evicted is calculated as <time when taint was adedd> + <toleration seconds>.
3298
+ """
3299
+ return pulumi.get(self, "toleration_seconds")
3300
+
3301
+ @property
3302
+ @pulumi.getter
3303
+ def value(self) -> Optional[builtins.str]:
3304
+ """
3305
+ Value is the taint value the toleration matches to. If the operator is Exists, the value must be empty, otherwise just a regular string. Must be a label value.
3306
+ """
3307
+ return pulumi.get(self, "value")
1994
3308
 
1995
3309
 
1996
3310
  @pulumi.output_type
@@ -2030,6 +3344,8 @@ class NetworkDeviceData(dict):
2030
3344
 
2031
3345
  Must not be longer than 256 characters.
2032
3346
  :param Sequence[builtins.str] ips: IPs lists the network addresses assigned to the device's network interface. This can include both IPv4 and IPv6 addresses. The IPs are in the CIDR notation, which includes both the address and the associated subnet mask. e.g.: "192.0.2.5/24" for IPv4 and "2001:db8::5/64" for IPv6.
3347
+
3348
+ Must not contain more than 16 entries.
2033
3349
  """
2034
3350
  if hardware_address is not None:
2035
3351
  pulumi.set(__self__, "hardware_address", hardware_address)
@@ -2063,6 +3379,8 @@ class NetworkDeviceData(dict):
2063
3379
  def ips(self) -> Optional[Sequence[builtins.str]]:
2064
3380
  """
2065
3381
  IPs lists the network addresses assigned to the device's network interface. This can include both IPv4 and IPv6 addresses. The IPs are in the CIDR notation, which includes both the address and the associated subnet mask. e.g.: "192.0.2.5/24" for IPv4 and "2001:db8::5/64" for IPv6.
3382
+
3383
+ Must not contain more than 16 entries.
2066
3384
  """
2067
3385
  return pulumi.get(self, "ips")
2068
3386
 
@@ -2104,6 +3422,8 @@ class NetworkDeviceDataPatch(dict):
2104
3422
 
2105
3423
  Must not be longer than 256 characters.
2106
3424
  :param Sequence[builtins.str] ips: IPs lists the network addresses assigned to the device's network interface. This can include both IPv4 and IPv6 addresses. The IPs are in the CIDR notation, which includes both the address and the associated subnet mask. e.g.: "192.0.2.5/24" for IPv4 and "2001:db8::5/64" for IPv6.
3425
+
3426
+ Must not contain more than 16 entries.
2107
3427
  """
2108
3428
  if hardware_address is not None:
2109
3429
  pulumi.set(__self__, "hardware_address", hardware_address)
@@ -2137,6 +3457,8 @@ class NetworkDeviceDataPatch(dict):
2137
3457
  def ips(self) -> Optional[Sequence[builtins.str]]:
2138
3458
  """
2139
3459
  IPs lists the network addresses assigned to the device's network interface. This can include both IPv4 and IPv6 addresses. The IPs are in the CIDR notation, which includes both the address and the associated subnet mask. e.g.: "192.0.2.5/24" for IPv4 and "2001:db8::5/64" for IPv6.
3460
+
3461
+ Must not contain more than 16 entries.
2140
3462
  """
2141
3463
  return pulumi.get(self, "ips")
2142
3464
 
@@ -2555,7 +3877,7 @@ class ResourceClaimStatus(dict):
2555
3877
 
2556
3878
  Both schedulers try to add their pod to the claim.status.reservedFor field, but only the update that reaches the API server first gets stored. The other one fails with an error and the scheduler which issued it knows that it must put the pod back into the queue, waiting for the ResourceClaim to become usable again.
2557
3879
 
2558
- There can be at most 32 such reservations. This may get increased in the future, but not reduced.
3880
+ There can be at most 256 such reservations. This may get increased in the future, but not reduced.
2559
3881
  """
2560
3882
  if allocation is not None:
2561
3883
  pulumi.set(__self__, "allocation", allocation)
@@ -2590,7 +3912,7 @@ class ResourceClaimStatus(dict):
2590
3912
 
2591
3913
  Both schedulers try to add their pod to the claim.status.reservedFor field, but only the update that reaches the API server first gets stored. The other one fails with an error and the scheduler which issued it knows that it must put the pod back into the queue, waiting for the ResourceClaim to become usable again.
2592
3914
 
2593
- There can be at most 32 such reservations. This may get increased in the future, but not reduced.
3915
+ There can be at most 256 such reservations. This may get increased in the future, but not reduced.
2594
3916
  """
2595
3917
  return pulumi.get(self, "reserved_for")
2596
3918
 
@@ -2631,7 +3953,7 @@ class ResourceClaimStatusPatch(dict):
2631
3953
 
2632
3954
  Both schedulers try to add their pod to the claim.status.reservedFor field, but only the update that reaches the API server first gets stored. The other one fails with an error and the scheduler which issued it knows that it must put the pod back into the queue, waiting for the ResourceClaim to become usable again.
2633
3955
 
2634
- There can be at most 32 such reservations. This may get increased in the future, but not reduced.
3956
+ There can be at most 256 such reservations. This may get increased in the future, but not reduced.
2635
3957
  """
2636
3958
  if allocation is not None:
2637
3959
  pulumi.set(__self__, "allocation", allocation)
@@ -2666,7 +3988,7 @@ class ResourceClaimStatusPatch(dict):
2666
3988
 
2667
3989
  Both schedulers try to add their pod to the claim.status.reservedFor field, but only the update that reaches the API server first gets stored. The other one fails with an error and the scheduler which issued it knows that it must put the pod back into the queue, waiting for the ResourceClaim to become usable again.
2668
3990
 
2669
- There can be at most 32 such reservations. This may get increased in the future, but not reduced.
3991
+ There can be at most 256 such reservations. This may get increased in the future, but not reduced.
2670
3992
  """
2671
3993
  return pulumi.get(self, "reserved_for")
2672
3994
 
@@ -3085,6 +4407,10 @@ class ResourceSliceSpec(dict):
3085
4407
  suggest = "node_name"
3086
4408
  elif key == "nodeSelector":
3087
4409
  suggest = "node_selector"
4410
+ elif key == "perDeviceNodeSelection":
4411
+ suggest = "per_device_node_selection"
4412
+ elif key == "sharedCounters":
4413
+ suggest = "shared_counters"
3088
4414
 
3089
4415
  if suggest:
3090
4416
  pulumi.log.warn(f"Key '{key}' not found in ResourceSliceSpec. Access the value via the '{suggest}' property getter instead.")
@@ -3103,7 +4429,9 @@ class ResourceSliceSpec(dict):
3103
4429
  all_nodes: Optional[builtins.bool] = None,
3104
4430
  devices: Optional[Sequence['outputs.Device']] = None,
3105
4431
  node_name: Optional[builtins.str] = None,
3106
- node_selector: Optional['_core.v1.outputs.NodeSelector'] = None):
4432
+ node_selector: Optional['_core.v1.outputs.NodeSelector'] = None,
4433
+ per_device_node_selection: Optional[builtins.bool] = None,
4434
+ shared_counters: Optional[Sequence['outputs.CounterSet']] = None):
3107
4435
  """
3108
4436
  ResourceSliceSpec contains the information published by the driver in one ResourceSlice.
3109
4437
  :param builtins.str driver: Driver identifies the DRA driver providing the capacity information. A field selector can be used to list only ResourceSlice objects with a certain driver name.
@@ -3112,7 +4440,7 @@ class ResourceSliceSpec(dict):
3112
4440
  :param 'ResourcePoolArgs' pool: Pool describes the pool that this ResourceSlice belongs to.
3113
4441
  :param builtins.bool all_nodes: AllNodes indicates that all nodes have access to the resources in the pool.
3114
4442
 
3115
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
4443
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3116
4444
  :param Sequence['DeviceArgs'] devices: Devices lists some or all of the devices in this pool.
3117
4445
 
3118
4446
  Must not have more than 128 entries.
@@ -3120,12 +4448,20 @@ class ResourceSliceSpec(dict):
3120
4448
 
3121
4449
  This field can be used to limit access from nodes to ResourceSlices with the same node name. It also indicates to autoscalers that adding new nodes of the same type as some old node might also make new resources available.
3122
4450
 
3123
- Exactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.
4451
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.
3124
4452
  :param '_core.v1.NodeSelectorArgs' node_selector: NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.
3125
4453
 
3126
4454
  Must use exactly one term.
3127
4455
 
3128
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
4456
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
4457
+ :param builtins.bool per_device_node_selection: PerDeviceNodeSelection defines whether the access from nodes to resources in the pool is set on the ResourceSlice level or on each device. If it is set to true, every device defined the ResourceSlice must specify this individually.
4458
+
4459
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
4460
+ :param Sequence['CounterSetArgs'] shared_counters: SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.
4461
+
4462
+ The names of the SharedCounters must be unique in the ResourceSlice.
4463
+
4464
+ The maximum number of SharedCounters is 32.
3129
4465
  """
3130
4466
  pulumi.set(__self__, "driver", driver)
3131
4467
  pulumi.set(__self__, "pool", pool)
@@ -3137,6 +4473,10 @@ class ResourceSliceSpec(dict):
3137
4473
  pulumi.set(__self__, "node_name", node_name)
3138
4474
  if node_selector is not None:
3139
4475
  pulumi.set(__self__, "node_selector", node_selector)
4476
+ if per_device_node_selection is not None:
4477
+ pulumi.set(__self__, "per_device_node_selection", per_device_node_selection)
4478
+ if shared_counters is not None:
4479
+ pulumi.set(__self__, "shared_counters", shared_counters)
3140
4480
 
3141
4481
  @property
3142
4482
  @pulumi.getter
@@ -3162,7 +4502,7 @@ class ResourceSliceSpec(dict):
3162
4502
  """
3163
4503
  AllNodes indicates that all nodes have access to the resources in the pool.
3164
4504
 
3165
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
4505
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3166
4506
  """
3167
4507
  return pulumi.get(self, "all_nodes")
3168
4508
 
@@ -3184,7 +4524,7 @@ class ResourceSliceSpec(dict):
3184
4524
 
3185
4525
  This field can be used to limit access from nodes to ResourceSlices with the same node name. It also indicates to autoscalers that adding new nodes of the same type as some old node might also make new resources available.
3186
4526
 
3187
- Exactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.
4527
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.
3188
4528
  """
3189
4529
  return pulumi.get(self, "node_name")
3190
4530
 
@@ -3196,10 +4536,32 @@ class ResourceSliceSpec(dict):
3196
4536
 
3197
4537
  Must use exactly one term.
3198
4538
 
3199
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
4539
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3200
4540
  """
3201
4541
  return pulumi.get(self, "node_selector")
3202
4542
 
4543
+ @property
4544
+ @pulumi.getter(name="perDeviceNodeSelection")
4545
+ def per_device_node_selection(self) -> Optional[builtins.bool]:
4546
+ """
4547
+ PerDeviceNodeSelection defines whether the access from nodes to resources in the pool is set on the ResourceSlice level or on each device. If it is set to true, every device defined the ResourceSlice must specify this individually.
4548
+
4549
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
4550
+ """
4551
+ return pulumi.get(self, "per_device_node_selection")
4552
+
4553
+ @property
4554
+ @pulumi.getter(name="sharedCounters")
4555
+ def shared_counters(self) -> Optional[Sequence['outputs.CounterSet']]:
4556
+ """
4557
+ SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.
4558
+
4559
+ The names of the SharedCounters must be unique in the ResourceSlice.
4560
+
4561
+ The maximum number of SharedCounters is 32.
4562
+ """
4563
+ return pulumi.get(self, "shared_counters")
4564
+
3203
4565
 
3204
4566
  @pulumi.output_type
3205
4567
  class ResourceSliceSpecPatch(dict):
@@ -3215,6 +4577,10 @@ class ResourceSliceSpecPatch(dict):
3215
4577
  suggest = "node_name"
3216
4578
  elif key == "nodeSelector":
3217
4579
  suggest = "node_selector"
4580
+ elif key == "perDeviceNodeSelection":
4581
+ suggest = "per_device_node_selection"
4582
+ elif key == "sharedCounters":
4583
+ suggest = "shared_counters"
3218
4584
 
3219
4585
  if suggest:
3220
4586
  pulumi.log.warn(f"Key '{key}' not found in ResourceSliceSpecPatch. Access the value via the '{suggest}' property getter instead.")
@@ -3233,12 +4599,14 @@ class ResourceSliceSpecPatch(dict):
3233
4599
  driver: Optional[builtins.str] = None,
3234
4600
  node_name: Optional[builtins.str] = None,
3235
4601
  node_selector: Optional['_core.v1.outputs.NodeSelectorPatch'] = None,
3236
- pool: Optional['outputs.ResourcePoolPatch'] = None):
4602
+ per_device_node_selection: Optional[builtins.bool] = None,
4603
+ pool: Optional['outputs.ResourcePoolPatch'] = None,
4604
+ shared_counters: Optional[Sequence['outputs.CounterSetPatch']] = None):
3237
4605
  """
3238
4606
  ResourceSliceSpec contains the information published by the driver in one ResourceSlice.
3239
4607
  :param builtins.bool all_nodes: AllNodes indicates that all nodes have access to the resources in the pool.
3240
4608
 
3241
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
4609
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3242
4610
  :param Sequence['DevicePatchArgs'] devices: Devices lists some or all of the devices in this pool.
3243
4611
 
3244
4612
  Must not have more than 128 entries.
@@ -3249,13 +4617,21 @@ class ResourceSliceSpecPatch(dict):
3249
4617
 
3250
4618
  This field can be used to limit access from nodes to ResourceSlices with the same node name. It also indicates to autoscalers that adding new nodes of the same type as some old node might also make new resources available.
3251
4619
 
3252
- Exactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.
4620
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.
3253
4621
  :param '_core.v1.NodeSelectorPatchArgs' node_selector: NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.
3254
4622
 
3255
4623
  Must use exactly one term.
3256
4624
 
3257
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
4625
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
4626
+ :param builtins.bool per_device_node_selection: PerDeviceNodeSelection defines whether the access from nodes to resources in the pool is set on the ResourceSlice level or on each device. If it is set to true, every device defined the ResourceSlice must specify this individually.
4627
+
4628
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3258
4629
  :param 'ResourcePoolPatchArgs' pool: Pool describes the pool that this ResourceSlice belongs to.
4630
+ :param Sequence['CounterSetPatchArgs'] shared_counters: SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.
4631
+
4632
+ The names of the SharedCounters must be unique in the ResourceSlice.
4633
+
4634
+ The maximum number of SharedCounters is 32.
3259
4635
  """
3260
4636
  if all_nodes is not None:
3261
4637
  pulumi.set(__self__, "all_nodes", all_nodes)
@@ -3267,8 +4643,12 @@ class ResourceSliceSpecPatch(dict):
3267
4643
  pulumi.set(__self__, "node_name", node_name)
3268
4644
  if node_selector is not None:
3269
4645
  pulumi.set(__self__, "node_selector", node_selector)
4646
+ if per_device_node_selection is not None:
4647
+ pulumi.set(__self__, "per_device_node_selection", per_device_node_selection)
3270
4648
  if pool is not None:
3271
4649
  pulumi.set(__self__, "pool", pool)
4650
+ if shared_counters is not None:
4651
+ pulumi.set(__self__, "shared_counters", shared_counters)
3272
4652
 
3273
4653
  @property
3274
4654
  @pulumi.getter(name="allNodes")
@@ -3276,7 +4656,7 @@ class ResourceSliceSpecPatch(dict):
3276
4656
  """
3277
4657
  AllNodes indicates that all nodes have access to the resources in the pool.
3278
4658
 
3279
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
4659
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3280
4660
  """
3281
4661
  return pulumi.get(self, "all_nodes")
3282
4662
 
@@ -3308,7 +4688,7 @@ class ResourceSliceSpecPatch(dict):
3308
4688
 
3309
4689
  This field can be used to limit access from nodes to ResourceSlices with the same node name. It also indicates to autoscalers that adding new nodes of the same type as some old node might also make new resources available.
3310
4690
 
3311
- Exactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.
4691
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.
3312
4692
  """
3313
4693
  return pulumi.get(self, "node_name")
3314
4694
 
@@ -3320,10 +4700,20 @@ class ResourceSliceSpecPatch(dict):
3320
4700
 
3321
4701
  Must use exactly one term.
3322
4702
 
3323
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
4703
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3324
4704
  """
3325
4705
  return pulumi.get(self, "node_selector")
3326
4706
 
4707
+ @property
4708
+ @pulumi.getter(name="perDeviceNodeSelection")
4709
+ def per_device_node_selection(self) -> Optional[builtins.bool]:
4710
+ """
4711
+ PerDeviceNodeSelection defines whether the access from nodes to resources in the pool is set on the ResourceSlice level or on each device. If it is set to true, every device defined the ResourceSlice must specify this individually.
4712
+
4713
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
4714
+ """
4715
+ return pulumi.get(self, "per_device_node_selection")
4716
+
3327
4717
  @property
3328
4718
  @pulumi.getter
3329
4719
  def pool(self) -> Optional['outputs.ResourcePoolPatch']:
@@ -3332,4 +4722,16 @@ class ResourceSliceSpecPatch(dict):
3332
4722
  """
3333
4723
  return pulumi.get(self, "pool")
3334
4724
 
4725
+ @property
4726
+ @pulumi.getter(name="sharedCounters")
4727
+ def shared_counters(self) -> Optional[Sequence['outputs.CounterSetPatch']]:
4728
+ """
4729
+ SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.
4730
+
4731
+ The names of the SharedCounters must be unique in the ResourceSlice.
4732
+
4733
+ The maximum number of SharedCounters is 32.
4734
+ """
4735
+ return pulumi.get(self, "shared_counters")
4736
+
3335
4737