pulumi-kubernetes 4.23.0a1746131759__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.0a1746131759.dist-info → pulumi_kubernetes-4.23.0a1746138483.dist-info}/METADATA +1 -1
  114. {pulumi_kubernetes-4.23.0a1746131759.dist-info → pulumi_kubernetes-4.23.0a1746138483.dist-info}/RECORD +116 -86
  115. {pulumi_kubernetes-4.23.0a1746131759.dist-info → pulumi_kubernetes-4.23.0a1746138483.dist-info}/WHEEL +0 -0
  116. {pulumi_kubernetes-4.23.0a1746131759.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',
@@ -44,6 +47,8 @@ __all__ = [
44
47
  'DeviceClassSpecPatch',
45
48
  'DeviceConstraint',
46
49
  'DeviceConstraintPatch',
50
+ 'DeviceCounterConsumption',
51
+ 'DeviceCounterConsumptionPatch',
47
52
  'DevicePatch',
48
53
  'DeviceRequest',
49
54
  'DeviceRequestAllocationResult',
@@ -51,6 +56,17 @@ __all__ = [
51
56
  'DeviceRequestPatch',
52
57
  'DeviceSelector',
53
58
  'DeviceSelectorPatch',
59
+ 'DeviceSubRequest',
60
+ 'DeviceSubRequestPatch',
61
+ 'DeviceTaint',
62
+ 'DeviceTaintPatch',
63
+ 'DeviceTaintRule',
64
+ 'DeviceTaintRuleSpec',
65
+ 'DeviceTaintRuleSpecPatch',
66
+ 'DeviceTaintSelector',
67
+ 'DeviceTaintSelectorPatch',
68
+ 'DeviceToleration',
69
+ 'DeviceTolerationPatch',
54
70
  'NetworkDeviceData',
55
71
  'NetworkDeviceDataPatch',
56
72
  'OpaqueDeviceConfiguration',
@@ -118,6 +134,8 @@ class AllocatedDeviceStatus(dict):
118
134
 
119
135
  Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
120
136
  :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.
137
+
138
+ Must not contain more than 8 entries.
121
139
  :param Any data: Data contains arbitrary driver-specific data.
122
140
 
123
141
  The length of the raw data must be smaller or equal to 10 Ki.
@@ -166,6 +184,8 @@ class AllocatedDeviceStatus(dict):
166
184
  def conditions(self) -> Optional[Sequence['_meta.v1.outputs.Condition']]:
167
185
  """
168
186
  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.
187
+
188
+ Must not contain more than 8 entries.
169
189
  """
170
190
  return pulumi.get(self, "conditions")
171
191
 
@@ -220,6 +240,8 @@ class AllocatedDeviceStatusPatch(dict):
220
240
  """
221
241
  AllocatedDeviceStatus contains the status of an allocated device, if the driver chooses to report it. This may include driver-specific information.
222
242
  :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.
243
+
244
+ Must not contain more than 8 entries.
223
245
  :param Any data: Data contains arbitrary driver-specific data.
224
246
 
225
247
  The length of the raw data must be smaller or equal to 10 Ki.
@@ -250,6 +272,8 @@ class AllocatedDeviceStatusPatch(dict):
250
272
  def conditions(self) -> Optional[Sequence['_meta.v1.outputs.ConditionPatch']]:
251
273
  """
252
274
  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.
275
+
276
+ Must not contain more than 8 entries.
253
277
  """
254
278
  return pulumi.get(self, "conditions")
255
279
 
@@ -449,22 +473,89 @@ class BasicDevice(dict):
449
473
  """
450
474
  BasicDevice defines one device instance.
451
475
  """
476
+ @staticmethod
477
+ def __key_warning(key: str):
478
+ suggest = None
479
+ if key == "allNodes":
480
+ suggest = "all_nodes"
481
+ elif key == "consumesCounters":
482
+ suggest = "consumes_counters"
483
+ elif key == "nodeName":
484
+ suggest = "node_name"
485
+ elif key == "nodeSelector":
486
+ suggest = "node_selector"
487
+
488
+ if suggest:
489
+ pulumi.log.warn(f"Key '{key}' not found in BasicDevice. Access the value via the '{suggest}' property getter instead.")
490
+
491
+ def __getitem__(self, key: str) -> Any:
492
+ BasicDevice.__key_warning(key)
493
+ return super().__getitem__(key)
494
+
495
+ def get(self, key: str, default = None) -> Any:
496
+ BasicDevice.__key_warning(key)
497
+ return super().get(key, default)
498
+
452
499
  def __init__(__self__, *,
500
+ all_nodes: Optional[builtins.bool] = None,
453
501
  attributes: Optional[Mapping[str, 'outputs.DeviceAttribute']] = None,
454
- capacity: Optional[Mapping[str, builtins.str]] = None):
502
+ capacity: Optional[Mapping[str, builtins.str]] = None,
503
+ consumes_counters: Optional[Sequence['outputs.DeviceCounterConsumption']] = None,
504
+ node_name: Optional[builtins.str] = None,
505
+ node_selector: Optional['_core.v1.outputs.NodeSelector'] = None,
506
+ taints: Optional[Sequence['outputs.DeviceTaint']] = None):
455
507
  """
456
508
  BasicDevice defines one device instance.
509
+ :param builtins.bool all_nodes: AllNodes indicates that all nodes have access to the device.
510
+
511
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
457
512
  :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.
458
513
 
459
514
  The maximum number of attributes and capacities combined is 32.
460
515
  :param Mapping[str, builtins.str] capacity: Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.
461
516
 
462
517
  The maximum number of attributes and capacities combined is 32.
518
+ :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.
519
+
520
+ There can only be a single entry per counterSet.
521
+
522
+ 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).
523
+ :param builtins.str node_name: NodeName identifies the node where the device is available.
524
+
525
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
526
+ :param '_core.v1.NodeSelectorArgs' node_selector: NodeSelector defines the nodes where the device is available.
527
+
528
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
529
+ :param Sequence['DeviceTaintArgs'] taints: If specified, these are the driver-defined taints.
530
+
531
+ The maximum number of taints is 4.
532
+
533
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
463
534
  """
535
+ if all_nodes is not None:
536
+ pulumi.set(__self__, "all_nodes", all_nodes)
464
537
  if attributes is not None:
465
538
  pulumi.set(__self__, "attributes", attributes)
466
539
  if capacity is not None:
467
540
  pulumi.set(__self__, "capacity", capacity)
541
+ if consumes_counters is not None:
542
+ pulumi.set(__self__, "consumes_counters", consumes_counters)
543
+ if node_name is not None:
544
+ pulumi.set(__self__, "node_name", node_name)
545
+ if node_selector is not None:
546
+ pulumi.set(__self__, "node_selector", node_selector)
547
+ if taints is not None:
548
+ pulumi.set(__self__, "taints", taints)
549
+
550
+ @property
551
+ @pulumi.getter(name="allNodes")
552
+ def all_nodes(self) -> Optional[builtins.bool]:
553
+ """
554
+ AllNodes indicates that all nodes have access to the device.
555
+
556
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
557
+ """
558
+ return pulumi.get(self, "all_nodes")
468
559
 
469
560
  @property
470
561
  @pulumi.getter
@@ -486,28 +577,139 @@ class BasicDevice(dict):
486
577
  """
487
578
  return pulumi.get(self, "capacity")
488
579
 
580
+ @property
581
+ @pulumi.getter(name="consumesCounters")
582
+ def consumes_counters(self) -> Optional[Sequence['outputs.DeviceCounterConsumption']]:
583
+ """
584
+ ConsumesCounters defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.
585
+
586
+ There can only be a single entry per counterSet.
587
+
588
+ 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).
589
+ """
590
+ return pulumi.get(self, "consumes_counters")
591
+
592
+ @property
593
+ @pulumi.getter(name="nodeName")
594
+ def node_name(self) -> Optional[builtins.str]:
595
+ """
596
+ NodeName identifies the node where the device is available.
597
+
598
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
599
+ """
600
+ return pulumi.get(self, "node_name")
601
+
602
+ @property
603
+ @pulumi.getter(name="nodeSelector")
604
+ def node_selector(self) -> Optional['_core.v1.outputs.NodeSelector']:
605
+ """
606
+ NodeSelector defines the nodes where the device is available.
607
+
608
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
609
+ """
610
+ return pulumi.get(self, "node_selector")
611
+
612
+ @property
613
+ @pulumi.getter
614
+ def taints(self) -> Optional[Sequence['outputs.DeviceTaint']]:
615
+ """
616
+ If specified, these are the driver-defined taints.
617
+
618
+ The maximum number of taints is 4.
619
+
620
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
621
+ """
622
+ return pulumi.get(self, "taints")
623
+
489
624
 
490
625
  @pulumi.output_type
491
626
  class BasicDevicePatch(dict):
492
627
  """
493
628
  BasicDevice defines one device instance.
494
629
  """
630
+ @staticmethod
631
+ def __key_warning(key: str):
632
+ suggest = None
633
+ if key == "allNodes":
634
+ suggest = "all_nodes"
635
+ elif key == "consumesCounters":
636
+ suggest = "consumes_counters"
637
+ elif key == "nodeName":
638
+ suggest = "node_name"
639
+ elif key == "nodeSelector":
640
+ suggest = "node_selector"
641
+
642
+ if suggest:
643
+ pulumi.log.warn(f"Key '{key}' not found in BasicDevicePatch. Access the value via the '{suggest}' property getter instead.")
644
+
645
+ def __getitem__(self, key: str) -> Any:
646
+ BasicDevicePatch.__key_warning(key)
647
+ return super().__getitem__(key)
648
+
649
+ def get(self, key: str, default = None) -> Any:
650
+ BasicDevicePatch.__key_warning(key)
651
+ return super().get(key, default)
652
+
495
653
  def __init__(__self__, *,
654
+ all_nodes: Optional[builtins.bool] = None,
496
655
  attributes: Optional[Mapping[str, 'outputs.DeviceAttribute']] = None,
497
- capacity: Optional[Mapping[str, builtins.str]] = None):
656
+ capacity: Optional[Mapping[str, builtins.str]] = None,
657
+ consumes_counters: Optional[Sequence['outputs.DeviceCounterConsumptionPatch']] = None,
658
+ node_name: Optional[builtins.str] = None,
659
+ node_selector: Optional['_core.v1.outputs.NodeSelectorPatch'] = None,
660
+ taints: Optional[Sequence['outputs.DeviceTaintPatch']] = None):
498
661
  """
499
662
  BasicDevice defines one device instance.
663
+ :param builtins.bool all_nodes: 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.
500
666
  :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.
501
667
 
502
668
  The maximum number of attributes and capacities combined is 32.
503
669
  :param Mapping[str, builtins.str] capacity: Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.
504
670
 
505
671
  The maximum number of attributes and capacities combined is 32.
672
+ :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.
673
+
674
+ There can only be a single entry per counterSet.
675
+
676
+ 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).
677
+ :param builtins.str node_name: NodeName identifies the node where the device is available.
678
+
679
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
680
+ :param '_core.v1.NodeSelectorPatchArgs' node_selector: NodeSelector defines the nodes where the device is available.
681
+
682
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
683
+ :param Sequence['DeviceTaintPatchArgs'] taints: If specified, these are the driver-defined taints.
684
+
685
+ The maximum number of taints is 4.
686
+
687
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
506
688
  """
689
+ if all_nodes is not None:
690
+ pulumi.set(__self__, "all_nodes", all_nodes)
507
691
  if attributes is not None:
508
692
  pulumi.set(__self__, "attributes", attributes)
509
693
  if capacity is not None:
510
694
  pulumi.set(__self__, "capacity", capacity)
695
+ if consumes_counters is not None:
696
+ pulumi.set(__self__, "consumes_counters", consumes_counters)
697
+ if node_name is not None:
698
+ pulumi.set(__self__, "node_name", node_name)
699
+ if node_selector is not None:
700
+ pulumi.set(__self__, "node_selector", node_selector)
701
+ if taints is not None:
702
+ pulumi.set(__self__, "taints", taints)
703
+
704
+ @property
705
+ @pulumi.getter(name="allNodes")
706
+ def all_nodes(self) -> Optional[builtins.bool]:
707
+ """
708
+ AllNodes indicates that all nodes have access to the device.
709
+
710
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
711
+ """
712
+ return pulumi.get(self, "all_nodes")
511
713
 
512
714
  @property
513
715
  @pulumi.getter
@@ -529,6 +731,50 @@ class BasicDevicePatch(dict):
529
731
  """
530
732
  return pulumi.get(self, "capacity")
531
733
 
734
+ @property
735
+ @pulumi.getter(name="consumesCounters")
736
+ def consumes_counters(self) -> Optional[Sequence['outputs.DeviceCounterConsumptionPatch']]:
737
+ """
738
+ ConsumesCounters defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.
739
+
740
+ There can only be a single entry per counterSet.
741
+
742
+ 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).
743
+ """
744
+ return pulumi.get(self, "consumes_counters")
745
+
746
+ @property
747
+ @pulumi.getter(name="nodeName")
748
+ def node_name(self) -> Optional[builtins.str]:
749
+ """
750
+ NodeName identifies the node where the device is available.
751
+
752
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
753
+ """
754
+ return pulumi.get(self, "node_name")
755
+
756
+ @property
757
+ @pulumi.getter(name="nodeSelector")
758
+ def node_selector(self) -> Optional['_core.v1.outputs.NodeSelectorPatch']:
759
+ """
760
+ NodeSelector defines the nodes where the device is available.
761
+
762
+ Must only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.
763
+ """
764
+ return pulumi.get(self, "node_selector")
765
+
766
+ @property
767
+ @pulumi.getter
768
+ def taints(self) -> Optional[Sequence['outputs.DeviceTaintPatch']]:
769
+ """
770
+ If specified, these are the driver-defined taints.
771
+
772
+ The maximum number of taints is 4.
773
+
774
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
775
+ """
776
+ return pulumi.get(self, "taints")
777
+
532
778
 
533
779
  @pulumi.output_type
534
780
  class CELDeviceSelector(dict):
@@ -687,6 +933,120 @@ class CELDeviceSelectorPatch(dict):
687
933
  return pulumi.get(self, "expression")
688
934
 
689
935
 
936
+ @pulumi.output_type
937
+ class Counter(dict):
938
+ """
939
+ Counter describes a quantity associated with a device.
940
+ """
941
+ def __init__(__self__, *,
942
+ value: builtins.str):
943
+ """
944
+ Counter describes a quantity associated with a device.
945
+ :param builtins.str value: Value defines how much of a certain device counter is available.
946
+ """
947
+ pulumi.set(__self__, "value", value)
948
+
949
+ @property
950
+ @pulumi.getter
951
+ def value(self) -> builtins.str:
952
+ """
953
+ Value defines how much of a certain device counter is available.
954
+ """
955
+ return pulumi.get(self, "value")
956
+
957
+
958
+ @pulumi.output_type
959
+ class CounterSet(dict):
960
+ """
961
+ CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.
962
+
963
+ 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.
964
+ """
965
+ def __init__(__self__, *,
966
+ counters: Mapping[str, 'outputs.Counter'],
967
+ name: builtins.str):
968
+ """
969
+ CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.
970
+
971
+ 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.
972
+ :param Mapping[str, 'CounterArgs'] counters: Counters defines the counters that will be consumed by the device. The name of each counter must be unique in that set and must be a DNS label.
973
+
974
+ To ensure this uniqueness, capacities defined by the vendor must be listed without the driver name as domain prefix in their name. All others must be listed with their domain prefix.
975
+
976
+ The maximum number of counters is 32.
977
+ :param builtins.str name: CounterSet is the name of the set from which the counters defined will be consumed.
978
+ """
979
+ pulumi.set(__self__, "counters", counters)
980
+ pulumi.set(__self__, "name", name)
981
+
982
+ @property
983
+ @pulumi.getter
984
+ def counters(self) -> Mapping[str, 'outputs.Counter']:
985
+ """
986
+ Counters defines the counters that will be consumed by the device. The name of each counter must be unique in that set and must be a DNS label.
987
+
988
+ To ensure this uniqueness, capacities defined by the vendor must be listed without the driver name as domain prefix in their name. All others must be listed with their domain prefix.
989
+
990
+ The maximum number of counters is 32.
991
+ """
992
+ return pulumi.get(self, "counters")
993
+
994
+ @property
995
+ @pulumi.getter
996
+ def name(self) -> builtins.str:
997
+ """
998
+ CounterSet is the name of the set from which the counters defined will be consumed.
999
+ """
1000
+ return pulumi.get(self, "name")
1001
+
1002
+
1003
+ @pulumi.output_type
1004
+ class CounterSetPatch(dict):
1005
+ """
1006
+ CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.
1007
+
1008
+ 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.
1009
+ """
1010
+ def __init__(__self__, *,
1011
+ counters: Optional[Mapping[str, 'outputs.Counter']] = None,
1012
+ name: Optional[builtins.str] = None):
1013
+ """
1014
+ CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.
1015
+
1016
+ 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.
1017
+ :param Mapping[str, 'CounterArgs'] counters: Counters defines the counters that will be consumed by the device. The name of each counter must be unique in that set and must be a DNS label.
1018
+
1019
+ To ensure this uniqueness, capacities defined by the vendor must be listed without the driver name as domain prefix in their name. All others must be listed with their domain prefix.
1020
+
1021
+ The maximum number of counters is 32.
1022
+ :param builtins.str name: CounterSet is the name of the set from which the counters defined will be consumed.
1023
+ """
1024
+ if counters is not None:
1025
+ pulumi.set(__self__, "counters", counters)
1026
+ if name is not None:
1027
+ pulumi.set(__self__, "name", name)
1028
+
1029
+ @property
1030
+ @pulumi.getter
1031
+ def counters(self) -> Optional[Mapping[str, 'outputs.Counter']]:
1032
+ """
1033
+ Counters defines the counters that will be consumed by the device. The name of each counter must be unique in that set and must be a DNS label.
1034
+
1035
+ To ensure this uniqueness, capacities defined by the vendor must be listed without the driver name as domain prefix in their name. All others must be listed with their domain prefix.
1036
+
1037
+ The maximum number of counters is 32.
1038
+ """
1039
+ return pulumi.get(self, "counters")
1040
+
1041
+ @property
1042
+ @pulumi.getter
1043
+ def name(self) -> Optional[builtins.str]:
1044
+ """
1045
+ CounterSet is the name of the set from which the counters defined will be consumed.
1046
+ """
1047
+ return pulumi.get(self, "name")
1048
+
1049
+
690
1050
  @pulumi.output_type
691
1051
  class Device(dict):
692
1052
  """
@@ -735,6 +1095,8 @@ class DeviceAllocationConfiguration(dict):
735
1095
  :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.
736
1096
  :param 'OpaqueDeviceConfigurationArgs' opaque: Opaque provides driver-specific configuration parameters.
737
1097
  :param Sequence[builtins.str] requests: Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.
1098
+
1099
+ 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.
738
1100
  """
739
1101
  pulumi.set(__self__, "source", source)
740
1102
  if opaque is not None:
@@ -763,6 +1125,8 @@ class DeviceAllocationConfiguration(dict):
763
1125
  def requests(self) -> Optional[Sequence[builtins.str]]:
764
1126
  """
765
1127
  Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.
1128
+
1129
+ 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.
766
1130
  """
767
1131
  return pulumi.get(self, "requests")
768
1132
 
@@ -780,6 +1144,8 @@ class DeviceAllocationConfigurationPatch(dict):
780
1144
  DeviceAllocationConfiguration gets embedded in an AllocationResult.
781
1145
  :param 'OpaqueDeviceConfigurationPatchArgs' opaque: Opaque provides driver-specific configuration parameters.
782
1146
  :param Sequence[builtins.str] requests: Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.
1147
+
1148
+ 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.
783
1149
  :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.
784
1150
  """
785
1151
  if opaque is not None:
@@ -802,6 +1168,8 @@ class DeviceAllocationConfigurationPatch(dict):
802
1168
  def requests(self) -> Optional[Sequence[builtins.str]]:
803
1169
  """
804
1170
  Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.
1171
+
1172
+ 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.
805
1173
  """
806
1174
  return pulumi.get(self, "requests")
807
1175
 
@@ -1010,6 +1378,8 @@ class DeviceClaimConfiguration(dict):
1010
1378
  DeviceClaimConfiguration is used for configuration parameters in DeviceClaim.
1011
1379
  :param 'OpaqueDeviceConfigurationArgs' opaque: Opaque provides driver-specific configuration parameters.
1012
1380
  :param Sequence[builtins.str] requests: Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.
1381
+
1382
+ 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.
1013
1383
  """
1014
1384
  if opaque is not None:
1015
1385
  pulumi.set(__self__, "opaque", opaque)
@@ -1029,6 +1399,8 @@ class DeviceClaimConfiguration(dict):
1029
1399
  def requests(self) -> Optional[Sequence[builtins.str]]:
1030
1400
  """
1031
1401
  Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.
1402
+
1403
+ 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.
1032
1404
  """
1033
1405
  return pulumi.get(self, "requests")
1034
1406
 
@@ -1045,6 +1417,8 @@ class DeviceClaimConfigurationPatch(dict):
1045
1417
  DeviceClaimConfiguration is used for configuration parameters in DeviceClaim.
1046
1418
  :param 'OpaqueDeviceConfigurationPatchArgs' opaque: Opaque provides driver-specific configuration parameters.
1047
1419
  :param Sequence[builtins.str] requests: Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.
1420
+
1421
+ 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.
1048
1422
  """
1049
1423
  if opaque is not None:
1050
1424
  pulumi.set(__self__, "opaque", opaque)
@@ -1064,6 +1438,8 @@ class DeviceClaimConfigurationPatch(dict):
1064
1438
  def requests(self) -> Optional[Sequence[builtins.str]]:
1065
1439
  """
1066
1440
  Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.
1441
+
1442
+ 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.
1067
1443
  """
1068
1444
  return pulumi.get(self, "requests")
1069
1445
 
@@ -1433,6 +1809,8 @@ class DeviceConstraint(dict):
1433
1809
 
1434
1810
  Must include the domain qualifier.
1435
1811
  :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.
1812
+
1813
+ 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.
1436
1814
  """
1437
1815
  if match_attribute is not None:
1438
1816
  pulumi.set(__self__, "match_attribute", match_attribute)
@@ -1456,6 +1834,8 @@ class DeviceConstraint(dict):
1456
1834
  def requests(self) -> Optional[Sequence[builtins.str]]:
1457
1835
  """
1458
1836
  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.
1837
+
1838
+ 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.
1459
1839
  """
1460
1840
  return pulumi.get(self, "requests")
1461
1841
 
@@ -1493,6 +1873,8 @@ class DeviceConstraintPatch(dict):
1493
1873
 
1494
1874
  Must include the domain qualifier.
1495
1875
  :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.
1876
+
1877
+ 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.
1496
1878
  """
1497
1879
  if match_attribute is not None:
1498
1880
  pulumi.set(__self__, "match_attribute", match_attribute)
@@ -1516,41 +1898,153 @@ class DeviceConstraintPatch(dict):
1516
1898
  def requests(self) -> Optional[Sequence[builtins.str]]:
1517
1899
  """
1518
1900
  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.
1901
+
1902
+ 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.
1519
1903
  """
1520
1904
  return pulumi.get(self, "requests")
1521
1905
 
1522
1906
 
1523
1907
  @pulumi.output_type
1524
- class DevicePatch(dict):
1908
+ class DeviceCounterConsumption(dict):
1525
1909
  """
1526
- Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.
1910
+ DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.
1527
1911
  """
1912
+ @staticmethod
1913
+ def __key_warning(key: str):
1914
+ suggest = None
1915
+ if key == "counterSet":
1916
+ suggest = "counter_set"
1917
+
1918
+ if suggest:
1919
+ pulumi.log.warn(f"Key '{key}' not found in DeviceCounterConsumption. Access the value via the '{suggest}' property getter instead.")
1920
+
1921
+ def __getitem__(self, key: str) -> Any:
1922
+ DeviceCounterConsumption.__key_warning(key)
1923
+ return super().__getitem__(key)
1924
+
1925
+ def get(self, key: str, default = None) -> Any:
1926
+ DeviceCounterConsumption.__key_warning(key)
1927
+ return super().get(key, default)
1928
+
1528
1929
  def __init__(__self__, *,
1529
- basic: Optional['outputs.BasicDevicePatch'] = None,
1530
- name: Optional[builtins.str] = None):
1930
+ counter_set: builtins.str,
1931
+ counters: Mapping[str, 'outputs.Counter']):
1531
1932
  """
1532
- Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.
1533
- :param 'BasicDevicePatchArgs' basic: Basic defines one device instance.
1534
- :param builtins.str name: Name is unique identifier among all devices managed by the driver in the pool. It must be a DNS label.
1933
+ DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.
1934
+ :param builtins.str counter_set: CounterSet defines the set from which the counters defined will be consumed.
1935
+ :param Mapping[str, 'CounterArgs'] counters: Counters defines the Counter that will be consumed by the device.
1936
+
1937
+ 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).
1535
1938
  """
1536
- if basic is not None:
1537
- pulumi.set(__self__, "basic", basic)
1538
- if name is not None:
1539
- pulumi.set(__self__, "name", name)
1939
+ pulumi.set(__self__, "counter_set", counter_set)
1940
+ pulumi.set(__self__, "counters", counters)
1540
1941
 
1541
1942
  @property
1542
- @pulumi.getter
1543
- def basic(self) -> Optional['outputs.BasicDevicePatch']:
1943
+ @pulumi.getter(name="counterSet")
1944
+ def counter_set(self) -> builtins.str:
1544
1945
  """
1545
- Basic defines one device instance.
1946
+ CounterSet defines the set from which the counters defined will be consumed.
1546
1947
  """
1547
- return pulumi.get(self, "basic")
1948
+ return pulumi.get(self, "counter_set")
1548
1949
 
1549
1950
  @property
1550
1951
  @pulumi.getter
1551
- def name(self) -> Optional[builtins.str]:
1952
+ def counters(self) -> Mapping[str, 'outputs.Counter']:
1552
1953
  """
1553
- Name is unique identifier among all devices managed by the driver in the pool. It must be a DNS label.
1954
+ Counters defines the Counter that will be consumed by the device.
1955
+
1956
+ 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).
1957
+ """
1958
+ return pulumi.get(self, "counters")
1959
+
1960
+
1961
+ @pulumi.output_type
1962
+ class DeviceCounterConsumptionPatch(dict):
1963
+ """
1964
+ DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.
1965
+ """
1966
+ @staticmethod
1967
+ def __key_warning(key: str):
1968
+ suggest = None
1969
+ if key == "counterSet":
1970
+ suggest = "counter_set"
1971
+
1972
+ if suggest:
1973
+ pulumi.log.warn(f"Key '{key}' not found in DeviceCounterConsumptionPatch. Access the value via the '{suggest}' property getter instead.")
1974
+
1975
+ def __getitem__(self, key: str) -> Any:
1976
+ DeviceCounterConsumptionPatch.__key_warning(key)
1977
+ return super().__getitem__(key)
1978
+
1979
+ def get(self, key: str, default = None) -> Any:
1980
+ DeviceCounterConsumptionPatch.__key_warning(key)
1981
+ return super().get(key, default)
1982
+
1983
+ def __init__(__self__, *,
1984
+ counter_set: Optional[builtins.str] = None,
1985
+ counters: Optional[Mapping[str, 'outputs.Counter']] = None):
1986
+ """
1987
+ DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.
1988
+ :param builtins.str counter_set: CounterSet defines the set from which the counters defined will be consumed.
1989
+ :param Mapping[str, 'CounterArgs'] counters: Counters defines the Counter that will be consumed by the device.
1990
+
1991
+ 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).
1992
+ """
1993
+ if counter_set is not None:
1994
+ pulumi.set(__self__, "counter_set", counter_set)
1995
+ if counters is not None:
1996
+ pulumi.set(__self__, "counters", counters)
1997
+
1998
+ @property
1999
+ @pulumi.getter(name="counterSet")
2000
+ def counter_set(self) -> Optional[builtins.str]:
2001
+ """
2002
+ CounterSet defines the set from which the counters defined will be consumed.
2003
+ """
2004
+ return pulumi.get(self, "counter_set")
2005
+
2006
+ @property
2007
+ @pulumi.getter
2008
+ def counters(self) -> Optional[Mapping[str, 'outputs.Counter']]:
2009
+ """
2010
+ Counters defines the Counter that will be consumed by the device.
2011
+
2012
+ 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).
2013
+ """
2014
+ return pulumi.get(self, "counters")
2015
+
2016
+
2017
+ @pulumi.output_type
2018
+ class DevicePatch(dict):
2019
+ """
2020
+ Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.
2021
+ """
2022
+ def __init__(__self__, *,
2023
+ basic: Optional['outputs.BasicDevicePatch'] = None,
2024
+ name: Optional[builtins.str] = None):
2025
+ """
2026
+ Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.
2027
+ :param 'BasicDevicePatchArgs' basic: Basic defines one device instance.
2028
+ :param builtins.str name: Name is unique identifier among all devices managed by the driver in the pool. It must be a DNS label.
2029
+ """
2030
+ if basic is not None:
2031
+ pulumi.set(__self__, "basic", basic)
2032
+ if name is not None:
2033
+ pulumi.set(__self__, "name", name)
2034
+
2035
+ @property
2036
+ @pulumi.getter
2037
+ def basic(self) -> Optional['outputs.BasicDevicePatch']:
2038
+ """
2039
+ Basic defines one device instance.
2040
+ """
2041
+ return pulumi.get(self, "basic")
2042
+
2043
+ @property
2044
+ @pulumi.getter
2045
+ def name(self) -> Optional[builtins.str]:
2046
+ """
2047
+ Name is unique identifier among all devices managed by the driver in the pool. It must be a DNS label.
1554
2048
  """
1555
2049
  return pulumi.get(self, "name")
1556
2050
 
@@ -1559,18 +2053,18 @@ class DevicePatch(dict):
1559
2053
  class DeviceRequest(dict):
1560
2054
  """
1561
2055
  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.
1562
-
1563
- 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.
1564
2056
  """
1565
2057
  @staticmethod
1566
2058
  def __key_warning(key: str):
1567
2059
  suggest = None
1568
- if key == "deviceClassName":
1569
- suggest = "device_class_name"
1570
- elif key == "adminAccess":
2060
+ if key == "adminAccess":
1571
2061
  suggest = "admin_access"
1572
2062
  elif key == "allocationMode":
1573
2063
  suggest = "allocation_mode"
2064
+ elif key == "deviceClassName":
2065
+ suggest = "device_class_name"
2066
+ elif key == "firstAvailable":
2067
+ suggest = "first_available"
1574
2068
 
1575
2069
  if suggest:
1576
2070
  pulumi.log.warn(f"Key '{key}' not found in DeviceRequest. Access the value via the '{suggest}' property getter instead.")
@@ -1584,26 +2078,23 @@ class DeviceRequest(dict):
1584
2078
  return super().get(key, default)
1585
2079
 
1586
2080
  def __init__(__self__, *,
1587
- device_class_name: builtins.str,
1588
2081
  name: builtins.str,
1589
2082
  admin_access: Optional[builtins.bool] = None,
1590
2083
  allocation_mode: Optional[builtins.str] = None,
1591
2084
  count: Optional[builtins.int] = None,
1592
- selectors: Optional[Sequence['outputs.DeviceSelector']] = None):
2085
+ device_class_name: Optional[builtins.str] = None,
2086
+ first_available: Optional[Sequence['outputs.DeviceSubRequest']] = None,
2087
+ selectors: Optional[Sequence['outputs.DeviceSelector']] = None,
2088
+ tolerations: Optional[Sequence['outputs.DeviceToleration']] = None):
1593
2089
  """
1594
2090
  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.
1595
-
1596
- 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.
1597
- :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
1598
-
1599
- A class is required. Which classes are available depends on the cluster.
1600
-
1601
- 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.
1602
2091
  :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.
1603
2092
 
1604
2093
  Must be a DNS label.
1605
2094
  :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.
1606
2095
 
2096
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2097
+
1607
2098
  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.
1608
2099
  :param builtins.str allocation_mode: AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
1609
2100
 
@@ -1612,16 +2103,43 @@ class DeviceRequest(dict):
1612
2103
  count field.
1613
2104
 
1614
2105
  - All: This request is for all of the matching devices in a pool.
2106
+ At least one device must exist on the node for the allocation to succeed.
1615
2107
  Allocation will fail if some devices are already allocated,
1616
2108
  unless adminAccess is requested.
1617
2109
 
1618
- 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.
2110
+ 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.
2111
+
2112
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
1619
2113
 
1620
2114
  More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
1621
2115
  :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.
2116
+
2117
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2118
+ :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
2119
+
2120
+ 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.
2121
+
2122
+ 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.
2123
+ :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.
2124
+
2125
+ This field may only be set in the entries of DeviceClaim.Requests.
2126
+
2127
+ 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.
1622
2128
  :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.
2129
+
2130
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2131
+ :param Sequence['DeviceTolerationArgs'] tolerations: If specified, the request's tolerations.
2132
+
2133
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2134
+
2135
+ 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.
2136
+
2137
+ The maximum number of tolerations is 16.
2138
+
2139
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2140
+
2141
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
1623
2142
  """
1624
- pulumi.set(__self__, "device_class_name", device_class_name)
1625
2143
  pulumi.set(__self__, "name", name)
1626
2144
  if admin_access is not None:
1627
2145
  pulumi.set(__self__, "admin_access", admin_access)
@@ -1629,20 +2147,14 @@ class DeviceRequest(dict):
1629
2147
  pulumi.set(__self__, "allocation_mode", allocation_mode)
1630
2148
  if count is not None:
1631
2149
  pulumi.set(__self__, "count", count)
2150
+ if device_class_name is not None:
2151
+ pulumi.set(__self__, "device_class_name", device_class_name)
2152
+ if first_available is not None:
2153
+ pulumi.set(__self__, "first_available", first_available)
1632
2154
  if selectors is not None:
1633
2155
  pulumi.set(__self__, "selectors", selectors)
1634
-
1635
- @property
1636
- @pulumi.getter(name="deviceClassName")
1637
- def device_class_name(self) -> builtins.str:
1638
- """
1639
- DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
1640
-
1641
- A class is required. Which classes are available depends on the cluster.
1642
-
1643
- 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.
1644
- """
1645
- return pulumi.get(self, "device_class_name")
2156
+ if tolerations is not None:
2157
+ pulumi.set(__self__, "tolerations", tolerations)
1646
2158
 
1647
2159
  @property
1648
2160
  @pulumi.getter
@@ -1660,6 +2172,8 @@ class DeviceRequest(dict):
1660
2172
  """
1661
2173
  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.
1662
2174
 
2175
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2176
+
1663
2177
  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.
1664
2178
  """
1665
2179
  return pulumi.get(self, "admin_access")
@@ -1675,10 +2189,13 @@ class DeviceRequest(dict):
1675
2189
  count field.
1676
2190
 
1677
2191
  - All: This request is for all of the matching devices in a pool.
2192
+ At least one device must exist on the node for the allocation to succeed.
1678
2193
  Allocation will fail if some devices are already allocated,
1679
2194
  unless adminAccess is requested.
1680
2195
 
1681
- 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.
2196
+ 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.
2197
+
2198
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
1682
2199
 
1683
2200
  More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
1684
2201
  """
@@ -1689,17 +2206,63 @@ class DeviceRequest(dict):
1689
2206
  def count(self) -> Optional[builtins.int]:
1690
2207
  """
1691
2208
  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.
2209
+
2210
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
1692
2211
  """
1693
2212
  return pulumi.get(self, "count")
1694
2213
 
2214
+ @property
2215
+ @pulumi.getter(name="deviceClassName")
2216
+ def device_class_name(self) -> Optional[builtins.str]:
2217
+ """
2218
+ DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
2219
+
2220
+ 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.
2221
+
2222
+ 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.
2223
+ """
2224
+ return pulumi.get(self, "device_class_name")
2225
+
2226
+ @property
2227
+ @pulumi.getter(name="firstAvailable")
2228
+ def first_available(self) -> Optional[Sequence['outputs.DeviceSubRequest']]:
2229
+ """
2230
+ 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.
2231
+
2232
+ This field may only be set in the entries of DeviceClaim.Requests.
2233
+
2234
+ 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.
2235
+ """
2236
+ return pulumi.get(self, "first_available")
2237
+
1695
2238
  @property
1696
2239
  @pulumi.getter
1697
2240
  def selectors(self) -> Optional[Sequence['outputs.DeviceSelector']]:
1698
2241
  """
1699
2242
  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.
2243
+
2244
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
1700
2245
  """
1701
2246
  return pulumi.get(self, "selectors")
1702
2247
 
2248
+ @property
2249
+ @pulumi.getter
2250
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceToleration']]:
2251
+ """
2252
+ If specified, the request's tolerations.
2253
+
2254
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2255
+
2256
+ 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.
2257
+
2258
+ The maximum number of tolerations is 16.
2259
+
2260
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2261
+
2262
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2263
+ """
2264
+ return pulumi.get(self, "tolerations")
2265
+
1703
2266
 
1704
2267
  @pulumi.output_type
1705
2268
  class DeviceRequestAllocationResult(dict):
@@ -1728,7 +2291,8 @@ class DeviceRequestAllocationResult(dict):
1728
2291
  driver: builtins.str,
1729
2292
  pool: builtins.str,
1730
2293
  request: builtins.str,
1731
- admin_access: Optional[builtins.bool] = None):
2294
+ admin_access: Optional[builtins.bool] = None,
2295
+ tolerations: Optional[Sequence['outputs.DeviceToleration']] = None):
1732
2296
  """
1733
2297
  DeviceRequestAllocationResult contains the allocation result for one request.
1734
2298
  :param builtins.str device: Device references one device instance via its name in the driver's resource pool. It must be a DNS label.
@@ -1738,10 +2302,17 @@ class DeviceRequestAllocationResult(dict):
1738
2302
  :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>`).
1739
2303
 
1740
2304
  Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
1741
- :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.
2305
+ :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>.
2306
+
2307
+ Multiple devices may have been allocated per request.
1742
2308
  :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.
1743
2309
 
1744
2310
  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.
2311
+ :param Sequence['DeviceTolerationArgs'] tolerations: A copy of all tolerations specified in the request at the time when the device got allocated.
2312
+
2313
+ The maximum number of tolerations is 16.
2314
+
2315
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
1745
2316
  """
1746
2317
  pulumi.set(__self__, "device", device)
1747
2318
  pulumi.set(__self__, "driver", driver)
@@ -1749,6 +2320,8 @@ class DeviceRequestAllocationResult(dict):
1749
2320
  pulumi.set(__self__, "request", request)
1750
2321
  if admin_access is not None:
1751
2322
  pulumi.set(__self__, "admin_access", admin_access)
2323
+ if tolerations is not None:
2324
+ pulumi.set(__self__, "tolerations", tolerations)
1752
2325
 
1753
2326
  @property
1754
2327
  @pulumi.getter
@@ -1770,111 +2343,1249 @@ class DeviceRequestAllocationResult(dict):
1770
2343
 
1771
2344
  @property
1772
2345
  @pulumi.getter
1773
- def pool(self) -> builtins.str:
2346
+ def pool(self) -> builtins.str:
2347
+ """
2348
+ This name together with the driver name and the device name field identify which device was allocated (`<driver name>/<pool name>/<device name>`).
2349
+
2350
+ Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
2351
+ """
2352
+ return pulumi.get(self, "pool")
2353
+
2354
+ @property
2355
+ @pulumi.getter
2356
+ def request(self) -> builtins.str:
2357
+ """
2358
+ 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>.
2359
+
2360
+ Multiple devices may have been allocated per request.
2361
+ """
2362
+ return pulumi.get(self, "request")
2363
+
2364
+ @property
2365
+ @pulumi.getter(name="adminAccess")
2366
+ def admin_access(self) -> Optional[builtins.bool]:
2367
+ """
2368
+ AdminAccess indicates that this device was allocated for administrative access. See the corresponding request field for a definition of mode.
2369
+
2370
+ 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.
2371
+ """
2372
+ return pulumi.get(self, "admin_access")
2373
+
2374
+ @property
2375
+ @pulumi.getter
2376
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceToleration']]:
2377
+ """
2378
+ A copy of all tolerations specified in the request at the time when the device got allocated.
2379
+
2380
+ The maximum number of tolerations is 16.
2381
+
2382
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2383
+ """
2384
+ return pulumi.get(self, "tolerations")
2385
+
2386
+
2387
+ @pulumi.output_type
2388
+ class DeviceRequestAllocationResultPatch(dict):
2389
+ """
2390
+ DeviceRequestAllocationResult contains the allocation result for one request.
2391
+ """
2392
+ @staticmethod
2393
+ def __key_warning(key: str):
2394
+ suggest = None
2395
+ if key == "adminAccess":
2396
+ suggest = "admin_access"
2397
+
2398
+ if suggest:
2399
+ pulumi.log.warn(f"Key '{key}' not found in DeviceRequestAllocationResultPatch. Access the value via the '{suggest}' property getter instead.")
2400
+
2401
+ def __getitem__(self, key: str) -> Any:
2402
+ DeviceRequestAllocationResultPatch.__key_warning(key)
2403
+ return super().__getitem__(key)
2404
+
2405
+ def get(self, key: str, default = None) -> Any:
2406
+ DeviceRequestAllocationResultPatch.__key_warning(key)
2407
+ return super().get(key, default)
2408
+
2409
+ def __init__(__self__, *,
2410
+ admin_access: Optional[builtins.bool] = None,
2411
+ device: Optional[builtins.str] = None,
2412
+ driver: Optional[builtins.str] = None,
2413
+ pool: Optional[builtins.str] = None,
2414
+ request: Optional[builtins.str] = None,
2415
+ tolerations: Optional[Sequence['outputs.DeviceTolerationPatch']] = None):
2416
+ """
2417
+ DeviceRequestAllocationResult contains the allocation result for one request.
2418
+ :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.
2419
+
2420
+ 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.
2421
+ :param builtins.str device: Device references one device instance via its name in the driver's resource pool. It must be a DNS label.
2422
+ :param builtins.str driver: Driver specifies the name of the DRA driver whose kubelet plugin should be invoked to process the allocation once the claim is needed on a node.
2423
+
2424
+ Must be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver.
2425
+ :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>`).
2426
+
2427
+ Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
2428
+ :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>.
2429
+
2430
+ Multiple devices may have been allocated per request.
2431
+ :param Sequence['DeviceTolerationPatchArgs'] tolerations: A copy of all tolerations specified in the request at the time when the device got allocated.
2432
+
2433
+ The maximum number of tolerations is 16.
2434
+
2435
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2436
+ """
2437
+ if admin_access is not None:
2438
+ pulumi.set(__self__, "admin_access", admin_access)
2439
+ if device is not None:
2440
+ pulumi.set(__self__, "device", device)
2441
+ if driver is not None:
2442
+ pulumi.set(__self__, "driver", driver)
2443
+ if pool is not None:
2444
+ pulumi.set(__self__, "pool", pool)
2445
+ if request is not None:
2446
+ pulumi.set(__self__, "request", request)
2447
+ if tolerations is not None:
2448
+ pulumi.set(__self__, "tolerations", tolerations)
2449
+
2450
+ @property
2451
+ @pulumi.getter(name="adminAccess")
2452
+ def admin_access(self) -> Optional[builtins.bool]:
2453
+ """
2454
+ AdminAccess indicates that this device was allocated for administrative access. See the corresponding request field for a definition of mode.
2455
+
2456
+ 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.
2457
+ """
2458
+ return pulumi.get(self, "admin_access")
2459
+
2460
+ @property
2461
+ @pulumi.getter
2462
+ def device(self) -> Optional[builtins.str]:
2463
+ """
2464
+ Device references one device instance via its name in the driver's resource pool. It must be a DNS label.
2465
+ """
2466
+ return pulumi.get(self, "device")
2467
+
2468
+ @property
2469
+ @pulumi.getter
2470
+ def driver(self) -> Optional[builtins.str]:
2471
+ """
2472
+ Driver specifies the name of the DRA driver whose kubelet plugin should be invoked to process the allocation once the claim is needed on a node.
2473
+
2474
+ Must be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver.
2475
+ """
2476
+ return pulumi.get(self, "driver")
2477
+
2478
+ @property
2479
+ @pulumi.getter
2480
+ def pool(self) -> Optional[builtins.str]:
2481
+ """
2482
+ This name together with the driver name and the device name field identify which device was allocated (`<driver name>/<pool name>/<device name>`).
2483
+
2484
+ Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
2485
+ """
2486
+ return pulumi.get(self, "pool")
2487
+
2488
+ @property
2489
+ @pulumi.getter
2490
+ def request(self) -> Optional[builtins.str]:
2491
+ """
2492
+ 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>.
2493
+
2494
+ Multiple devices may have been allocated per request.
2495
+ """
2496
+ return pulumi.get(self, "request")
2497
+
2498
+ @property
2499
+ @pulumi.getter
2500
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceTolerationPatch']]:
2501
+ """
2502
+ A copy of all tolerations specified in the request at the time when the device got allocated.
2503
+
2504
+ The maximum number of tolerations is 16.
2505
+
2506
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2507
+ """
2508
+ return pulumi.get(self, "tolerations")
2509
+
2510
+
2511
+ @pulumi.output_type
2512
+ class DeviceRequestPatch(dict):
2513
+ """
2514
+ 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.
2515
+ """
2516
+ @staticmethod
2517
+ def __key_warning(key: str):
2518
+ suggest = None
2519
+ if key == "adminAccess":
2520
+ suggest = "admin_access"
2521
+ elif key == "allocationMode":
2522
+ suggest = "allocation_mode"
2523
+ elif key == "deviceClassName":
2524
+ suggest = "device_class_name"
2525
+ elif key == "firstAvailable":
2526
+ suggest = "first_available"
2527
+
2528
+ if suggest:
2529
+ pulumi.log.warn(f"Key '{key}' not found in DeviceRequestPatch. Access the value via the '{suggest}' property getter instead.")
2530
+
2531
+ def __getitem__(self, key: str) -> Any:
2532
+ DeviceRequestPatch.__key_warning(key)
2533
+ return super().__getitem__(key)
2534
+
2535
+ def get(self, key: str, default = None) -> Any:
2536
+ DeviceRequestPatch.__key_warning(key)
2537
+ return super().get(key, default)
2538
+
2539
+ def __init__(__self__, *,
2540
+ admin_access: Optional[builtins.bool] = None,
2541
+ allocation_mode: Optional[builtins.str] = None,
2542
+ count: Optional[builtins.int] = None,
2543
+ device_class_name: Optional[builtins.str] = None,
2544
+ first_available: Optional[Sequence['outputs.DeviceSubRequestPatch']] = None,
2545
+ name: Optional[builtins.str] = None,
2546
+ selectors: Optional[Sequence['outputs.DeviceSelectorPatch']] = None,
2547
+ tolerations: Optional[Sequence['outputs.DeviceTolerationPatch']] = None):
2548
+ """
2549
+ 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.
2550
+ :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.
2551
+
2552
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2553
+
2554
+ 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.
2555
+ :param builtins.str allocation_mode: AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
2556
+
2557
+ - ExactCount: This request is for a specific number of devices.
2558
+ This is the default. The exact number is provided in the
2559
+ count field.
2560
+
2561
+ - All: This request is for all of the matching devices in a pool.
2562
+ At least one device must exist on the node for the allocation to succeed.
2563
+ Allocation will fail if some devices are already allocated,
2564
+ unless adminAccess is requested.
2565
+
2566
+ 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.
2567
+
2568
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2569
+
2570
+ More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
2571
+ :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.
2572
+
2573
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2574
+ :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
2575
+
2576
+ 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.
2577
+
2578
+ 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.
2579
+ :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.
2580
+
2581
+ This field may only be set in the entries of DeviceClaim.Requests.
2582
+
2583
+ 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.
2584
+ :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.
2585
+
2586
+ Must be a DNS label.
2587
+ :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.
2588
+
2589
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2590
+ :param Sequence['DeviceTolerationPatchArgs'] tolerations: If specified, the request's tolerations.
2591
+
2592
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2593
+
2594
+ 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.
2595
+
2596
+ The maximum number of tolerations is 16.
2597
+
2598
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2599
+
2600
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2601
+ """
2602
+ if admin_access is not None:
2603
+ pulumi.set(__self__, "admin_access", admin_access)
2604
+ if allocation_mode is not None:
2605
+ pulumi.set(__self__, "allocation_mode", allocation_mode)
2606
+ if count is not None:
2607
+ pulumi.set(__self__, "count", count)
2608
+ if device_class_name is not None:
2609
+ pulumi.set(__self__, "device_class_name", device_class_name)
2610
+ if first_available is not None:
2611
+ pulumi.set(__self__, "first_available", first_available)
2612
+ if name is not None:
2613
+ pulumi.set(__self__, "name", name)
2614
+ if selectors is not None:
2615
+ pulumi.set(__self__, "selectors", selectors)
2616
+ if tolerations is not None:
2617
+ pulumi.set(__self__, "tolerations", tolerations)
2618
+
2619
+ @property
2620
+ @pulumi.getter(name="adminAccess")
2621
+ def admin_access(self) -> Optional[builtins.bool]:
2622
+ """
2623
+ 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.
2624
+
2625
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2626
+
2627
+ 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.
2628
+ """
2629
+ return pulumi.get(self, "admin_access")
2630
+
2631
+ @property
2632
+ @pulumi.getter(name="allocationMode")
2633
+ def allocation_mode(self) -> Optional[builtins.str]:
2634
+ """
2635
+ AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
2636
+
2637
+ - ExactCount: This request is for a specific number of devices.
2638
+ This is the default. The exact number is provided in the
2639
+ count field.
2640
+
2641
+ - All: This request is for all of the matching devices in a pool.
2642
+ At least one device must exist on the node for the allocation to succeed.
2643
+ Allocation will fail if some devices are already allocated,
2644
+ unless adminAccess is requested.
2645
+
2646
+ 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.
2647
+
2648
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2649
+
2650
+ More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
2651
+ """
2652
+ return pulumi.get(self, "allocation_mode")
2653
+
2654
+ @property
2655
+ @pulumi.getter
2656
+ def count(self) -> Optional[builtins.int]:
2657
+ """
2658
+ 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.
2659
+
2660
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2661
+ """
2662
+ return pulumi.get(self, "count")
2663
+
2664
+ @property
2665
+ @pulumi.getter(name="deviceClassName")
2666
+ def device_class_name(self) -> Optional[builtins.str]:
2667
+ """
2668
+ DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
2669
+
2670
+ 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.
2671
+
2672
+ 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.
2673
+ """
2674
+ return pulumi.get(self, "device_class_name")
2675
+
2676
+ @property
2677
+ @pulumi.getter(name="firstAvailable")
2678
+ def first_available(self) -> Optional[Sequence['outputs.DeviceSubRequestPatch']]:
2679
+ """
2680
+ 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.
2681
+
2682
+ This field may only be set in the entries of DeviceClaim.Requests.
2683
+
2684
+ 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.
2685
+ """
2686
+ return pulumi.get(self, "first_available")
2687
+
2688
+ @property
2689
+ @pulumi.getter
2690
+ def name(self) -> Optional[builtins.str]:
2691
+ """
2692
+ Name can be used to reference this request in a pod.spec.containers[].resources.claims entry and in a constraint of the claim.
2693
+
2694
+ Must be a DNS label.
2695
+ """
2696
+ return pulumi.get(self, "name")
2697
+
2698
+ @property
2699
+ @pulumi.getter
2700
+ def selectors(self) -> Optional[Sequence['outputs.DeviceSelectorPatch']]:
2701
+ """
2702
+ 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.
2703
+
2704
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2705
+ """
2706
+ return pulumi.get(self, "selectors")
2707
+
2708
+ @property
2709
+ @pulumi.getter
2710
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceTolerationPatch']]:
2711
+ """
2712
+ If specified, the request's tolerations.
2713
+
2714
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2715
+
2716
+ 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.
2717
+
2718
+ The maximum number of tolerations is 16.
2719
+
2720
+ This field can only be set when deviceClassName is set and no subrequests are specified in the firstAvailable list.
2721
+
2722
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2723
+ """
2724
+ return pulumi.get(self, "tolerations")
2725
+
2726
+
2727
+ @pulumi.output_type
2728
+ class DeviceSelector(dict):
2729
+ """
2730
+ DeviceSelector must have exactly one field set.
2731
+ """
2732
+ def __init__(__self__, *,
2733
+ cel: Optional['outputs.CELDeviceSelector'] = None):
2734
+ """
2735
+ DeviceSelector must have exactly one field set.
2736
+ :param 'CELDeviceSelectorArgs' cel: CEL contains a CEL expression for selecting a device.
2737
+ """
2738
+ if cel is not None:
2739
+ pulumi.set(__self__, "cel", cel)
2740
+
2741
+ @property
2742
+ @pulumi.getter
2743
+ def cel(self) -> Optional['outputs.CELDeviceSelector']:
2744
+ """
2745
+ CEL contains a CEL expression for selecting a device.
2746
+ """
2747
+ return pulumi.get(self, "cel")
2748
+
2749
+
2750
+ @pulumi.output_type
2751
+ class DeviceSelectorPatch(dict):
2752
+ """
2753
+ DeviceSelector must have exactly one field set.
2754
+ """
2755
+ def __init__(__self__, *,
2756
+ cel: Optional['outputs.CELDeviceSelectorPatch'] = None):
2757
+ """
2758
+ DeviceSelector must have exactly one field set.
2759
+ :param 'CELDeviceSelectorPatchArgs' cel: CEL contains a CEL expression for selecting a device.
2760
+ """
2761
+ if cel is not None:
2762
+ pulumi.set(__self__, "cel", cel)
2763
+
2764
+ @property
2765
+ @pulumi.getter
2766
+ def cel(self) -> Optional['outputs.CELDeviceSelectorPatch']:
2767
+ """
2768
+ CEL contains a CEL expression for selecting a device.
2769
+ """
2770
+ return pulumi.get(self, "cel")
2771
+
2772
+
2773
+ @pulumi.output_type
2774
+ class DeviceSubRequest(dict):
2775
+ """
2776
+ 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.
2777
+
2778
+ 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.
2779
+ """
2780
+ @staticmethod
2781
+ def __key_warning(key: str):
2782
+ suggest = None
2783
+ if key == "deviceClassName":
2784
+ suggest = "device_class_name"
2785
+ elif key == "allocationMode":
2786
+ suggest = "allocation_mode"
2787
+
2788
+ if suggest:
2789
+ pulumi.log.warn(f"Key '{key}' not found in DeviceSubRequest. Access the value via the '{suggest}' property getter instead.")
2790
+
2791
+ def __getitem__(self, key: str) -> Any:
2792
+ DeviceSubRequest.__key_warning(key)
2793
+ return super().__getitem__(key)
2794
+
2795
+ def get(self, key: str, default = None) -> Any:
2796
+ DeviceSubRequest.__key_warning(key)
2797
+ return super().get(key, default)
2798
+
2799
+ def __init__(__self__, *,
2800
+ device_class_name: builtins.str,
2801
+ name: builtins.str,
2802
+ allocation_mode: Optional[builtins.str] = None,
2803
+ count: Optional[builtins.int] = None,
2804
+ selectors: Optional[Sequence['outputs.DeviceSelector']] = None,
2805
+ tolerations: Optional[Sequence['outputs.DeviceToleration']] = None):
2806
+ """
2807
+ 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.
2808
+
2809
+ 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.
2810
+ :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.
2811
+
2812
+ A class is required. Which classes are available depends on the cluster.
2813
+
2814
+ 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.
2815
+ :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>.
2816
+
2817
+ Must be a DNS label.
2818
+ :param builtins.str allocation_mode: AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
2819
+
2820
+ - ExactCount: This request is for a specific number of devices.
2821
+ This is the default. The exact number is provided in the
2822
+ count field.
2823
+
2824
+ - All: This request is for all of the matching devices in a pool.
2825
+ Allocation will fail if some devices are already allocated,
2826
+ unless adminAccess is requested.
2827
+
2828
+ 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.
2829
+
2830
+ More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
2831
+ :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.
2832
+ :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.
2833
+ :param Sequence['DeviceTolerationArgs'] tolerations: If specified, the request's tolerations.
2834
+
2835
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2836
+
2837
+ 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.
2838
+
2839
+ The maximum number of tolerations is 16.
2840
+
2841
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2842
+ """
2843
+ pulumi.set(__self__, "device_class_name", device_class_name)
2844
+ pulumi.set(__self__, "name", name)
2845
+ if allocation_mode is not None:
2846
+ pulumi.set(__self__, "allocation_mode", allocation_mode)
2847
+ if count is not None:
2848
+ pulumi.set(__self__, "count", count)
2849
+ if selectors is not None:
2850
+ pulumi.set(__self__, "selectors", selectors)
2851
+ if tolerations is not None:
2852
+ pulumi.set(__self__, "tolerations", tolerations)
2853
+
2854
+ @property
2855
+ @pulumi.getter(name="deviceClassName")
2856
+ def device_class_name(self) -> builtins.str:
2857
+ """
2858
+ DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.
2859
+
2860
+ A class is required. Which classes are available depends on the cluster.
2861
+
2862
+ 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.
2863
+ """
2864
+ return pulumi.get(self, "device_class_name")
2865
+
2866
+ @property
2867
+ @pulumi.getter
2868
+ def name(self) -> builtins.str:
2869
+ """
2870
+ 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>.
2871
+
2872
+ Must be a DNS label.
2873
+ """
2874
+ return pulumi.get(self, "name")
2875
+
2876
+ @property
2877
+ @pulumi.getter(name="allocationMode")
2878
+ def allocation_mode(self) -> Optional[builtins.str]:
2879
+ """
2880
+ AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
2881
+
2882
+ - ExactCount: This request is for a specific number of devices.
2883
+ This is the default. The exact number is provided in the
2884
+ count field.
2885
+
2886
+ - All: This request is for all of the matching devices in a pool.
2887
+ Allocation will fail if some devices are already allocated,
2888
+ unless adminAccess is requested.
2889
+
2890
+ 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.
2891
+
2892
+ More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
2893
+ """
2894
+ return pulumi.get(self, "allocation_mode")
2895
+
2896
+ @property
2897
+ @pulumi.getter
2898
+ def count(self) -> Optional[builtins.int]:
2899
+ """
2900
+ 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.
2901
+ """
2902
+ return pulumi.get(self, "count")
2903
+
2904
+ @property
2905
+ @pulumi.getter
2906
+ def selectors(self) -> Optional[Sequence['outputs.DeviceSelector']]:
2907
+ """
2908
+ 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.
2909
+ """
2910
+ return pulumi.get(self, "selectors")
2911
+
2912
+ @property
2913
+ @pulumi.getter
2914
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceToleration']]:
2915
+ """
2916
+ If specified, the request's tolerations.
2917
+
2918
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2919
+
2920
+ 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.
2921
+
2922
+ The maximum number of tolerations is 16.
2923
+
2924
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2925
+ """
2926
+ return pulumi.get(self, "tolerations")
2927
+
2928
+
2929
+ @pulumi.output_type
2930
+ class DeviceSubRequestPatch(dict):
2931
+ """
2932
+ 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.
2933
+
2934
+ 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.
2935
+ """
2936
+ @staticmethod
2937
+ def __key_warning(key: str):
2938
+ suggest = None
2939
+ if key == "allocationMode":
2940
+ suggest = "allocation_mode"
2941
+ elif key == "deviceClassName":
2942
+ suggest = "device_class_name"
2943
+
2944
+ if suggest:
2945
+ pulumi.log.warn(f"Key '{key}' not found in DeviceSubRequestPatch. Access the value via the '{suggest}' property getter instead.")
2946
+
2947
+ def __getitem__(self, key: str) -> Any:
2948
+ DeviceSubRequestPatch.__key_warning(key)
2949
+ return super().__getitem__(key)
2950
+
2951
+ def get(self, key: str, default = None) -> Any:
2952
+ DeviceSubRequestPatch.__key_warning(key)
2953
+ return super().get(key, default)
2954
+
2955
+ def __init__(__self__, *,
2956
+ allocation_mode: Optional[builtins.str] = None,
2957
+ count: Optional[builtins.int] = None,
2958
+ device_class_name: Optional[builtins.str] = None,
2959
+ name: Optional[builtins.str] = None,
2960
+ selectors: Optional[Sequence['outputs.DeviceSelectorPatch']] = None,
2961
+ tolerations: Optional[Sequence['outputs.DeviceTolerationPatch']] = None):
2962
+ """
2963
+ 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.
2964
+
2965
+ 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.
2966
+ :param builtins.str allocation_mode: AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
2967
+
2968
+ - ExactCount: This request is for a specific number of devices.
2969
+ This is the default. The exact number is provided in the
2970
+ count field.
2971
+
2972
+ - All: This request is for all of the matching devices in a pool.
2973
+ Allocation will fail if some devices are already allocated,
2974
+ unless adminAccess is requested.
2975
+
2976
+ 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.
2977
+
2978
+ More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
2979
+ :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.
2980
+ :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.
2981
+
2982
+ A class is required. Which classes are available depends on the cluster.
2983
+
2984
+ 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.
2985
+ :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>.
2986
+
2987
+ Must be a DNS label.
2988
+ :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.
2989
+ :param Sequence['DeviceTolerationPatchArgs'] tolerations: If specified, the request's tolerations.
2990
+
2991
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
2992
+
2993
+ 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.
2994
+
2995
+ The maximum number of tolerations is 16.
2996
+
2997
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
2998
+ """
2999
+ if allocation_mode is not None:
3000
+ pulumi.set(__self__, "allocation_mode", allocation_mode)
3001
+ if count is not None:
3002
+ pulumi.set(__self__, "count", count)
3003
+ if device_class_name is not None:
3004
+ pulumi.set(__self__, "device_class_name", device_class_name)
3005
+ if name is not None:
3006
+ pulumi.set(__self__, "name", name)
3007
+ if selectors is not None:
3008
+ pulumi.set(__self__, "selectors", selectors)
3009
+ if tolerations is not None:
3010
+ pulumi.set(__self__, "tolerations", tolerations)
3011
+
3012
+ @property
3013
+ @pulumi.getter(name="allocationMode")
3014
+ def allocation_mode(self) -> Optional[builtins.str]:
3015
+ """
3016
+ AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
3017
+
3018
+ - ExactCount: This request is for a specific number of devices.
3019
+ This is the default. The exact number is provided in the
3020
+ count field.
3021
+
3022
+ - All: This request is for all of the matching devices in a pool.
3023
+ Allocation will fail if some devices are already allocated,
3024
+ unless adminAccess is requested.
3025
+
3026
+ 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.
3027
+
3028
+ More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
3029
+ """
3030
+ return pulumi.get(self, "allocation_mode")
3031
+
3032
+ @property
3033
+ @pulumi.getter
3034
+ def count(self) -> Optional[builtins.int]:
3035
+ """
3036
+ 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.
3037
+ """
3038
+ return pulumi.get(self, "count")
3039
+
3040
+ @property
3041
+ @pulumi.getter(name="deviceClassName")
3042
+ def device_class_name(self) -> Optional[builtins.str]:
3043
+ """
3044
+ DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.
3045
+
3046
+ A class is required. Which classes are available depends on the cluster.
3047
+
3048
+ 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.
3049
+ """
3050
+ return pulumi.get(self, "device_class_name")
3051
+
3052
+ @property
3053
+ @pulumi.getter
3054
+ def name(self) -> Optional[builtins.str]:
3055
+ """
3056
+ 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>.
3057
+
3058
+ Must be a DNS label.
3059
+ """
3060
+ return pulumi.get(self, "name")
3061
+
3062
+ @property
3063
+ @pulumi.getter
3064
+ def selectors(self) -> Optional[Sequence['outputs.DeviceSelectorPatch']]:
3065
+ """
3066
+ 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.
3067
+ """
3068
+ return pulumi.get(self, "selectors")
3069
+
3070
+ @property
3071
+ @pulumi.getter
3072
+ def tolerations(self) -> Optional[Sequence['outputs.DeviceTolerationPatch']]:
3073
+ """
3074
+ If specified, the request's tolerations.
3075
+
3076
+ Tolerations for NoSchedule are required to allocate a device which has a taint with that effect. The same applies to NoExecute.
3077
+
3078
+ 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.
3079
+
3080
+ The maximum number of tolerations is 16.
3081
+
3082
+ This is an alpha field and requires enabling the DRADeviceTaints feature gate.
3083
+ """
3084
+ return pulumi.get(self, "tolerations")
3085
+
3086
+
3087
+ @pulumi.output_type
3088
+ class DeviceTaint(dict):
3089
+ """
3090
+ 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.
3091
+ """
3092
+ @staticmethod
3093
+ def __key_warning(key: str):
3094
+ suggest = None
3095
+ if key == "timeAdded":
3096
+ suggest = "time_added"
3097
+
3098
+ if suggest:
3099
+ pulumi.log.warn(f"Key '{key}' not found in DeviceTaint. Access the value via the '{suggest}' property getter instead.")
3100
+
3101
+ def __getitem__(self, key: str) -> Any:
3102
+ DeviceTaint.__key_warning(key)
3103
+ return super().__getitem__(key)
3104
+
3105
+ def get(self, key: str, default = None) -> Any:
3106
+ DeviceTaint.__key_warning(key)
3107
+ return super().get(key, default)
3108
+
3109
+ def __init__(__self__, *,
3110
+ effect: builtins.str,
3111
+ key: builtins.str,
3112
+ time_added: Optional[builtins.str] = None,
3113
+ value: Optional[builtins.str] = None):
3114
+ """
3115
+ 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.
3116
+ :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.
3117
+ :param builtins.str key: The taint key to be applied to a device. Must be a label name.
3118
+ :param builtins.str time_added: TimeAdded represents the time at which the taint was added. Added automatically during create or update if not set.
3119
+ :param builtins.str value: The taint value corresponding to the taint key. Must be a label value.
3120
+ """
3121
+ pulumi.set(__self__, "effect", effect)
3122
+ pulumi.set(__self__, "key", key)
3123
+ if time_added is not None:
3124
+ pulumi.set(__self__, "time_added", time_added)
3125
+ if value is not None:
3126
+ pulumi.set(__self__, "value", value)
3127
+
3128
+ @property
3129
+ @pulumi.getter
3130
+ def effect(self) -> builtins.str:
3131
+ """
3132
+ 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.
3133
+ """
3134
+ return pulumi.get(self, "effect")
3135
+
3136
+ @property
3137
+ @pulumi.getter
3138
+ def key(self) -> builtins.str:
3139
+ """
3140
+ The taint key to be applied to a device. Must be a label name.
3141
+ """
3142
+ return pulumi.get(self, "key")
3143
+
3144
+ @property
3145
+ @pulumi.getter(name="timeAdded")
3146
+ def time_added(self) -> Optional[builtins.str]:
3147
+ """
3148
+ TimeAdded represents the time at which the taint was added. Added automatically during create or update if not set.
3149
+ """
3150
+ return pulumi.get(self, "time_added")
3151
+
3152
+ @property
3153
+ @pulumi.getter
3154
+ def value(self) -> Optional[builtins.str]:
3155
+ """
3156
+ The taint value corresponding to the taint key. Must be a label value.
3157
+ """
3158
+ return pulumi.get(self, "value")
3159
+
3160
+
3161
+ @pulumi.output_type
3162
+ class DeviceTaintPatch(dict):
3163
+ """
3164
+ 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.
3165
+ """
3166
+ @staticmethod
3167
+ def __key_warning(key: str):
3168
+ suggest = None
3169
+ if key == "timeAdded":
3170
+ suggest = "time_added"
3171
+
3172
+ if suggest:
3173
+ pulumi.log.warn(f"Key '{key}' not found in DeviceTaintPatch. Access the value via the '{suggest}' property getter instead.")
3174
+
3175
+ def __getitem__(self, key: str) -> Any:
3176
+ DeviceTaintPatch.__key_warning(key)
3177
+ return super().__getitem__(key)
3178
+
3179
+ def get(self, key: str, default = None) -> Any:
3180
+ DeviceTaintPatch.__key_warning(key)
3181
+ return super().get(key, default)
3182
+
3183
+ def __init__(__self__, *,
3184
+ effect: Optional[builtins.str] = None,
3185
+ key: Optional[builtins.str] = None,
3186
+ time_added: Optional[builtins.str] = None,
3187
+ value: Optional[builtins.str] = None):
3188
+ """
3189
+ 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.
3190
+ :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.
3191
+ :param builtins.str key: The taint key to be applied to a device. Must be a label name.
3192
+ :param builtins.str time_added: TimeAdded represents the time at which the taint was added. Added automatically during create or update if not set.
3193
+ :param builtins.str value: The taint value corresponding to the taint key. Must be a label value.
3194
+ """
3195
+ if effect is not None:
3196
+ pulumi.set(__self__, "effect", effect)
3197
+ if key is not None:
3198
+ pulumi.set(__self__, "key", key)
3199
+ if time_added is not None:
3200
+ pulumi.set(__self__, "time_added", time_added)
3201
+ if value is not None:
3202
+ pulumi.set(__self__, "value", value)
3203
+
3204
+ @property
3205
+ @pulumi.getter
3206
+ def effect(self) -> Optional[builtins.str]:
3207
+ """
3208
+ 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.
3209
+ """
3210
+ return pulumi.get(self, "effect")
3211
+
3212
+ @property
3213
+ @pulumi.getter
3214
+ def key(self) -> Optional[builtins.str]:
3215
+ """
3216
+ The taint key to be applied to a device. Must be a label name.
3217
+ """
3218
+ return pulumi.get(self, "key")
3219
+
3220
+ @property
3221
+ @pulumi.getter(name="timeAdded")
3222
+ def time_added(self) -> Optional[builtins.str]:
3223
+ """
3224
+ TimeAdded represents the time at which the taint was added. Added automatically during create or update if not set.
3225
+ """
3226
+ return pulumi.get(self, "time_added")
3227
+
3228
+ @property
3229
+ @pulumi.getter
3230
+ def value(self) -> Optional[builtins.str]:
3231
+ """
3232
+ The taint value corresponding to the taint key. Must be a label value.
3233
+ """
3234
+ return pulumi.get(self, "value")
3235
+
3236
+
3237
+ @pulumi.output_type
3238
+ class DeviceTaintRule(dict):
3239
+ """
3240
+ DeviceTaintRule adds one taint to all devices which match the selector. This has the same effect as if the taint was specified directly in the ResourceSlice by the DRA driver.
3241
+ """
3242
+ @staticmethod
3243
+ def __key_warning(key: str):
3244
+ suggest = None
3245
+ if key == "apiVersion":
3246
+ suggest = "api_version"
3247
+
3248
+ if suggest:
3249
+ pulumi.log.warn(f"Key '{key}' not found in DeviceTaintRule. Access the value via the '{suggest}' property getter instead.")
3250
+
3251
+ def __getitem__(self, key: str) -> Any:
3252
+ DeviceTaintRule.__key_warning(key)
3253
+ return super().__getitem__(key)
3254
+
3255
+ def get(self, key: str, default = None) -> Any:
3256
+ DeviceTaintRule.__key_warning(key)
3257
+ return super().get(key, default)
3258
+
3259
+ def __init__(__self__, *,
3260
+ spec: 'outputs.DeviceTaintRuleSpec',
3261
+ api_version: Optional[builtins.str] = None,
3262
+ kind: Optional[builtins.str] = None,
3263
+ metadata: Optional['_meta.v1.outputs.ObjectMeta'] = None):
3264
+ """
3265
+ DeviceTaintRule adds one taint to all devices which match the selector. This has the same effect as if the taint was specified directly in the ResourceSlice by the DRA driver.
3266
+ :param 'DeviceTaintRuleSpecArgs' spec: Spec specifies the selector and one taint.
3267
+
3268
+ Changing the spec automatically increments the metadata.generation number.
3269
+ :param builtins.str api_version: APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
3270
+ :param builtins.str kind: Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
3271
+ :param '_meta.v1.ObjectMetaArgs' metadata: Standard object metadata
3272
+ """
3273
+ pulumi.set(__self__, "spec", spec)
3274
+ if api_version is not None:
3275
+ pulumi.set(__self__, "api_version", 'resource.k8s.io/v1alpha3')
3276
+ if kind is not None:
3277
+ pulumi.set(__self__, "kind", 'DeviceTaintRule')
3278
+ if metadata is not None:
3279
+ pulumi.set(__self__, "metadata", metadata)
3280
+
3281
+ @property
3282
+ @pulumi.getter
3283
+ def spec(self) -> 'outputs.DeviceTaintRuleSpec':
3284
+ """
3285
+ Spec specifies the selector and one taint.
3286
+
3287
+ Changing the spec automatically increments the metadata.generation number.
3288
+ """
3289
+ return pulumi.get(self, "spec")
3290
+
3291
+ @property
3292
+ @pulumi.getter(name="apiVersion")
3293
+ def api_version(self) -> Optional[builtins.str]:
3294
+ """
3295
+ APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
3296
+ """
3297
+ return pulumi.get(self, "api_version")
3298
+
3299
+ @property
3300
+ @pulumi.getter
3301
+ def kind(self) -> Optional[builtins.str]:
3302
+ """
3303
+ Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
3304
+ """
3305
+ return pulumi.get(self, "kind")
3306
+
3307
+ @property
3308
+ @pulumi.getter
3309
+ def metadata(self) -> Optional['_meta.v1.outputs.ObjectMeta']:
3310
+ """
3311
+ Standard object metadata
3312
+ """
3313
+ return pulumi.get(self, "metadata")
3314
+
3315
+
3316
+ @pulumi.output_type
3317
+ class DeviceTaintRuleSpec(dict):
3318
+ """
3319
+ DeviceTaintRuleSpec specifies the selector and one taint.
3320
+ """
3321
+ @staticmethod
3322
+ def __key_warning(key: str):
3323
+ suggest = None
3324
+ if key == "deviceSelector":
3325
+ suggest = "device_selector"
3326
+
3327
+ if suggest:
3328
+ pulumi.log.warn(f"Key '{key}' not found in DeviceTaintRuleSpec. Access the value via the '{suggest}' property getter instead.")
3329
+
3330
+ def __getitem__(self, key: str) -> Any:
3331
+ DeviceTaintRuleSpec.__key_warning(key)
3332
+ return super().__getitem__(key)
3333
+
3334
+ def get(self, key: str, default = None) -> Any:
3335
+ DeviceTaintRuleSpec.__key_warning(key)
3336
+ return super().get(key, default)
3337
+
3338
+ def __init__(__self__, *,
3339
+ taint: 'outputs.DeviceTaint',
3340
+ device_selector: Optional['outputs.DeviceTaintSelector'] = None):
3341
+ """
3342
+ DeviceTaintRuleSpec specifies the selector and one taint.
3343
+ :param 'DeviceTaintArgs' taint: The taint that gets applied to matching devices.
3344
+ :param 'DeviceTaintSelectorArgs' device_selector: DeviceSelector defines which device(s) the taint is applied to. All selector criteria must be satified for a device to match. The empty selector matches all devices. Without a selector, no devices are matches.
3345
+ """
3346
+ pulumi.set(__self__, "taint", taint)
3347
+ if device_selector is not None:
3348
+ pulumi.set(__self__, "device_selector", device_selector)
3349
+
3350
+ @property
3351
+ @pulumi.getter
3352
+ def taint(self) -> 'outputs.DeviceTaint':
3353
+ """
3354
+ The taint that gets applied to matching devices.
3355
+ """
3356
+ return pulumi.get(self, "taint")
3357
+
3358
+ @property
3359
+ @pulumi.getter(name="deviceSelector")
3360
+ def device_selector(self) -> Optional['outputs.DeviceTaintSelector']:
3361
+ """
3362
+ DeviceSelector defines which device(s) the taint is applied to. All selector criteria must be satified for a device to match. The empty selector matches all devices. Without a selector, no devices are matches.
3363
+ """
3364
+ return pulumi.get(self, "device_selector")
3365
+
3366
+
3367
+ @pulumi.output_type
3368
+ class DeviceTaintRuleSpecPatch(dict):
3369
+ """
3370
+ DeviceTaintRuleSpec specifies the selector and one taint.
3371
+ """
3372
+ @staticmethod
3373
+ def __key_warning(key: str):
3374
+ suggest = None
3375
+ if key == "deviceSelector":
3376
+ suggest = "device_selector"
3377
+
3378
+ if suggest:
3379
+ pulumi.log.warn(f"Key '{key}' not found in DeviceTaintRuleSpecPatch. Access the value via the '{suggest}' property getter instead.")
3380
+
3381
+ def __getitem__(self, key: str) -> Any:
3382
+ DeviceTaintRuleSpecPatch.__key_warning(key)
3383
+ return super().__getitem__(key)
3384
+
3385
+ def get(self, key: str, default = None) -> Any:
3386
+ DeviceTaintRuleSpecPatch.__key_warning(key)
3387
+ return super().get(key, default)
3388
+
3389
+ def __init__(__self__, *,
3390
+ device_selector: Optional['outputs.DeviceTaintSelectorPatch'] = None,
3391
+ taint: Optional['outputs.DeviceTaintPatch'] = None):
3392
+ """
3393
+ DeviceTaintRuleSpec specifies the selector and one taint.
3394
+ :param 'DeviceTaintSelectorPatchArgs' device_selector: DeviceSelector defines which device(s) the taint is applied to. All selector criteria must be satified for a device to match. The empty selector matches all devices. Without a selector, no devices are matches.
3395
+ :param 'DeviceTaintPatchArgs' taint: The taint that gets applied to matching devices.
3396
+ """
3397
+ if device_selector is not None:
3398
+ pulumi.set(__self__, "device_selector", device_selector)
3399
+ if taint is not None:
3400
+ pulumi.set(__self__, "taint", taint)
3401
+
3402
+ @property
3403
+ @pulumi.getter(name="deviceSelector")
3404
+ def device_selector(self) -> Optional['outputs.DeviceTaintSelectorPatch']:
3405
+ """
3406
+ DeviceSelector defines which device(s) the taint is applied to. All selector criteria must be satified for a device to match. The empty selector matches all devices. Without a selector, no devices are matches.
3407
+ """
3408
+ return pulumi.get(self, "device_selector")
3409
+
3410
+ @property
3411
+ @pulumi.getter
3412
+ def taint(self) -> Optional['outputs.DeviceTaintPatch']:
3413
+ """
3414
+ The taint that gets applied to matching devices.
3415
+ """
3416
+ return pulumi.get(self, "taint")
3417
+
3418
+
3419
+ @pulumi.output_type
3420
+ class DeviceTaintSelector(dict):
3421
+ """
3422
+ DeviceTaintSelector defines which device(s) a DeviceTaintRule applies to. The empty selector matches all devices. Without a selector, no devices are matched.
3423
+ """
3424
+ @staticmethod
3425
+ def __key_warning(key: str):
3426
+ suggest = None
3427
+ if key == "deviceClassName":
3428
+ suggest = "device_class_name"
3429
+
3430
+ if suggest:
3431
+ pulumi.log.warn(f"Key '{key}' not found in DeviceTaintSelector. Access the value via the '{suggest}' property getter instead.")
3432
+
3433
+ def __getitem__(self, key: str) -> Any:
3434
+ DeviceTaintSelector.__key_warning(key)
3435
+ return super().__getitem__(key)
3436
+
3437
+ def get(self, key: str, default = None) -> Any:
3438
+ DeviceTaintSelector.__key_warning(key)
3439
+ return super().get(key, default)
3440
+
3441
+ def __init__(__self__, *,
3442
+ device: Optional[builtins.str] = None,
3443
+ device_class_name: Optional[builtins.str] = None,
3444
+ driver: Optional[builtins.str] = None,
3445
+ pool: Optional[builtins.str] = None,
3446
+ selectors: Optional[Sequence['outputs.DeviceSelector']] = None):
3447
+ """
3448
+ DeviceTaintSelector defines which device(s) a DeviceTaintRule applies to. The empty selector matches all devices. Without a selector, no devices are matched.
3449
+ :param builtins.str device: If device is set, only devices with that name are selected. This field corresponds to slice.spec.devices[].name.
3450
+
3451
+ Setting also driver and pool may be required to avoid ambiguity, but is not required.
3452
+ :param builtins.str device_class_name: If DeviceClassName is set, the selectors defined there must be satisfied by a device to be selected. This field corresponds to class.metadata.name.
3453
+ :param builtins.str driver: If driver is set, only devices from that driver are selected. This fields corresponds to slice.spec.driver.
3454
+ :param builtins.str pool: If pool is set, only devices in that pool are selected.
3455
+
3456
+ Also setting the driver name may be useful to avoid ambiguity when different drivers use the same pool name, but this is not required because selecting pools from different drivers may also be useful, for example when drivers with node-local devices use the node name as their pool name.
3457
+ :param Sequence['DeviceSelectorArgs'] selectors: Selectors contains the same selection criteria as a ResourceClaim. Currently, CEL expressions are supported. All of these selectors must be satisfied.
3458
+ """
3459
+ if device is not None:
3460
+ pulumi.set(__self__, "device", device)
3461
+ if device_class_name is not None:
3462
+ pulumi.set(__self__, "device_class_name", device_class_name)
3463
+ if driver is not None:
3464
+ pulumi.set(__self__, "driver", driver)
3465
+ if pool is not None:
3466
+ pulumi.set(__self__, "pool", pool)
3467
+ if selectors is not None:
3468
+ pulumi.set(__self__, "selectors", selectors)
3469
+
3470
+ @property
3471
+ @pulumi.getter
3472
+ def device(self) -> Optional[builtins.str]:
3473
+ """
3474
+ If device is set, only devices with that name are selected. This field corresponds to slice.spec.devices[].name.
3475
+
3476
+ Setting also driver and pool may be required to avoid ambiguity, but is not required.
3477
+ """
3478
+ return pulumi.get(self, "device")
3479
+
3480
+ @property
3481
+ @pulumi.getter(name="deviceClassName")
3482
+ def device_class_name(self) -> Optional[builtins.str]:
3483
+ """
3484
+ If DeviceClassName is set, the selectors defined there must be satisfied by a device to be selected. This field corresponds to class.metadata.name.
3485
+ """
3486
+ return pulumi.get(self, "device_class_name")
3487
+
3488
+ @property
3489
+ @pulumi.getter
3490
+ def driver(self) -> Optional[builtins.str]:
3491
+ """
3492
+ If driver is set, only devices from that driver are selected. This fields corresponds to slice.spec.driver.
3493
+ """
3494
+ return pulumi.get(self, "driver")
3495
+
3496
+ @property
3497
+ @pulumi.getter
3498
+ def pool(self) -> Optional[builtins.str]:
1774
3499
  """
1775
- This name together with the driver name and the device name field identify which device was allocated (`<driver name>/<pool name>/<device name>`).
3500
+ If pool is set, only devices in that pool are selected.
1776
3501
 
1777
- Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
3502
+ Also setting the driver name may be useful to avoid ambiguity when different drivers use the same pool name, but this is not required because selecting pools from different drivers may also be useful, for example when drivers with node-local devices use the node name as their pool name.
1778
3503
  """
1779
3504
  return pulumi.get(self, "pool")
1780
3505
 
1781
3506
  @property
1782
3507
  @pulumi.getter
1783
- def request(self) -> builtins.str:
1784
- """
1785
- 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.
1786
- """
1787
- return pulumi.get(self, "request")
1788
-
1789
- @property
1790
- @pulumi.getter(name="adminAccess")
1791
- def admin_access(self) -> Optional[builtins.bool]:
3508
+ def selectors(self) -> Optional[Sequence['outputs.DeviceSelector']]:
1792
3509
  """
1793
- AdminAccess indicates that this device was allocated for administrative access. See the corresponding request field for a definition of mode.
1794
-
1795
- 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.
3510
+ Selectors contains the same selection criteria as a ResourceClaim. Currently, CEL expressions are supported. All of these selectors must be satisfied.
1796
3511
  """
1797
- return pulumi.get(self, "admin_access")
3512
+ return pulumi.get(self, "selectors")
1798
3513
 
1799
3514
 
1800
3515
  @pulumi.output_type
1801
- class DeviceRequestAllocationResultPatch(dict):
3516
+ class DeviceTaintSelectorPatch(dict):
1802
3517
  """
1803
- DeviceRequestAllocationResult contains the allocation result for one request.
3518
+ DeviceTaintSelector defines which device(s) a DeviceTaintRule applies to. The empty selector matches all devices. Without a selector, no devices are matched.
1804
3519
  """
1805
3520
  @staticmethod
1806
3521
  def __key_warning(key: str):
1807
3522
  suggest = None
1808
- if key == "adminAccess":
1809
- suggest = "admin_access"
3523
+ if key == "deviceClassName":
3524
+ suggest = "device_class_name"
1810
3525
 
1811
3526
  if suggest:
1812
- pulumi.log.warn(f"Key '{key}' not found in DeviceRequestAllocationResultPatch. Access the value via the '{suggest}' property getter instead.")
3527
+ pulumi.log.warn(f"Key '{key}' not found in DeviceTaintSelectorPatch. Access the value via the '{suggest}' property getter instead.")
1813
3528
 
1814
3529
  def __getitem__(self, key: str) -> Any:
1815
- DeviceRequestAllocationResultPatch.__key_warning(key)
3530
+ DeviceTaintSelectorPatch.__key_warning(key)
1816
3531
  return super().__getitem__(key)
1817
3532
 
1818
3533
  def get(self, key: str, default = None) -> Any:
1819
- DeviceRequestAllocationResultPatch.__key_warning(key)
3534
+ DeviceTaintSelectorPatch.__key_warning(key)
1820
3535
  return super().get(key, default)
1821
3536
 
1822
3537
  def __init__(__self__, *,
1823
- admin_access: Optional[builtins.bool] = None,
1824
3538
  device: Optional[builtins.str] = None,
3539
+ device_class_name: Optional[builtins.str] = None,
1825
3540
  driver: Optional[builtins.str] = None,
1826
3541
  pool: Optional[builtins.str] = None,
1827
- request: Optional[builtins.str] = None):
3542
+ selectors: Optional[Sequence['outputs.DeviceSelectorPatch']] = None):
1828
3543
  """
1829
- DeviceRequestAllocationResult contains the allocation result for one request.
1830
- :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.
1831
-
1832
- 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.
1833
- :param builtins.str device: Device references one device instance via its name in the driver's resource pool. It must be a DNS label.
1834
- :param builtins.str driver: Driver specifies the name of the DRA driver whose kubelet plugin should be invoked to process the allocation once the claim is needed on a node.
3544
+ DeviceTaintSelector defines which device(s) a DeviceTaintRule applies to. The empty selector matches all devices. Without a selector, no devices are matched.
3545
+ :param builtins.str device: If device is set, only devices with that name are selected. This field corresponds to slice.spec.devices[].name.
1835
3546
 
1836
- Must be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver.
1837
- :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>`).
3547
+ Setting also driver and pool may be required to avoid ambiguity, but is not required.
3548
+ :param builtins.str device_class_name: If DeviceClassName is set, the selectors defined there must be satisfied by a device to be selected. This field corresponds to class.metadata.name.
3549
+ :param builtins.str driver: If driver is set, only devices from that driver are selected. This fields corresponds to slice.spec.driver.
3550
+ :param builtins.str pool: If pool is set, only devices in that pool are selected.
1838
3551
 
1839
- Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
1840
- :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.
3552
+ Also setting the driver name may be useful to avoid ambiguity when different drivers use the same pool name, but this is not required because selecting pools from different drivers may also be useful, for example when drivers with node-local devices use the node name as their pool name.
3553
+ :param Sequence['DeviceSelectorPatchArgs'] selectors: Selectors contains the same selection criteria as a ResourceClaim. Currently, CEL expressions are supported. All of these selectors must be satisfied.
1841
3554
  """
1842
- if admin_access is not None:
1843
- pulumi.set(__self__, "admin_access", admin_access)
1844
3555
  if device is not None:
1845
3556
  pulumi.set(__self__, "device", device)
3557
+ if device_class_name is not None:
3558
+ pulumi.set(__self__, "device_class_name", device_class_name)
1846
3559
  if driver is not None:
1847
3560
  pulumi.set(__self__, "driver", driver)
1848
3561
  if pool is not None:
1849
3562
  pulumi.set(__self__, "pool", pool)
1850
- if request is not None:
1851
- pulumi.set(__self__, "request", request)
3563
+ if selectors is not None:
3564
+ pulumi.set(__self__, "selectors", selectors)
1852
3565
 
1853
3566
  @property
1854
- @pulumi.getter(name="adminAccess")
1855
- def admin_access(self) -> Optional[builtins.bool]:
3567
+ @pulumi.getter
3568
+ def device(self) -> Optional[builtins.str]:
1856
3569
  """
1857
- AdminAccess indicates that this device was allocated for administrative access. See the corresponding request field for a definition of mode.
3570
+ If device is set, only devices with that name are selected. This field corresponds to slice.spec.devices[].name.
1858
3571
 
1859
- 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.
3572
+ Setting also driver and pool may be required to avoid ambiguity, but is not required.
1860
3573
  """
1861
- return pulumi.get(self, "admin_access")
3574
+ return pulumi.get(self, "device")
1862
3575
 
1863
3576
  @property
1864
- @pulumi.getter
1865
- def device(self) -> Optional[builtins.str]:
3577
+ @pulumi.getter(name="deviceClassName")
3578
+ def device_class_name(self) -> Optional[builtins.str]:
1866
3579
  """
1867
- Device references one device instance via its name in the driver's resource pool. It must be a DNS label.
3580
+ If DeviceClassName is set, the selectors defined there must be satisfied by a device to be selected. This field corresponds to class.metadata.name.
1868
3581
  """
1869
- return pulumi.get(self, "device")
3582
+ return pulumi.get(self, "device_class_name")
1870
3583
 
1871
3584
  @property
1872
3585
  @pulumi.getter
1873
3586
  def driver(self) -> Optional[builtins.str]:
1874
3587
  """
1875
- Driver specifies the name of the DRA driver whose kubelet plugin should be invoked to process the allocation once the claim is needed on a node.
1876
-
1877
- Must be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver.
3588
+ If driver is set, only devices from that driver are selected. This fields corresponds to slice.spec.driver.
1878
3589
  """
1879
3590
  return pulumi.get(self, "driver")
1880
3591
 
@@ -1882,213 +3593,195 @@ class DeviceRequestAllocationResultPatch(dict):
1882
3593
  @pulumi.getter
1883
3594
  def pool(self) -> Optional[builtins.str]:
1884
3595
  """
1885
- This name together with the driver name and the device name field identify which device was allocated (`<driver name>/<pool name>/<device name>`).
3596
+ If pool is set, only devices in that pool are selected.
1886
3597
 
1887
- Must not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.
3598
+ Also setting the driver name may be useful to avoid ambiguity when different drivers use the same pool name, but this is not required because selecting pools from different drivers may also be useful, for example when drivers with node-local devices use the node name as their pool name.
1888
3599
  """
1889
3600
  return pulumi.get(self, "pool")
1890
3601
 
1891
3602
  @property
1892
3603
  @pulumi.getter
1893
- def request(self) -> Optional[builtins.str]:
3604
+ def selectors(self) -> Optional[Sequence['outputs.DeviceSelectorPatch']]:
1894
3605
  """
1895
- 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.
3606
+ Selectors contains the same selection criteria as a ResourceClaim. Currently, CEL expressions are supported. All of these selectors must be satisfied.
1896
3607
  """
1897
- return pulumi.get(self, "request")
3608
+ return pulumi.get(self, "selectors")
1898
3609
 
1899
3610
 
1900
3611
  @pulumi.output_type
1901
- class DeviceRequestPatch(dict):
3612
+ class DeviceToleration(dict):
1902
3613
  """
1903
- 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.
1904
-
1905
- 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.
3614
+ The ResourceClaim this DeviceToleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.
1906
3615
  """
1907
3616
  @staticmethod
1908
3617
  def __key_warning(key: str):
1909
3618
  suggest = None
1910
- if key == "adminAccess":
1911
- suggest = "admin_access"
1912
- elif key == "allocationMode":
1913
- suggest = "allocation_mode"
1914
- elif key == "deviceClassName":
1915
- suggest = "device_class_name"
3619
+ if key == "tolerationSeconds":
3620
+ suggest = "toleration_seconds"
1916
3621
 
1917
3622
  if suggest:
1918
- pulumi.log.warn(f"Key '{key}' not found in DeviceRequestPatch. Access the value via the '{suggest}' property getter instead.")
3623
+ pulumi.log.warn(f"Key '{key}' not found in DeviceToleration. Access the value via the '{suggest}' property getter instead.")
1919
3624
 
1920
3625
  def __getitem__(self, key: str) -> Any:
1921
- DeviceRequestPatch.__key_warning(key)
3626
+ DeviceToleration.__key_warning(key)
1922
3627
  return super().__getitem__(key)
1923
3628
 
1924
3629
  def get(self, key: str, default = None) -> Any:
1925
- DeviceRequestPatch.__key_warning(key)
3630
+ DeviceToleration.__key_warning(key)
1926
3631
  return super().get(key, default)
1927
3632
 
1928
3633
  def __init__(__self__, *,
1929
- admin_access: Optional[builtins.bool] = None,
1930
- allocation_mode: Optional[builtins.str] = None,
1931
- count: Optional[builtins.int] = None,
1932
- device_class_name: Optional[builtins.str] = None,
1933
- name: Optional[builtins.str] = None,
1934
- selectors: Optional[Sequence['outputs.DeviceSelectorPatch']] = None):
1935
- """
1936
- 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.
1937
-
1938
- 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.
1939
- :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.
1940
-
1941
- 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.
1942
- :param builtins.str allocation_mode: AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
1943
-
1944
- - ExactCount: This request is for a specific number of devices.
1945
- This is the default. The exact number is provided in the
1946
- count field.
1947
-
1948
- - All: This request is for all of the matching devices in a pool.
1949
- Allocation will fail if some devices are already allocated,
1950
- unless adminAccess is requested.
1951
-
1952
- 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.
1953
-
1954
- More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
1955
- :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.
1956
- :param builtins.str device_class_name: DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
1957
-
1958
- A class is required. Which classes are available depends on the cluster.
1959
-
1960
- 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.
1961
- :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.
1962
-
1963
- Must be a DNS label.
1964
- :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.
1965
- """
1966
- if admin_access is not None:
1967
- pulumi.set(__self__, "admin_access", admin_access)
1968
- if allocation_mode is not None:
1969
- pulumi.set(__self__, "allocation_mode", allocation_mode)
1970
- if count is not None:
1971
- pulumi.set(__self__, "count", count)
1972
- if device_class_name is not None:
1973
- pulumi.set(__self__, "device_class_name", device_class_name)
1974
- if name is not None:
1975
- pulumi.set(__self__, "name", name)
1976
- if selectors is not None:
1977
- pulumi.set(__self__, "selectors", selectors)
1978
-
1979
- @property
1980
- @pulumi.getter(name="adminAccess")
1981
- def admin_access(self) -> Optional[builtins.bool]:
1982
- """
1983
- 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.
1984
-
1985
- 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.
1986
- """
1987
- return pulumi.get(self, "admin_access")
3634
+ effect: Optional[builtins.str] = None,
3635
+ key: Optional[builtins.str] = None,
3636
+ operator: Optional[builtins.str] = None,
3637
+ toleration_seconds: Optional[builtins.int] = None,
3638
+ value: Optional[builtins.str] = None):
3639
+ """
3640
+ The ResourceClaim this DeviceToleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.
3641
+ :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.
3642
+ :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.
3643
+ :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.
3644
+ :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>.
3645
+ :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.
3646
+ """
3647
+ if effect is not None:
3648
+ pulumi.set(__self__, "effect", effect)
3649
+ if key is not None:
3650
+ pulumi.set(__self__, "key", key)
3651
+ if operator is not None:
3652
+ pulumi.set(__self__, "operator", operator)
3653
+ if toleration_seconds is not None:
3654
+ pulumi.set(__self__, "toleration_seconds", toleration_seconds)
3655
+ if value is not None:
3656
+ pulumi.set(__self__, "value", value)
1988
3657
 
1989
3658
  @property
1990
- @pulumi.getter(name="allocationMode")
1991
- def allocation_mode(self) -> Optional[builtins.str]:
3659
+ @pulumi.getter
3660
+ def effect(self) -> Optional[builtins.str]:
1992
3661
  """
1993
- AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:
1994
-
1995
- - ExactCount: This request is for a specific number of devices.
1996
- This is the default. The exact number is provided in the
1997
- count field.
1998
-
1999
- - All: This request is for all of the matching devices in a pool.
2000
- Allocation will fail if some devices are already allocated,
2001
- unless adminAccess is requested.
2002
-
2003
- 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.
2004
-
2005
- More modes may get added in the future. Clients must refuse to handle requests with unknown modes.
3662
+ Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule and NoExecute.
2006
3663
  """
2007
- return pulumi.get(self, "allocation_mode")
3664
+ return pulumi.get(self, "effect")
2008
3665
 
2009
3666
  @property
2010
3667
  @pulumi.getter
2011
- def count(self) -> Optional[builtins.int]:
3668
+ def key(self) -> Optional[builtins.str]:
2012
3669
  """
2013
- 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.
3670
+ 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.
2014
3671
  """
2015
- return pulumi.get(self, "count")
3672
+ return pulumi.get(self, "key")
2016
3673
 
2017
3674
  @property
2018
- @pulumi.getter(name="deviceClassName")
2019
- def device_class_name(self) -> Optional[builtins.str]:
3675
+ @pulumi.getter
3676
+ def operator(self) -> Optional[builtins.str]:
2020
3677
  """
2021
- DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.
2022
-
2023
- A class is required. Which classes are available depends on the cluster.
2024
-
2025
- 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.
3678
+ 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.
2026
3679
  """
2027
- return pulumi.get(self, "device_class_name")
3680
+ return pulumi.get(self, "operator")
2028
3681
 
2029
3682
  @property
2030
- @pulumi.getter
2031
- def name(self) -> Optional[builtins.str]:
3683
+ @pulumi.getter(name="tolerationSeconds")
3684
+ def toleration_seconds(self) -> Optional[builtins.int]:
2032
3685
  """
2033
- Name can be used to reference this request in a pod.spec.containers[].resources.claims entry and in a constraint of the claim.
2034
-
2035
- Must be a DNS label.
3686
+ 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>.
2036
3687
  """
2037
- return pulumi.get(self, "name")
3688
+ return pulumi.get(self, "toleration_seconds")
2038
3689
 
2039
3690
  @property
2040
3691
  @pulumi.getter
2041
- def selectors(self) -> Optional[Sequence['outputs.DeviceSelectorPatch']]:
3692
+ def value(self) -> Optional[builtins.str]:
2042
3693
  """
2043
- 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.
3694
+ 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.
2044
3695
  """
2045
- return pulumi.get(self, "selectors")
3696
+ return pulumi.get(self, "value")
2046
3697
 
2047
3698
 
2048
3699
  @pulumi.output_type
2049
- class DeviceSelector(dict):
3700
+ class DeviceTolerationPatch(dict):
2050
3701
  """
2051
- DeviceSelector must have exactly one field set.
3702
+ The ResourceClaim this DeviceToleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.
2052
3703
  """
3704
+ @staticmethod
3705
+ def __key_warning(key: str):
3706
+ suggest = None
3707
+ if key == "tolerationSeconds":
3708
+ suggest = "toleration_seconds"
3709
+
3710
+ if suggest:
3711
+ pulumi.log.warn(f"Key '{key}' not found in DeviceTolerationPatch. Access the value via the '{suggest}' property getter instead.")
3712
+
3713
+ def __getitem__(self, key: str) -> Any:
3714
+ DeviceTolerationPatch.__key_warning(key)
3715
+ return super().__getitem__(key)
3716
+
3717
+ def get(self, key: str, default = None) -> Any:
3718
+ DeviceTolerationPatch.__key_warning(key)
3719
+ return super().get(key, default)
3720
+
2053
3721
  def __init__(__self__, *,
2054
- cel: Optional['outputs.CELDeviceSelector'] = None):
3722
+ effect: Optional[builtins.str] = None,
3723
+ key: Optional[builtins.str] = None,
3724
+ operator: Optional[builtins.str] = None,
3725
+ toleration_seconds: Optional[builtins.int] = None,
3726
+ value: Optional[builtins.str] = None):
3727
+ """
3728
+ The ResourceClaim this DeviceToleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.
3729
+ :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.
3730
+ :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.
3731
+ :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.
3732
+ :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>.
3733
+ :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.
3734
+ """
3735
+ if effect is not None:
3736
+ pulumi.set(__self__, "effect", effect)
3737
+ if key is not None:
3738
+ pulumi.set(__self__, "key", key)
3739
+ if operator is not None:
3740
+ pulumi.set(__self__, "operator", operator)
3741
+ if toleration_seconds is not None:
3742
+ pulumi.set(__self__, "toleration_seconds", toleration_seconds)
3743
+ if value is not None:
3744
+ pulumi.set(__self__, "value", value)
3745
+
3746
+ @property
3747
+ @pulumi.getter
3748
+ def effect(self) -> Optional[builtins.str]:
2055
3749
  """
2056
- DeviceSelector must have exactly one field set.
2057
- :param 'CELDeviceSelectorArgs' cel: CEL contains a CEL expression for selecting a device.
3750
+ Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule and NoExecute.
2058
3751
  """
2059
- if cel is not None:
2060
- pulumi.set(__self__, "cel", cel)
3752
+ return pulumi.get(self, "effect")
2061
3753
 
2062
3754
  @property
2063
3755
  @pulumi.getter
2064
- def cel(self) -> Optional['outputs.CELDeviceSelector']:
3756
+ def key(self) -> Optional[builtins.str]:
2065
3757
  """
2066
- CEL contains a CEL expression for selecting a device.
3758
+ 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.
2067
3759
  """
2068
- return pulumi.get(self, "cel")
3760
+ return pulumi.get(self, "key")
2069
3761
 
3762
+ @property
3763
+ @pulumi.getter
3764
+ def operator(self) -> Optional[builtins.str]:
3765
+ """
3766
+ 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.
3767
+ """
3768
+ return pulumi.get(self, "operator")
2070
3769
 
2071
- @pulumi.output_type
2072
- class DeviceSelectorPatch(dict):
2073
- """
2074
- DeviceSelector must have exactly one field set.
2075
- """
2076
- def __init__(__self__, *,
2077
- cel: Optional['outputs.CELDeviceSelectorPatch'] = None):
3770
+ @property
3771
+ @pulumi.getter(name="tolerationSeconds")
3772
+ def toleration_seconds(self) -> Optional[builtins.int]:
2078
3773
  """
2079
- DeviceSelector must have exactly one field set.
2080
- :param 'CELDeviceSelectorPatchArgs' cel: CEL contains a CEL expression for selecting a device.
3774
+ 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>.
2081
3775
  """
2082
- if cel is not None:
2083
- pulumi.set(__self__, "cel", cel)
3776
+ return pulumi.get(self, "toleration_seconds")
2084
3777
 
2085
3778
  @property
2086
3779
  @pulumi.getter
2087
- def cel(self) -> Optional['outputs.CELDeviceSelectorPatch']:
3780
+ def value(self) -> Optional[builtins.str]:
2088
3781
  """
2089
- CEL contains a CEL expression for selecting a device.
3782
+ 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.
2090
3783
  """
2091
- return pulumi.get(self, "cel")
3784
+ return pulumi.get(self, "value")
2092
3785
 
2093
3786
 
2094
3787
  @pulumi.output_type
@@ -2128,6 +3821,8 @@ class NetworkDeviceData(dict):
2128
3821
 
2129
3822
  Must not be longer than 256 characters.
2130
3823
  :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.
3824
+
3825
+ Must not contain more than 16 entries.
2131
3826
  """
2132
3827
  if hardware_address is not None:
2133
3828
  pulumi.set(__self__, "hardware_address", hardware_address)
@@ -2161,6 +3856,8 @@ class NetworkDeviceData(dict):
2161
3856
  def ips(self) -> Optional[Sequence[builtins.str]]:
2162
3857
  """
2163
3858
  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.
3859
+
3860
+ Must not contain more than 16 entries.
2164
3861
  """
2165
3862
  return pulumi.get(self, "ips")
2166
3863
 
@@ -2202,6 +3899,8 @@ class NetworkDeviceDataPatch(dict):
2202
3899
 
2203
3900
  Must not be longer than 256 characters.
2204
3901
  :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.
3902
+
3903
+ Must not contain more than 16 entries.
2205
3904
  """
2206
3905
  if hardware_address is not None:
2207
3906
  pulumi.set(__self__, "hardware_address", hardware_address)
@@ -2235,6 +3934,8 @@ class NetworkDeviceDataPatch(dict):
2235
3934
  def ips(self) -> Optional[Sequence[builtins.str]]:
2236
3935
  """
2237
3936
  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.
3937
+
3938
+ Must not contain more than 16 entries.
2238
3939
  """
2239
3940
  return pulumi.get(self, "ips")
2240
3941
 
@@ -3099,7 +4800,7 @@ class ResourceClaimStatus(dict):
3099
4800
 
3100
4801
  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.
3101
4802
 
3102
- There can be at most 32 such reservations. This may get increased in the future, but not reduced.
4803
+ There can be at most 256 such reservations. This may get increased in the future, but not reduced.
3103
4804
  """
3104
4805
  if allocation is not None:
3105
4806
  pulumi.set(__self__, "allocation", allocation)
@@ -3148,7 +4849,7 @@ class ResourceClaimStatus(dict):
3148
4849
 
3149
4850
  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.
3150
4851
 
3151
- There can be at most 32 such reservations. This may get increased in the future, but not reduced.
4852
+ There can be at most 256 such reservations. This may get increased in the future, but not reduced.
3152
4853
  """
3153
4854
  return pulumi.get(self, "reserved_for")
3154
4855
 
@@ -3197,7 +4898,7 @@ class ResourceClaimStatusPatch(dict):
3197
4898
 
3198
4899
  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.
3199
4900
 
3200
- There can be at most 32 such reservations. This may get increased in the future, but not reduced.
4901
+ There can be at most 256 such reservations. This may get increased in the future, but not reduced.
3201
4902
  """
3202
4903
  if allocation is not None:
3203
4904
  pulumi.set(__self__, "allocation", allocation)
@@ -3246,7 +4947,7 @@ class ResourceClaimStatusPatch(dict):
3246
4947
 
3247
4948
  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.
3248
4949
 
3249
- There can be at most 32 such reservations. This may get increased in the future, but not reduced.
4950
+ There can be at most 256 such reservations. This may get increased in the future, but not reduced.
3250
4951
  """
3251
4952
  return pulumi.get(self, "reserved_for")
3252
4953
 
@@ -3665,6 +5366,10 @@ class ResourceSliceSpec(dict):
3665
5366
  suggest = "node_name"
3666
5367
  elif key == "nodeSelector":
3667
5368
  suggest = "node_selector"
5369
+ elif key == "perDeviceNodeSelection":
5370
+ suggest = "per_device_node_selection"
5371
+ elif key == "sharedCounters":
5372
+ suggest = "shared_counters"
3668
5373
 
3669
5374
  if suggest:
3670
5375
  pulumi.log.warn(f"Key '{key}' not found in ResourceSliceSpec. Access the value via the '{suggest}' property getter instead.")
@@ -3683,7 +5388,9 @@ class ResourceSliceSpec(dict):
3683
5388
  all_nodes: Optional[builtins.bool] = None,
3684
5389
  devices: Optional[Sequence['outputs.Device']] = None,
3685
5390
  node_name: Optional[builtins.str] = None,
3686
- node_selector: Optional['_core.v1.outputs.NodeSelector'] = None):
5391
+ node_selector: Optional['_core.v1.outputs.NodeSelector'] = None,
5392
+ per_device_node_selection: Optional[builtins.bool] = None,
5393
+ shared_counters: Optional[Sequence['outputs.CounterSet']] = None):
3687
5394
  """
3688
5395
  ResourceSliceSpec contains the information published by the driver in one ResourceSlice.
3689
5396
  :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.
@@ -3692,7 +5399,7 @@ class ResourceSliceSpec(dict):
3692
5399
  :param 'ResourcePoolArgs' pool: Pool describes the pool that this ResourceSlice belongs to.
3693
5400
  :param builtins.bool all_nodes: AllNodes indicates that all nodes have access to the resources in the pool.
3694
5401
 
3695
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
5402
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3696
5403
  :param Sequence['DeviceArgs'] devices: Devices lists some or all of the devices in this pool.
3697
5404
 
3698
5405
  Must not have more than 128 entries.
@@ -3700,12 +5407,20 @@ class ResourceSliceSpec(dict):
3700
5407
 
3701
5408
  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.
3702
5409
 
3703
- Exactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.
5410
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.
3704
5411
  :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.
3705
5412
 
3706
5413
  Must use exactly one term.
3707
5414
 
3708
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
5415
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
5416
+ :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.
5417
+
5418
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
5419
+ :param Sequence['CounterSetArgs'] shared_counters: SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.
5420
+
5421
+ The names of the SharedCounters must be unique in the ResourceSlice.
5422
+
5423
+ The maximum number of SharedCounters is 32.
3709
5424
  """
3710
5425
  pulumi.set(__self__, "driver", driver)
3711
5426
  pulumi.set(__self__, "pool", pool)
@@ -3717,6 +5432,10 @@ class ResourceSliceSpec(dict):
3717
5432
  pulumi.set(__self__, "node_name", node_name)
3718
5433
  if node_selector is not None:
3719
5434
  pulumi.set(__self__, "node_selector", node_selector)
5435
+ if per_device_node_selection is not None:
5436
+ pulumi.set(__self__, "per_device_node_selection", per_device_node_selection)
5437
+ if shared_counters is not None:
5438
+ pulumi.set(__self__, "shared_counters", shared_counters)
3720
5439
 
3721
5440
  @property
3722
5441
  @pulumi.getter
@@ -3742,7 +5461,7 @@ class ResourceSliceSpec(dict):
3742
5461
  """
3743
5462
  AllNodes indicates that all nodes have access to the resources in the pool.
3744
5463
 
3745
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
5464
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3746
5465
  """
3747
5466
  return pulumi.get(self, "all_nodes")
3748
5467
 
@@ -3764,7 +5483,7 @@ class ResourceSliceSpec(dict):
3764
5483
 
3765
5484
  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.
3766
5485
 
3767
- Exactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.
5486
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.
3768
5487
  """
3769
5488
  return pulumi.get(self, "node_name")
3770
5489
 
@@ -3776,10 +5495,32 @@ class ResourceSliceSpec(dict):
3776
5495
 
3777
5496
  Must use exactly one term.
3778
5497
 
3779
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
5498
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3780
5499
  """
3781
5500
  return pulumi.get(self, "node_selector")
3782
5501
 
5502
+ @property
5503
+ @pulumi.getter(name="perDeviceNodeSelection")
5504
+ def per_device_node_selection(self) -> Optional[builtins.bool]:
5505
+ """
5506
+ 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.
5507
+
5508
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
5509
+ """
5510
+ return pulumi.get(self, "per_device_node_selection")
5511
+
5512
+ @property
5513
+ @pulumi.getter(name="sharedCounters")
5514
+ def shared_counters(self) -> Optional[Sequence['outputs.CounterSet']]:
5515
+ """
5516
+ SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.
5517
+
5518
+ The names of the SharedCounters must be unique in the ResourceSlice.
5519
+
5520
+ The maximum number of SharedCounters is 32.
5521
+ """
5522
+ return pulumi.get(self, "shared_counters")
5523
+
3783
5524
 
3784
5525
  @pulumi.output_type
3785
5526
  class ResourceSliceSpecPatch(dict):
@@ -3795,6 +5536,10 @@ class ResourceSliceSpecPatch(dict):
3795
5536
  suggest = "node_name"
3796
5537
  elif key == "nodeSelector":
3797
5538
  suggest = "node_selector"
5539
+ elif key == "perDeviceNodeSelection":
5540
+ suggest = "per_device_node_selection"
5541
+ elif key == "sharedCounters":
5542
+ suggest = "shared_counters"
3798
5543
 
3799
5544
  if suggest:
3800
5545
  pulumi.log.warn(f"Key '{key}' not found in ResourceSliceSpecPatch. Access the value via the '{suggest}' property getter instead.")
@@ -3813,12 +5558,14 @@ class ResourceSliceSpecPatch(dict):
3813
5558
  driver: Optional[builtins.str] = None,
3814
5559
  node_name: Optional[builtins.str] = None,
3815
5560
  node_selector: Optional['_core.v1.outputs.NodeSelectorPatch'] = None,
3816
- pool: Optional['outputs.ResourcePoolPatch'] = None):
5561
+ per_device_node_selection: Optional[builtins.bool] = None,
5562
+ pool: Optional['outputs.ResourcePoolPatch'] = None,
5563
+ shared_counters: Optional[Sequence['outputs.CounterSetPatch']] = None):
3817
5564
  """
3818
5565
  ResourceSliceSpec contains the information published by the driver in one ResourceSlice.
3819
5566
  :param builtins.bool all_nodes: AllNodes indicates that all nodes have access to the resources in the pool.
3820
5567
 
3821
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
5568
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3822
5569
  :param Sequence['DevicePatchArgs'] devices: Devices lists some or all of the devices in this pool.
3823
5570
 
3824
5571
  Must not have more than 128 entries.
@@ -3829,13 +5576,21 @@ class ResourceSliceSpecPatch(dict):
3829
5576
 
3830
5577
  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.
3831
5578
 
3832
- Exactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.
5579
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.
3833
5580
  :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.
3834
5581
 
3835
5582
  Must use exactly one term.
3836
5583
 
3837
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
5584
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
5585
+ :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.
5586
+
5587
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3838
5588
  :param 'ResourcePoolPatchArgs' pool: Pool describes the pool that this ResourceSlice belongs to.
5589
+ :param Sequence['CounterSetPatchArgs'] shared_counters: SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.
5590
+
5591
+ The names of the SharedCounters must be unique in the ResourceSlice.
5592
+
5593
+ The maximum number of SharedCounters is 32.
3839
5594
  """
3840
5595
  if all_nodes is not None:
3841
5596
  pulumi.set(__self__, "all_nodes", all_nodes)
@@ -3847,8 +5602,12 @@ class ResourceSliceSpecPatch(dict):
3847
5602
  pulumi.set(__self__, "node_name", node_name)
3848
5603
  if node_selector is not None:
3849
5604
  pulumi.set(__self__, "node_selector", node_selector)
5605
+ if per_device_node_selection is not None:
5606
+ pulumi.set(__self__, "per_device_node_selection", per_device_node_selection)
3850
5607
  if pool is not None:
3851
5608
  pulumi.set(__self__, "pool", pool)
5609
+ if shared_counters is not None:
5610
+ pulumi.set(__self__, "shared_counters", shared_counters)
3852
5611
 
3853
5612
  @property
3854
5613
  @pulumi.getter(name="allNodes")
@@ -3856,7 +5615,7 @@ class ResourceSliceSpecPatch(dict):
3856
5615
  """
3857
5616
  AllNodes indicates that all nodes have access to the resources in the pool.
3858
5617
 
3859
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
5618
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3860
5619
  """
3861
5620
  return pulumi.get(self, "all_nodes")
3862
5621
 
@@ -3888,7 +5647,7 @@ class ResourceSliceSpecPatch(dict):
3888
5647
 
3889
5648
  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.
3890
5649
 
3891
- Exactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.
5650
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.
3892
5651
  """
3893
5652
  return pulumi.get(self, "node_name")
3894
5653
 
@@ -3900,10 +5659,20 @@ class ResourceSliceSpecPatch(dict):
3900
5659
 
3901
5660
  Must use exactly one term.
3902
5661
 
3903
- Exactly one of NodeName, NodeSelector and AllNodes must be set.
5662
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
3904
5663
  """
3905
5664
  return pulumi.get(self, "node_selector")
3906
5665
 
5666
+ @property
5667
+ @pulumi.getter(name="perDeviceNodeSelection")
5668
+ def per_device_node_selection(self) -> Optional[builtins.bool]:
5669
+ """
5670
+ 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.
5671
+
5672
+ Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.
5673
+ """
5674
+ return pulumi.get(self, "per_device_node_selection")
5675
+
3907
5676
  @property
3908
5677
  @pulumi.getter
3909
5678
  def pool(self) -> Optional['outputs.ResourcePoolPatch']:
@@ -3912,4 +5681,16 @@ class ResourceSliceSpecPatch(dict):
3912
5681
  """
3913
5682
  return pulumi.get(self, "pool")
3914
5683
 
5684
+ @property
5685
+ @pulumi.getter(name="sharedCounters")
5686
+ def shared_counters(self) -> Optional[Sequence['outputs.CounterSetPatch']]:
5687
+ """
5688
+ SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.
5689
+
5690
+ The names of the SharedCounters must be unique in the ResourceSlice.
5691
+
5692
+ The maximum number of SharedCounters is 32.
5693
+ """
5694
+ return pulumi.get(self, "shared_counters")
5695
+
3915
5696