diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 29ef72e9893..f5c33384f6b 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -14994,6 +14994,10 @@ "io.k8s.api.resource.v1alpha3.BasicDevice": { "description": "BasicDevice defines one device instance.", "properties": { + "allNodes": { + "description": "AllNodes indicates that all nodes have access to the device.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "type": "boolean" + }, "attributes": { "additionalProperties": { "$ref": "#/definitions/io.k8s.api.resource.v1alpha3.DeviceAttribute" @@ -15008,6 +15012,22 @@ "description": "Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", "type": "object" }, + "consumesCounter": { + "description": "ConsumesCounter defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.\n\nThere can only be a single entry per counterSet.\n\nThe maximum number of device counter consumption entries is 32. This is the same as the maximum number of shared counters allowed in a ResourceSlice.", + "items": { + "$ref": "#/definitions/io.k8s.api.resource.v1alpha3.DeviceCounterConsumption" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, + "nodeName": { + "description": "NodeName identifies the node where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "type": "string" + }, + "nodeSelector": { + "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelector", + "description": "NodeSelector defines the nodes where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set." + }, "taints": { "description": "If specified, these are the driver-defined taints.\n\nThe maximum number of taints is 8.\n\nThis is an alpha field and requires enabling the DRADeviceTaints feature gate.", "items": { @@ -15032,6 +15052,40 @@ ], "type": "object" }, + "io.k8s.api.resource.v1alpha3.Counter": { + "description": "Counter describes a quantity associated with a device.", + "properties": { + "value": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity", + "description": "Value defines how much of a certain device counter is available." + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "io.k8s.api.resource.v1alpha3.CounterSet": { + "description": "CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.\n\nThe 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.", + "properties": { + "counters": { + "additionalProperties": { + "$ref": "#/definitions/io.k8s.api.resource.v1alpha3.Counter" + }, + "description": "Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.\n\nTo 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.\n\nThe maximum number of counters is 32.", + "type": "object" + }, + "name": { + "description": "Name defines the name of the counter set. It must be a DNS label.", + "type": "string" + } + }, + "required": [ + "name", + "counters" + ], + "type": "object" + }, "io.k8s.api.resource.v1alpha3.Device": { "description": "Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.", "properties": { @@ -15284,6 +15338,27 @@ }, "type": "object" }, + "io.k8s.api.resource.v1alpha3.DeviceCounterConsumption": { + "description": "DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.", + "properties": { + "counters": { + "additionalProperties": { + "$ref": "#/definitions/io.k8s.api.resource.v1alpha3.Counter" + }, + "description": "Counters defines the Counter that will be consumed by the device.\n\nThe maximum number of Counters is 32.", + "type": "object" + }, + "sharedCounter": { + "description": "SharedCounter defines the shared counter from which the counters defined will be consumed.", + "type": "string" + } + }, + "required": [ + "sharedCounter", + "counters" + ], + "type": "object" + }, "io.k8s.api.resource.v1alpha3.DeviceRequest": { "description": "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.", "properties": { @@ -15962,7 +16037,7 @@ "description": "ResourceSliceSpec contains the information published by the driver in one ResourceSlice.", "properties": { "allNodes": { - "description": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", + "description": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", "type": "boolean" }, "devices": { @@ -15978,16 +16053,28 @@ "type": "string" }, "nodeName": { - "description": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.", + "description": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.", "type": "string" }, "nodeSelector": { "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelector", - "description": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set." + "description": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set." + }, + "perDeviceNodeSelection": { + "description": "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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + "type": "boolean" }, "pool": { "$ref": "#/definitions/io.k8s.api.resource.v1alpha3.ResourcePool", "description": "Pool describes the pool that this ResourceSlice belongs to." + }, + "sharedCounters": { + "description": "SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.\n\nThe names of the SharedCounters must be unique in the ResourceSlice.\n\nThe maximum number of SharedCounters is 32.", + "items": { + "$ref": "#/definitions/io.k8s.api.resource.v1alpha3.CounterSet" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" } }, "required": [ @@ -16055,6 +16142,10 @@ "io.k8s.api.resource.v1beta1.BasicDevice": { "description": "BasicDevice defines one device instance.", "properties": { + "allNodes": { + "description": "AllNodes indicates that all nodes have access to the device.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "type": "boolean" + }, "attributes": { "additionalProperties": { "$ref": "#/definitions/io.k8s.api.resource.v1beta1.DeviceAttribute" @@ -16069,6 +16160,22 @@ "description": "Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", "type": "object" }, + "consumesCounter": { + "description": "ConsumesCounter defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.\n\nThere can only be a single entry per counterSet.\n\nThe maximum number of device counter consumption entries is 32. This is the same as the maximum number of shared counters allowed in a ResourceSlice.", + "items": { + "$ref": "#/definitions/io.k8s.api.resource.v1beta1.DeviceCounterConsumption" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, + "nodeName": { + "description": "NodeName identifies the node where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "type": "string" + }, + "nodeSelector": { + "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelector", + "description": "NodeSelector defines the nodes where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set." + }, "taints": { "description": "If specified, these are the driver-defined taints.\n\nThe maximum number of taints is 8.\n\nThis is an alpha field and requires enabling the DRADeviceTaints feature gate.", "items": { @@ -16093,6 +16200,40 @@ ], "type": "object" }, + "io.k8s.api.resource.v1beta1.Counter": { + "description": "Counter describes a quantity associated with a device.", + "properties": { + "value": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity", + "description": "Value defines how much of a certain device counter is available." + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "io.k8s.api.resource.v1beta1.CounterSet": { + "description": "CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.\n\nThe 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.", + "properties": { + "counters": { + "additionalProperties": { + "$ref": "#/definitions/io.k8s.api.resource.v1beta1.Counter" + }, + "description": "Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.\n\nThe maximum number of counters is 32.", + "type": "object" + }, + "name": { + "description": "Name defines the name of the counter set. It must be a DNS label.", + "type": "string" + } + }, + "required": [ + "name", + "counters" + ], + "type": "object" + }, "io.k8s.api.resource.v1beta1.Device": { "description": "Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.", "properties": { @@ -16358,6 +16499,27 @@ }, "type": "object" }, + "io.k8s.api.resource.v1beta1.DeviceCounterConsumption": { + "description": "DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.", + "properties": { + "counters": { + "additionalProperties": { + "$ref": "#/definitions/io.k8s.api.resource.v1beta1.Counter" + }, + "description": "Counters defines the Counter that will be consumed by the device.\n\nThe maximum number of Counters is 32.", + "type": "object" + }, + "sharedCounter": { + "description": "SharedCounter defines the shared counter from which the counters defined will be consumed.", + "type": "string" + } + }, + "required": [ + "sharedCounter", + "counters" + ], + "type": "object" + }, "io.k8s.api.resource.v1beta1.DeviceRequest": { "description": "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.", "properties": { @@ -16922,7 +17084,7 @@ "description": "ResourceSliceSpec contains the information published by the driver in one ResourceSlice.", "properties": { "allNodes": { - "description": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", + "description": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", "type": "boolean" }, "devices": { @@ -16938,16 +17100,28 @@ "type": "string" }, "nodeName": { - "description": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.", + "description": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.", "type": "string" }, "nodeSelector": { "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelector", - "description": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set." + "description": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set." + }, + "perDeviceNodeSelection": { + "description": "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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + "type": "boolean" }, "pool": { "$ref": "#/definitions/io.k8s.api.resource.v1beta1.ResourcePool", "description": "Pool describes the pool that this ResourceSlice belongs to." + }, + "sharedCounters": { + "description": "SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.\n\nThe names of the SharedCounters must be unique in the ResourceSlice.\n\nThe maximum number of SharedCounters is 32.", + "items": { + "$ref": "#/definitions/io.k8s.api.resource.v1beta1.CounterSet" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" } }, "required": [ diff --git a/api/openapi-spec/v3/apis__resource.k8s.io__v1alpha3_openapi.json b/api/openapi-spec/v3/apis__resource.k8s.io__v1alpha3_openapi.json index 3e8a981eb41..e06ce5e4bf2 100644 --- a/api/openapi-spec/v3/apis__resource.k8s.io__v1alpha3_openapi.json +++ b/api/openapi-spec/v3/apis__resource.k8s.io__v1alpha3_openapi.json @@ -170,6 +170,10 @@ "io.k8s.api.resource.v1alpha3.BasicDevice": { "description": "BasicDevice defines one device instance.", "properties": { + "allNodes": { + "description": "AllNodes indicates that all nodes have access to the device.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "type": "boolean" + }, "attributes": { "additionalProperties": { "allOf": [ @@ -189,6 +193,31 @@ "description": "Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", "type": "object" }, + "consumesCounter": { + "description": "ConsumesCounter defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.\n\nThere can only be a single entry per counterSet.\n\nThe maximum number of device counter consumption entries is 32. This is the same as the maximum number of shared counters allowed in a ResourceSlice.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1alpha3.DeviceCounterConsumption" + } + ], + "default": {} + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, + "nodeName": { + "description": "NodeName identifies the node where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "type": "string" + }, + "nodeSelector": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.core.v1.NodeSelector" + } + ], + "description": "NodeSelector defines the nodes where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set." + }, "taints": { "description": "If specified, these are the driver-defined taints.\n\nThe maximum number of taints is 8.\n\nThis is an alpha field and requires enabling the DRADeviceTaints feature gate.", "items": { @@ -219,6 +248,50 @@ ], "type": "object" }, + "io.k8s.api.resource.v1alpha3.Counter": { + "description": "Counter describes a quantity associated with a device.", + "properties": { + "value": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.apimachinery.pkg.api.resource.Quantity" + } + ], + "description": "Value defines how much of a certain device counter is available." + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "io.k8s.api.resource.v1alpha3.CounterSet": { + "description": "CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.\n\nThe 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.", + "properties": { + "counters": { + "additionalProperties": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1alpha3.Counter" + } + ], + "default": {} + }, + "description": "Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.\n\nTo 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.\n\nThe maximum number of counters is 32.", + "type": "object" + }, + "name": { + "default": "", + "description": "Name defines the name of the counter set. It must be a DNS label.", + "type": "string" + } + }, + "required": [ + "name", + "counters" + ], + "type": "object" + }, "io.k8s.api.resource.v1alpha3.Device": { "description": "Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.", "properties": { @@ -547,6 +620,33 @@ }, "type": "object" }, + "io.k8s.api.resource.v1alpha3.DeviceCounterConsumption": { + "description": "DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.", + "properties": { + "counters": { + "additionalProperties": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1alpha3.Counter" + } + ], + "default": {} + }, + "description": "Counters defines the Counter that will be consumed by the device.\n\nThe maximum number of Counters is 32.", + "type": "object" + }, + "sharedCounter": { + "default": "", + "description": "SharedCounter defines the shared counter from which the counters defined will be consumed.", + "type": "string" + } + }, + "required": [ + "sharedCounter", + "counters" + ], + "type": "object" + }, "io.k8s.api.resource.v1alpha3.DeviceRequest": { "description": "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.", "properties": { @@ -1414,7 +1514,7 @@ "description": "ResourceSliceSpec contains the information published by the driver in one ResourceSlice.", "properties": { "allNodes": { - "description": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", + "description": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", "type": "boolean" }, "devices": { @@ -1436,7 +1536,7 @@ "type": "string" }, "nodeName": { - "description": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.", + "description": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.", "type": "string" }, "nodeSelector": { @@ -1445,7 +1545,11 @@ "$ref": "#/components/schemas/io.k8s.api.core.v1.NodeSelector" } ], - "description": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set." + "description": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set." + }, + "perDeviceNodeSelection": { + "description": "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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + "type": "boolean" }, "pool": { "allOf": [ @@ -1455,6 +1559,19 @@ ], "default": {}, "description": "Pool describes the pool that this ResourceSlice belongs to." + }, + "sharedCounters": { + "description": "SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.\n\nThe names of the SharedCounters must be unique in the ResourceSlice.\n\nThe maximum number of SharedCounters is 32.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1alpha3.CounterSet" + } + ], + "default": {} + }, + "type": "array", + "x-kubernetes-list-type": "atomic" } }, "required": [ diff --git a/api/openapi-spec/v3/apis__resource.k8s.io__v1beta1_openapi.json b/api/openapi-spec/v3/apis__resource.k8s.io__v1beta1_openapi.json index 031a1c8bb33..53510d9b9c4 100644 --- a/api/openapi-spec/v3/apis__resource.k8s.io__v1beta1_openapi.json +++ b/api/openapi-spec/v3/apis__resource.k8s.io__v1beta1_openapi.json @@ -170,6 +170,10 @@ "io.k8s.api.resource.v1beta1.BasicDevice": { "description": "BasicDevice defines one device instance.", "properties": { + "allNodes": { + "description": "AllNodes indicates that all nodes have access to the device.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "type": "boolean" + }, "attributes": { "additionalProperties": { "allOf": [ @@ -194,6 +198,31 @@ "description": "Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", "type": "object" }, + "consumesCounter": { + "description": "ConsumesCounter defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.\n\nThere can only be a single entry per counterSet.\n\nThe maximum number of device counter consumption entries is 32. This is the same as the maximum number of shared counters allowed in a ResourceSlice.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1beta1.DeviceCounterConsumption" + } + ], + "default": {} + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, + "nodeName": { + "description": "NodeName identifies the node where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "type": "string" + }, + "nodeSelector": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.core.v1.NodeSelector" + } + ], + "description": "NodeSelector defines the nodes where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set." + }, "taints": { "description": "If specified, these are the driver-defined taints.\n\nThe maximum number of taints is 8.\n\nThis is an alpha field and requires enabling the DRADeviceTaints feature gate.", "items": { @@ -224,6 +253,50 @@ ], "type": "object" }, + "io.k8s.api.resource.v1beta1.Counter": { + "description": "Counter describes a quantity associated with a device.", + "properties": { + "value": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.apimachinery.pkg.api.resource.Quantity" + } + ], + "description": "Value defines how much of a certain device counter is available." + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "io.k8s.api.resource.v1beta1.CounterSet": { + "description": "CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.\n\nThe 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.", + "properties": { + "counters": { + "additionalProperties": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1beta1.Counter" + } + ], + "default": {} + }, + "description": "Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.\n\nThe maximum number of counters is 32.", + "type": "object" + }, + "name": { + "default": "", + "description": "Name defines the name of the counter set. It must be a DNS label.", + "type": "string" + } + }, + "required": [ + "name", + "counters" + ], + "type": "object" + }, "io.k8s.api.resource.v1beta1.Device": { "description": "Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.", "properties": { @@ -569,6 +642,33 @@ }, "type": "object" }, + "io.k8s.api.resource.v1beta1.DeviceCounterConsumption": { + "description": "DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.", + "properties": { + "counters": { + "additionalProperties": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1beta1.Counter" + } + ], + "default": {} + }, + "description": "Counters defines the Counter that will be consumed by the device.\n\nThe maximum number of Counters is 32.", + "type": "object" + }, + "sharedCounter": { + "default": "", + "description": "SharedCounter defines the shared counter from which the counters defined will be consumed.", + "type": "string" + } + }, + "required": [ + "sharedCounter", + "counters" + ], + "type": "object" + }, "io.k8s.api.resource.v1beta1.DeviceRequest": { "description": "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.", "properties": { @@ -1288,7 +1388,7 @@ "description": "ResourceSliceSpec contains the information published by the driver in one ResourceSlice.", "properties": { "allNodes": { - "description": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", + "description": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", "type": "boolean" }, "devices": { @@ -1310,7 +1410,7 @@ "type": "string" }, "nodeName": { - "description": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.", + "description": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.", "type": "string" }, "nodeSelector": { @@ -1319,7 +1419,11 @@ "$ref": "#/components/schemas/io.k8s.api.core.v1.NodeSelector" } ], - "description": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set." + "description": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set." + }, + "perDeviceNodeSelection": { + "description": "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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + "type": "boolean" }, "pool": { "allOf": [ @@ -1329,6 +1433,19 @@ ], "default": {}, "description": "Pool describes the pool that this ResourceSlice belongs to." + }, + "sharedCounters": { + "description": "SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.\n\nThe names of the SharedCounters must be unique in the ResourceSlice.\n\nThe maximum number of SharedCounters is 32.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1beta1.CounterSet" + } + ], + "default": {} + }, + "type": "array", + "x-kubernetes-list-type": "atomic" } }, "required": [ diff --git a/pkg/apis/resource/v1alpha3/zz_generated.conversion.go b/pkg/apis/resource/v1alpha3/zz_generated.conversion.go index c2389524dff..40ebbe2d7e8 100644 --- a/pkg/apis/resource/v1alpha3/zz_generated.conversion.go +++ b/pkg/apis/resource/v1alpha3/zz_generated.conversion.go @@ -82,6 +82,26 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*resourcev1alpha3.Counter)(nil), (*resource.Counter)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_Counter_To_resource_Counter(a.(*resourcev1alpha3.Counter), b.(*resource.Counter), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*resource.Counter)(nil), (*resourcev1alpha3.Counter)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_resource_Counter_To_v1alpha3_Counter(a.(*resource.Counter), b.(*resourcev1alpha3.Counter), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*resourcev1alpha3.CounterSet)(nil), (*resource.CounterSet)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_CounterSet_To_resource_CounterSet(a.(*resourcev1alpha3.CounterSet), b.(*resource.CounterSet), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*resource.CounterSet)(nil), (*resourcev1alpha3.CounterSet)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_resource_CounterSet_To_v1alpha3_CounterSet(a.(*resource.CounterSet), b.(*resourcev1alpha3.CounterSet), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*resourcev1alpha3.Device)(nil), (*resource.Device)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha3_Device_To_resource_Device(a.(*resourcev1alpha3.Device), b.(*resource.Device), scope) }); err != nil { @@ -202,6 +222,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*resourcev1alpha3.DeviceCounterConsumption)(nil), (*resource.DeviceCounterConsumption)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DeviceCounterConsumption_To_resource_DeviceCounterConsumption(a.(*resourcev1alpha3.DeviceCounterConsumption), b.(*resource.DeviceCounterConsumption), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*resource.DeviceCounterConsumption)(nil), (*resourcev1alpha3.DeviceCounterConsumption)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_resource_DeviceCounterConsumption_To_v1alpha3_DeviceCounterConsumption(a.(*resource.DeviceCounterConsumption), b.(*resourcev1alpha3.DeviceCounterConsumption), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*resourcev1alpha3.DeviceRequest)(nil), (*resource.DeviceRequest)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha3_DeviceRequest_To_resource_DeviceRequest(a.(*resourcev1alpha3.DeviceRequest), b.(*resource.DeviceRequest), scope) }); err != nil { @@ -526,6 +556,10 @@ func autoConvert_v1alpha3_BasicDevice_To_resource_BasicDevice(in *resourcev1alph } else { out.Capacity = nil } + out.ConsumesCounter = *(*[]resource.DeviceCounterConsumption)(unsafe.Pointer(&in.ConsumesCounter)) + out.NodeName = (*string)(unsafe.Pointer(in.NodeName)) + out.NodeSelector = (*core.NodeSelector)(unsafe.Pointer(in.NodeSelector)) + out.AllNodes = (*bool)(unsafe.Pointer(in.AllNodes)) out.Taints = *(*[]resource.DeviceTaint)(unsafe.Pointer(&in.Taints)) return nil } @@ -550,6 +584,10 @@ func autoConvert_resource_BasicDevice_To_v1alpha3_BasicDevice(in *resource.Basic } else { out.Capacity = nil } + out.ConsumesCounter = *(*[]resourcev1alpha3.DeviceCounterConsumption)(unsafe.Pointer(&in.ConsumesCounter)) + out.NodeName = (*string)(unsafe.Pointer(in.NodeName)) + out.NodeSelector = (*corev1.NodeSelector)(unsafe.Pointer(in.NodeSelector)) + out.AllNodes = (*bool)(unsafe.Pointer(in.AllNodes)) out.Taints = *(*[]resourcev1alpha3.DeviceTaint)(unsafe.Pointer(&in.Taints)) return nil } @@ -579,6 +617,48 @@ func Convert_resource_CELDeviceSelector_To_v1alpha3_CELDeviceSelector(in *resour return autoConvert_resource_CELDeviceSelector_To_v1alpha3_CELDeviceSelector(in, out, s) } +func autoConvert_v1alpha3_Counter_To_resource_Counter(in *resourcev1alpha3.Counter, out *resource.Counter, s conversion.Scope) error { + out.Value = in.Value + return nil +} + +// Convert_v1alpha3_Counter_To_resource_Counter is an autogenerated conversion function. +func Convert_v1alpha3_Counter_To_resource_Counter(in *resourcev1alpha3.Counter, out *resource.Counter, s conversion.Scope) error { + return autoConvert_v1alpha3_Counter_To_resource_Counter(in, out, s) +} + +func autoConvert_resource_Counter_To_v1alpha3_Counter(in *resource.Counter, out *resourcev1alpha3.Counter, s conversion.Scope) error { + out.Value = in.Value + return nil +} + +// Convert_resource_Counter_To_v1alpha3_Counter is an autogenerated conversion function. +func Convert_resource_Counter_To_v1alpha3_Counter(in *resource.Counter, out *resourcev1alpha3.Counter, s conversion.Scope) error { + return autoConvert_resource_Counter_To_v1alpha3_Counter(in, out, s) +} + +func autoConvert_v1alpha3_CounterSet_To_resource_CounterSet(in *resourcev1alpha3.CounterSet, out *resource.CounterSet, s conversion.Scope) error { + out.Name = in.Name + out.Counters = *(*map[string]resource.Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_v1alpha3_CounterSet_To_resource_CounterSet is an autogenerated conversion function. +func Convert_v1alpha3_CounterSet_To_resource_CounterSet(in *resourcev1alpha3.CounterSet, out *resource.CounterSet, s conversion.Scope) error { + return autoConvert_v1alpha3_CounterSet_To_resource_CounterSet(in, out, s) +} + +func autoConvert_resource_CounterSet_To_v1alpha3_CounterSet(in *resource.CounterSet, out *resourcev1alpha3.CounterSet, s conversion.Scope) error { + out.Name = in.Name + out.Counters = *(*map[string]resourcev1alpha3.Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_resource_CounterSet_To_v1alpha3_CounterSet is an autogenerated conversion function. +func Convert_resource_CounterSet_To_v1alpha3_CounterSet(in *resource.CounterSet, out *resourcev1alpha3.CounterSet, s conversion.Scope) error { + return autoConvert_resource_CounterSet_To_v1alpha3_CounterSet(in, out, s) +} + func autoConvert_v1alpha3_Device_To_resource_Device(in *resourcev1alpha3.Device, out *resource.Device, s conversion.Scope) error { out.Name = in.Name if in.Basic != nil { @@ -879,6 +959,28 @@ func Convert_resource_DeviceConstraint_To_v1alpha3_DeviceConstraint(in *resource return autoConvert_resource_DeviceConstraint_To_v1alpha3_DeviceConstraint(in, out, s) } +func autoConvert_v1alpha3_DeviceCounterConsumption_To_resource_DeviceCounterConsumption(in *resourcev1alpha3.DeviceCounterConsumption, out *resource.DeviceCounterConsumption, s conversion.Scope) error { + out.SharedCounter = in.SharedCounter + out.Counters = *(*map[string]resource.Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_v1alpha3_DeviceCounterConsumption_To_resource_DeviceCounterConsumption is an autogenerated conversion function. +func Convert_v1alpha3_DeviceCounterConsumption_To_resource_DeviceCounterConsumption(in *resourcev1alpha3.DeviceCounterConsumption, out *resource.DeviceCounterConsumption, s conversion.Scope) error { + return autoConvert_v1alpha3_DeviceCounterConsumption_To_resource_DeviceCounterConsumption(in, out, s) +} + +func autoConvert_resource_DeviceCounterConsumption_To_v1alpha3_DeviceCounterConsumption(in *resource.DeviceCounterConsumption, out *resourcev1alpha3.DeviceCounterConsumption, s conversion.Scope) error { + out.SharedCounter = in.SharedCounter + out.Counters = *(*map[string]resourcev1alpha3.Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_resource_DeviceCounterConsumption_To_v1alpha3_DeviceCounterConsumption is an autogenerated conversion function. +func Convert_resource_DeviceCounterConsumption_To_v1alpha3_DeviceCounterConsumption(in *resource.DeviceCounterConsumption, out *resourcev1alpha3.DeviceCounterConsumption, s conversion.Scope) error { + return autoConvert_resource_DeviceCounterConsumption_To_v1alpha3_DeviceCounterConsumption(in, out, s) +} + func autoConvert_v1alpha3_DeviceRequest_To_resource_DeviceRequest(in *resourcev1alpha3.DeviceRequest, out *resource.DeviceRequest, s conversion.Scope) error { out.Name = in.Name out.DeviceClassName = in.DeviceClassName @@ -1508,6 +1610,8 @@ func autoConvert_v1alpha3_ResourceSliceSpec_To_resource_ResourceSliceSpec(in *re } else { out.Devices = nil } + out.PerDeviceNodeSelection = (*bool)(unsafe.Pointer(in.PerDeviceNodeSelection)) + out.SharedCounters = *(*[]resource.CounterSet)(unsafe.Pointer(&in.SharedCounters)) return nil } @@ -1535,6 +1639,8 @@ func autoConvert_resource_ResourceSliceSpec_To_v1alpha3_ResourceSliceSpec(in *re } else { out.Devices = nil } + out.PerDeviceNodeSelection = (*bool)(unsafe.Pointer(in.PerDeviceNodeSelection)) + out.SharedCounters = *(*[]resourcev1alpha3.CounterSet)(unsafe.Pointer(&in.SharedCounters)) return nil } diff --git a/pkg/apis/resource/v1beta1/zz_generated.conversion.go b/pkg/apis/resource/v1beta1/zz_generated.conversion.go index ecafebddddc..669f6bd99fb 100644 --- a/pkg/apis/resource/v1beta1/zz_generated.conversion.go +++ b/pkg/apis/resource/v1beta1/zz_generated.conversion.go @@ -81,6 +81,26 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*resourcev1beta1.Counter)(nil), (*resource.Counter)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_Counter_To_resource_Counter(a.(*resourcev1beta1.Counter), b.(*resource.Counter), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*resource.Counter)(nil), (*resourcev1beta1.Counter)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_resource_Counter_To_v1beta1_Counter(a.(*resource.Counter), b.(*resourcev1beta1.Counter), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*resourcev1beta1.CounterSet)(nil), (*resource.CounterSet)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_CounterSet_To_resource_CounterSet(a.(*resourcev1beta1.CounterSet), b.(*resource.CounterSet), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*resource.CounterSet)(nil), (*resourcev1beta1.CounterSet)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_resource_CounterSet_To_v1beta1_CounterSet(a.(*resource.CounterSet), b.(*resourcev1beta1.CounterSet), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*resourcev1beta1.Device)(nil), (*resource.Device)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_Device_To_resource_Device(a.(*resourcev1beta1.Device), b.(*resource.Device), scope) }); err != nil { @@ -211,6 +231,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*resourcev1beta1.DeviceCounterConsumption)(nil), (*resource.DeviceCounterConsumption)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DeviceCounterConsumption_To_resource_DeviceCounterConsumption(a.(*resourcev1beta1.DeviceCounterConsumption), b.(*resource.DeviceCounterConsumption), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*resource.DeviceCounterConsumption)(nil), (*resourcev1beta1.DeviceCounterConsumption)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_resource_DeviceCounterConsumption_To_v1beta1_DeviceCounterConsumption(a.(*resource.DeviceCounterConsumption), b.(*resourcev1beta1.DeviceCounterConsumption), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*resourcev1beta1.DeviceRequest)(nil), (*resource.DeviceRequest)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_DeviceRequest_To_resource_DeviceRequest(a.(*resourcev1beta1.DeviceRequest), b.(*resource.DeviceRequest), scope) }); err != nil { @@ -473,6 +503,10 @@ func Convert_resource_AllocationResult_To_v1beta1_AllocationResult(in *resource. func autoConvert_v1beta1_BasicDevice_To_resource_BasicDevice(in *resourcev1beta1.BasicDevice, out *resource.BasicDevice, s conversion.Scope) error { out.Attributes = *(*map[resource.QualifiedName]resource.DeviceAttribute)(unsafe.Pointer(&in.Attributes)) out.Capacity = *(*map[resource.QualifiedName]resource.DeviceCapacity)(unsafe.Pointer(&in.Capacity)) + out.ConsumesCounter = *(*[]resource.DeviceCounterConsumption)(unsafe.Pointer(&in.ConsumesCounter)) + out.NodeName = (*string)(unsafe.Pointer(in.NodeName)) + out.NodeSelector = (*core.NodeSelector)(unsafe.Pointer(in.NodeSelector)) + out.AllNodes = (*bool)(unsafe.Pointer(in.AllNodes)) out.Taints = *(*[]resource.DeviceTaint)(unsafe.Pointer(&in.Taints)) return nil } @@ -485,6 +519,10 @@ func Convert_v1beta1_BasicDevice_To_resource_BasicDevice(in *resourcev1beta1.Bas func autoConvert_resource_BasicDevice_To_v1beta1_BasicDevice(in *resource.BasicDevice, out *resourcev1beta1.BasicDevice, s conversion.Scope) error { out.Attributes = *(*map[resourcev1beta1.QualifiedName]resourcev1beta1.DeviceAttribute)(unsafe.Pointer(&in.Attributes)) out.Capacity = *(*map[resourcev1beta1.QualifiedName]resourcev1beta1.DeviceCapacity)(unsafe.Pointer(&in.Capacity)) + out.ConsumesCounter = *(*[]resourcev1beta1.DeviceCounterConsumption)(unsafe.Pointer(&in.ConsumesCounter)) + out.NodeName = (*string)(unsafe.Pointer(in.NodeName)) + out.NodeSelector = (*corev1.NodeSelector)(unsafe.Pointer(in.NodeSelector)) + out.AllNodes = (*bool)(unsafe.Pointer(in.AllNodes)) out.Taints = *(*[]resourcev1beta1.DeviceTaint)(unsafe.Pointer(&in.Taints)) return nil } @@ -514,6 +552,48 @@ func Convert_resource_CELDeviceSelector_To_v1beta1_CELDeviceSelector(in *resourc return autoConvert_resource_CELDeviceSelector_To_v1beta1_CELDeviceSelector(in, out, s) } +func autoConvert_v1beta1_Counter_To_resource_Counter(in *resourcev1beta1.Counter, out *resource.Counter, s conversion.Scope) error { + out.Value = in.Value + return nil +} + +// Convert_v1beta1_Counter_To_resource_Counter is an autogenerated conversion function. +func Convert_v1beta1_Counter_To_resource_Counter(in *resourcev1beta1.Counter, out *resource.Counter, s conversion.Scope) error { + return autoConvert_v1beta1_Counter_To_resource_Counter(in, out, s) +} + +func autoConvert_resource_Counter_To_v1beta1_Counter(in *resource.Counter, out *resourcev1beta1.Counter, s conversion.Scope) error { + out.Value = in.Value + return nil +} + +// Convert_resource_Counter_To_v1beta1_Counter is an autogenerated conversion function. +func Convert_resource_Counter_To_v1beta1_Counter(in *resource.Counter, out *resourcev1beta1.Counter, s conversion.Scope) error { + return autoConvert_resource_Counter_To_v1beta1_Counter(in, out, s) +} + +func autoConvert_v1beta1_CounterSet_To_resource_CounterSet(in *resourcev1beta1.CounterSet, out *resource.CounterSet, s conversion.Scope) error { + out.Name = in.Name + out.Counters = *(*map[string]resource.Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_v1beta1_CounterSet_To_resource_CounterSet is an autogenerated conversion function. +func Convert_v1beta1_CounterSet_To_resource_CounterSet(in *resourcev1beta1.CounterSet, out *resource.CounterSet, s conversion.Scope) error { + return autoConvert_v1beta1_CounterSet_To_resource_CounterSet(in, out, s) +} + +func autoConvert_resource_CounterSet_To_v1beta1_CounterSet(in *resource.CounterSet, out *resourcev1beta1.CounterSet, s conversion.Scope) error { + out.Name = in.Name + out.Counters = *(*map[string]resourcev1beta1.Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_resource_CounterSet_To_v1beta1_CounterSet is an autogenerated conversion function. +func Convert_resource_CounterSet_To_v1beta1_CounterSet(in *resource.CounterSet, out *resourcev1beta1.CounterSet, s conversion.Scope) error { + return autoConvert_resource_CounterSet_To_v1beta1_CounterSet(in, out, s) +} + func autoConvert_v1beta1_Device_To_resource_Device(in *resourcev1beta1.Device, out *resource.Device, s conversion.Scope) error { out.Name = in.Name out.Basic = (*resource.BasicDevice)(unsafe.Pointer(in.Basic)) @@ -818,6 +898,28 @@ func Convert_resource_DeviceConstraint_To_v1beta1_DeviceConstraint(in *resource. return autoConvert_resource_DeviceConstraint_To_v1beta1_DeviceConstraint(in, out, s) } +func autoConvert_v1beta1_DeviceCounterConsumption_To_resource_DeviceCounterConsumption(in *resourcev1beta1.DeviceCounterConsumption, out *resource.DeviceCounterConsumption, s conversion.Scope) error { + out.SharedCounter = in.SharedCounter + out.Counters = *(*map[string]resource.Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_v1beta1_DeviceCounterConsumption_To_resource_DeviceCounterConsumption is an autogenerated conversion function. +func Convert_v1beta1_DeviceCounterConsumption_To_resource_DeviceCounterConsumption(in *resourcev1beta1.DeviceCounterConsumption, out *resource.DeviceCounterConsumption, s conversion.Scope) error { + return autoConvert_v1beta1_DeviceCounterConsumption_To_resource_DeviceCounterConsumption(in, out, s) +} + +func autoConvert_resource_DeviceCounterConsumption_To_v1beta1_DeviceCounterConsumption(in *resource.DeviceCounterConsumption, out *resourcev1beta1.DeviceCounterConsumption, s conversion.Scope) error { + out.SharedCounter = in.SharedCounter + out.Counters = *(*map[string]resourcev1beta1.Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_resource_DeviceCounterConsumption_To_v1beta1_DeviceCounterConsumption is an autogenerated conversion function. +func Convert_resource_DeviceCounterConsumption_To_v1beta1_DeviceCounterConsumption(in *resource.DeviceCounterConsumption, out *resourcev1beta1.DeviceCounterConsumption, s conversion.Scope) error { + return autoConvert_resource_DeviceCounterConsumption_To_v1beta1_DeviceCounterConsumption(in, out, s) +} + func autoConvert_v1beta1_DeviceRequest_To_resource_DeviceRequest(in *resourcev1beta1.DeviceRequest, out *resource.DeviceRequest, s conversion.Scope) error { out.Name = in.Name out.DeviceClassName = in.DeviceClassName @@ -1315,6 +1417,8 @@ func autoConvert_v1beta1_ResourceSliceSpec_To_resource_ResourceSliceSpec(in *res out.NodeSelector = (*core.NodeSelector)(unsafe.Pointer(in.NodeSelector)) out.AllNodes = in.AllNodes out.Devices = *(*[]resource.Device)(unsafe.Pointer(&in.Devices)) + out.PerDeviceNodeSelection = (*bool)(unsafe.Pointer(in.PerDeviceNodeSelection)) + out.SharedCounters = *(*[]resource.CounterSet)(unsafe.Pointer(&in.SharedCounters)) return nil } @@ -1332,6 +1436,8 @@ func autoConvert_resource_ResourceSliceSpec_To_v1beta1_ResourceSliceSpec(in *res out.NodeSelector = (*corev1.NodeSelector)(unsafe.Pointer(in.NodeSelector)) out.AllNodes = in.AllNodes out.Devices = *(*[]resourcev1beta1.Device)(unsafe.Pointer(&in.Devices)) + out.PerDeviceNodeSelection = (*bool)(unsafe.Pointer(in.PerDeviceNodeSelection)) + out.SharedCounters = *(*[]resourcev1beta1.CounterSet)(unsafe.Pointer(&in.SharedCounters)) return nil } diff --git a/pkg/apis/resource/zz_generated.deepcopy.go b/pkg/apis/resource/zz_generated.deepcopy.go index f227e27381d..bbfc472d528 100644 --- a/pkg/apis/resource/zz_generated.deepcopy.go +++ b/pkg/apis/resource/zz_generated.deepcopy.go @@ -99,6 +99,28 @@ func (in *BasicDevice) DeepCopyInto(out *BasicDevice) { (*out)[key] = *val.DeepCopy() } } + if in.ConsumesCounter != nil { + in, out := &in.ConsumesCounter, &out.ConsumesCounter + *out = make([]DeviceCounterConsumption, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.NodeName != nil { + in, out := &in.NodeName, &out.NodeName + *out = new(string) + **out = **in + } + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = new(core.NodeSelector) + (*in).DeepCopyInto(*out) + } + if in.AllNodes != nil { + in, out := &in.AllNodes, &out.AllNodes + *out = new(bool) + **out = **in + } if in.Taints != nil { in, out := &in.Taints, &out.Taints *out = make([]DeviceTaint, len(*in)) @@ -135,6 +157,46 @@ func (in *CELDeviceSelector) DeepCopy() *CELDeviceSelector { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Counter) DeepCopyInto(out *Counter) { + *out = *in + out.Value = in.Value.DeepCopy() + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Counter. +func (in *Counter) DeepCopy() *Counter { + if in == nil { + return nil + } + out := new(Counter) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CounterSet) DeepCopyInto(out *CounterSet) { + *out = *in + if in.Counters != nil { + in, out := &in.Counters, &out.Counters + *out = make(map[string]Counter, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CounterSet. +func (in *CounterSet) DeepCopy() *CounterSet { + if in == nil { + return nil + } + out := new(CounterSet) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Device) DeepCopyInto(out *Device) { *out = *in @@ -474,6 +536,29 @@ func (in *DeviceConstraint) DeepCopy() *DeviceConstraint { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceCounterConsumption) DeepCopyInto(out *DeviceCounterConsumption) { + *out = *in + if in.Counters != nil { + in, out := &in.Counters, &out.Counters + *out = make(map[string]Counter, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceCounterConsumption. +func (in *DeviceCounterConsumption) DeepCopy() *DeviceCounterConsumption { + if in == nil { + return nil + } + out := new(DeviceCounterConsumption) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeviceRequest) DeepCopyInto(out *DeviceRequest) { *out = *in @@ -1096,6 +1181,18 @@ func (in *ResourceSliceSpec) DeepCopyInto(out *ResourceSliceSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.PerDeviceNodeSelection != nil { + in, out := &in.PerDeviceNodeSelection, &out.PerDeviceNodeSelection + *out = new(bool) + **out = **in + } + if in.SharedCounters != nil { + in, out := &in.SharedCounters, &out.SharedCounters + *out = make([]CounterSet, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 1d422047ebc..e10bee85623 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -921,6 +921,8 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/api/resource/v1alpha3.AllocationResult": schema_k8sio_api_resource_v1alpha3_AllocationResult(ref), "k8s.io/api/resource/v1alpha3.BasicDevice": schema_k8sio_api_resource_v1alpha3_BasicDevice(ref), "k8s.io/api/resource/v1alpha3.CELDeviceSelector": schema_k8sio_api_resource_v1alpha3_CELDeviceSelector(ref), + "k8s.io/api/resource/v1alpha3.Counter": schema_k8sio_api_resource_v1alpha3_Counter(ref), + "k8s.io/api/resource/v1alpha3.CounterSet": schema_k8sio_api_resource_v1alpha3_CounterSet(ref), "k8s.io/api/resource/v1alpha3.Device": schema_k8sio_api_resource_v1alpha3_Device(ref), "k8s.io/api/resource/v1alpha3.DeviceAllocationConfiguration": schema_k8sio_api_resource_v1alpha3_DeviceAllocationConfiguration(ref), "k8s.io/api/resource/v1alpha3.DeviceAllocationResult": schema_k8sio_api_resource_v1alpha3_DeviceAllocationResult(ref), @@ -933,6 +935,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/api/resource/v1alpha3.DeviceClassSpec": schema_k8sio_api_resource_v1alpha3_DeviceClassSpec(ref), "k8s.io/api/resource/v1alpha3.DeviceConfiguration": schema_k8sio_api_resource_v1alpha3_DeviceConfiguration(ref), "k8s.io/api/resource/v1alpha3.DeviceConstraint": schema_k8sio_api_resource_v1alpha3_DeviceConstraint(ref), + "k8s.io/api/resource/v1alpha3.DeviceCounterConsumption": schema_k8sio_api_resource_v1alpha3_DeviceCounterConsumption(ref), "k8s.io/api/resource/v1alpha3.DeviceRequest": schema_k8sio_api_resource_v1alpha3_DeviceRequest(ref), "k8s.io/api/resource/v1alpha3.DeviceRequestAllocationResult": schema_k8sio_api_resource_v1alpha3_DeviceRequestAllocationResult(ref), "k8s.io/api/resource/v1alpha3.DeviceSelector": schema_k8sio_api_resource_v1alpha3_DeviceSelector(ref), @@ -961,6 +964,8 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/api/resource/v1beta1.AllocationResult": schema_k8sio_api_resource_v1beta1_AllocationResult(ref), "k8s.io/api/resource/v1beta1.BasicDevice": schema_k8sio_api_resource_v1beta1_BasicDevice(ref), "k8s.io/api/resource/v1beta1.CELDeviceSelector": schema_k8sio_api_resource_v1beta1_CELDeviceSelector(ref), + "k8s.io/api/resource/v1beta1.Counter": schema_k8sio_api_resource_v1beta1_Counter(ref), + "k8s.io/api/resource/v1beta1.CounterSet": schema_k8sio_api_resource_v1beta1_CounterSet(ref), "k8s.io/api/resource/v1beta1.Device": schema_k8sio_api_resource_v1beta1_Device(ref), "k8s.io/api/resource/v1beta1.DeviceAllocationConfiguration": schema_k8sio_api_resource_v1beta1_DeviceAllocationConfiguration(ref), "k8s.io/api/resource/v1beta1.DeviceAllocationResult": schema_k8sio_api_resource_v1beta1_DeviceAllocationResult(ref), @@ -974,6 +979,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/api/resource/v1beta1.DeviceClassSpec": schema_k8sio_api_resource_v1beta1_DeviceClassSpec(ref), "k8s.io/api/resource/v1beta1.DeviceConfiguration": schema_k8sio_api_resource_v1beta1_DeviceConfiguration(ref), "k8s.io/api/resource/v1beta1.DeviceConstraint": schema_k8sio_api_resource_v1beta1_DeviceConstraint(ref), + "k8s.io/api/resource/v1beta1.DeviceCounterConsumption": schema_k8sio_api_resource_v1beta1_DeviceCounterConsumption(ref), "k8s.io/api/resource/v1beta1.DeviceRequest": schema_k8sio_api_resource_v1beta1_DeviceRequest(ref), "k8s.io/api/resource/v1beta1.DeviceRequestAllocationResult": schema_k8sio_api_resource_v1beta1_DeviceRequestAllocationResult(ref), "k8s.io/api/resource/v1beta1.DeviceSelector": schema_k8sio_api_resource_v1beta1_DeviceSelector(ref), @@ -47260,6 +47266,45 @@ func schema_k8sio_api_resource_v1alpha3_BasicDevice(ref common.ReferenceCallback }, }, }, + "consumesCounter": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "ConsumesCounter defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.\n\nThere can only be a single entry per counterSet.\n\nThe maximum number of device counter consumption entries is 32. This is the same as the maximum number of shared counters allowed in a ResourceSlice.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1alpha3.DeviceCounterConsumption"), + }, + }, + }, + }, + }, + "nodeName": { + SchemaProps: spec.SchemaProps{ + Description: "NodeName identifies the node where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + Type: []string{"string"}, + Format: "", + }, + }, + "nodeSelector": { + SchemaProps: spec.SchemaProps{ + Description: "NodeSelector defines the nodes where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + Ref: ref("k8s.io/api/core/v1.NodeSelector"), + }, + }, + "allNodes": { + SchemaProps: spec.SchemaProps{ + Description: "AllNodes indicates that all nodes have access to the device.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + Type: []string{"boolean"}, + Format: "", + }, + }, "taints": { VendorExtensible: spec.VendorExtensible{ Extensions: spec.Extensions{ @@ -47283,7 +47328,7 @@ func schema_k8sio_api_resource_v1alpha3_BasicDevice(ref common.ReferenceCallback }, }, Dependencies: []string{ - "k8s.io/api/resource/v1alpha3.DeviceAttribute", "k8s.io/api/resource/v1alpha3.DeviceTaint", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + "k8s.io/api/core/v1.NodeSelector", "k8s.io/api/resource/v1alpha3.DeviceAttribute", "k8s.io/api/resource/v1alpha3.DeviceCounterConsumption", "k8s.io/api/resource/v1alpha3.DeviceTaint", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, } } @@ -47309,6 +47354,67 @@ func schema_k8sio_api_resource_v1alpha3_CELDeviceSelector(ref common.ReferenceCa } } +func schema_k8sio_api_resource_v1alpha3_Counter(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Counter describes a quantity associated with a device.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "value": { + SchemaProps: spec.SchemaProps{ + Description: "Value defines how much of a certain device counter is available.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"value"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_resource_v1alpha3_CounterSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.\n\nThe 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.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name defines the name of the counter set. It must be a DNS label.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "counters": { + SchemaProps: spec.SchemaProps{ + Description: "Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.\n\nTo 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.\n\nThe maximum number of counters is 32.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1alpha3.Counter"), + }, + }, + }, + }, + }, + }, + Required: []string{"name", "counters"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/resource/v1alpha3.Counter"}, + } +} + func schema_k8sio_api_resource_v1alpha3_Device(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -47826,6 +47932,45 @@ func schema_k8sio_api_resource_v1alpha3_DeviceConstraint(ref common.ReferenceCal } } +func schema_k8sio_api_resource_v1alpha3_DeviceCounterConsumption(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "sharedCounter": { + SchemaProps: spec.SchemaProps{ + Description: "SharedCounter defines the shared counter from which the counters defined will be consumed.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "counters": { + SchemaProps: spec.SchemaProps{ + Description: "Counters defines the Counter that will be consumed by the device.\n\nThe maximum number of Counters is 32.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1alpha3.Counter"), + }, + }, + }, + }, + }, + }, + Required: []string{"sharedCounter", "counters"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/resource/v1alpha3.Counter"}, + } +} + func schema_k8sio_api_resource_v1alpha3_DeviceRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -48995,20 +49140,20 @@ func schema_k8sio_api_resource_v1alpha3_ResourceSliceSpec(ref common.ReferenceCa }, "nodeName": { SchemaProps: spec.SchemaProps{ - Description: "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.", + Description: "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.", Type: []string{"string"}, Format: "", }, }, "nodeSelector": { SchemaProps: spec.SchemaProps{ - Description: "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", + Description: "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", Ref: ref("k8s.io/api/core/v1.NodeSelector"), }, }, "allNodes": { SchemaProps: spec.SchemaProps{ - Description: "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", + Description: "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", Type: []string{"boolean"}, Format: "", }, @@ -49032,12 +49177,38 @@ func schema_k8sio_api_resource_v1alpha3_ResourceSliceSpec(ref common.ReferenceCa }, }, }, + "perDeviceNodeSelection": { + SchemaProps: spec.SchemaProps{ + Description: "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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "sharedCounters": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.\n\nThe names of the SharedCounters must be unique in the ResourceSlice.\n\nThe maximum number of SharedCounters is 32.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1alpha3.CounterSet"), + }, + }, + }, + }, + }, }, Required: []string{"driver", "pool"}, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.NodeSelector", "k8s.io/api/resource/v1alpha3.Device", "k8s.io/api/resource/v1alpha3.ResourcePool"}, + "k8s.io/api/core/v1.NodeSelector", "k8s.io/api/resource/v1alpha3.CounterSet", "k8s.io/api/resource/v1alpha3.Device", "k8s.io/api/resource/v1alpha3.ResourcePool"}, } } @@ -49180,6 +49351,45 @@ func schema_k8sio_api_resource_v1beta1_BasicDevice(ref common.ReferenceCallback) }, }, }, + "consumesCounter": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "ConsumesCounter defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.\n\nThere can only be a single entry per counterSet.\n\nThe maximum number of device counter consumption entries is 32. This is the same as the maximum number of shared counters allowed in a ResourceSlice.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1beta1.DeviceCounterConsumption"), + }, + }, + }, + }, + }, + "nodeName": { + SchemaProps: spec.SchemaProps{ + Description: "NodeName identifies the node where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + Type: []string{"string"}, + Format: "", + }, + }, + "nodeSelector": { + SchemaProps: spec.SchemaProps{ + Description: "NodeSelector defines the nodes where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + Ref: ref("k8s.io/api/core/v1.NodeSelector"), + }, + }, + "allNodes": { + SchemaProps: spec.SchemaProps{ + Description: "AllNodes indicates that all nodes have access to the device.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + Type: []string{"boolean"}, + Format: "", + }, + }, "taints": { VendorExtensible: spec.VendorExtensible{ Extensions: spec.Extensions{ @@ -49203,7 +49413,7 @@ func schema_k8sio_api_resource_v1beta1_BasicDevice(ref common.ReferenceCallback) }, }, Dependencies: []string{ - "k8s.io/api/resource/v1beta1.DeviceAttribute", "k8s.io/api/resource/v1beta1.DeviceCapacity", "k8s.io/api/resource/v1beta1.DeviceTaint"}, + "k8s.io/api/core/v1.NodeSelector", "k8s.io/api/resource/v1beta1.DeviceAttribute", "k8s.io/api/resource/v1beta1.DeviceCapacity", "k8s.io/api/resource/v1beta1.DeviceCounterConsumption", "k8s.io/api/resource/v1beta1.DeviceTaint"}, } } @@ -49229,6 +49439,67 @@ func schema_k8sio_api_resource_v1beta1_CELDeviceSelector(ref common.ReferenceCal } } +func schema_k8sio_api_resource_v1beta1_Counter(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Counter describes a quantity associated with a device.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "value": { + SchemaProps: spec.SchemaProps{ + Description: "Value defines how much of a certain device counter is available.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"value"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_resource_v1beta1_CounterSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.\n\nThe 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.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name defines the name of the counter set. It must be a DNS label.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "counters": { + SchemaProps: spec.SchemaProps{ + Description: "Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.\n\nThe maximum number of counters is 32.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1beta1.Counter"), + }, + }, + }, + }, + }, + }, + Required: []string{"name", "counters"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/resource/v1beta1.Counter"}, + } +} + func schema_k8sio_api_resource_v1beta1_Device(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -49768,6 +50039,45 @@ func schema_k8sio_api_resource_v1beta1_DeviceConstraint(ref common.ReferenceCall } } +func schema_k8sio_api_resource_v1beta1_DeviceCounterConsumption(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "sharedCounter": { + SchemaProps: spec.SchemaProps{ + Description: "SharedCounter defines the shared counter from which the counters defined will be consumed.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "counters": { + SchemaProps: spec.SchemaProps{ + Description: "Counters defines the Counter that will be consumed by the device.\n\nThe maximum number of Counters is 32.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1beta1.Counter"), + }, + }, + }, + }, + }, + }, + Required: []string{"sharedCounter", "counters"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/resource/v1beta1.Counter"}, + } +} + func schema_k8sio_api_resource_v1beta1_DeviceRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -50751,20 +51061,20 @@ func schema_k8sio_api_resource_v1beta1_ResourceSliceSpec(ref common.ReferenceCal }, "nodeName": { SchemaProps: spec.SchemaProps{ - Description: "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.", + Description: "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.", Type: []string{"string"}, Format: "", }, }, "nodeSelector": { SchemaProps: spec.SchemaProps{ - Description: "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", + Description: "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", Ref: ref("k8s.io/api/core/v1.NodeSelector"), }, }, "allNodes": { SchemaProps: spec.SchemaProps{ - Description: "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", + Description: "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", Type: []string{"boolean"}, Format: "", }, @@ -50788,12 +51098,38 @@ func schema_k8sio_api_resource_v1beta1_ResourceSliceSpec(ref common.ReferenceCal }, }, }, + "perDeviceNodeSelection": { + SchemaProps: spec.SchemaProps{ + Description: "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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "sharedCounters": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.\n\nThe names of the SharedCounters must be unique in the ResourceSlice.\n\nThe maximum number of SharedCounters is 32.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1beta1.CounterSet"), + }, + }, + }, + }, + }, }, Required: []string{"driver", "pool"}, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.NodeSelector", "k8s.io/api/resource/v1beta1.Device", "k8s.io/api/resource/v1beta1.ResourcePool"}, + "k8s.io/api/core/v1.NodeSelector", "k8s.io/api/resource/v1beta1.CounterSet", "k8s.io/api/resource/v1beta1.Device", "k8s.io/api/resource/v1beta1.ResourcePool"}, } } diff --git a/staging/src/k8s.io/api/resource/v1alpha3/generated.pb.go b/staging/src/k8s.io/api/resource/v1alpha3/generated.pb.go index 008f5ba8e14..4da59f04ac4 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/generated.pb.go +++ b/staging/src/k8s.io/api/resource/v1alpha3/generated.pb.go @@ -162,10 +162,66 @@ func (m *CELDeviceSelector) XXX_DiscardUnknown() { var xxx_messageInfo_CELDeviceSelector proto.InternalMessageInfo +func (m *Counter) Reset() { *m = Counter{} } +func (*Counter) ProtoMessage() {} +func (*Counter) Descriptor() ([]byte, []int) { + return fileDescriptor_66649ee9bbcd89d2, []int{4} +} +func (m *Counter) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Counter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Counter) XXX_Merge(src proto.Message) { + xxx_messageInfo_Counter.Merge(m, src) +} +func (m *Counter) XXX_Size() int { + return m.Size() +} +func (m *Counter) XXX_DiscardUnknown() { + xxx_messageInfo_Counter.DiscardUnknown(m) +} + +var xxx_messageInfo_Counter proto.InternalMessageInfo + +func (m *CounterSet) Reset() { *m = CounterSet{} } +func (*CounterSet) ProtoMessage() {} +func (*CounterSet) Descriptor() ([]byte, []int) { + return fileDescriptor_66649ee9bbcd89d2, []int{5} +} +func (m *CounterSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CounterSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CounterSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_CounterSet.Merge(m, src) +} +func (m *CounterSet) XXX_Size() int { + return m.Size() +} +func (m *CounterSet) XXX_DiscardUnknown() { + xxx_messageInfo_CounterSet.DiscardUnknown(m) +} + +var xxx_messageInfo_CounterSet proto.InternalMessageInfo + func (m *Device) Reset() { *m = Device{} } func (*Device) ProtoMessage() {} func (*Device) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{4} + return fileDescriptor_66649ee9bbcd89d2, []int{6} } func (m *Device) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -193,7 +249,7 @@ var xxx_messageInfo_Device proto.InternalMessageInfo func (m *DeviceAllocationConfiguration) Reset() { *m = DeviceAllocationConfiguration{} } func (*DeviceAllocationConfiguration) ProtoMessage() {} func (*DeviceAllocationConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{5} + return fileDescriptor_66649ee9bbcd89d2, []int{7} } func (m *DeviceAllocationConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -221,7 +277,7 @@ var xxx_messageInfo_DeviceAllocationConfiguration proto.InternalMessageInfo func (m *DeviceAllocationResult) Reset() { *m = DeviceAllocationResult{} } func (*DeviceAllocationResult) ProtoMessage() {} func (*DeviceAllocationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{6} + return fileDescriptor_66649ee9bbcd89d2, []int{8} } func (m *DeviceAllocationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -249,7 +305,7 @@ var xxx_messageInfo_DeviceAllocationResult proto.InternalMessageInfo func (m *DeviceAttribute) Reset() { *m = DeviceAttribute{} } func (*DeviceAttribute) ProtoMessage() {} func (*DeviceAttribute) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{7} + return fileDescriptor_66649ee9bbcd89d2, []int{9} } func (m *DeviceAttribute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -277,7 +333,7 @@ var xxx_messageInfo_DeviceAttribute proto.InternalMessageInfo func (m *DeviceClaim) Reset() { *m = DeviceClaim{} } func (*DeviceClaim) ProtoMessage() {} func (*DeviceClaim) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{8} + return fileDescriptor_66649ee9bbcd89d2, []int{10} } func (m *DeviceClaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -305,7 +361,7 @@ var xxx_messageInfo_DeviceClaim proto.InternalMessageInfo func (m *DeviceClaimConfiguration) Reset() { *m = DeviceClaimConfiguration{} } func (*DeviceClaimConfiguration) ProtoMessage() {} func (*DeviceClaimConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{9} + return fileDescriptor_66649ee9bbcd89d2, []int{11} } func (m *DeviceClaimConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -333,7 +389,7 @@ var xxx_messageInfo_DeviceClaimConfiguration proto.InternalMessageInfo func (m *DeviceClass) Reset() { *m = DeviceClass{} } func (*DeviceClass) ProtoMessage() {} func (*DeviceClass) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{10} + return fileDescriptor_66649ee9bbcd89d2, []int{12} } func (m *DeviceClass) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -361,7 +417,7 @@ var xxx_messageInfo_DeviceClass proto.InternalMessageInfo func (m *DeviceClassConfiguration) Reset() { *m = DeviceClassConfiguration{} } func (*DeviceClassConfiguration) ProtoMessage() {} func (*DeviceClassConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{11} + return fileDescriptor_66649ee9bbcd89d2, []int{13} } func (m *DeviceClassConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -389,7 +445,7 @@ var xxx_messageInfo_DeviceClassConfiguration proto.InternalMessageInfo func (m *DeviceClassList) Reset() { *m = DeviceClassList{} } func (*DeviceClassList) ProtoMessage() {} func (*DeviceClassList) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{12} + return fileDescriptor_66649ee9bbcd89d2, []int{14} } func (m *DeviceClassList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -417,7 +473,7 @@ var xxx_messageInfo_DeviceClassList proto.InternalMessageInfo func (m *DeviceClassSpec) Reset() { *m = DeviceClassSpec{} } func (*DeviceClassSpec) ProtoMessage() {} func (*DeviceClassSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{13} + return fileDescriptor_66649ee9bbcd89d2, []int{15} } func (m *DeviceClassSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -445,7 +501,7 @@ var xxx_messageInfo_DeviceClassSpec proto.InternalMessageInfo func (m *DeviceConfiguration) Reset() { *m = DeviceConfiguration{} } func (*DeviceConfiguration) ProtoMessage() {} func (*DeviceConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{14} + return fileDescriptor_66649ee9bbcd89d2, []int{16} } func (m *DeviceConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -473,7 +529,7 @@ var xxx_messageInfo_DeviceConfiguration proto.InternalMessageInfo func (m *DeviceConstraint) Reset() { *m = DeviceConstraint{} } func (*DeviceConstraint) ProtoMessage() {} func (*DeviceConstraint) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{15} + return fileDescriptor_66649ee9bbcd89d2, []int{17} } func (m *DeviceConstraint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -498,10 +554,38 @@ func (m *DeviceConstraint) XXX_DiscardUnknown() { var xxx_messageInfo_DeviceConstraint proto.InternalMessageInfo +func (m *DeviceCounterConsumption) Reset() { *m = DeviceCounterConsumption{} } +func (*DeviceCounterConsumption) ProtoMessage() {} +func (*DeviceCounterConsumption) Descriptor() ([]byte, []int) { + return fileDescriptor_66649ee9bbcd89d2, []int{18} +} +func (m *DeviceCounterConsumption) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeviceCounterConsumption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeviceCounterConsumption) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeviceCounterConsumption.Merge(m, src) +} +func (m *DeviceCounterConsumption) XXX_Size() int { + return m.Size() +} +func (m *DeviceCounterConsumption) XXX_DiscardUnknown() { + xxx_messageInfo_DeviceCounterConsumption.DiscardUnknown(m) +} + +var xxx_messageInfo_DeviceCounterConsumption proto.InternalMessageInfo + func (m *DeviceRequest) Reset() { *m = DeviceRequest{} } func (*DeviceRequest) ProtoMessage() {} func (*DeviceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{16} + return fileDescriptor_66649ee9bbcd89d2, []int{19} } func (m *DeviceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -529,7 +613,7 @@ var xxx_messageInfo_DeviceRequest proto.InternalMessageInfo func (m *DeviceRequestAllocationResult) Reset() { *m = DeviceRequestAllocationResult{} } func (*DeviceRequestAllocationResult) ProtoMessage() {} func (*DeviceRequestAllocationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{17} + return fileDescriptor_66649ee9bbcd89d2, []int{20} } func (m *DeviceRequestAllocationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -557,7 +641,7 @@ var xxx_messageInfo_DeviceRequestAllocationResult proto.InternalMessageInfo func (m *DeviceSelector) Reset() { *m = DeviceSelector{} } func (*DeviceSelector) ProtoMessage() {} func (*DeviceSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{18} + return fileDescriptor_66649ee9bbcd89d2, []int{21} } func (m *DeviceSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -585,7 +669,7 @@ var xxx_messageInfo_DeviceSelector proto.InternalMessageInfo func (m *DeviceSubRequest) Reset() { *m = DeviceSubRequest{} } func (*DeviceSubRequest) ProtoMessage() {} func (*DeviceSubRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{19} + return fileDescriptor_66649ee9bbcd89d2, []int{22} } func (m *DeviceSubRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -613,7 +697,7 @@ var xxx_messageInfo_DeviceSubRequest proto.InternalMessageInfo func (m *DeviceTaint) Reset() { *m = DeviceTaint{} } func (*DeviceTaint) ProtoMessage() {} func (*DeviceTaint) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{20} + return fileDescriptor_66649ee9bbcd89d2, []int{23} } func (m *DeviceTaint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -641,7 +725,7 @@ var xxx_messageInfo_DeviceTaint proto.InternalMessageInfo func (m *DeviceTaintRule) Reset() { *m = DeviceTaintRule{} } func (*DeviceTaintRule) ProtoMessage() {} func (*DeviceTaintRule) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{21} + return fileDescriptor_66649ee9bbcd89d2, []int{24} } func (m *DeviceTaintRule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -669,7 +753,7 @@ var xxx_messageInfo_DeviceTaintRule proto.InternalMessageInfo func (m *DeviceTaintRuleList) Reset() { *m = DeviceTaintRuleList{} } func (*DeviceTaintRuleList) ProtoMessage() {} func (*DeviceTaintRuleList) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{22} + return fileDescriptor_66649ee9bbcd89d2, []int{25} } func (m *DeviceTaintRuleList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -697,7 +781,7 @@ var xxx_messageInfo_DeviceTaintRuleList proto.InternalMessageInfo func (m *DeviceTaintRuleSpec) Reset() { *m = DeviceTaintRuleSpec{} } func (*DeviceTaintRuleSpec) ProtoMessage() {} func (*DeviceTaintRuleSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{23} + return fileDescriptor_66649ee9bbcd89d2, []int{26} } func (m *DeviceTaintRuleSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -725,7 +809,7 @@ var xxx_messageInfo_DeviceTaintRuleSpec proto.InternalMessageInfo func (m *DeviceTaintSelector) Reset() { *m = DeviceTaintSelector{} } func (*DeviceTaintSelector) ProtoMessage() {} func (*DeviceTaintSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{24} + return fileDescriptor_66649ee9bbcd89d2, []int{27} } func (m *DeviceTaintSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -753,7 +837,7 @@ var xxx_messageInfo_DeviceTaintSelector proto.InternalMessageInfo func (m *DeviceToleration) Reset() { *m = DeviceToleration{} } func (*DeviceToleration) ProtoMessage() {} func (*DeviceToleration) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{25} + return fileDescriptor_66649ee9bbcd89d2, []int{28} } func (m *DeviceToleration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -781,7 +865,7 @@ var xxx_messageInfo_DeviceToleration proto.InternalMessageInfo func (m *NetworkDeviceData) Reset() { *m = NetworkDeviceData{} } func (*NetworkDeviceData) ProtoMessage() {} func (*NetworkDeviceData) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{26} + return fileDescriptor_66649ee9bbcd89d2, []int{29} } func (m *NetworkDeviceData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -809,7 +893,7 @@ var xxx_messageInfo_NetworkDeviceData proto.InternalMessageInfo func (m *OpaqueDeviceConfiguration) Reset() { *m = OpaqueDeviceConfiguration{} } func (*OpaqueDeviceConfiguration) ProtoMessage() {} func (*OpaqueDeviceConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{27} + return fileDescriptor_66649ee9bbcd89d2, []int{30} } func (m *OpaqueDeviceConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -837,7 +921,7 @@ var xxx_messageInfo_OpaqueDeviceConfiguration proto.InternalMessageInfo func (m *ResourceClaim) Reset() { *m = ResourceClaim{} } func (*ResourceClaim) ProtoMessage() {} func (*ResourceClaim) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{28} + return fileDescriptor_66649ee9bbcd89d2, []int{31} } func (m *ResourceClaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -865,7 +949,7 @@ var xxx_messageInfo_ResourceClaim proto.InternalMessageInfo func (m *ResourceClaimConsumerReference) Reset() { *m = ResourceClaimConsumerReference{} } func (*ResourceClaimConsumerReference) ProtoMessage() {} func (*ResourceClaimConsumerReference) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{29} + return fileDescriptor_66649ee9bbcd89d2, []int{32} } func (m *ResourceClaimConsumerReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -893,7 +977,7 @@ var xxx_messageInfo_ResourceClaimConsumerReference proto.InternalMessageInfo func (m *ResourceClaimList) Reset() { *m = ResourceClaimList{} } func (*ResourceClaimList) ProtoMessage() {} func (*ResourceClaimList) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{30} + return fileDescriptor_66649ee9bbcd89d2, []int{33} } func (m *ResourceClaimList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -921,7 +1005,7 @@ var xxx_messageInfo_ResourceClaimList proto.InternalMessageInfo func (m *ResourceClaimSpec) Reset() { *m = ResourceClaimSpec{} } func (*ResourceClaimSpec) ProtoMessage() {} func (*ResourceClaimSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{31} + return fileDescriptor_66649ee9bbcd89d2, []int{34} } func (m *ResourceClaimSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -949,7 +1033,7 @@ var xxx_messageInfo_ResourceClaimSpec proto.InternalMessageInfo func (m *ResourceClaimStatus) Reset() { *m = ResourceClaimStatus{} } func (*ResourceClaimStatus) ProtoMessage() {} func (*ResourceClaimStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{32} + return fileDescriptor_66649ee9bbcd89d2, []int{35} } func (m *ResourceClaimStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -977,7 +1061,7 @@ var xxx_messageInfo_ResourceClaimStatus proto.InternalMessageInfo func (m *ResourceClaimTemplate) Reset() { *m = ResourceClaimTemplate{} } func (*ResourceClaimTemplate) ProtoMessage() {} func (*ResourceClaimTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{33} + return fileDescriptor_66649ee9bbcd89d2, []int{36} } func (m *ResourceClaimTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1005,7 +1089,7 @@ var xxx_messageInfo_ResourceClaimTemplate proto.InternalMessageInfo func (m *ResourceClaimTemplateList) Reset() { *m = ResourceClaimTemplateList{} } func (*ResourceClaimTemplateList) ProtoMessage() {} func (*ResourceClaimTemplateList) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{34} + return fileDescriptor_66649ee9bbcd89d2, []int{37} } func (m *ResourceClaimTemplateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1033,7 +1117,7 @@ var xxx_messageInfo_ResourceClaimTemplateList proto.InternalMessageInfo func (m *ResourceClaimTemplateSpec) Reset() { *m = ResourceClaimTemplateSpec{} } func (*ResourceClaimTemplateSpec) ProtoMessage() {} func (*ResourceClaimTemplateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{35} + return fileDescriptor_66649ee9bbcd89d2, []int{38} } func (m *ResourceClaimTemplateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1061,7 +1145,7 @@ var xxx_messageInfo_ResourceClaimTemplateSpec proto.InternalMessageInfo func (m *ResourcePool) Reset() { *m = ResourcePool{} } func (*ResourcePool) ProtoMessage() {} func (*ResourcePool) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{36} + return fileDescriptor_66649ee9bbcd89d2, []int{39} } func (m *ResourcePool) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1089,7 +1173,7 @@ var xxx_messageInfo_ResourcePool proto.InternalMessageInfo func (m *ResourceSlice) Reset() { *m = ResourceSlice{} } func (*ResourceSlice) ProtoMessage() {} func (*ResourceSlice) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{37} + return fileDescriptor_66649ee9bbcd89d2, []int{40} } func (m *ResourceSlice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1117,7 +1201,7 @@ var xxx_messageInfo_ResourceSlice proto.InternalMessageInfo func (m *ResourceSliceList) Reset() { *m = ResourceSliceList{} } func (*ResourceSliceList) ProtoMessage() {} func (*ResourceSliceList) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{38} + return fileDescriptor_66649ee9bbcd89d2, []int{41} } func (m *ResourceSliceList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1145,7 +1229,7 @@ var xxx_messageInfo_ResourceSliceList proto.InternalMessageInfo func (m *ResourceSliceSpec) Reset() { *m = ResourceSliceSpec{} } func (*ResourceSliceSpec) ProtoMessage() {} func (*ResourceSliceSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{39} + return fileDescriptor_66649ee9bbcd89d2, []int{42} } func (m *ResourceSliceSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1177,6 +1261,9 @@ func init() { proto.RegisterMapType((map[QualifiedName]DeviceAttribute)(nil), "k8s.io.api.resource.v1alpha3.BasicDevice.AttributesEntry") proto.RegisterMapType((map[QualifiedName]resource.Quantity)(nil), "k8s.io.api.resource.v1alpha3.BasicDevice.CapacityEntry") proto.RegisterType((*CELDeviceSelector)(nil), "k8s.io.api.resource.v1alpha3.CELDeviceSelector") + proto.RegisterType((*Counter)(nil), "k8s.io.api.resource.v1alpha3.Counter") + proto.RegisterType((*CounterSet)(nil), "k8s.io.api.resource.v1alpha3.CounterSet") + proto.RegisterMapType((map[string]Counter)(nil), "k8s.io.api.resource.v1alpha3.CounterSet.CountersEntry") proto.RegisterType((*Device)(nil), "k8s.io.api.resource.v1alpha3.Device") proto.RegisterType((*DeviceAllocationConfiguration)(nil), "k8s.io.api.resource.v1alpha3.DeviceAllocationConfiguration") proto.RegisterType((*DeviceAllocationResult)(nil), "k8s.io.api.resource.v1alpha3.DeviceAllocationResult") @@ -1189,6 +1276,8 @@ func init() { proto.RegisterType((*DeviceClassSpec)(nil), "k8s.io.api.resource.v1alpha3.DeviceClassSpec") proto.RegisterType((*DeviceConfiguration)(nil), "k8s.io.api.resource.v1alpha3.DeviceConfiguration") proto.RegisterType((*DeviceConstraint)(nil), "k8s.io.api.resource.v1alpha3.DeviceConstraint") + proto.RegisterType((*DeviceCounterConsumption)(nil), "k8s.io.api.resource.v1alpha3.DeviceCounterConsumption") + proto.RegisterMapType((map[string]Counter)(nil), "k8s.io.api.resource.v1alpha3.DeviceCounterConsumption.CountersEntry") proto.RegisterType((*DeviceRequest)(nil), "k8s.io.api.resource.v1alpha3.DeviceRequest") proto.RegisterType((*DeviceRequestAllocationResult)(nil), "k8s.io.api.resource.v1alpha3.DeviceRequestAllocationResult") proto.RegisterType((*DeviceSelector)(nil), "k8s.io.api.resource.v1alpha3.DeviceSelector") @@ -1220,160 +1309,172 @@ func init() { } var fileDescriptor_66649ee9bbcd89d2 = []byte{ - // 2435 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x1a, 0xcd, 0x6f, 0x1c, 0x57, - 0x3d, 0xb3, 0xb3, 0x5e, 0xaf, 0x7f, 0x1b, 0x3b, 0xf1, 0x0b, 0x29, 0x1b, 0xd3, 0xee, 0x26, 0x13, - 0x04, 0x4e, 0x9b, 0xac, 0x1b, 0xa7, 0x6a, 0x0b, 0x01, 0x09, 0xaf, 0xed, 0xa4, 0x4e, 0x13, 0xc7, - 0x79, 0x76, 0x03, 0x81, 0x12, 0x18, 0xcf, 0x3e, 0xdb, 0x83, 0x67, 0x67, 0xb6, 0xf3, 0xde, 0x3a, - 0xf5, 0x05, 0x55, 0xfc, 0x01, 0x11, 0x57, 0x0e, 0xa8, 0x12, 0x07, 0x24, 0x2e, 0x80, 0xc4, 0x8d, - 0x0b, 0x48, 0x20, 0x35, 0x82, 0x4b, 0x24, 0x2a, 0x54, 0x71, 0x58, 0xc8, 0x22, 0xc4, 0xff, 0xe0, - 0x13, 0x7a, 0x1f, 0xf3, 0xb9, 0x3b, 0xce, 0x6c, 0x49, 0xac, 0x22, 0x71, 0xdb, 0xf9, 0x7d, 0xbe, - 0xf7, 0xfb, 0x7e, 0xef, 0x2d, 0x5c, 0xdc, 0x7d, 0x93, 0x36, 0x6c, 0x6f, 0xce, 0xec, 0xd8, 0x73, - 0x3e, 0xa1, 0x5e, 0xd7, 0xb7, 0xc8, 0xdc, 0xde, 0x65, 0xd3, 0xe9, 0xec, 0x98, 0x57, 0xe6, 0xb6, - 0x89, 0x4b, 0x7c, 0x93, 0x91, 0x56, 0xa3, 0xe3, 0x7b, 0xcc, 0x43, 0x2f, 0x4a, 0xea, 0x86, 0xd9, - 0xb1, 0x1b, 0x01, 0x75, 0x23, 0xa0, 0x9e, 0xb9, 0xb4, 0x6d, 0xb3, 0x9d, 0xee, 0x66, 0xc3, 0xf2, - 0xda, 0x73, 0xdb, 0xde, 0xb6, 0x37, 0x27, 0x98, 0x36, 0xbb, 0x5b, 0xe2, 0x4b, 0x7c, 0x88, 0x5f, - 0x52, 0xd8, 0x8c, 0x11, 0x53, 0x6d, 0x79, 0x3e, 0x57, 0x9b, 0x56, 0x38, 0xf3, 0x5a, 0x44, 0xd3, - 0x36, 0xad, 0x1d, 0xdb, 0x25, 0xfe, 0xfe, 0x5c, 0x67, 0x77, 0x3b, 0xb9, 0xde, 0x51, 0xb8, 0xe8, - 0x5c, 0x9b, 0x30, 0x73, 0x98, 0xae, 0xb9, 0x2c, 0x2e, 0xbf, 0xeb, 0x32, 0xbb, 0x3d, 0xa8, 0xe6, - 0xf5, 0xa7, 0x31, 0x50, 0x6b, 0x87, 0xb4, 0xcd, 0x34, 0x9f, 0xf1, 0xa1, 0x0e, 0xa7, 0x17, 0x1c, - 0xc7, 0xb3, 0x38, 0x6c, 0x89, 0xec, 0xd9, 0x16, 0x59, 0x67, 0x26, 0xeb, 0x52, 0xf4, 0x25, 0x28, - 0xb5, 0x7c, 0x7b, 0x8f, 0xf8, 0x55, 0xed, 0xac, 0x36, 0x3b, 0xd1, 0x9c, 0x7a, 0xd4, 0xab, 0x1f, - 0xeb, 0xf7, 0xea, 0xa5, 0x25, 0x01, 0xc5, 0x0a, 0x8b, 0xce, 0x42, 0xb1, 0xe3, 0x79, 0x4e, 0xb5, - 0x20, 0xa8, 0x8e, 0x2b, 0xaa, 0xe2, 0x9a, 0xe7, 0x39, 0x58, 0x60, 0x84, 0x24, 0x21, 0xb9, 0xaa, - 0xa7, 0x24, 0x09, 0x28, 0x56, 0x58, 0x64, 0x01, 0x58, 0x9e, 0xdb, 0xb2, 0x99, 0xed, 0xb9, 0xb4, - 0x5a, 0x3c, 0xab, 0xcf, 0x56, 0xe6, 0xe7, 0x1a, 0x91, 0x9b, 0xc3, 0x8d, 0x35, 0x3a, 0xbb, 0xdb, - 0x1c, 0x40, 0x1b, 0xdc, 0x7e, 0x8d, 0xbd, 0xcb, 0x8d, 0xc5, 0x80, 0xaf, 0x89, 0x94, 0x70, 0x08, - 0x41, 0x14, 0xc7, 0xc4, 0xa2, 0xb7, 0xa1, 0xd8, 0x32, 0x99, 0x59, 0x1d, 0x3b, 0xab, 0xcd, 0x56, - 0xe6, 0x2f, 0x65, 0x8a, 0x57, 0x76, 0x6b, 0x60, 0xf3, 0xc1, 0xf2, 0xfb, 0x8c, 0xb8, 0x94, 0x0b, - 0x2f, 0xf3, 0x9d, 0x2d, 0x99, 0xcc, 0xc4, 0x42, 0x08, 0xda, 0x84, 0x8a, 0x4b, 0xd8, 0x03, 0xcf, - 0xdf, 0xe5, 0xc0, 0x6a, 0x49, 0xc8, 0x8c, 0x2f, 0x79, 0x30, 0x32, 0x1b, 0xab, 0x8a, 0x41, 0xec, - 0x99, 0xb3, 0x35, 0x4f, 0xf4, 0x7b, 0xf5, 0xca, 0x6a, 0x24, 0x07, 0xc7, 0x85, 0x1a, 0x7f, 0xd6, - 0xe0, 0xa4, 0xf2, 0x90, 0xed, 0xb9, 0x98, 0xd0, 0xae, 0xc3, 0xd0, 0xf7, 0x60, 0x5c, 0x1a, 0x8d, - 0x0a, 0xef, 0x54, 0xe6, 0x5f, 0x3b, 0x5c, 0xa9, 0xd4, 0x96, 0x16, 0xd3, 0x3c, 0xa1, 0x8c, 0x35, - 0x2e, 0xf1, 0x14, 0x07, 0x52, 0xd1, 0x5d, 0x38, 0xee, 0x7a, 0x2d, 0xb2, 0x4e, 0x1c, 0x62, 0x31, - 0xcf, 0x17, 0x9e, 0xab, 0xcc, 0x9f, 0x8d, 0x6b, 0xe1, 0x79, 0xc2, 0x6d, 0xbf, 0x1a, 0xa3, 0x6b, - 0x9e, 0xec, 0xf7, 0xea, 0xc7, 0xe3, 0x10, 0x9c, 0x90, 0x63, 0xfc, 0xa6, 0x08, 0x95, 0xa6, 0x49, - 0x6d, 0x4b, 0x6a, 0x44, 0x3f, 0x04, 0x30, 0x19, 0xf3, 0xed, 0xcd, 0x2e, 0x13, 0x7b, 0xe1, 0x3e, - 0xff, 0xca, 0xe1, 0x7b, 0x89, 0xb1, 0x37, 0x16, 0x42, 0xde, 0x65, 0x97, 0xf9, 0xfb, 0xcd, 0xf3, - 0x81, 0xf7, 0x23, 0xc4, 0x8f, 0xfe, 0x5e, 0x9f, 0xbc, 0xd3, 0x35, 0x1d, 0x7b, 0xcb, 0x26, 0xad, - 0x55, 0xb3, 0x4d, 0x70, 0x4c, 0x23, 0xda, 0x83, 0xb2, 0x65, 0x76, 0x4c, 0xcb, 0x66, 0xfb, 0xd5, - 0x82, 0xd0, 0xfe, 0x46, 0x7e, 0xed, 0x8b, 0x8a, 0x53, 0xea, 0x3e, 0xa7, 0x74, 0x97, 0x03, 0xf0, - 0xa0, 0xe6, 0x50, 0x17, 0xba, 0x03, 0x25, 0x66, 0xda, 0x2e, 0xa3, 0x55, 0x5d, 0x68, 0xbd, 0x90, - 0xc7, 0x7f, 0x1b, 0x9c, 0x23, 0x4a, 0x1f, 0xf1, 0x49, 0xb1, 0x12, 0x34, 0xe3, 0xc0, 0x89, 0x94, - 0x39, 0xd0, 0x49, 0xd0, 0x77, 0xc9, 0xbe, 0x4c, 0x60, 0xcc, 0x7f, 0xa2, 0x45, 0x18, 0xdb, 0x33, - 0x9d, 0x2e, 0x11, 0xe9, 0x9a, 0x8c, 0xff, 0xec, 0xb0, 0x09, 0xa4, 0x62, 0xc9, 0xfb, 0xd5, 0xc2, - 0x9b, 0xda, 0xcc, 0x2e, 0x4c, 0x26, 0xb6, 0x3f, 0x44, 0xd7, 0x52, 0x52, 0x57, 0xe3, 0xb0, 0x54, - 0x8e, 0x94, 0xdf, 0xe9, 0x9a, 0x2e, 0xb3, 0xd9, 0x7e, 0x4c, 0x99, 0x71, 0x1d, 0xa6, 0x17, 0x97, - 0x6f, 0xaa, 0xf2, 0xa4, 0x42, 0x09, 0xcd, 0x03, 0x90, 0xf7, 0x3b, 0x3e, 0xa1, 0x3c, 0x35, 0x55, - 0x91, 0x0a, 0xb3, 0x7f, 0x39, 0xc4, 0xe0, 0x18, 0x95, 0xb1, 0x07, 0xaa, 0xe8, 0xf0, 0xb2, 0xe5, - 0x9a, 0x6d, 0xa2, 0xf8, 0xc2, 0xb2, 0x25, 0xdc, 0x24, 0x30, 0xe8, 0x06, 0x8c, 0x6d, 0x72, 0x67, - 0xab, 0xe5, 0x5f, 0xc8, 0x1d, 0x17, 0xcd, 0x89, 0x7e, 0xaf, 0x3e, 0x26, 0x00, 0x58, 0x8a, 0x30, - 0x1e, 0x16, 0xe0, 0xa5, 0x74, 0x0e, 0x2e, 0x7a, 0xee, 0x96, 0xbd, 0xdd, 0xf5, 0xc5, 0x07, 0xfa, - 0x06, 0x94, 0xa4, 0x48, 0xb5, 0xa2, 0xd9, 0xc0, 0xcb, 0xeb, 0x02, 0x7a, 0xd0, 0xab, 0xbf, 0x90, - 0x66, 0x95, 0x18, 0xac, 0xf8, 0xd0, 0x2c, 0x94, 0x7d, 0xf2, 0x5e, 0x97, 0x50, 0x46, 0x45, 0x28, - 0x4f, 0x34, 0x8f, 0xf3, 0x68, 0xc4, 0x0a, 0x86, 0x43, 0x2c, 0xfa, 0x40, 0x83, 0x53, 0x32, 0xd1, - 0x13, 0x6b, 0x50, 0x49, 0x7e, 0x39, 0x4f, 0x4c, 0x24, 0x18, 0x9b, 0x5f, 0x50, 0x8b, 0x3d, 0x35, - 0x04, 0x89, 0x87, 0xa9, 0x32, 0xfe, 0xa5, 0xc1, 0x0b, 0xc3, 0x8b, 0x12, 0xda, 0x82, 0x71, 0x5f, - 0xfc, 0x0a, 0xea, 0xc1, 0xd5, 0x3c, 0x0b, 0x52, 0xdb, 0xcc, 0x2e, 0x71, 0xf2, 0x9b, 0xe2, 0x40, - 0x38, 0xb2, 0xa0, 0x64, 0x89, 0x35, 0xa9, 0xc4, 0xbf, 0x3a, 0x5a, 0x09, 0x4d, 0x5a, 0x20, 0x4c, - 0x4a, 0x09, 0xc6, 0x4a, 0xb4, 0xf1, 0x0b, 0x0d, 0x4e, 0xa4, 0xb2, 0x08, 0xd5, 0x40, 0xb7, 0x5d, - 0x26, 0xc2, 0x4a, 0x97, 0x3e, 0x5a, 0x71, 0xd9, 0x5d, 0x1e, 0xec, 0x98, 0x23, 0xd0, 0x39, 0x28, - 0x6e, 0xf2, 0x8e, 0xca, 0xdd, 0x51, 0x6e, 0x4e, 0xf6, 0x7b, 0xf5, 0x89, 0xa6, 0xe7, 0x39, 0x92, - 0x42, 0xa0, 0xd0, 0x97, 0xa1, 0x44, 0x99, 0x6f, 0xbb, 0xdb, 0xd5, 0xa2, 0x88, 0x16, 0xd1, 0x42, - 0xd6, 0x05, 0x44, 0x92, 0x29, 0x34, 0x7a, 0x19, 0xc6, 0xf7, 0x88, 0x2f, 0x32, 0x64, 0x4c, 0x50, - 0x8a, 0x02, 0x7d, 0x57, 0x82, 0x24, 0x69, 0x40, 0x60, 0xfc, 0xaa, 0x00, 0x15, 0xe5, 0x40, 0xc7, - 0xb4, 0xdb, 0xe8, 0x5e, 0x2c, 0xa0, 0xa4, 0x27, 0x5e, 0x19, 0xc1, 0x13, 0xcd, 0x93, 0x41, 0x3d, - 0x1c, 0x12, 0x81, 0x04, 0x2a, 0x96, 0xe7, 0x52, 0xe6, 0xcb, 0x1a, 0x28, 0x1d, 0xd0, 0xc8, 0x19, - 0x78, 0x8a, 0xad, 0x79, 0x4a, 0x29, 0xa8, 0x44, 0x30, 0x8a, 0xe3, 0x72, 0xd1, 0xfd, 0xd0, 0xc5, - 0xb2, 0xca, 0xbe, 0x9e, 0x4b, 0x03, 0xdf, 0x7c, 0x3e, 0xef, 0x7e, 0xa4, 0x41, 0x35, 0x8b, 0x29, - 0x91, 0x8f, 0xda, 0xa7, 0xca, 0xc7, 0xc2, 0xd1, 0xe5, 0xe3, 0xef, 0xb5, 0x98, 0xef, 0x29, 0x45, - 0xdf, 0x87, 0x32, 0x9f, 0xad, 0xc4, 0xa8, 0x24, 0x27, 0x8c, 0x57, 0xf3, 0x4d, 0x62, 0xb7, 0x37, - 0x7f, 0x40, 0x2c, 0x76, 0x8b, 0x30, 0x33, 0x2a, 0xc6, 0x11, 0x0c, 0x87, 0x52, 0xd1, 0x6d, 0x28, - 0xd2, 0x0e, 0xb1, 0x46, 0x69, 0x44, 0x62, 0x69, 0xeb, 0x1d, 0x62, 0x45, 0xf5, 0x9a, 0x7f, 0x61, - 0x21, 0xc8, 0xf8, 0x69, 0xdc, 0x19, 0x94, 0x26, 0x9d, 0x91, 0x65, 0x62, 0xed, 0xe8, 0x4c, 0xfc, - 0xbb, 0xb0, 0x14, 0x88, 0xf5, 0xdd, 0xb4, 0x29, 0x43, 0xef, 0x0e, 0x98, 0xb9, 0x91, 0xcf, 0xcc, - 0x9c, 0x5b, 0x18, 0x39, 0xcc, 0xb2, 0x00, 0x12, 0x33, 0xf1, 0x2a, 0x8c, 0xd9, 0x8c, 0xb4, 0x83, - 0xfc, 0xba, 0x90, 0xdb, 0xc6, 0xcd, 0x49, 0x25, 0x75, 0x6c, 0x85, 0xf3, 0x63, 0x29, 0xc6, 0x78, - 0x9c, 0xdc, 0x01, 0xb7, 0x3d, 0xfa, 0x2e, 0x4c, 0x50, 0xd5, 0x91, 0x83, 0x2a, 0x71, 0x31, 0x8f, - 0x9e, 0x70, 0x62, 0x9c, 0x56, 0xaa, 0x26, 0x02, 0x08, 0xc5, 0x91, 0xc4, 0x58, 0x06, 0x17, 0x46, - 0xca, 0xe0, 0x94, 0xff, 0x33, 0x33, 0xd8, 0x87, 0x61, 0x0e, 0x44, 0xdf, 0x81, 0x92, 0xd7, 0x31, - 0xdf, 0xeb, 0x12, 0xe5, 0x95, 0xa7, 0x0c, 0x85, 0xb7, 0x05, 0xed, 0xb0, 0x30, 0x01, 0xae, 0x53, - 0xa2, 0xb1, 0x12, 0x69, 0x3c, 0xd4, 0xe0, 0x64, 0xba, 0x98, 0x8d, 0x50, 0x2d, 0xd6, 0x60, 0xaa, - 0x6d, 0x32, 0x6b, 0x27, 0x6c, 0x28, 0xea, 0xe8, 0x35, 0xdb, 0xef, 0xd5, 0xa7, 0x6e, 0x25, 0x30, - 0x07, 0xbd, 0x3a, 0xba, 0xd6, 0x75, 0x9c, 0xfd, 0xe4, 0x18, 0x9a, 0xe2, 0x37, 0xfe, 0x56, 0x84, - 0xc9, 0x44, 0xed, 0xce, 0x31, 0x1d, 0x2d, 0xc0, 0x89, 0x56, 0x64, 0x6c, 0x8e, 0x50, 0xcb, 0xf8, - 0xbc, 0x22, 0x8e, 0x47, 0x8a, 0xe0, 0x4b, 0xd3, 0x27, 0x43, 0x47, 0x7f, 0xe6, 0xa1, 0x73, 0x17, - 0xa6, 0xcc, 0xb0, 0x5b, 0xdf, 0xf2, 0x5a, 0x44, 0xf5, 0xca, 0x86, 0xe2, 0x9a, 0x5a, 0x48, 0x60, - 0x0f, 0x7a, 0xf5, 0xcf, 0xa5, 0x7b, 0x3c, 0x87, 0xe3, 0x94, 0x14, 0x74, 0x1e, 0xc6, 0x2c, 0xaf, - 0xeb, 0x32, 0xd1, 0x50, 0xf5, 0x28, 0x55, 0x16, 0x39, 0x10, 0x4b, 0x1c, 0xba, 0x0c, 0x15, 0xb3, - 0xd5, 0xb6, 0xdd, 0x05, 0xcb, 0x22, 0x94, 0x8a, 0x93, 0x61, 0x59, 0x76, 0xe9, 0x85, 0x08, 0x8c, - 0xe3, 0x34, 0xc8, 0x85, 0xa9, 0x2d, 0xdb, 0xa7, 0x6c, 0x61, 0xcf, 0xb4, 0x1d, 0x73, 0xd3, 0x21, - 0xd5, 0xf1, 0xfc, 0x6d, 0x71, 0xbd, 0xbb, 0x19, 0xf4, 0xdd, 0x17, 0x82, 0xfd, 0x5d, 0x4b, 0x48, - 0xc3, 0x29, 0xe9, 0xbc, 0x07, 0x33, 0xcf, 0x21, 0x32, 0x50, 0x69, 0xb5, 0x9c, 0x5f, 0xd9, 0x46, - 0xc8, 0x16, 0xf5, 0xe0, 0x08, 0x46, 0x71, 0x5c, 0xae, 0xf1, 0xd7, 0x70, 0xf4, 0xcd, 0x18, 0xd1, - 0xd0, 0x05, 0x3e, 0xf0, 0x09, 0x94, 0x8a, 0xb7, 0xd8, 0xcc, 0x26, 0xc0, 0x38, 0xc0, 0xc7, 0x2e, - 0x25, 0x0a, 0xb9, 0x2e, 0x25, 0xf4, 0x1c, 0x97, 0x12, 0xc5, 0x43, 0x2f, 0x25, 0x52, 0x8e, 0x1c, - 0xcb, 0xe1, 0xc8, 0x94, 0x61, 0x4b, 0xcf, 0xc9, 0xb0, 0xef, 0xc2, 0x54, 0xea, 0x44, 0x74, 0x03, - 0x74, 0x8b, 0x38, 0xaa, 0x64, 0x3d, 0xe5, 0x1a, 0x62, 0xe0, 0x3c, 0xd5, 0x1c, 0xef, 0xf7, 0xea, - 0xfa, 0xe2, 0xf2, 0x4d, 0xcc, 0x85, 0x18, 0xbf, 0xd5, 0x83, 0x22, 0x15, 0x85, 0xd6, 0xff, 0xcb, - 0xc2, 0x7f, 0x5b, 0x16, 0x52, 0xa1, 0x31, 0xfe, 0x9c, 0x42, 0xe3, 0xdf, 0xe1, 0x34, 0x27, 0xee, - 0x08, 0xd0, 0x4b, 0xb1, 0xb3, 0x79, 0xb3, 0xa2, 0xd8, 0xf5, 0xb7, 0xc9, 0xbe, 0x3c, 0xa8, 0x9f, - 0x8f, 0x1f, 0xd4, 0x27, 0xa2, 0xa5, 0xcb, 0xf3, 0x81, 0xc4, 0xa1, 0xab, 0x50, 0x22, 0x5b, 0x5b, - 0xc4, 0x62, 0x2a, 0xa9, 0x82, 0xab, 0x96, 0xd2, 0xb2, 0x80, 0x1e, 0xf4, 0xea, 0xd3, 0x31, 0x95, - 0x12, 0x88, 0x15, 0x0b, 0xfa, 0x26, 0x4c, 0x30, 0xbb, 0x4d, 0x16, 0x5a, 0x2d, 0xd2, 0x12, 0xf6, - 0xae, 0xcc, 0xbf, 0x9c, 0x6f, 0xd0, 0xd9, 0xb0, 0xdb, 0x44, 0x9e, 0x81, 0x36, 0x02, 0x01, 0x38, - 0x92, 0x65, 0x3c, 0x0a, 0x47, 0x12, 0xa1, 0x16, 0x77, 0x1d, 0x72, 0x04, 0xb3, 0xeb, 0x7a, 0x62, - 0x76, 0xbd, 0x9c, 0xfb, 0xee, 0x86, 0x2f, 0x2f, 0x73, 0x7e, 0xfd, 0x48, 0x0b, 0x66, 0x91, 0x90, - 0xf6, 0x08, 0x66, 0x44, 0x9c, 0x9c, 0x11, 0x2f, 0x8d, 0xb4, 0x97, 0x8c, 0x39, 0xf1, 0xe3, 0xc1, - 0x9d, 0x88, 0x59, 0xb1, 0x0d, 0x53, 0xad, 0x44, 0xaa, 0x8e, 0x32, 0x7e, 0x0b, 0x51, 0x61, 0x8e, - 0x23, 0x9e, 0xa9, 0xc9, 0xbc, 0xc7, 0x29, 0xe1, 0x7c, 0xfc, 0x15, 0x57, 0x63, 0xf9, 0x2e, 0x70, - 0xe2, 0x57, 0x6c, 0xe1, 0xb6, 0xe4, 0xfa, 0xa5, 0x18, 0xe3, 0x27, 0x85, 0xc4, 0xb6, 0x42, 0x3d, - 0x5f, 0x1f, 0xac, 0x79, 0x32, 0xd3, 0x4e, 0xe5, 0xaa, 0x77, 0x46, 0xaa, 0xa7, 0xc1, 0x90, 0x7e, - 0xf6, 0x62, 0xa2, 0x9f, 0x95, 0x53, 0xbd, 0xcc, 0x48, 0xf5, 0x32, 0x18, 0xd2, 0xc7, 0x12, 0x55, - 0x75, 0xec, 0x59, 0x57, 0x55, 0xe3, 0x67, 0x85, 0xa0, 0x5d, 0x44, 0x45, 0xe9, 0x69, 0x65, 0xe7, - 0x2d, 0x28, 0x7b, 0x1d, 0x4e, 0xeb, 0x05, 0x5b, 0xbf, 0x18, 0x04, 0xea, 0x6d, 0x05, 0x3f, 0xe8, - 0xd5, 0xab, 0x69, 0xb1, 0x01, 0x0e, 0x87, 0xdc, 0x51, 0x01, 0xd3, 0x73, 0x15, 0xb0, 0xe2, 0xe8, - 0x05, 0x6c, 0x11, 0xa6, 0xa3, 0x02, 0xbb, 0x4e, 0x2c, 0xcf, 0x6d, 0x51, 0x55, 0xe9, 0x4f, 0xf7, - 0x7b, 0xf5, 0xe9, 0x8d, 0x34, 0x12, 0x0f, 0xd2, 0x1b, 0xbf, 0xd4, 0x60, 0x7a, 0xe0, 0xfa, 0x1f, - 0x5d, 0x85, 0x49, 0xdb, 0x65, 0xc4, 0xdf, 0x32, 0x2d, 0x12, 0x0b, 0x9e, 0xd3, 0x6a, 0x79, 0x93, - 0x2b, 0x71, 0x24, 0x4e, 0xd2, 0xa2, 0x33, 0xa0, 0xdb, 0x9d, 0xe0, 0xbe, 0x4f, 0x74, 0xf0, 0x95, - 0x35, 0x8a, 0x39, 0x8c, 0xb7, 0xe2, 0x1d, 0xd3, 0x6f, 0x3d, 0x30, 0x7d, 0x5e, 0x2b, 0x7d, 0x3e, - 0xbd, 0xe8, 0xc9, 0x56, 0xfc, 0x56, 0x12, 0x8d, 0xd3, 0xf4, 0xc6, 0xcf, 0x35, 0x38, 0x93, 0x79, - 0xb6, 0xc9, 0xfd, 0x42, 0x64, 0x02, 0x74, 0x4c, 0xdf, 0x6c, 0x13, 0x46, 0x7c, 0x3a, 0xe4, 0xbc, - 0x9f, 0xe3, 0xe1, 0x25, 0x2c, 0xc7, 0x6b, 0xa1, 0x20, 0x1c, 0x13, 0x6a, 0x7c, 0x58, 0x80, 0x49, - 0xac, 0x22, 0x58, 0x5e, 0x5e, 0x3d, 0xff, 0x26, 0x70, 0x27, 0xd1, 0x04, 0x9e, 0x32, 0x6e, 0x25, - 0x16, 0x97, 0xd5, 0x02, 0xd0, 0x3d, 0x28, 0x51, 0xf1, 0xfa, 0x96, 0xef, 0x2a, 0x36, 0x29, 0x54, - 0x30, 0x46, 0x4e, 0x90, 0xdf, 0x58, 0x09, 0x34, 0xfa, 0x1a, 0xd4, 0x12, 0xf4, 0xfc, 0xec, 0xd9, - 0x6d, 0x13, 0x1f, 0x93, 0x2d, 0xe2, 0x13, 0xd7, 0x22, 0xe8, 0x22, 0x94, 0xcd, 0x8e, 0x7d, 0xdd, - 0xf7, 0xba, 0x1d, 0xe5, 0xd1, 0xb0, 0x71, 0x2c, 0xac, 0xad, 0x08, 0x38, 0x0e, 0x29, 0x38, 0x75, - 0xb0, 0x22, 0x15, 0x57, 0xb1, 0x0b, 0x3f, 0x09, 0xc7, 0x21, 0x45, 0x38, 0x39, 0x16, 0x33, 0x27, - 0xc7, 0x26, 0xe8, 0x5d, 0xbb, 0xa5, 0x6e, 0x29, 0x5f, 0x0d, 0x8a, 0xc5, 0x3b, 0x2b, 0x4b, 0x07, - 0xbd, 0xfa, 0xb9, 0xac, 0xd7, 0x4d, 0xb6, 0xdf, 0x21, 0xb4, 0xf1, 0xce, 0xca, 0x12, 0xe6, 0xcc, - 0xc6, 0x1f, 0x34, 0x98, 0x4e, 0x6c, 0xf2, 0x08, 0x1a, 0xe8, 0x5a, 0xb2, 0x81, 0xbe, 0x32, 0x82, - 0xcb, 0x32, 0xda, 0xa7, 0x9d, 0xda, 0x84, 0xe8, 0x9d, 0x1b, 0xe9, 0x17, 0xbf, 0x0b, 0xb9, 0xef, - 0x32, 0xb3, 0x9f, 0xf9, 0x8c, 0x3f, 0x15, 0xe0, 0xd4, 0x90, 0x28, 0x42, 0xf7, 0x01, 0xa2, 0xf1, - 0x76, 0x88, 0xd1, 0x86, 0x28, 0x1c, 0xb8, 0x79, 0x9f, 0x12, 0xef, 0x70, 0x11, 0x34, 0x26, 0x11, - 0x51, 0xa8, 0xf8, 0x84, 0x12, 0x7f, 0x8f, 0xb4, 0xae, 0x89, 0xea, 0xcf, 0x4d, 0xf7, 0xb5, 0x11, - 0x4c, 0x37, 0x10, 0xbd, 0xd1, 0x54, 0x8c, 0x23, 0xc1, 0x38, 0xae, 0x05, 0xdd, 0x8f, 0x4c, 0x28, - 0x1f, 0x97, 0xaf, 0xe4, 0xda, 0x51, 0xf2, 0x5d, 0xfc, 0x10, 0x63, 0x7e, 0xac, 0xc1, 0xe9, 0xc4, - 0x22, 0x37, 0x48, 0xbb, 0xe3, 0x98, 0xec, 0x28, 0x26, 0xd2, 0x7b, 0x89, 0x62, 0xf4, 0xc6, 0x08, - 0x96, 0x0c, 0x16, 0x99, 0x39, 0x97, 0xfe, 0x45, 0x83, 0x33, 0x43, 0x39, 0x8e, 0x20, 0xb9, 0xbe, - 0x95, 0x4c, 0xae, 0x2b, 0x9f, 0x62, 0x5f, 0xd9, 0x77, 0x99, 0x67, 0x32, 0xed, 0xf0, 0x3f, 0xd9, - 0x3d, 0x8c, 0x5f, 0x6b, 0x70, 0x3c, 0xa0, 0xe4, 0xd3, 0x61, 0x8e, 0xe3, 0xfa, 0x3c, 0x80, 0xfa, - 0x47, 0x48, 0xf0, 0xde, 0xa0, 0x47, 0xeb, 0xbe, 0x1e, 0x62, 0x70, 0x8c, 0x0a, 0xdd, 0x00, 0x14, - 0xac, 0x70, 0xdd, 0x11, 0x43, 0x01, 0x3f, 0xf5, 0xea, 0x82, 0x77, 0x46, 0xf1, 0x22, 0x3c, 0x40, - 0x81, 0x87, 0x70, 0x19, 0x7f, 0xd4, 0xa2, 0xbe, 0x2d, 0xc0, 0x9f, 0x55, 0xcb, 0x8b, 0xc5, 0x65, - 0x5a, 0x3e, 0xde, 0x77, 0x04, 0xe5, 0x67, 0xb6, 0xef, 0x88, 0xd5, 0x65, 0xa4, 0xc4, 0x43, 0x3d, - 0xb5, 0x0b, 0x91, 0x0a, 0x79, 0xa7, 0xbc, 0x9b, 0xb1, 0xff, 0x01, 0x25, 0x4f, 0xf7, 0x87, 0x2c, - 0x87, 0x87, 0xe9, 0xd0, 0xeb, 0xb9, 0x8b, 0x50, 0x76, 0xbd, 0x96, 0x9c, 0x87, 0x53, 0xd3, 0xc5, - 0xaa, 0x82, 0xe3, 0x90, 0x62, 0xe0, 0xdf, 0x2a, 0xc5, 0x67, 0xf3, 0x6f, 0x15, 0x31, 0x11, 0x39, - 0x0e, 0x27, 0x08, 0x6e, 0xfe, 0xa2, 0x89, 0x48, 0xc1, 0x71, 0x48, 0x81, 0x6e, 0x47, 0xfd, 0x45, - 0xde, 0xf9, 0x7d, 0x31, 0x4f, 0x8b, 0xce, 0x6e, 0x28, 0xcd, 0xe6, 0xa3, 0x27, 0xb5, 0x63, 0x8f, - 0x9f, 0xd4, 0x8e, 0x7d, 0xf2, 0xa4, 0x76, 0xec, 0x83, 0x7e, 0x4d, 0x7b, 0xd4, 0xaf, 0x69, 0x8f, - 0xfb, 0x35, 0xed, 0x93, 0x7e, 0x4d, 0xfb, 0x47, 0xbf, 0xa6, 0xfd, 0xf8, 0x9f, 0xb5, 0x63, 0xdf, - 0x7e, 0xf1, 0xb0, 0xbf, 0xcd, 0xfd, 0x27, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xa8, 0x47, 0x3e, 0x55, - 0x27, 0x00, 0x00, + // 2638 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3a, 0xdb, 0x6f, 0x1c, 0x57, + 0xf9, 0x99, 0xdd, 0xf5, 0xda, 0xfe, 0x36, 0xb6, 0xe3, 0x93, 0x5f, 0xf2, 0xdb, 0x98, 0x76, 0x37, + 0x9d, 0x70, 0x71, 0x5a, 0x67, 0xdd, 0x38, 0x55, 0x5b, 0x08, 0x48, 0x78, 0x6d, 0x27, 0x75, 0x9a, + 0x38, 0xce, 0x59, 0x37, 0x10, 0x28, 0x81, 0xf1, 0xec, 0xb1, 0x3d, 0x78, 0x76, 0x66, 0x3b, 0x67, + 0xd6, 0xa9, 0x5f, 0x50, 0xc5, 0x1f, 0x50, 0xf1, 0xca, 0x03, 0xaa, 0xc4, 0x03, 0x12, 0x2f, 0xc0, + 0x33, 0x2f, 0x20, 0x81, 0xd4, 0x08, 0x78, 0x88, 0x44, 0x85, 0xaa, 0x3e, 0x2c, 0x64, 0x11, 0xe2, + 0x5f, 0x40, 0x7e, 0x42, 0xe7, 0x32, 0x97, 0x33, 0xbb, 0x63, 0xcf, 0x86, 0xc4, 0x0a, 0x12, 0x6f, + 0xbb, 0xdf, 0xfd, 0x7c, 0xdf, 0xf9, 0x2e, 0xe7, 0xcc, 0x81, 0xb9, 0xdd, 0x37, 0x69, 0xcd, 0x72, + 0xe7, 0x8d, 0xb6, 0x35, 0xef, 0x11, 0xea, 0x76, 0x3c, 0x93, 0xcc, 0xef, 0x5d, 0x36, 0xec, 0xf6, + 0x8e, 0x71, 0x65, 0x7e, 0x9b, 0x38, 0xc4, 0x33, 0x7c, 0xd2, 0xac, 0xb5, 0x3d, 0xd7, 0x77, 0xd1, + 0x0b, 0x82, 0xba, 0x66, 0xb4, 0xad, 0x5a, 0x40, 0x5d, 0x0b, 0xa8, 0x67, 0x2e, 0x6d, 0x5b, 0xfe, + 0x4e, 0x67, 0xb3, 0x66, 0xba, 0xad, 0xf9, 0x6d, 0x77, 0xdb, 0x9d, 0xe7, 0x4c, 0x9b, 0x9d, 0x2d, + 0xfe, 0x8f, 0xff, 0xe1, 0xbf, 0x84, 0xb0, 0x19, 0x3d, 0xa6, 0xda, 0x74, 0x3d, 0xa6, 0x36, 0xa9, + 0x70, 0xe6, 0xb5, 0x88, 0xa6, 0x65, 0x98, 0x3b, 0x96, 0x43, 0xbc, 0xfd, 0xf9, 0xf6, 0xee, 0xb6, + 0x6a, 0xef, 0x30, 0x5c, 0x74, 0xbe, 0x45, 0x7c, 0x63, 0x90, 0xae, 0xf9, 0x34, 0x2e, 0xaf, 0xe3, + 0xf8, 0x56, 0xab, 0x5f, 0xcd, 0xeb, 0x47, 0x31, 0x50, 0x73, 0x87, 0xb4, 0x8c, 0x24, 0x9f, 0xfe, + 0x51, 0x1e, 0xce, 0x2c, 0xda, 0xb6, 0x6b, 0x32, 0xd8, 0x32, 0xd9, 0xb3, 0x4c, 0xd2, 0xf0, 0x0d, + 0xbf, 0x43, 0xd1, 0x17, 0xa1, 0xd8, 0xf4, 0xac, 0x3d, 0xe2, 0x95, 0xb5, 0xf3, 0xda, 0xec, 0x78, + 0x7d, 0xf2, 0x61, 0xb7, 0x7a, 0xa2, 0xd7, 0xad, 0x16, 0x97, 0x39, 0x14, 0x4b, 0x2c, 0x3a, 0x0f, + 0x85, 0xb6, 0xeb, 0xda, 0xe5, 0x1c, 0xa7, 0x3a, 0x29, 0xa9, 0x0a, 0xeb, 0xae, 0x6b, 0x63, 0x8e, + 0xe1, 0x92, 0xb8, 0xe4, 0x72, 0x3e, 0x21, 0x89, 0x43, 0xb1, 0xc4, 0x22, 0x13, 0xc0, 0x74, 0x9d, + 0xa6, 0xe5, 0x5b, 0xae, 0x43, 0xcb, 0x85, 0xf3, 0xf9, 0xd9, 0xd2, 0xc2, 0x7c, 0x2d, 0x0a, 0x73, + 0xb8, 0xb0, 0x5a, 0x7b, 0x77, 0x9b, 0x01, 0x68, 0x8d, 0xf9, 0xaf, 0xb6, 0x77, 0xb9, 0xb6, 0x14, + 0xf0, 0xd5, 0x91, 0x14, 0x0e, 0x21, 0x88, 0xe2, 0x98, 0x58, 0xf4, 0x36, 0x14, 0x9a, 0x86, 0x6f, + 0x94, 0x47, 0xce, 0x6b, 0xb3, 0xa5, 0x85, 0x4b, 0xa9, 0xe2, 0xa5, 0xdf, 0x6a, 0xd8, 0x78, 0xb0, + 0xf2, 0xbe, 0x4f, 0x1c, 0xca, 0x84, 0x8f, 0xb1, 0x95, 0x2d, 0x1b, 0xbe, 0x81, 0xb9, 0x10, 0xb4, + 0x09, 0x25, 0x87, 0xf8, 0x0f, 0x5c, 0x6f, 0x97, 0x01, 0xcb, 0x45, 0x2e, 0x33, 0x6e, 0x72, 0xff, + 0xce, 0xac, 0xad, 0x49, 0x06, 0xbe, 0x66, 0xc6, 0x56, 0x9f, 0xea, 0x75, 0xab, 0xa5, 0xb5, 0x48, + 0x0e, 0x8e, 0x0b, 0xd5, 0xff, 0xa8, 0xc1, 0x29, 0x19, 0x21, 0xcb, 0x75, 0x30, 0xa1, 0x1d, 0xdb, + 0x47, 0xdf, 0x85, 0x51, 0xe1, 0x34, 0xca, 0xa3, 0x53, 0x5a, 0x78, 0xed, 0x70, 0xa5, 0x42, 0x5b, + 0x52, 0x4c, 0x7d, 0x4a, 0x3a, 0x6b, 0x54, 0xe0, 0x29, 0x0e, 0xa4, 0xa2, 0xbb, 0x70, 0xd2, 0x71, + 0x9b, 0xa4, 0x41, 0x6c, 0x62, 0xfa, 0xae, 0xc7, 0x23, 0x57, 0x5a, 0x38, 0x1f, 0xd7, 0xc2, 0xf2, + 0x84, 0xf9, 0x7e, 0x2d, 0x46, 0x57, 0x3f, 0xd5, 0xeb, 0x56, 0x4f, 0xc6, 0x21, 0x58, 0x91, 0xa3, + 0x7f, 0x56, 0x84, 0x52, 0xdd, 0xa0, 0x96, 0x29, 0x34, 0xa2, 0x1f, 0x00, 0x18, 0xbe, 0xef, 0x59, + 0x9b, 0x1d, 0x9f, 0xaf, 0x85, 0xc5, 0xfc, 0xcb, 0x87, 0xaf, 0x25, 0xc6, 0x5e, 0x5b, 0x0c, 0x79, + 0x57, 0x1c, 0xdf, 0xdb, 0xaf, 0x5f, 0x08, 0xa2, 0x1f, 0x21, 0x7e, 0xf8, 0xd7, 0xea, 0xc4, 0x9d, + 0x8e, 0x61, 0x5b, 0x5b, 0x16, 0x69, 0xae, 0x19, 0x2d, 0x82, 0x63, 0x1a, 0xd1, 0x1e, 0x8c, 0x99, + 0x46, 0xdb, 0x30, 0x2d, 0x7f, 0xbf, 0x9c, 0xe3, 0xda, 0xdf, 0xc8, 0xae, 0x7d, 0x49, 0x72, 0x0a, + 0xdd, 0x2f, 0x49, 0xdd, 0x63, 0x01, 0xb8, 0x5f, 0x73, 0xa8, 0x0b, 0xed, 0xc3, 0x94, 0xe9, 0x3a, + 0xb4, 0xd3, 0x22, 0x74, 0xc9, 0xed, 0x38, 0x3e, 0x61, 0x2e, 0x66, 0xea, 0x5f, 0xcf, 0x12, 0x48, + 0xc9, 0xb2, 0xc4, 0x25, 0xb4, 0xf9, 0xbe, 0xff, 0x7f, 0xa9, 0x7d, 0x6a, 0x49, 0x15, 0x8b, 0x93, + 0x7a, 0xd0, 0x2c, 0x8c, 0xb1, 0x90, 0x30, 0x83, 0xca, 0x05, 0x91, 0xb4, 0xcc, 0xea, 0x35, 0x09, + 0xc3, 0x21, 0xb6, 0x6f, 0x13, 0x8c, 0x3c, 0x9d, 0x4d, 0xc0, 0x2c, 0x30, 0x6c, 0x9b, 0x11, 0x50, + 0x9e, 0x33, 0x63, 0xc2, 0x82, 0x45, 0x09, 0xc3, 0x21, 0x16, 0xdd, 0x81, 0xa2, 0x6f, 0x58, 0x8e, + 0x4f, 0xcb, 0xa3, 0xdc, 0x3b, 0x17, 0xb3, 0x78, 0x67, 0x83, 0x71, 0x44, 0x55, 0x86, 0xff, 0xa5, + 0x58, 0x0a, 0x9a, 0xb1, 0x61, 0x2a, 0xb1, 0x6b, 0xd0, 0x29, 0xc8, 0xef, 0x92, 0x7d, 0x51, 0xe7, + 0x30, 0xfb, 0x89, 0x96, 0x60, 0x64, 0xcf, 0xb0, 0x3b, 0x84, 0x57, 0x35, 0xb5, 0x4c, 0xa4, 0x67, + 0x57, 0x20, 0x15, 0x0b, 0xde, 0xaf, 0xe4, 0xde, 0xd4, 0x66, 0x76, 0x61, 0x42, 0xd9, 0x25, 0x03, + 0x74, 0x2d, 0xab, 0xba, 0x6a, 0x87, 0x55, 0xbc, 0x48, 0xf9, 0x9d, 0x8e, 0xe1, 0xf8, 0x96, 0xbf, + 0x1f, 0x53, 0xa6, 0x5f, 0x87, 0xe9, 0xa5, 0x95, 0x9b, 0xb2, 0x8a, 0x07, 0xce, 0x5e, 0x00, 0x20, + 0xef, 0xb7, 0x3d, 0x42, 0x59, 0x05, 0x93, 0xb5, 0x3c, 0x2c, 0x92, 0x2b, 0x21, 0x06, 0xc7, 0xa8, + 0xf4, 0xfb, 0x30, 0x1a, 0xec, 0x96, 0x46, 0x60, 0x9d, 0xf6, 0x24, 0xd6, 0xd5, 0x27, 0xa4, 0xa6, + 0x91, 0xbb, 0x4c, 0x88, 0x34, 0x56, 0xff, 0x97, 0x06, 0x20, 0x15, 0x34, 0x88, 0xcf, 0x5a, 0x88, + 0xc3, 0x76, 0xa3, 0xa6, 0xb6, 0x10, 0xbe, 0x1b, 0x39, 0x06, 0x35, 0x61, 0xcc, 0x14, 0xf4, 0x54, + 0xa6, 0xe9, 0x11, 0x79, 0x12, 0x49, 0x0f, 0x7e, 0xca, 0x0a, 0x71, 0x2a, 0xcc, 0x52, 0x09, 0xc6, + 0xa1, 0xe4, 0x99, 0x4d, 0x98, 0x50, 0x88, 0x07, 0x04, 0xeb, 0xaa, 0x1a, 0xac, 0x2f, 0x64, 0xb2, + 0x22, 0x1e, 0xa3, 0x3d, 0x90, 0x6d, 0x2f, 0xc3, 0xaa, 0x6f, 0xc0, 0xc8, 0x26, 0x2b, 0x37, 0x52, + 0xd9, 0xc5, 0xcc, 0x95, 0xa9, 0x3e, 0xce, 0x5c, 0xce, 0x01, 0x58, 0x88, 0xd0, 0x3f, 0xcc, 0xc1, + 0x8b, 0xc9, 0x2e, 0xb0, 0xe4, 0x3a, 0x5b, 0xd6, 0x76, 0xc7, 0xe3, 0x7f, 0xd0, 0xd7, 0xa1, 0x28, + 0x44, 0x4a, 0x8b, 0x66, 0x83, 0x04, 0x6a, 0x70, 0xe8, 0x41, 0xb7, 0x7a, 0x36, 0xc9, 0x2a, 0x30, + 0x58, 0xf2, 0xb1, 0xbc, 0xf6, 0xc8, 0x7b, 0x1d, 0x42, 0x7d, 0x11, 0x25, 0x59, 0x59, 0xb0, 0x84, + 0xe1, 0x10, 0x8b, 0x3e, 0xd0, 0xe0, 0x74, 0x53, 0x96, 0xb2, 0x98, 0x0d, 0xb2, 0xcd, 0x5c, 0xce, + 0x56, 0x03, 0x63, 0x8c, 0xf5, 0xcf, 0x49, 0x63, 0x4f, 0x0f, 0x40, 0xe2, 0x41, 0xaa, 0xf4, 0x7f, + 0x68, 0x70, 0x76, 0x70, 0x5b, 0x44, 0x5b, 0x30, 0xea, 0xf1, 0x5f, 0x41, 0x47, 0xba, 0x9a, 0xc5, + 0x20, 0xb9, 0xcc, 0xf4, 0x26, 0x2b, 0xfe, 0x53, 0x1c, 0x08, 0x47, 0x26, 0x14, 0x4d, 0x6e, 0x93, + 0xdc, 0xd3, 0x57, 0x87, 0x6b, 0xe2, 0xaa, 0x07, 0xc2, 0x7a, 0x27, 0xc0, 0x58, 0x8a, 0xd6, 0x7f, + 0xae, 0xc1, 0x54, 0xa2, 0x40, 0xa1, 0x0a, 0xe4, 0x2d, 0xc7, 0xe7, 0xdb, 0x2a, 0x2f, 0x62, 0xb4, + 0xea, 0xf8, 0x22, 0x43, 0x19, 0x02, 0xbd, 0x04, 0x85, 0x4d, 0x36, 0xd3, 0xe5, 0x79, 0x71, 0x9e, + 0xe8, 0x75, 0xab, 0xe3, 0x75, 0xd7, 0xb5, 0x05, 0x05, 0x47, 0xa1, 0x2f, 0x41, 0x91, 0xfa, 0x9e, + 0xe5, 0x6c, 0xcb, 0x1e, 0xc2, 0x87, 0x98, 0x06, 0x87, 0x08, 0x32, 0x89, 0x46, 0x2f, 0xc3, 0xe8, + 0x1e, 0xf1, 0x78, 0xf1, 0x19, 0xe1, 0x94, 0xbc, 0x3b, 0xdc, 0x15, 0x20, 0x41, 0x1a, 0x10, 0xe8, + 0xbf, 0xcc, 0x41, 0x49, 0x06, 0xd0, 0x36, 0xac, 0x16, 0xba, 0x17, 0xdb, 0x50, 0x22, 0x12, 0xaf, + 0x0c, 0x11, 0x89, 0x28, 0xd7, 0x07, 0xec, 0x40, 0x02, 0x25, 0xd6, 0x18, 0x7d, 0x4f, 0xb4, 0x17, + 0x11, 0x80, 0x5a, 0xc6, 0x8d, 0x27, 0xd9, 0xea, 0xa7, 0xa5, 0x82, 0x52, 0x04, 0xa3, 0x38, 0x2e, + 0x17, 0xdd, 0x0f, 0x43, 0x3c, 0x4c, 0x7b, 0x67, 0x8b, 0xcf, 0x16, 0xdd, 0x8f, 0x35, 0x28, 0xa7, + 0x31, 0x29, 0xf9, 0xa8, 0x3d, 0x51, 0x3e, 0xe6, 0x8e, 0x2f, 0x1f, 0x7f, 0xab, 0xc5, 0x62, 0x4f, + 0x29, 0xfa, 0x1e, 0x8c, 0xb1, 0xe9, 0x9e, 0x0f, 0xeb, 0xa2, 0xf7, 0xbc, 0x9a, 0xed, 0x2c, 0x70, + 0x7b, 0xf3, 0xfb, 0xc4, 0xf4, 0x6f, 0x11, 0xdf, 0x88, 0xfa, 0x5c, 0x04, 0xc3, 0xa1, 0x54, 0x74, + 0x1b, 0x0a, 0xb4, 0x4d, 0xcc, 0x61, 0x7a, 0x3c, 0x37, 0xad, 0xd1, 0x26, 0x66, 0x54, 0xaf, 0xd9, + 0x3f, 0xcc, 0x05, 0xe9, 0x3f, 0x89, 0x07, 0x83, 0x52, 0x35, 0x18, 0x69, 0x2e, 0xd6, 0x8e, 0xcf, + 0xc5, 0xbf, 0x09, 0x4b, 0x01, 0xb7, 0xef, 0xa6, 0x45, 0x7d, 0xf4, 0x6e, 0x9f, 0x9b, 0x6b, 0xd9, + 0xdc, 0xcc, 0xb8, 0xb9, 0x93, 0xc3, 0x2c, 0x0b, 0x20, 0x31, 0x17, 0xaf, 0xc1, 0x88, 0xe5, 0x93, + 0x56, 0x90, 0x5f, 0x17, 0x33, 0xfb, 0x38, 0x1a, 0x1c, 0x56, 0x19, 0x3f, 0x16, 0x62, 0xf4, 0x47, + 0xea, 0x0a, 0x98, 0xef, 0xd1, 0x77, 0x60, 0x9c, 0xca, 0x61, 0x27, 0xa8, 0x12, 0x73, 0x59, 0xf4, + 0x84, 0xe3, 0xea, 0xb4, 0x54, 0x35, 0x1e, 0x40, 0x28, 0x8e, 0x24, 0xc6, 0x32, 0x38, 0x37, 0x54, + 0x06, 0x27, 0xe2, 0x9f, 0x9a, 0xc1, 0x1e, 0x0c, 0x0a, 0x20, 0xfa, 0x36, 0x14, 0xdd, 0xb6, 0xf1, + 0x5e, 0x38, 0x78, 0x1d, 0x71, 0x2c, 0xb9, 0xcd, 0x69, 0x07, 0x6d, 0x13, 0x60, 0x3a, 0x05, 0x1a, + 0x4b, 0x91, 0xfa, 0x87, 0x1a, 0x9c, 0x4a, 0x16, 0xb3, 0x21, 0xaa, 0xc5, 0x3a, 0x4c, 0xb6, 0x0c, + 0xdf, 0xdc, 0x09, 0x1b, 0x8a, 0x3c, 0xfc, 0xcf, 0xf6, 0xba, 0xd5, 0xc9, 0x5b, 0x0a, 0xe6, 0xa0, + 0x5b, 0x45, 0xd7, 0x3a, 0xb6, 0xbd, 0xaf, 0x1e, 0x84, 0x12, 0xfc, 0xac, 0xf0, 0x97, 0xd3, 0x8e, + 0x36, 0xe8, 0x2a, 0x4c, 0xd0, 0x1d, 0xc3, 0x23, 0xcd, 0xe0, 0xa4, 0x24, 0xe6, 0x93, 0x33, 0xd2, + 0xa1, 0x13, 0x8d, 0x38, 0x12, 0xab, 0xb4, 0xc8, 0xeb, 0x9b, 0x1c, 0x97, 0x9f, 0xec, 0x84, 0xf5, + 0x9c, 0xcd, 0x91, 0x9f, 0x15, 0x60, 0x42, 0xe9, 0x76, 0x19, 0xe6, 0xc9, 0x45, 0x98, 0x6a, 0x46, + 0xdb, 0x93, 0x1f, 0x00, 0x45, 0xe0, 0xc2, 0xc3, 0xe3, 0xb2, 0x8a, 0xc6, 0x49, 0x7a, 0x35, 0xd9, + 0xf2, 0x4f, 0x3d, 0xd9, 0xee, 0xc2, 0xa4, 0x11, 0xce, 0x37, 0xb7, 0xdc, 0x66, 0x70, 0x42, 0xad, + 0x49, 0xae, 0xc9, 0x45, 0x05, 0x7b, 0xd0, 0xad, 0xfe, 0x5f, 0x72, 0x2a, 0x62, 0x70, 0x9c, 0x90, + 0x82, 0x2e, 0xc0, 0x08, 0x8f, 0x0e, 0x1f, 0x41, 0xf2, 0x51, 0x71, 0xe1, 0x8e, 0xc5, 0x02, 0x87, + 0x2e, 0x43, 0xc9, 0x68, 0xb6, 0x2c, 0x67, 0xd1, 0x34, 0x09, 0x0d, 0x4e, 0xa6, 0x7c, 0xae, 0x59, + 0x8c, 0xc0, 0x38, 0x4e, 0x83, 0x1c, 0x98, 0xdc, 0xb2, 0x3c, 0xea, 0x2f, 0xee, 0x19, 0x96, 0x6d, + 0x6c, 0xda, 0x44, 0x9e, 0x53, 0x33, 0x0d, 0x12, 0x8d, 0xce, 0x66, 0x30, 0xa9, 0x9c, 0x0d, 0xd6, + 0x77, 0x4d, 0x91, 0x86, 0x13, 0xd2, 0xd9, 0xd4, 0xe2, 0xbb, 0x36, 0x11, 0xa9, 0x4d, 0xcb, 0x63, + 0xd9, 0x95, 0x6d, 0x84, 0x6c, 0xd1, 0xd4, 0x12, 0xc1, 0x28, 0x8e, 0xcb, 0xd5, 0xff, 0x12, 0x1e, + 0x16, 0x52, 0x86, 0x5a, 0x74, 0x91, 0x8d, 0xc8, 0x1c, 0x25, 0xf7, 0x5b, 0x6c, 0xca, 0xe5, 0x60, + 0x1c, 0xe0, 0x63, 0x17, 0x89, 0xb9, 0x4c, 0x17, 0x89, 0xf9, 0x0c, 0x17, 0x89, 0x85, 0x43, 0x2f, + 0x12, 0x13, 0x81, 0x1c, 0xc9, 0x10, 0xc8, 0x84, 0x63, 0x8b, 0xcf, 0xc8, 0xb1, 0xef, 0xc2, 0x64, + 0xe2, 0x78, 0x7e, 0x03, 0xf2, 0x26, 0xb1, 0x65, 0x91, 0x3f, 0xe2, 0xea, 0xb0, 0xef, 0x70, 0x5f, + 0x1f, 0xed, 0x75, 0xab, 0xf9, 0xa5, 0x95, 0x9b, 0x98, 0x09, 0xd1, 0x7f, 0x9d, 0x0f, 0xca, 0x7a, + 0xb4, 0xb5, 0xfe, 0x57, 0x16, 0xfe, 0xd3, 0xb2, 0x90, 0xd8, 0x1a, 0xa3, 0xcf, 0x68, 0x6b, 0xfc, + 0x33, 0x9c, 0x7f, 0xf9, 0x85, 0x15, 0x7a, 0x31, 0xd6, 0x33, 0xea, 0x25, 0xc9, 0x9e, 0x7f, 0x9b, + 0xec, 0x8b, 0x06, 0x72, 0x21, 0xde, 0x40, 0xc6, 0x07, 0xdf, 0xb3, 0xa0, 0xab, 0x50, 0x24, 0x5b, + 0x5b, 0xc4, 0xf4, 0x65, 0x52, 0x05, 0xd7, 0xa3, 0xc5, 0x15, 0x0e, 0x3d, 0xe8, 0x56, 0xa7, 0x63, + 0x2a, 0x05, 0x10, 0x4b, 0x16, 0xf4, 0x0d, 0x18, 0xf7, 0xad, 0x16, 0x59, 0x6c, 0x36, 0x49, 0x93, + 0xfb, 0xbb, 0xb4, 0xf0, 0x72, 0xb6, 0xd1, 0x70, 0xc3, 0x6a, 0x11, 0x71, 0x6a, 0xdc, 0x08, 0x04, + 0xe0, 0x48, 0x96, 0xfe, 0x30, 0x1c, 0xe2, 0xb8, 0x5a, 0xdc, 0xb1, 0xc9, 0x31, 0x4c, 0xfb, 0x0d, + 0x65, 0xda, 0xbf, 0x9c, 0xf9, 0x22, 0x91, 0x99, 0x97, 0x3a, 0xf1, 0x7f, 0xac, 0x05, 0xd3, 0x5b, + 0x48, 0x7b, 0x0c, 0x53, 0x35, 0x56, 0xa7, 0xea, 0x4b, 0x43, 0xad, 0x25, 0x65, 0xb2, 0xfe, 0xa4, + 0x7f, 0x25, 0x7c, 0xba, 0x6e, 0xc1, 0x64, 0x53, 0x49, 0xd5, 0x61, 0x0e, 0x2c, 0x5c, 0x54, 0x98, + 0xe3, 0x88, 0x65, 0xaa, 0x9a, 0xf7, 0x38, 0x21, 0x9c, 0x1d, 0x18, 0xf8, 0x3d, 0x6d, 0xb6, 0x2b, + 0xaf, 0xf8, 0x7d, 0x6f, 0xb8, 0x2c, 0x61, 0xbf, 0x10, 0xa3, 0xff, 0x38, 0xa7, 0x2c, 0x2b, 0xd4, + 0xf3, 0xb5, 0xfe, 0x9a, 0x27, 0x32, 0xed, 0x74, 0xa6, 0x7a, 0xa7, 0x27, 0x7a, 0x1a, 0x0c, 0xe8, + 0x67, 0x2f, 0x28, 0xfd, 0x6c, 0x2c, 0xd1, 0xcb, 0xf4, 0x44, 0x2f, 0x83, 0x01, 0x7d, 0x4c, 0xa9, + 0xaa, 0x23, 0x4f, 0xbb, 0xaa, 0xea, 0x3f, 0xcd, 0x05, 0xed, 0x22, 0x2a, 0x4a, 0x47, 0x95, 0x9d, + 0xb7, 0x60, 0xcc, 0x6d, 0x33, 0x5a, 0x37, 0x58, 0xfa, 0x5c, 0xb0, 0x51, 0x6f, 0x4b, 0xf8, 0x41, + 0xb7, 0x5a, 0x4e, 0x8a, 0x0d, 0x70, 0x38, 0xe4, 0x8e, 0x0a, 0x58, 0x3e, 0x53, 0x01, 0x2b, 0x0c, + 0x5f, 0xc0, 0x96, 0x60, 0x3a, 0x2a, 0xb0, 0x0d, 0x62, 0xba, 0x4e, 0x93, 0xca, 0x4a, 0x7f, 0xa6, + 0xd7, 0xad, 0x4e, 0x6f, 0x24, 0x91, 0xb8, 0x9f, 0x5e, 0xff, 0x85, 0x06, 0xd3, 0x7d, 0x9f, 0xec, + 0xd8, 0x91, 0xc4, 0x62, 0x13, 0xf9, 0x96, 0x61, 0x92, 0xd8, 0xe6, 0x09, 0x8f, 0x24, 0xab, 0x71, + 0x24, 0x56, 0x69, 0xd1, 0x39, 0xc8, 0x5b, 0xed, 0xe0, 0x86, 0x94, 0x77, 0xf0, 0xd5, 0x75, 0x8a, + 0x19, 0x8c, 0xb5, 0xe2, 0x1d, 0xc3, 0x6b, 0x3e, 0x30, 0x3c, 0x56, 0x2b, 0x3d, 0x36, 0xbd, 0xe4, + 0xd5, 0x56, 0xfc, 0x96, 0x8a, 0xc6, 0x49, 0x7a, 0xfd, 0x67, 0x1a, 0x9c, 0x4b, 0x3d, 0x0d, 0x66, + 0xfe, 0xaa, 0x6b, 0x00, 0xb4, 0x0d, 0xcf, 0x68, 0x11, 0x79, 0x70, 0x7a, 0x82, 0x8f, 0xa5, 0x61, + 0x39, 0x5e, 0x0f, 0x05, 0xe1, 0x98, 0x50, 0xfd, 0xa3, 0x1c, 0x4c, 0x60, 0xb9, 0x83, 0xc5, 0x75, + 0xdf, 0xb3, 0x6f, 0x02, 0x77, 0x94, 0x26, 0x70, 0xc4, 0xb8, 0xa5, 0x18, 0x97, 0xd6, 0x02, 0xd0, + 0x3d, 0x28, 0x52, 0xfe, 0xc5, 0x3c, 0xdb, 0xe5, 0xb5, 0x2a, 0x94, 0x33, 0x46, 0x41, 0x10, 0xff, + 0xb1, 0x14, 0xa8, 0xf7, 0x34, 0xa8, 0x28, 0xf4, 0xf2, 0xdb, 0x9e, 0x87, 0xc9, 0x16, 0xf1, 0x88, + 0x63, 0x12, 0x34, 0x07, 0x63, 0x46, 0xdb, 0xba, 0xee, 0xb9, 0x9d, 0xb6, 0x8c, 0x68, 0xd8, 0x38, + 0x16, 0xd7, 0x57, 0x39, 0x1c, 0x87, 0x14, 0x8c, 0x3a, 0xb0, 0x48, 0xee, 0xab, 0xd8, 0x15, 0xa9, + 0x80, 0xe3, 0x90, 0x22, 0x9c, 0x1c, 0x0b, 0xa9, 0x93, 0x63, 0x1d, 0xf2, 0x1d, 0xab, 0x29, 0xef, + 0x75, 0x5f, 0x0d, 0x8a, 0xc5, 0x3b, 0xab, 0xcb, 0x07, 0xdd, 0xea, 0x4b, 0x69, 0x2f, 0x12, 0xfc, + 0xfd, 0x36, 0xa1, 0xb5, 0x77, 0x56, 0x97, 0x31, 0x63, 0xd6, 0x7f, 0xa7, 0xc1, 0xb4, 0xb2, 0xc8, + 0x63, 0x68, 0xa0, 0xeb, 0x6a, 0x03, 0x7d, 0x65, 0x88, 0x90, 0xa5, 0xb4, 0x4f, 0x2b, 0xb1, 0x08, + 0xde, 0x3b, 0x37, 0x92, 0x5f, 0xe9, 0x2f, 0x66, 0xbe, 0xfd, 0x4d, 0xff, 0x34, 0xaf, 0xff, 0x21, + 0x07, 0xa7, 0x07, 0xec, 0x22, 0x74, 0x1f, 0x20, 0x1a, 0x6f, 0x07, 0x38, 0x6d, 0x80, 0xc2, 0xbe, + 0x6f, 0x15, 0x93, 0xfc, 0xdb, 0x79, 0x04, 0x8d, 0x49, 0x44, 0x14, 0x4a, 0x1e, 0xa1, 0xc4, 0xdb, + 0x23, 0xcd, 0x6b, 0xbc, 0xfa, 0x33, 0xd7, 0x7d, 0x75, 0x08, 0xd7, 0xf5, 0xed, 0xde, 0x68, 0x2a, + 0xc6, 0x91, 0x60, 0x1c, 0xd7, 0x82, 0xee, 0x47, 0x2e, 0x14, 0x0f, 0x42, 0xae, 0x64, 0x5a, 0x91, + 0xfa, 0x96, 0xe5, 0x10, 0x67, 0x7e, 0xa2, 0xc1, 0x19, 0xc5, 0xc8, 0x0d, 0xd2, 0x6a, 0xdb, 0x86, + 0x7f, 0x1c, 0x13, 0xe9, 0x3d, 0xa5, 0x18, 0xbd, 0x31, 0x84, 0x27, 0x03, 0x23, 0x53, 0xe7, 0xd2, + 0x3f, 0x6b, 0x70, 0x6e, 0x20, 0xc7, 0x31, 0x24, 0xd7, 0x37, 0xd5, 0xe4, 0xba, 0xf2, 0x04, 0xeb, + 0x4a, 0xbf, 0xfd, 0x3d, 0x97, 0xea, 0x87, 0xff, 0xca, 0xee, 0xa1, 0xff, 0x4a, 0x83, 0x93, 0x01, + 0x25, 0x9b, 0x0e, 0x33, 0x1c, 0xd7, 0x17, 0x00, 0xe4, 0x2b, 0xae, 0xe0, 0x0b, 0x4d, 0x3e, 0xb2, + 0xfb, 0x7a, 0x88, 0xc1, 0x31, 0x2a, 0x74, 0x03, 0x50, 0x60, 0x61, 0xc3, 0x0e, 0xae, 0x37, 0x79, + 0x0b, 0xc8, 0xd7, 0x67, 0x24, 0x2f, 0xc2, 0x7d, 0x14, 0x78, 0x00, 0x97, 0xfe, 0x7b, 0x2d, 0xea, + 0xdb, 0x1c, 0xfc, 0xbc, 0x7a, 0x9e, 0x1b, 0x97, 0xea, 0xf9, 0x78, 0xdf, 0xe1, 0x94, 0xcf, 0x6d, + 0xdf, 0xe1, 0xd6, 0xa5, 0xa4, 0xc4, 0x9f, 0x0a, 0x89, 0x55, 0xf0, 0x54, 0xc8, 0x3a, 0xe5, 0xdd, + 0x8c, 0xbd, 0xdd, 0x53, 0x4f, 0xf7, 0x87, 0x98, 0xc3, 0xb6, 0xe9, 0xc0, 0xeb, 0xb9, 0xb9, 0xd8, + 0xc3, 0xa2, 0xc4, 0x74, 0x91, 0xe1, 0x71, 0x51, 0xe1, 0x29, 0x3d, 0x2e, 0x9a, 0x8b, 0x3d, 0x2e, + 0x12, 0x37, 0x7f, 0xd1, 0x44, 0xd4, 0xff, 0xc0, 0xe8, 0x76, 0xd4, 0x5f, 0xc4, 0x9d, 0xdf, 0xe7, + 0xb3, 0xb4, 0xe8, 0x43, 0x1e, 0xce, 0x61, 0x38, 0xdb, 0x26, 0x9e, 0x00, 0x47, 0x56, 0xb2, 0x4c, + 0x1d, 0xe5, 0xc6, 0xcc, 0xf4, 0xba, 0xd5, 0xb3, 0xeb, 0x03, 0x29, 0x70, 0x0a, 0x27, 0xda, 0x81, + 0x49, 0xe5, 0xa3, 0x46, 0x70, 0xf1, 0x3b, 0x9b, 0xf5, 0x0d, 0x4c, 0x74, 0xbf, 0xac, 0x7c, 0x2b, + 0xa1, 0x38, 0x21, 0xb7, 0x5e, 0x7f, 0xf8, 0xb8, 0x72, 0xe2, 0xd1, 0xe3, 0xca, 0x89, 0x4f, 0x1f, + 0x57, 0x4e, 0x7c, 0xd0, 0xab, 0x68, 0x0f, 0x7b, 0x15, 0xed, 0x51, 0xaf, 0xa2, 0x7d, 0xda, 0xab, + 0x68, 0x7f, 0xeb, 0x55, 0xb4, 0x1f, 0xfd, 0xbd, 0x72, 0xe2, 0x5b, 0x2f, 0x1c, 0xf6, 0x50, 0xf7, + 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xdc, 0xdc, 0x55, 0xa0, 0xc7, 0x2b, 0x00, 0x00, } func (m *AllocatedDeviceStatus) Marshal() (dAtA []byte, err error) { @@ -1528,6 +1629,49 @@ func (m *BasicDevice) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- + dAtA[i] = 0x3a + } + } + if m.AllNodes != nil { + i-- + if *m.AllNodes { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + } + if m.NodeSelector != nil { + { + size, err := m.NodeSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.NodeName != nil { + i -= len(*m.NodeName) + copy(dAtA[i:], *m.NodeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.NodeName))) + i-- + dAtA[i] = 0x22 + } + if len(m.ConsumesCounter) > 0 { + for iNdEx := len(m.ConsumesCounter) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ConsumesCounter[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x1a } } @@ -1620,6 +1764,96 @@ func (m *CELDeviceSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *Counter) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Counter) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Counter) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Value.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CounterSet) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CounterSet) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CounterSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Counters) > 0 { + keysForCounters := make([]string, 0, len(m.Counters)) + for k := range m.Counters { + keysForCounters = append(keysForCounters, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCounters) + for iNdEx := len(keysForCounters) - 1; iNdEx >= 0; iNdEx-- { + v := m.Counters[string(keysForCounters[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForCounters[iNdEx]) + copy(dAtA[i:], keysForCounters[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForCounters[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *Device) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2165,6 +2399,63 @@ func (m *DeviceConstraint) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *DeviceCounterConsumption) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeviceCounterConsumption) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeviceCounterConsumption) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Counters) > 0 { + keysForCounters := make([]string, 0, len(m.Counters)) + for k := range m.Counters { + keysForCounters = append(keysForCounters, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCounters) + for iNdEx := len(keysForCounters) - 1; iNdEx >= 0; iNdEx-- { + v := m.Counters[string(keysForCounters[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForCounters[iNdEx]) + copy(dAtA[i:], keysForCounters[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForCounters[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.SharedCounter) + copy(dAtA[i:], m.SharedCounter) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SharedCounter))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *DeviceRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3323,6 +3614,30 @@ func (m *ResourceSliceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.SharedCounters) > 0 { + for iNdEx := len(m.SharedCounters) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SharedCounters[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } + if m.PerDeviceNodeSelection != nil { + i-- + if *m.PerDeviceNodeSelection { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + } if len(m.Devices) > 0 { for iNdEx := len(m.Devices) - 1; iNdEx >= 0; iNdEx-- { { @@ -3459,6 +3774,23 @@ func (m *BasicDevice) Size() (n int) { n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) } } + if len(m.ConsumesCounter) > 0 { + for _, e := range m.ConsumesCounter { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.NodeName != nil { + l = len(*m.NodeName) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NodeSelector != nil { + l = m.NodeSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AllNodes != nil { + n += 2 + } if len(m.Taints) > 0 { for _, e := range m.Taints { l = e.Size() @@ -3479,6 +3811,37 @@ func (m *CELDeviceSelector) Size() (n int) { return n } +func (m *Counter) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Value.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CounterSet) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Counters) > 0 { + for k, v := range m.Counters { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + func (m *Device) Size() (n int) { if m == nil { return 0 @@ -3695,6 +4058,26 @@ func (m *DeviceConstraint) Size() (n int) { return n } +func (m *DeviceCounterConsumption) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SharedCounter) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Counters) > 0 { + for k, v := range m.Counters { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + func (m *DeviceRequest) Size() (n int) { if m == nil { return 0 @@ -4140,6 +4523,15 @@ func (m *ResourceSliceSpec) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if m.PerDeviceNodeSelection != nil { + n += 2 + } + if len(m.SharedCounters) > 0 { + for _, e := range m.SharedCounters { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -4184,6 +4576,11 @@ func (this *BasicDevice) String() string { if this == nil { return "nil" } + repeatedStringForConsumesCounter := "[]DeviceCounterConsumption{" + for _, f := range this.ConsumesCounter { + repeatedStringForConsumesCounter += strings.Replace(strings.Replace(f.String(), "DeviceCounterConsumption", "DeviceCounterConsumption", 1), `&`, ``, 1) + "," + } + repeatedStringForConsumesCounter += "}" repeatedStringForTaints := "[]DeviceTaint{" for _, f := range this.Taints { repeatedStringForTaints += strings.Replace(strings.Replace(f.String(), "DeviceTaint", "DeviceTaint", 1), `&`, ``, 1) + "," @@ -4212,6 +4609,10 @@ func (this *BasicDevice) String() string { s := strings.Join([]string{`&BasicDevice{`, `Attributes:` + mapStringForAttributes + `,`, `Capacity:` + mapStringForCapacity + `,`, + `ConsumesCounter:` + repeatedStringForConsumesCounter + `,`, + `NodeName:` + valueToStringGenerated(this.NodeName) + `,`, + `NodeSelector:` + strings.Replace(fmt.Sprintf("%v", this.NodeSelector), "NodeSelector", "v11.NodeSelector", 1) + `,`, + `AllNodes:` + valueToStringGenerated(this.AllNodes) + `,`, `Taints:` + repeatedStringForTaints + `,`, `}`, }, "") @@ -4227,6 +4628,37 @@ func (this *CELDeviceSelector) String() string { }, "") return s } +func (this *Counter) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Counter{`, + `Value:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Value), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CounterSet) String() string { + if this == nil { + return "nil" + } + keysForCounters := make([]string, 0, len(this.Counters)) + for k := range this.Counters { + keysForCounters = append(keysForCounters, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCounters) + mapStringForCounters := "map[string]Counter{" + for _, k := range keysForCounters { + mapStringForCounters += fmt.Sprintf("%v: %v,", k, this.Counters[k]) + } + mapStringForCounters += "}" + s := strings.Join([]string{`&CounterSet{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Counters:` + mapStringForCounters + `,`, + `}`, + }, "") + return s +} func (this *Device) String() string { if this == nil { return "nil" @@ -4401,6 +4833,27 @@ func (this *DeviceConstraint) String() string { }, "") return s } +func (this *DeviceCounterConsumption) String() string { + if this == nil { + return "nil" + } + keysForCounters := make([]string, 0, len(this.Counters)) + for k := range this.Counters { + keysForCounters = append(keysForCounters, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCounters) + mapStringForCounters := "map[string]Counter{" + for _, k := range keysForCounters { + mapStringForCounters += fmt.Sprintf("%v: %v,", k, this.Counters[k]) + } + mapStringForCounters += "}" + s := strings.Join([]string{`&DeviceCounterConsumption{`, + `SharedCounter:` + fmt.Sprintf("%v", this.SharedCounter) + `,`, + `Counters:` + mapStringForCounters + `,`, + `}`, + }, "") + return s +} func (this *DeviceRequest) String() string { if this == nil { return "nil" @@ -4754,6 +5207,11 @@ func (this *ResourceSliceSpec) String() string { repeatedStringForDevices += strings.Replace(strings.Replace(f.String(), "Device", "Device", 1), `&`, ``, 1) + "," } repeatedStringForDevices += "}" + repeatedStringForSharedCounters := "[]CounterSet{" + for _, f := range this.SharedCounters { + repeatedStringForSharedCounters += strings.Replace(strings.Replace(f.String(), "CounterSet", "CounterSet", 1), `&`, ``, 1) + "," + } + repeatedStringForSharedCounters += "}" s := strings.Join([]string{`&ResourceSliceSpec{`, `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, `Pool:` + strings.Replace(strings.Replace(this.Pool.String(), "ResourcePool", "ResourcePool", 1), `&`, ``, 1) + `,`, @@ -4761,6 +5219,8 @@ func (this *ResourceSliceSpec) String() string { `NodeSelector:` + strings.Replace(fmt.Sprintf("%v", this.NodeSelector), "NodeSelector", "v11.NodeSelector", 1) + `,`, `AllNodes:` + fmt.Sprintf("%v", this.AllNodes) + `,`, `Devices:` + repeatedStringForDevices + `,`, + `PerDeviceNodeSelection:` + valueToStringGenerated(this.PerDeviceNodeSelection) + `,`, + `SharedCounters:` + repeatedStringForSharedCounters + `,`, `}`, }, "") return s @@ -5432,6 +5892,130 @@ func (m *BasicDevice) Unmarshal(dAtA []byte) error { m.Capacity[QualifiedName(mapkey)] = *mapvalue iNdEx = postIndex case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsumesCounter", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConsumesCounter = append(m.ConsumesCounter, DeviceCounterConsumption{}) + if err := m.ConsumesCounter[len(m.ConsumesCounter)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.NodeName = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NodeSelector == nil { + m.NodeSelector = &v11.NodeSelector{} + } + if err := m.NodeSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllNodes", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.AllNodes = &b + case 7: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Taints", wireType) } @@ -5568,6 +6152,300 @@ func (m *CELDeviceSelector) Unmarshal(dAtA []byte) error { } return nil } +func (m *Counter) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Counter: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Counter: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CounterSet) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CounterSet: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CounterSet: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Counters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Counters == nil { + m.Counters = make(map[string]Counter) + } + var mapkey string + mapvalue := &Counter{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &Counter{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Counters[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Device) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -7010,6 +7888,217 @@ func (m *DeviceConstraint) Unmarshal(dAtA []byte) error { } return nil } +func (m *DeviceCounterConsumption) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeviceCounterConsumption: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeviceCounterConsumption: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SharedCounter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SharedCounter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Counters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Counters == nil { + m.Counters = make(map[string]Counter) + } + var mapkey string + mapvalue := &Counter{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &Counter{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Counters[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *DeviceRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -10658,6 +11747,61 @@ func (m *ResourceSliceSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PerDeviceNodeSelection", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.PerDeviceNodeSelection = &b + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SharedCounters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SharedCounters = append(m.SharedCounters, CounterSet{}) + if err := m.SharedCounters[len(m.SharedCounters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/staging/src/k8s.io/api/resource/v1alpha3/generated.proto b/staging/src/k8s.io/api/resource/v1alpha3/generated.proto index 76ff86901b9..4b338b34c84 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/generated.proto +++ b/staging/src/k8s.io/api/resource/v1alpha3/generated.proto @@ -114,6 +114,51 @@ message BasicDevice { // +optional map capacity = 2; + // ConsumesCounter defines a list of references to sharedCounters + // and the set of counters that the device will + // consume from those counter sets. + // + // There can only be a single entry per counterSet. + // + // The maximum number of device counter consumption entries + // is 32. This is the same as the maximum number of shared counters + // allowed in a ResourceSlice. + // + // +optional + // +listType=atomic + // +featureGate=DRAPartitionableDevices + repeated DeviceCounterConsumption consumesCounter = 3; + + // NodeName identifies the node where the device is available. + // + // Must only be set if Spec.PerDeviceNodeSelection is set to true. + // At most one of NodeName, NodeSelector and AllNodes can be set. + // + // +optional + // +oneOf=DeviceNodeSelection + // +featureGate=DRAPartitionableDevices + optional string nodeName = 4; + + // NodeSelector defines the nodes where the device is available. + // + // Must only be set if Spec.PerDeviceNodeSelection is set to true. + // At most one of NodeName, NodeSelector and AllNodes can be set. + // + // +optional + // +oneOf=DeviceNodeSelection + // +featureGate=DRAPartitionableDevices + optional .k8s.io.api.core.v1.NodeSelector nodeSelector = 5; + + // AllNodes indicates that all nodes have access to the device. + // + // Must only be set if Spec.PerDeviceNodeSelection is set to true. + // At most one of NodeName, NodeSelector and AllNodes can be set. + // + // +optional + // +oneOf=DeviceNodeSelection + // +featureGate=DRAPartitionableDevices + optional bool allNodes = 6; + // If specified, these are the driver-defined taints. // // The maximum number of taints is 8. @@ -124,7 +169,7 @@ message BasicDevice { // +optional // +listType=atomic // +featureGate=DRADeviceTaints - repeated DeviceTaint taints = 3; + repeated DeviceTaint taints = 7; } // CELDeviceSelector contains a CEL expression for selecting a device. @@ -184,6 +229,42 @@ message CELDeviceSelector { optional string expression = 1; } +// Counter describes a quantity associated with a device. +message Counter { + // Value defines how much of a certain device counter is available. + // + // +required + optional .k8s.io.apimachinery.pkg.api.resource.Quantity value = 1; +} + +// CounterSet defines a named set of counters +// that are available to be used by devices defined in the +// ResourceSlice. +// +// 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. +message CounterSet { + // Name defines the name of the counter set. + // It must be a DNS label. + // + // +required + optional string name = 1; + + // Counters defines the set of counters for this CounterSet + // The name of each counter must be unique in that set and must be a DNS label. + // + // 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. + // + // The maximum number of counters is 32. + // + // +required + map counters = 2; +} + // Device represents one individual hardware instance that can be selected based // on its attributes. Besides the name, exactly one field must be set. message Device { @@ -416,6 +497,24 @@ message DeviceConstraint { optional string matchAttribute = 2; } +// DeviceCounterConsumption defines a set of counters that +// a device will consume from a CounterSet. +message DeviceCounterConsumption { + // SharedCounter defines the shared counter from which the + // counters defined will be consumed. + // + // +required + optional string sharedCounter = 1; + + // Counters defines the Counter that will be consumed by + // the device. + // + // The maximum number of Counters is 32. + // + // +required + map counters = 2; +} + // 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. @@ -1208,7 +1307,7 @@ message ResourceSliceSpec { // new nodes of the same type as some old node might also make new // resources available. // - // Exactly one of NodeName, NodeSelector and AllNodes must be set. + // Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. // This field is immutable. // // +optional @@ -1220,7 +1319,7 @@ message ResourceSliceSpec { // // Must use exactly one term. // - // Exactly one of NodeName, NodeSelector and AllNodes must be set. + // Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. // // +optional // +oneOf=NodeSelection @@ -1228,7 +1327,7 @@ message ResourceSliceSpec { // AllNodes indicates that all nodes have access to the resources in the pool. // - // Exactly one of NodeName, NodeSelector and AllNodes must be set. + // Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. // // +optional // +oneOf=NodeSelection @@ -1241,5 +1340,29 @@ message ResourceSliceSpec { // +optional // +listType=atomic repeated Device devices = 6; + + // 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. + // + // Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. + // + // +optional + // +oneOf=NodeSelection + // +featureGate=DRAPartitionableDevices + optional bool perDeviceNodeSelection = 7; + + // SharedCounters defines a list of counter sets, each of which + // has a name and a list of counters available. + // + // The names of the SharedCounters must be unique in the ResourceSlice. + // + // The maximum number of SharedCounters is 32. + // + // +optional + // +listType=atomic + // +featureGate=DRAPartitionableDevices + repeated CounterSet sharedCounters = 8; } diff --git a/staging/src/k8s.io/api/resource/v1alpha3/types.go b/staging/src/k8s.io/api/resource/v1alpha3/types.go index 1981b6e9774..2fc99f43f8f 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/types.go +++ b/staging/src/k8s.io/api/resource/v1alpha3/types.go @@ -329,7 +329,6 @@ type BasicDevice struct { // +featureGate=DRAPartitionableDevices AllNodes *bool `json:"allNodes,omitempty" protobuf:"bytes,6,opt,name=allNodes"` - // If specified, these are the driver-defined taints. // // The maximum number of taints is 8. diff --git a/staging/src/k8s.io/api/resource/v1alpha3/types_swagger_doc_generated.go b/staging/src/k8s.io/api/resource/v1alpha3/types_swagger_doc_generated.go index 605c8e0c792..c60792a489e 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/resource/v1alpha3/types_swagger_doc_generated.go @@ -52,10 +52,14 @@ func (AllocationResult) SwaggerDoc() map[string]string { } var map_BasicDevice = map[string]string{ - "": "BasicDevice defines one device instance.", - "attributes": "Attributes defines the set of attributes for this device. The name of each attribute must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", - "capacity": "Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", - "taints": "If specified, these are the driver-defined taints.\n\nThe maximum number of taints is 8.\n\nThis is an alpha field and requires enabling the DRADeviceTaints feature gate.", + "": "BasicDevice defines one device instance.", + "attributes": "Attributes defines the set of attributes for this device. The name of each attribute must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", + "capacity": "Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", + "consumesCounter": "ConsumesCounter defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.\n\nThere can only be a single entry per counterSet.\n\nThe maximum number of device counter consumption entries is 32. This is the same as the maximum number of shared counters allowed in a ResourceSlice.", + "nodeName": "NodeName identifies the node where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "nodeSelector": "NodeSelector defines the nodes where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "allNodes": "AllNodes indicates that all nodes have access to the device.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "taints": "If specified, these are the driver-defined taints.\n\nThe maximum number of taints is 8.\n\nThis is an alpha field and requires enabling the DRADeviceTaints feature gate.", } func (BasicDevice) SwaggerDoc() map[string]string { @@ -71,6 +75,25 @@ func (CELDeviceSelector) SwaggerDoc() map[string]string { return map_CELDeviceSelector } +var map_Counter = map[string]string{ + "": "Counter describes a quantity associated with a device.", + "value": "Value defines how much of a certain device counter is available.", +} + +func (Counter) SwaggerDoc() map[string]string { + return map_Counter +} + +var map_CounterSet = map[string]string{ + "": "CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.\n\nThe 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.", + "name": "Name defines the name of the counter set. It must be a DNS label.", + "counters": "Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.\n\nTo 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.\n\nThe maximum number of counters is 32.", +} + +func (CounterSet) SwaggerDoc() map[string]string { + return map_CounterSet +} + var map_Device = map[string]string{ "": "Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.", "name": "Name is unique identifier among all devices managed by the driver in the pool. It must be a DNS label.", @@ -190,6 +213,16 @@ func (DeviceConstraint) SwaggerDoc() map[string]string { return map_DeviceConstraint } +var map_DeviceCounterConsumption = map[string]string{ + "": "DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.", + "sharedCounter": "SharedCounter defines the shared counter from which the counters defined will be consumed.", + "counters": "Counters defines the Counter that will be consumed by the device.\n\nThe maximum number of Counters is 32.", +} + +func (DeviceCounterConsumption) SwaggerDoc() map[string]string { + return map_DeviceCounterConsumption +} + var map_DeviceRequest = map[string]string{ "": "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.", "name": "Name can be used to reference this request in a pod.spec.containers[].resources.claims entry and in a constraint of the claim.\n\nMust be a DNS label.", @@ -447,13 +480,15 @@ func (ResourceSliceList) SwaggerDoc() map[string]string { } var map_ResourceSliceSpec = map[string]string{ - "": "ResourceSliceSpec contains the information published by the driver in one ResourceSlice.", - "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.\n\nMust be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver. This field is immutable.", - "pool": "Pool describes the pool that this ResourceSlice belongs to.", - "nodeName": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.", - "nodeSelector": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", - "allNodes": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", - "devices": "Devices lists some or all of the devices in this pool.\n\nMust not have more than 128 entries.", + "": "ResourceSliceSpec contains the information published by the driver in one ResourceSlice.", + "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.\n\nMust be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver. This field is immutable.", + "pool": "Pool describes the pool that this ResourceSlice belongs to.", + "nodeName": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.", + "nodeSelector": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + "allNodes": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + "devices": "Devices lists some or all of the devices in this pool.\n\nMust not have more than 128 entries.", + "perDeviceNodeSelection": "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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + "sharedCounters": "SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.\n\nThe names of the SharedCounters must be unique in the ResourceSlice.\n\nThe maximum number of SharedCounters is 32.", } func (ResourceSliceSpec) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/resource/v1alpha3/zz_generated.deepcopy.go b/staging/src/k8s.io/api/resource/v1alpha3/zz_generated.deepcopy.go index a07b25cc892..c91c97c8dcf 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/resource/v1alpha3/zz_generated.deepcopy.go @@ -100,6 +100,28 @@ func (in *BasicDevice) DeepCopyInto(out *BasicDevice) { (*out)[key] = val.DeepCopy() } } + if in.ConsumesCounter != nil { + in, out := &in.ConsumesCounter, &out.ConsumesCounter + *out = make([]DeviceCounterConsumption, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.NodeName != nil { + in, out := &in.NodeName, &out.NodeName + *out = new(string) + **out = **in + } + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = new(corev1.NodeSelector) + (*in).DeepCopyInto(*out) + } + if in.AllNodes != nil { + in, out := &in.AllNodes, &out.AllNodes + *out = new(bool) + **out = **in + } if in.Taints != nil { in, out := &in.Taints, &out.Taints *out = make([]DeviceTaint, len(*in)) @@ -136,6 +158,46 @@ func (in *CELDeviceSelector) DeepCopy() *CELDeviceSelector { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Counter) DeepCopyInto(out *Counter) { + *out = *in + out.Value = in.Value.DeepCopy() + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Counter. +func (in *Counter) DeepCopy() *Counter { + if in == nil { + return nil + } + out := new(Counter) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CounterSet) DeepCopyInto(out *CounterSet) { + *out = *in + if in.Counters != nil { + in, out := &in.Counters, &out.Counters + *out = make(map[string]Counter, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CounterSet. +func (in *CounterSet) DeepCopy() *CounterSet { + if in == nil { + return nil + } + out := new(CounterSet) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Device) DeepCopyInto(out *Device) { *out = *in @@ -458,6 +520,29 @@ func (in *DeviceConstraint) DeepCopy() *DeviceConstraint { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceCounterConsumption) DeepCopyInto(out *DeviceCounterConsumption) { + *out = *in + if in.Counters != nil { + in, out := &in.Counters, &out.Counters + *out = make(map[string]Counter, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceCounterConsumption. +func (in *DeviceCounterConsumption) DeepCopy() *DeviceCounterConsumption { + if in == nil { + return nil + } + out := new(DeviceCounterConsumption) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeviceRequest) DeepCopyInto(out *DeviceRequest) { *out = *in @@ -1080,6 +1165,18 @@ func (in *ResourceSliceSpec) DeepCopyInto(out *ResourceSliceSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.PerDeviceNodeSelection != nil { + in, out := &in.PerDeviceNodeSelection, &out.PerDeviceNodeSelection + *out = new(bool) + **out = **in + } + if in.SharedCounters != nil { + in, out := &in.SharedCounters, &out.SharedCounters + *out = make([]CounterSet, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/staging/src/k8s.io/api/resource/v1beta1/generated.pb.go b/staging/src/k8s.io/api/resource/v1beta1/generated.pb.go index 4a7cf78afc3..6eb4ad815b1 100644 --- a/staging/src/k8s.io/api/resource/v1beta1/generated.pb.go +++ b/staging/src/k8s.io/api/resource/v1beta1/generated.pb.go @@ -161,10 +161,66 @@ func (m *CELDeviceSelector) XXX_DiscardUnknown() { var xxx_messageInfo_CELDeviceSelector proto.InternalMessageInfo +func (m *Counter) Reset() { *m = Counter{} } +func (*Counter) ProtoMessage() {} +func (*Counter) Descriptor() ([]byte, []int) { + return fileDescriptor_ba331e3ec6484c27, []int{4} +} +func (m *Counter) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Counter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Counter) XXX_Merge(src proto.Message) { + xxx_messageInfo_Counter.Merge(m, src) +} +func (m *Counter) XXX_Size() int { + return m.Size() +} +func (m *Counter) XXX_DiscardUnknown() { + xxx_messageInfo_Counter.DiscardUnknown(m) +} + +var xxx_messageInfo_Counter proto.InternalMessageInfo + +func (m *CounterSet) Reset() { *m = CounterSet{} } +func (*CounterSet) ProtoMessage() {} +func (*CounterSet) Descriptor() ([]byte, []int) { + return fileDescriptor_ba331e3ec6484c27, []int{5} +} +func (m *CounterSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CounterSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CounterSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_CounterSet.Merge(m, src) +} +func (m *CounterSet) XXX_Size() int { + return m.Size() +} +func (m *CounterSet) XXX_DiscardUnknown() { + xxx_messageInfo_CounterSet.DiscardUnknown(m) +} + +var xxx_messageInfo_CounterSet proto.InternalMessageInfo + func (m *Device) Reset() { *m = Device{} } func (*Device) ProtoMessage() {} func (*Device) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{4} + return fileDescriptor_ba331e3ec6484c27, []int{6} } func (m *Device) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -192,7 +248,7 @@ var xxx_messageInfo_Device proto.InternalMessageInfo func (m *DeviceAllocationConfiguration) Reset() { *m = DeviceAllocationConfiguration{} } func (*DeviceAllocationConfiguration) ProtoMessage() {} func (*DeviceAllocationConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{5} + return fileDescriptor_ba331e3ec6484c27, []int{7} } func (m *DeviceAllocationConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -220,7 +276,7 @@ var xxx_messageInfo_DeviceAllocationConfiguration proto.InternalMessageInfo func (m *DeviceAllocationResult) Reset() { *m = DeviceAllocationResult{} } func (*DeviceAllocationResult) ProtoMessage() {} func (*DeviceAllocationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{6} + return fileDescriptor_ba331e3ec6484c27, []int{8} } func (m *DeviceAllocationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -248,7 +304,7 @@ var xxx_messageInfo_DeviceAllocationResult proto.InternalMessageInfo func (m *DeviceAttribute) Reset() { *m = DeviceAttribute{} } func (*DeviceAttribute) ProtoMessage() {} func (*DeviceAttribute) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{7} + return fileDescriptor_ba331e3ec6484c27, []int{9} } func (m *DeviceAttribute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -276,7 +332,7 @@ var xxx_messageInfo_DeviceAttribute proto.InternalMessageInfo func (m *DeviceCapacity) Reset() { *m = DeviceCapacity{} } func (*DeviceCapacity) ProtoMessage() {} func (*DeviceCapacity) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{8} + return fileDescriptor_ba331e3ec6484c27, []int{10} } func (m *DeviceCapacity) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -304,7 +360,7 @@ var xxx_messageInfo_DeviceCapacity proto.InternalMessageInfo func (m *DeviceClaim) Reset() { *m = DeviceClaim{} } func (*DeviceClaim) ProtoMessage() {} func (*DeviceClaim) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{9} + return fileDescriptor_ba331e3ec6484c27, []int{11} } func (m *DeviceClaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -332,7 +388,7 @@ var xxx_messageInfo_DeviceClaim proto.InternalMessageInfo func (m *DeviceClaimConfiguration) Reset() { *m = DeviceClaimConfiguration{} } func (*DeviceClaimConfiguration) ProtoMessage() {} func (*DeviceClaimConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{10} + return fileDescriptor_ba331e3ec6484c27, []int{12} } func (m *DeviceClaimConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -360,7 +416,7 @@ var xxx_messageInfo_DeviceClaimConfiguration proto.InternalMessageInfo func (m *DeviceClass) Reset() { *m = DeviceClass{} } func (*DeviceClass) ProtoMessage() {} func (*DeviceClass) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{11} + return fileDescriptor_ba331e3ec6484c27, []int{13} } func (m *DeviceClass) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -388,7 +444,7 @@ var xxx_messageInfo_DeviceClass proto.InternalMessageInfo func (m *DeviceClassConfiguration) Reset() { *m = DeviceClassConfiguration{} } func (*DeviceClassConfiguration) ProtoMessage() {} func (*DeviceClassConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{12} + return fileDescriptor_ba331e3ec6484c27, []int{14} } func (m *DeviceClassConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -416,7 +472,7 @@ var xxx_messageInfo_DeviceClassConfiguration proto.InternalMessageInfo func (m *DeviceClassList) Reset() { *m = DeviceClassList{} } func (*DeviceClassList) ProtoMessage() {} func (*DeviceClassList) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{13} + return fileDescriptor_ba331e3ec6484c27, []int{15} } func (m *DeviceClassList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -444,7 +500,7 @@ var xxx_messageInfo_DeviceClassList proto.InternalMessageInfo func (m *DeviceClassSpec) Reset() { *m = DeviceClassSpec{} } func (*DeviceClassSpec) ProtoMessage() {} func (*DeviceClassSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{14} + return fileDescriptor_ba331e3ec6484c27, []int{16} } func (m *DeviceClassSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -472,7 +528,7 @@ var xxx_messageInfo_DeviceClassSpec proto.InternalMessageInfo func (m *DeviceConfiguration) Reset() { *m = DeviceConfiguration{} } func (*DeviceConfiguration) ProtoMessage() {} func (*DeviceConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{15} + return fileDescriptor_ba331e3ec6484c27, []int{17} } func (m *DeviceConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -500,7 +556,7 @@ var xxx_messageInfo_DeviceConfiguration proto.InternalMessageInfo func (m *DeviceConstraint) Reset() { *m = DeviceConstraint{} } func (*DeviceConstraint) ProtoMessage() {} func (*DeviceConstraint) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{16} + return fileDescriptor_ba331e3ec6484c27, []int{18} } func (m *DeviceConstraint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -525,10 +581,38 @@ func (m *DeviceConstraint) XXX_DiscardUnknown() { var xxx_messageInfo_DeviceConstraint proto.InternalMessageInfo +func (m *DeviceCounterConsumption) Reset() { *m = DeviceCounterConsumption{} } +func (*DeviceCounterConsumption) ProtoMessage() {} +func (*DeviceCounterConsumption) Descriptor() ([]byte, []int) { + return fileDescriptor_ba331e3ec6484c27, []int{19} +} +func (m *DeviceCounterConsumption) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeviceCounterConsumption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeviceCounterConsumption) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeviceCounterConsumption.Merge(m, src) +} +func (m *DeviceCounterConsumption) XXX_Size() int { + return m.Size() +} +func (m *DeviceCounterConsumption) XXX_DiscardUnknown() { + xxx_messageInfo_DeviceCounterConsumption.DiscardUnknown(m) +} + +var xxx_messageInfo_DeviceCounterConsumption proto.InternalMessageInfo + func (m *DeviceRequest) Reset() { *m = DeviceRequest{} } func (*DeviceRequest) ProtoMessage() {} func (*DeviceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{17} + return fileDescriptor_ba331e3ec6484c27, []int{20} } func (m *DeviceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -556,7 +640,7 @@ var xxx_messageInfo_DeviceRequest proto.InternalMessageInfo func (m *DeviceRequestAllocationResult) Reset() { *m = DeviceRequestAllocationResult{} } func (*DeviceRequestAllocationResult) ProtoMessage() {} func (*DeviceRequestAllocationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{18} + return fileDescriptor_ba331e3ec6484c27, []int{21} } func (m *DeviceRequestAllocationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -584,7 +668,7 @@ var xxx_messageInfo_DeviceRequestAllocationResult proto.InternalMessageInfo func (m *DeviceSelector) Reset() { *m = DeviceSelector{} } func (*DeviceSelector) ProtoMessage() {} func (*DeviceSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{19} + return fileDescriptor_ba331e3ec6484c27, []int{22} } func (m *DeviceSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -612,7 +696,7 @@ var xxx_messageInfo_DeviceSelector proto.InternalMessageInfo func (m *DeviceSubRequest) Reset() { *m = DeviceSubRequest{} } func (*DeviceSubRequest) ProtoMessage() {} func (*DeviceSubRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{20} + return fileDescriptor_ba331e3ec6484c27, []int{23} } func (m *DeviceSubRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -640,7 +724,7 @@ var xxx_messageInfo_DeviceSubRequest proto.InternalMessageInfo func (m *DeviceTaint) Reset() { *m = DeviceTaint{} } func (*DeviceTaint) ProtoMessage() {} func (*DeviceTaint) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{21} + return fileDescriptor_ba331e3ec6484c27, []int{24} } func (m *DeviceTaint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -668,7 +752,7 @@ var xxx_messageInfo_DeviceTaint proto.InternalMessageInfo func (m *DeviceToleration) Reset() { *m = DeviceToleration{} } func (*DeviceToleration) ProtoMessage() {} func (*DeviceToleration) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{22} + return fileDescriptor_ba331e3ec6484c27, []int{25} } func (m *DeviceToleration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -696,7 +780,7 @@ var xxx_messageInfo_DeviceToleration proto.InternalMessageInfo func (m *NetworkDeviceData) Reset() { *m = NetworkDeviceData{} } func (*NetworkDeviceData) ProtoMessage() {} func (*NetworkDeviceData) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{23} + return fileDescriptor_ba331e3ec6484c27, []int{26} } func (m *NetworkDeviceData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -724,7 +808,7 @@ var xxx_messageInfo_NetworkDeviceData proto.InternalMessageInfo func (m *OpaqueDeviceConfiguration) Reset() { *m = OpaqueDeviceConfiguration{} } func (*OpaqueDeviceConfiguration) ProtoMessage() {} func (*OpaqueDeviceConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{24} + return fileDescriptor_ba331e3ec6484c27, []int{27} } func (m *OpaqueDeviceConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -752,7 +836,7 @@ var xxx_messageInfo_OpaqueDeviceConfiguration proto.InternalMessageInfo func (m *ResourceClaim) Reset() { *m = ResourceClaim{} } func (*ResourceClaim) ProtoMessage() {} func (*ResourceClaim) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{25} + return fileDescriptor_ba331e3ec6484c27, []int{28} } func (m *ResourceClaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -780,7 +864,7 @@ var xxx_messageInfo_ResourceClaim proto.InternalMessageInfo func (m *ResourceClaimConsumerReference) Reset() { *m = ResourceClaimConsumerReference{} } func (*ResourceClaimConsumerReference) ProtoMessage() {} func (*ResourceClaimConsumerReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{26} + return fileDescriptor_ba331e3ec6484c27, []int{29} } func (m *ResourceClaimConsumerReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -808,7 +892,7 @@ var xxx_messageInfo_ResourceClaimConsumerReference proto.InternalMessageInfo func (m *ResourceClaimList) Reset() { *m = ResourceClaimList{} } func (*ResourceClaimList) ProtoMessage() {} func (*ResourceClaimList) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{27} + return fileDescriptor_ba331e3ec6484c27, []int{30} } func (m *ResourceClaimList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -836,7 +920,7 @@ var xxx_messageInfo_ResourceClaimList proto.InternalMessageInfo func (m *ResourceClaimSpec) Reset() { *m = ResourceClaimSpec{} } func (*ResourceClaimSpec) ProtoMessage() {} func (*ResourceClaimSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{28} + return fileDescriptor_ba331e3ec6484c27, []int{31} } func (m *ResourceClaimSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -864,7 +948,7 @@ var xxx_messageInfo_ResourceClaimSpec proto.InternalMessageInfo func (m *ResourceClaimStatus) Reset() { *m = ResourceClaimStatus{} } func (*ResourceClaimStatus) ProtoMessage() {} func (*ResourceClaimStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{29} + return fileDescriptor_ba331e3ec6484c27, []int{32} } func (m *ResourceClaimStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -892,7 +976,7 @@ var xxx_messageInfo_ResourceClaimStatus proto.InternalMessageInfo func (m *ResourceClaimTemplate) Reset() { *m = ResourceClaimTemplate{} } func (*ResourceClaimTemplate) ProtoMessage() {} func (*ResourceClaimTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{30} + return fileDescriptor_ba331e3ec6484c27, []int{33} } func (m *ResourceClaimTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -920,7 +1004,7 @@ var xxx_messageInfo_ResourceClaimTemplate proto.InternalMessageInfo func (m *ResourceClaimTemplateList) Reset() { *m = ResourceClaimTemplateList{} } func (*ResourceClaimTemplateList) ProtoMessage() {} func (*ResourceClaimTemplateList) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{31} + return fileDescriptor_ba331e3ec6484c27, []int{34} } func (m *ResourceClaimTemplateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -948,7 +1032,7 @@ var xxx_messageInfo_ResourceClaimTemplateList proto.InternalMessageInfo func (m *ResourceClaimTemplateSpec) Reset() { *m = ResourceClaimTemplateSpec{} } func (*ResourceClaimTemplateSpec) ProtoMessage() {} func (*ResourceClaimTemplateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{32} + return fileDescriptor_ba331e3ec6484c27, []int{35} } func (m *ResourceClaimTemplateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -976,7 +1060,7 @@ var xxx_messageInfo_ResourceClaimTemplateSpec proto.InternalMessageInfo func (m *ResourcePool) Reset() { *m = ResourcePool{} } func (*ResourcePool) ProtoMessage() {} func (*ResourcePool) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{33} + return fileDescriptor_ba331e3ec6484c27, []int{36} } func (m *ResourcePool) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1004,7 +1088,7 @@ var xxx_messageInfo_ResourcePool proto.InternalMessageInfo func (m *ResourceSlice) Reset() { *m = ResourceSlice{} } func (*ResourceSlice) ProtoMessage() {} func (*ResourceSlice) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{34} + return fileDescriptor_ba331e3ec6484c27, []int{37} } func (m *ResourceSlice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1032,7 +1116,7 @@ var xxx_messageInfo_ResourceSlice proto.InternalMessageInfo func (m *ResourceSliceList) Reset() { *m = ResourceSliceList{} } func (*ResourceSliceList) ProtoMessage() {} func (*ResourceSliceList) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{35} + return fileDescriptor_ba331e3ec6484c27, []int{38} } func (m *ResourceSliceList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1060,7 +1144,7 @@ var xxx_messageInfo_ResourceSliceList proto.InternalMessageInfo func (m *ResourceSliceSpec) Reset() { *m = ResourceSliceSpec{} } func (*ResourceSliceSpec) ProtoMessage() {} func (*ResourceSliceSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{36} + return fileDescriptor_ba331e3ec6484c27, []int{39} } func (m *ResourceSliceSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1092,6 +1176,9 @@ func init() { proto.RegisterMapType((map[QualifiedName]DeviceAttribute)(nil), "k8s.io.api.resource.v1beta1.BasicDevice.AttributesEntry") proto.RegisterMapType((map[QualifiedName]DeviceCapacity)(nil), "k8s.io.api.resource.v1beta1.BasicDevice.CapacityEntry") proto.RegisterType((*CELDeviceSelector)(nil), "k8s.io.api.resource.v1beta1.CELDeviceSelector") + proto.RegisterType((*Counter)(nil), "k8s.io.api.resource.v1beta1.Counter") + proto.RegisterType((*CounterSet)(nil), "k8s.io.api.resource.v1beta1.CounterSet") + proto.RegisterMapType((map[string]Counter)(nil), "k8s.io.api.resource.v1beta1.CounterSet.CountersEntry") proto.RegisterType((*Device)(nil), "k8s.io.api.resource.v1beta1.Device") proto.RegisterType((*DeviceAllocationConfiguration)(nil), "k8s.io.api.resource.v1beta1.DeviceAllocationConfiguration") proto.RegisterType((*DeviceAllocationResult)(nil), "k8s.io.api.resource.v1beta1.DeviceAllocationResult") @@ -1105,6 +1192,8 @@ func init() { proto.RegisterType((*DeviceClassSpec)(nil), "k8s.io.api.resource.v1beta1.DeviceClassSpec") proto.RegisterType((*DeviceConfiguration)(nil), "k8s.io.api.resource.v1beta1.DeviceConfiguration") proto.RegisterType((*DeviceConstraint)(nil), "k8s.io.api.resource.v1beta1.DeviceConstraint") + proto.RegisterType((*DeviceCounterConsumption)(nil), "k8s.io.api.resource.v1beta1.DeviceCounterConsumption") + proto.RegisterMapType((map[string]Counter)(nil), "k8s.io.api.resource.v1beta1.DeviceCounterConsumption.CountersEntry") proto.RegisterType((*DeviceRequest)(nil), "k8s.io.api.resource.v1beta1.DeviceRequest") proto.RegisterType((*DeviceRequestAllocationResult)(nil), "k8s.io.api.resource.v1beta1.DeviceRequestAllocationResult") proto.RegisterType((*DeviceSelector)(nil), "k8s.io.api.resource.v1beta1.DeviceSelector") @@ -1132,153 +1221,165 @@ func init() { } var fileDescriptor_ba331e3ec6484c27 = []byte{ - // 2330 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x1a, 0xcd, 0x6f, 0x1c, 0x57, - 0xdd, 0xb3, 0xb3, 0x5e, 0xaf, 0x7f, 0x1b, 0x3b, 0xf1, 0x0b, 0x09, 0x1b, 0x47, 0xdd, 0x75, 0x26, - 0x12, 0xb8, 0x69, 0xb2, 0x6e, 0x0c, 0x44, 0x51, 0x72, 0x61, 0xd7, 0x71, 0x52, 0x93, 0xc4, 0x71, - 0x9f, 0xdd, 0x34, 0x2a, 0x0d, 0x62, 0x76, 0xf6, 0xd9, 0x1e, 0xbc, 0x3b, 0xb3, 0x99, 0xf7, 0xc6, - 0xa9, 0x0f, 0x88, 0x8a, 0x73, 0x85, 0x38, 0x22, 0x21, 0x10, 0xe2, 0x80, 0x84, 0x54, 0x21, 0x8e, - 0x9c, 0x40, 0x02, 0x21, 0x22, 0x0e, 0x50, 0x81, 0x10, 0x3d, 0xa0, 0x85, 0x6c, 0xff, 0x02, 0xae, - 0x3e, 0xa1, 0xf7, 0x31, 0x9f, 0xfb, 0xd1, 0x31, 0x34, 0x56, 0x91, 0x7a, 0xf3, 0xfe, 0x3e, 0xdf, - 0xfb, 0x7d, 0xff, 0xde, 0x18, 0x5e, 0xd9, 0xbb, 0x4e, 0x6b, 0xb6, 0xbb, 0x64, 0x76, 0xed, 0x25, - 0x8f, 0x50, 0xd7, 0xf7, 0x2c, 0xb2, 0xb4, 0x7f, 0xb5, 0x49, 0x98, 0x79, 0x75, 0x69, 0x87, 0x38, - 0xc4, 0x33, 0x19, 0x69, 0xd5, 0xba, 0x9e, 0xcb, 0x5c, 0x74, 0x5e, 0x12, 0xd7, 0xcc, 0xae, 0x5d, - 0x0b, 0x88, 0x6b, 0x8a, 0x78, 0xfe, 0xca, 0x8e, 0xcd, 0x76, 0xfd, 0x66, 0xcd, 0x72, 0x3b, 0x4b, - 0x3b, 0xee, 0x8e, 0xbb, 0x24, 0x78, 0x9a, 0xfe, 0xb6, 0xf8, 0x25, 0x7e, 0x88, 0xbf, 0xa4, 0xac, - 0x79, 0x23, 0xa6, 0xd8, 0x72, 0x3d, 0xae, 0x34, 0xad, 0x6f, 0xfe, 0xcb, 0x11, 0x4d, 0xc7, 0xb4, - 0x76, 0x6d, 0x87, 0x78, 0x07, 0x4b, 0xdd, 0xbd, 0x9d, 0xe4, 0x69, 0x8f, 0xc2, 0x45, 0x97, 0x3a, - 0x84, 0x99, 0xc3, 0x74, 0x2d, 0x8d, 0xe2, 0xf2, 0x7c, 0x87, 0xd9, 0x9d, 0x41, 0x35, 0xd7, 0x3e, - 0x8e, 0x81, 0x5a, 0xbb, 0xa4, 0x63, 0xa6, 0xf9, 0x8c, 0x1f, 0xeb, 0x70, 0xa6, 0xde, 0x6e, 0xbb, - 0x16, 0x87, 0xdd, 0x22, 0xfb, 0xb6, 0x45, 0x36, 0x99, 0xc9, 0x7c, 0x8a, 0xbe, 0x00, 0x85, 0x96, - 0x67, 0xef, 0x13, 0xaf, 0xac, 0x2d, 0x68, 0x8b, 0xd3, 0x8d, 0xd9, 0x67, 0xbd, 0xea, 0x44, 0xbf, - 0x57, 0x2d, 0xdc, 0x12, 0x50, 0xac, 0xb0, 0x68, 0x01, 0xf2, 0x5d, 0xd7, 0x6d, 0x97, 0x73, 0x82, - 0xea, 0x84, 0xa2, 0xca, 0x6f, 0xb8, 0x6e, 0x1b, 0x0b, 0x8c, 0x90, 0x24, 0x24, 0x97, 0xf5, 0x94, - 0x24, 0x01, 0xc5, 0x0a, 0x8b, 0x2c, 0x00, 0xcb, 0x75, 0x5a, 0x36, 0xb3, 0x5d, 0x87, 0x96, 0xf3, - 0x0b, 0xfa, 0x62, 0x69, 0x79, 0xa9, 0x16, 0x79, 0x39, 0xbc, 0x58, 0xad, 0xbb, 0xb7, 0xc3, 0x01, - 0xb4, 0xc6, 0xed, 0x57, 0xdb, 0xbf, 0x5a, 0x5b, 0x09, 0xf8, 0x1a, 0x48, 0x09, 0x87, 0x10, 0x44, - 0x71, 0x4c, 0x2c, 0xba, 0x0b, 0xf9, 0x96, 0xc9, 0xcc, 0xf2, 0xe4, 0x82, 0xb6, 0x58, 0x5a, 0xbe, - 0x32, 0x52, 0xbc, 0xb2, 0x5b, 0x0d, 0x9b, 0x4f, 0x57, 0xdf, 0x61, 0xc4, 0xa1, 0x5c, 0x78, 0x91, - 0xdf, 0xec, 0x96, 0xc9, 0x4c, 0x2c, 0x84, 0x20, 0x13, 0x4a, 0x0e, 0x61, 0x4f, 0x5d, 0x6f, 0x8f, - 0x03, 0xcb, 0x05, 0x21, 0xb3, 0x56, 0x1b, 0x13, 0x98, 0xb5, 0x75, 0x45, 0x2f, 0xae, 0xcc, 0xb9, - 0x1a, 0x27, 0xfb, 0xbd, 0x6a, 0x69, 0x3d, 0x12, 0x83, 0xe3, 0x32, 0x8d, 0x3f, 0x6a, 0x70, 0x4a, - 0x39, 0xc8, 0x76, 0x1d, 0x4c, 0xa8, 0xdf, 0x66, 0xe8, 0x1b, 0x30, 0x25, 0x6d, 0x46, 0x85, 0x73, - 0x4a, 0xcb, 0x5f, 0x1a, 0xab, 0x53, 0x2a, 0x4b, 0x4b, 0x69, 0x9c, 0x54, 0xa6, 0x9a, 0x92, 0x78, - 0x8a, 0x03, 0xa1, 0xe8, 0x21, 0x9c, 0x70, 0xdc, 0x16, 0xd9, 0x24, 0x6d, 0x62, 0x31, 0xd7, 0x13, - 0x7e, 0x2b, 0x2d, 0x2f, 0xc4, 0x95, 0xf0, 0x2c, 0xe1, 0x96, 0x5f, 0x8f, 0xd1, 0x35, 0x4e, 0xf5, - 0x7b, 0xd5, 0x13, 0x71, 0x08, 0x4e, 0xc8, 0x31, 0xde, 0xcf, 0x43, 0xa9, 0x61, 0x52, 0xdb, 0x92, - 0x1a, 0xd1, 0xb7, 0x01, 0x4c, 0xc6, 0x3c, 0xbb, 0xe9, 0x33, 0x71, 0x15, 0xee, 0xf1, 0xeb, 0x63, - 0xaf, 0x12, 0xe3, 0xae, 0xd5, 0x43, 0xd6, 0x55, 0x87, 0x79, 0x07, 0x8d, 0x8b, 0x81, 0xeb, 0x23, - 0xc4, 0x77, 0xff, 0x59, 0x9d, 0x79, 0xdd, 0x37, 0xdb, 0xf6, 0xb6, 0x4d, 0x5a, 0xeb, 0x66, 0x87, - 0xe0, 0x98, 0x42, 0xe4, 0x43, 0xd1, 0x32, 0xbb, 0xa6, 0x65, 0xb3, 0x83, 0x72, 0x4e, 0x28, 0xbf, - 0x96, 0x59, 0xf9, 0x8a, 0x62, 0x94, 0xaa, 0x2f, 0x28, 0xd5, 0xc5, 0x00, 0x3c, 0xa8, 0x38, 0x54, - 0x85, 0x36, 0xa0, 0xc0, 0x4c, 0xdb, 0x61, 0xb4, 0xac, 0x0b, 0xa5, 0x8b, 0x19, 0x9c, 0xb7, 0xc5, - 0x19, 0xa2, 0xcc, 0x11, 0x3f, 0x29, 0x56, 0x72, 0xe6, 0xf7, 0xe0, 0x64, 0xca, 0x18, 0xe8, 0x14, - 0xe8, 0x7b, 0xe4, 0x40, 0xe6, 0x2e, 0xe6, 0x7f, 0xa2, 0x06, 0x4c, 0xee, 0x9b, 0x6d, 0x9f, 0x88, - 0x4c, 0x2d, 0x2d, 0x5f, 0xce, 0x12, 0x32, 0x81, 0x50, 0x2c, 0x59, 0x6f, 0xe4, 0xae, 0x6b, 0xf3, - 0xbb, 0x30, 0x93, 0xb8, 0xfc, 0x10, 0x55, 0xf5, 0xa4, 0xaa, 0x57, 0x32, 0xa8, 0x0a, 0x44, 0xc6, - 0x34, 0x19, 0x77, 0x60, 0x6e, 0x65, 0xf5, 0x9e, 0xaa, 0x4a, 0x2a, 0x86, 0xd0, 0x32, 0x00, 0x79, - 0xa7, 0xeb, 0x11, 0xca, 0x33, 0x52, 0xd5, 0xa6, 0x30, 0xe9, 0x57, 0x43, 0x0c, 0x8e, 0x51, 0x19, - 0x3e, 0xa8, 0x5a, 0xc3, 0xab, 0x95, 0x63, 0x76, 0x88, 0xe2, 0x0b, 0xab, 0x95, 0xf0, 0x90, 0xc0, - 0xa0, 0x35, 0x98, 0x6c, 0x72, 0x3f, 0xab, 0xb3, 0x2f, 0x66, 0x8d, 0x88, 0xc6, 0x74, 0xbf, 0x57, - 0x9d, 0x14, 0x00, 0x2c, 0x25, 0x18, 0xef, 0xe5, 0xe0, 0xa5, 0x74, 0xee, 0xad, 0xb8, 0xce, 0xb6, - 0xbd, 0xe3, 0x7b, 0xe2, 0x07, 0xfa, 0x2a, 0x14, 0xa4, 0x44, 0x75, 0xa0, 0xc5, 0xc0, 0xc1, 0x9b, - 0x02, 0x7a, 0xd8, 0xab, 0x9e, 0x4d, 0xb3, 0x4a, 0x0c, 0x56, 0x7c, 0x68, 0x11, 0x8a, 0x1e, 0x79, - 0xe2, 0x13, 0xca, 0xa8, 0x88, 0xe1, 0xe9, 0xc6, 0x09, 0x1e, 0x87, 0x58, 0xc1, 0x70, 0x88, 0x45, - 0xdf, 0x81, 0xd3, 0x32, 0xbf, 0x13, 0x47, 0x50, 0xb9, 0xfd, 0x6a, 0x16, 0x17, 0xc5, 0xf9, 0x1a, - 0xe7, 0xd5, 0x51, 0x4f, 0x0f, 0x41, 0xe2, 0x61, 0x9a, 0x8c, 0x8f, 0x34, 0x38, 0x3b, 0xbc, 0x14, - 0x21, 0x02, 0x53, 0x9e, 0xf8, 0x2b, 0xa8, 0x02, 0x37, 0x32, 0x9c, 0x47, 0xdd, 0x71, 0x74, 0x5d, - 0x93, 0xbf, 0x29, 0x0e, 0x64, 0xa3, 0x26, 0x14, 0x2c, 0x71, 0x24, 0x95, 0xee, 0x37, 0x8e, 0x54, - 0x36, 0x93, 0xf7, 0x0f, 0x73, 0x51, 0x82, 0xb1, 0x92, 0x6c, 0xfc, 0x5c, 0x83, 0x93, 0xa9, 0xec, - 0x41, 0x15, 0xd0, 0x6d, 0x87, 0x89, 0x88, 0xd2, 0xa5, 0x7f, 0xd6, 0x1c, 0xf6, 0x90, 0xc7, 0x39, - 0xe6, 0x08, 0x74, 0x01, 0xf2, 0x4d, 0xde, 0x43, 0xb9, 0x2f, 0x8a, 0x8d, 0x99, 0x7e, 0xaf, 0x3a, - 0xdd, 0x70, 0xdd, 0xb6, 0xa4, 0x10, 0x28, 0xf4, 0x45, 0x28, 0x50, 0xe6, 0xd9, 0xce, 0x4e, 0x39, - 0x2f, 0x22, 0x45, 0x74, 0x8d, 0x4d, 0x01, 0x91, 0x64, 0x0a, 0x8d, 0x2e, 0xc1, 0xd4, 0x3e, 0xf1, - 0x44, 0x72, 0x4c, 0x0a, 0x4a, 0x51, 0x94, 0x1f, 0x4a, 0x90, 0x24, 0x0d, 0x08, 0x0c, 0x02, 0xb3, - 0xc9, 0xec, 0x43, 0x9b, 0x41, 0xe6, 0x6a, 0x03, 0xbd, 0x6c, 0xa0, 0xfd, 0x46, 0x16, 0x7b, 0xdd, - 0x37, 0x1d, 0x66, 0xb3, 0x83, 0xc6, 0x8c, 0x32, 0xca, 0xa4, 0x54, 0x24, 0x65, 0x19, 0xef, 0xe7, - 0xa0, 0xa4, 0xf4, 0xb4, 0x4d, 0xbb, 0x83, 0x1e, 0xc5, 0x62, 0x56, 0xba, 0xfb, 0x52, 0x76, 0x77, - 0x37, 0x4e, 0x05, 0xb5, 0x76, 0x48, 0x8c, 0xb7, 0xa0, 0x64, 0xb9, 0x0e, 0x65, 0x9e, 0xac, 0xaf, - 0xd2, 0xcb, 0x57, 0xb2, 0xc5, 0xb6, 0xe2, 0x6a, 0x9c, 0x56, 0xf2, 0x4b, 0x11, 0x8c, 0xe2, 0xb8, - 0x58, 0xf4, 0x38, 0x0c, 0x23, 0x59, 0xc0, 0xbf, 0x92, 0x45, 0x01, 0xbf, 0x79, 0xb6, 0x08, 0xfa, - 0xbd, 0x06, 0xe5, 0x51, 0x4c, 0x89, 0x7c, 0xd7, 0xfe, 0x9b, 0x7c, 0xcf, 0x1d, 0x5b, 0xbe, 0xff, - 0x46, 0x8b, 0xb9, 0x9d, 0x52, 0xf4, 0x4d, 0x28, 0xf2, 0x79, 0x4d, 0x8c, 0x5f, 0xda, 0xc0, 0x29, - 0xc6, 0x4c, 0x77, 0x0f, 0x9a, 0xdf, 0x22, 0x16, 0xbb, 0x4f, 0x98, 0x19, 0x55, 0xfa, 0x08, 0x86, - 0x43, 0xa9, 0x68, 0x1d, 0xf2, 0xb4, 0x4b, 0xac, 0x23, 0x74, 0x38, 0x71, 0xb2, 0xcd, 0x2e, 0xb1, - 0xa2, 0x5e, 0xc0, 0x7f, 0x61, 0x21, 0xc7, 0xf8, 0x61, 0xdc, 0x13, 0x94, 0x26, 0x3d, 0x31, 0xc2, - 0xbe, 0xda, 0xb1, 0xd9, 0xf7, 0xd7, 0x61, 0xa5, 0x11, 0xa7, 0xbb, 0x67, 0x53, 0x86, 0xde, 0x1e, - 0xb0, 0x71, 0x2d, 0x9b, 0x8d, 0x39, 0xb7, 0xb0, 0x70, 0x98, 0x5e, 0x01, 0x24, 0x66, 0xdf, 0xfb, - 0x30, 0x69, 0x33, 0xd2, 0x09, 0x12, 0x6b, 0x31, 0xab, 0x81, 0xa3, 0xba, 0xb0, 0xc6, 0xd9, 0xb1, - 0x94, 0x62, 0xfc, 0x29, 0x79, 0x01, 0x6e, 0x78, 0xf4, 0x36, 0x4c, 0x53, 0xd5, 0xea, 0x83, 0xe2, - 0x90, 0x65, 0x7c, 0x08, 0x47, 0xd0, 0x39, 0xa5, 0x69, 0x3a, 0x80, 0x50, 0x1c, 0x09, 0x8c, 0x65, - 0x6e, 0xee, 0x28, 0x99, 0x9b, 0x72, 0xfd, 0xc8, 0xcc, 0x7d, 0x02, 0xc3, 0xbc, 0x87, 0xde, 0x82, - 0x82, 0xdb, 0x35, 0x9f, 0x84, 0x55, 0x75, 0xfc, 0x94, 0xf9, 0x40, 0x90, 0x0e, 0x0b, 0x11, 0xe0, - 0x2a, 0x25, 0x1a, 0x2b, 0x89, 0xc6, 0xf7, 0x34, 0x38, 0x95, 0x2e, 0x61, 0x47, 0x28, 0x12, 0x1b, - 0x30, 0xdb, 0x31, 0x99, 0xb5, 0x1b, 0xf6, 0x2a, 0xb5, 0xc7, 0x2d, 0xf6, 0x7b, 0xd5, 0xd9, 0xfb, - 0x09, 0xcc, 0x61, 0xaf, 0x8a, 0x6e, 0xfb, 0xed, 0xf6, 0x41, 0x72, 0xae, 0x4d, 0xf1, 0x1b, 0x7f, - 0xcf, 0xc3, 0x4c, 0xa2, 0x60, 0x67, 0x98, 0xb9, 0xea, 0x70, 0xb2, 0x15, 0xd9, 0x9a, 0x23, 0xd4, - 0x31, 0x3e, 0xaf, 0x88, 0xe3, 0x61, 0x22, 0xf8, 0xd2, 0xf4, 0xc9, 0xb8, 0xd1, 0x3f, 0xe9, 0xb8, - 0x79, 0x08, 0xb3, 0x66, 0x38, 0x07, 0xdc, 0x77, 0x5b, 0x44, 0x75, 0xe1, 0x9a, 0xe2, 0x9a, 0xad, - 0x27, 0xb0, 0x87, 0xbd, 0xea, 0xe7, 0xd2, 0xd3, 0x03, 0x87, 0xe3, 0x94, 0x14, 0x74, 0x11, 0x26, - 0x2d, 0xd7, 0x77, 0x98, 0x68, 0xd5, 0x7a, 0x94, 0x26, 0x2b, 0x1c, 0x88, 0x25, 0x0e, 0x5d, 0x85, - 0x92, 0xd9, 0xea, 0xd8, 0x4e, 0xdd, 0xb2, 0x08, 0xa5, 0x62, 0xcb, 0x2c, 0xca, 0xfe, 0x5f, 0x8f, - 0xc0, 0x38, 0x4e, 0x83, 0x3a, 0x30, 0xbb, 0x6d, 0x7b, 0x94, 0xd5, 0xf7, 0x4d, 0xbb, 0x6d, 0x36, - 0xdb, 0xa4, 0x3c, 0x95, 0xb9, 0x15, 0x6e, 0xfa, 0xcd, 0xa0, 0xd5, 0x9e, 0x0d, 0xae, 0x77, 0x3b, - 0x21, 0x0c, 0xa7, 0x84, 0xf3, 0xb6, 0xcb, 0xdc, 0x36, 0x91, 0x61, 0x4a, 0xcb, 0xc5, 0xcc, 0xba, - 0xb6, 0x42, 0xae, 0xa8, 0xed, 0x46, 0x30, 0x8a, 0xe3, 0x62, 0x8d, 0xbf, 0x85, 0xe3, 0xf4, 0x88, - 0xc9, 0x0f, 0xbd, 0xcc, 0xc7, 0x48, 0x81, 0x52, 0xc1, 0x16, 0x1b, 0x05, 0x05, 0x18, 0x07, 0xf8, - 0xd8, 0xf3, 0x46, 0x2e, 0xd3, 0xf3, 0x86, 0x9e, 0xe1, 0x79, 0x23, 0x3f, 0xf6, 0x79, 0x23, 0xe5, - 0xc6, 0xc9, 0x0c, 0x6e, 0x4c, 0xd9, 0xb5, 0xf0, 0x62, 0xec, 0xfa, 0xf5, 0x60, 0x0a, 0x0c, 0x77, - 0xac, 0x35, 0xd0, 0x2d, 0xd2, 0x1e, 0xd2, 0x40, 0x06, 0xf5, 0x0d, 0x2c, 0x68, 0x8d, 0xa9, 0x7e, - 0xaf, 0xaa, 0xaf, 0xac, 0xde, 0xc3, 0x5c, 0x86, 0xf1, 0x2b, 0x3d, 0xa8, 0x4f, 0x51, 0x5c, 0x7d, - 0x56, 0x11, 0xfe, 0xc7, 0x8a, 0x90, 0x8a, 0x8b, 0xa9, 0x17, 0x13, 0x17, 0xff, 0x0e, 0xe7, 0x37, - 0xf1, 0xdc, 0x80, 0x5e, 0x8a, 0xed, 0xf9, 0x8d, 0x92, 0x62, 0xd7, 0xef, 0x92, 0x03, 0xb9, 0xf4, - 0x5f, 0x8c, 0x2f, 0xfd, 0xd3, 0xc3, 0x57, 0x01, 0x74, 0x13, 0x0a, 0x64, 0x7b, 0x9b, 0x58, 0x4c, - 0x25, 0x54, 0xf0, 0x66, 0x53, 0x58, 0x15, 0xd0, 0xc3, 0x5e, 0x75, 0x2e, 0xa6, 0x52, 0x02, 0xb1, - 0x62, 0x41, 0x6f, 0xc2, 0x34, 0xb3, 0x3b, 0xa4, 0xde, 0x6a, 0x91, 0x96, 0x30, 0x77, 0x72, 0x71, - 0x18, 0x33, 0xdd, 0x6c, 0xd9, 0x1d, 0x22, 0xf7, 0xaa, 0xad, 0x40, 0x00, 0x8e, 0x64, 0xdd, 0x28, - 0xfe, 0xe0, 0x27, 0xd5, 0x89, 0x77, 0xff, 0xb1, 0x30, 0x61, 0xfc, 0x34, 0x17, 0x84, 0x6b, 0x64, - 0x96, 0x8f, 0xbb, 0xf8, 0x6b, 0x50, 0x74, 0xbb, 0x9c, 0xd6, 0x0d, 0x8a, 0xc9, 0xe5, 0x60, 0x86, - 0x7a, 0xa0, 0xe0, 0x87, 0xbd, 0x6a, 0x39, 0x2d, 0x36, 0xc0, 0xe1, 0x90, 0x3b, 0x32, 0xa1, 0x9e, - 0xc9, 0x84, 0xf9, 0xa3, 0x9b, 0x70, 0x05, 0xe6, 0x22, 0x17, 0x6f, 0x12, 0xcb, 0x75, 0x5a, 0x54, - 0x85, 0xda, 0x99, 0x7e, 0xaf, 0x3a, 0xb7, 0x95, 0x46, 0xe2, 0x41, 0x7a, 0xe3, 0x17, 0x1a, 0xcc, - 0x0d, 0xbc, 0x63, 0xa2, 0x9b, 0x30, 0x63, 0x3b, 0x8c, 0x78, 0xdb, 0xa6, 0x45, 0xd6, 0xa3, 0xec, - 0x3e, 0xa3, 0x8e, 0x37, 0xb3, 0x16, 0x47, 0xe2, 0x24, 0x2d, 0x3a, 0x07, 0xba, 0xdd, 0x0d, 0x5e, - 0x30, 0x44, 0x05, 0x59, 0xdb, 0xa0, 0x98, 0xc3, 0x78, 0x29, 0xd8, 0x35, 0xbd, 0xd6, 0x53, 0xd3, - 0xe3, 0xde, 0xf2, 0x78, 0xed, 0xd4, 0x93, 0xa5, 0xe0, 0xb5, 0x24, 0x1a, 0xa7, 0xe9, 0x8d, 0x9f, - 0x69, 0x70, 0x6e, 0xe4, 0x58, 0x95, 0xf9, 0xa5, 0xdb, 0x04, 0xe8, 0x9a, 0x9e, 0xd9, 0x21, 0x8c, - 0x78, 0x54, 0xed, 0x18, 0x47, 0x7c, 0x40, 0x0e, 0xd7, 0x97, 0x8d, 0x50, 0x10, 0x8e, 0x09, 0x35, - 0x7e, 0x94, 0x83, 0x19, 0xac, 0x52, 0x57, 0xee, 0xca, 0x2f, 0x7e, 0x69, 0xda, 0x48, 0x2c, 0x4d, - 0xe3, 0xab, 0x7d, 0xe2, 0x6c, 0xa3, 0xd6, 0x26, 0xf4, 0x08, 0x0a, 0x54, 0x7c, 0x44, 0xc8, 0xf4, - 0xb8, 0x94, 0x94, 0x29, 0xf8, 0x22, 0x17, 0xc8, 0xdf, 0x58, 0xc9, 0x33, 0xfa, 0x1a, 0x54, 0x12, - 0xf4, 0x7c, 0xe8, 0xf5, 0x3b, 0xc4, 0xc3, 0x64, 0x9b, 0x78, 0xc4, 0xb1, 0x08, 0xba, 0x0c, 0x45, - 0xb3, 0x6b, 0xdf, 0xf1, 0x5c, 0xbf, 0xab, 0xfc, 0x19, 0x6e, 0x34, 0xf5, 0x8d, 0x35, 0x01, 0xc7, - 0x21, 0x05, 0xa7, 0x0e, 0x0e, 0xa4, 0xa2, 0x2a, 0xf6, 0xbc, 0x20, 0xe1, 0x38, 0xa4, 0x08, 0xfb, - 0x56, 0x7e, 0x64, 0xdf, 0x6a, 0x80, 0xee, 0xdb, 0x2d, 0xf5, 0xf2, 0xf2, 0x6a, 0x50, 0x2a, 0xde, - 0x58, 0xbb, 0x75, 0xd8, 0xab, 0x5e, 0x18, 0xf5, 0x8d, 0x86, 0x1d, 0x74, 0x09, 0xad, 0xbd, 0xb1, - 0x76, 0x0b, 0x73, 0x66, 0xe3, 0xb7, 0x1a, 0xcc, 0x25, 0x2e, 0x79, 0x0c, 0x9b, 0xdd, 0x83, 0xe4, - 0x66, 0x77, 0x29, 0xbb, 0xc7, 0x46, 0xec, 0x76, 0xbb, 0xa9, 0x3b, 0x88, 0xe5, 0x6e, 0x33, 0xfd, - 0xdd, 0x62, 0x31, 0xeb, 0xcb, 0xc9, 0xe8, 0x8f, 0x15, 0xc6, 0x1f, 0x72, 0x70, 0x7a, 0x48, 0x0c, - 0xa1, 0xc7, 0x00, 0x51, 0x6f, 0x55, 0xfa, 0xc6, 0xf7, 0xc8, 0x81, 0x97, 0xc4, 0x59, 0xf1, 0x35, - 0x21, 0x82, 0xc6, 0x04, 0x22, 0x0f, 0x4a, 0x1e, 0xa1, 0xc4, 0xdb, 0x27, 0xad, 0xdb, 0xa2, 0xf0, - 0x73, 0xbb, 0xdd, 0xcc, 0x6e, 0xb7, 0x81, 0xc8, 0x8d, 0x3a, 0x32, 0x8e, 0xe4, 0xe2, 0xb8, 0x12, - 0xf4, 0x38, 0xb2, 0x9f, 0xfc, 0x3c, 0xb6, 0x9c, 0xe5, 0x3e, 0xc9, 0x0f, 0x7b, 0x63, 0x2c, 0xf9, - 0x57, 0x0d, 0xce, 0x24, 0xce, 0xb8, 0x45, 0x3a, 0xdd, 0xb6, 0xc9, 0xc8, 0x31, 0x54, 0xa1, 0x47, - 0x89, 0x2a, 0x74, 0x2d, 0xbb, 0x1d, 0x83, 0x33, 0x8e, 0x7c, 0xc4, 0xf9, 0x8b, 0x06, 0xe7, 0x86, - 0x72, 0x1c, 0x43, 0x5a, 0xbd, 0x99, 0x4c, 0xab, 0xe5, 0xa3, 0x5f, 0x6b, 0x44, 0x7a, 0xfd, 0x79, - 0xd4, 0xa5, 0x44, 0x9e, 0xfd, 0x1f, 0x36, 0x0d, 0xe3, 0x97, 0x1a, 0x9c, 0x08, 0x28, 0xf9, 0x76, - 0x95, 0x61, 0x49, 0x58, 0x06, 0x50, 0xdf, 0xb3, 0x83, 0x87, 0x4d, 0x3d, 0x3a, 0xf6, 0x9d, 0x10, - 0x83, 0x63, 0x54, 0xe8, 0x6b, 0x80, 0x82, 0x03, 0x6e, 0xb6, 0xc5, 0x28, 0xc0, 0x87, 0x6d, 0x5d, - 0xf0, 0xce, 0x2b, 0x5e, 0x84, 0x07, 0x28, 0xf0, 0x10, 0x2e, 0xe3, 0x77, 0x5a, 0xd4, 0xad, 0x05, - 0xf8, 0x53, 0x6a, 0x78, 0x71, 0xb6, 0x91, 0x86, 0x8f, 0xb7, 0x1b, 0x41, 0xf9, 0x69, 0x6d, 0x37, - 0xe2, 0x70, 0x23, 0xf2, 0xe1, 0x3d, 0x3d, 0x75, 0x09, 0x91, 0x07, 0x59, 0x27, 0xbb, 0xbb, 0xb1, - 0xff, 0x61, 0x28, 0x2d, 0xbf, 0x9c, 0xe9, 0x34, 0x3c, 0x46, 0x87, 0xbe, 0x07, 0x5c, 0x86, 0xa2, - 0xe3, 0xb6, 0xe4, 0x08, 0x9c, 0x1a, 0x29, 0xd6, 0x15, 0x1c, 0x87, 0x14, 0x03, 0x9f, 0xda, 0xf3, - 0x9f, 0xcc, 0xa7, 0x76, 0x31, 0x06, 0xb5, 0xdb, 0x9c, 0x20, 0x78, 0x6a, 0x88, 0xc6, 0x20, 0x05, - 0xc7, 0x21, 0x05, 0x5a, 0x8f, 0x1a, 0x8b, 0x7c, 0x64, 0xb8, 0x98, 0xa1, 0x31, 0x8f, 0xee, 0x24, - 0x8d, 0xfa, 0xb3, 0xe7, 0x95, 0x89, 0x0f, 0x9e, 0x57, 0x26, 0x3e, 0x7c, 0x5e, 0x99, 0x78, 0xb7, - 0x5f, 0xd1, 0x9e, 0xf5, 0x2b, 0xda, 0x07, 0xfd, 0x8a, 0xf6, 0x61, 0xbf, 0xa2, 0xfd, 0xab, 0x5f, - 0xd1, 0xbe, 0xff, 0x51, 0x65, 0xe2, 0xad, 0xf3, 0x63, 0xfe, 0xdd, 0xe7, 0x3f, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x6b, 0x79, 0xbf, 0xbf, 0x0c, 0x24, 0x00, 0x00, + // 2527 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3a, 0xcb, 0x6f, 0x1c, 0x49, + 0xf9, 0xee, 0x99, 0xf1, 0xd8, 0xfe, 0x26, 0xb6, 0xe3, 0xca, 0x2f, 0xf9, 0x4d, 0x1c, 0xad, 0xc7, + 0xe9, 0x20, 0xd6, 0x9b, 0x4d, 0xc6, 0x1b, 0x03, 0x51, 0x94, 0x5c, 0x98, 0xb1, 0x9d, 0xac, 0x49, + 0xe2, 0x78, 0x6b, 0xbc, 0xd9, 0x68, 0xd9, 0xac, 0x28, 0xf7, 0x94, 0xed, 0xc6, 0x33, 0xdd, 0x93, + 0xae, 0x1a, 0x27, 0x3e, 0x20, 0x56, 0x9c, 0x11, 0xe2, 0x88, 0x84, 0x40, 0x88, 0x03, 0x12, 0x12, + 0x20, 0x8e, 0x9c, 0x40, 0x02, 0x21, 0x02, 0x07, 0x58, 0x2d, 0x42, 0xec, 0x01, 0x0d, 0x64, 0xf6, + 0x2f, 0xe0, 0xc2, 0xc1, 0x27, 0x54, 0x8f, 0x7e, 0xce, 0x63, 0xdb, 0x21, 0x89, 0x82, 0xc4, 0x6d, + 0xe6, 0xab, 0xef, 0x55, 0xdf, 0xbb, 0xaa, 0x1a, 0x5e, 0xdf, 0xbb, 0xc2, 0xca, 0xb6, 0xbb, 0x48, + 0x5a, 0xf6, 0xa2, 0x47, 0x99, 0xdb, 0xf6, 0x2c, 0xba, 0xb8, 0x7f, 0x69, 0x8b, 0x72, 0x72, 0x69, + 0x71, 0x87, 0x3a, 0xd4, 0x23, 0x9c, 0xd6, 0xcb, 0x2d, 0xcf, 0xe5, 0x2e, 0x3a, 0xa3, 0x90, 0xcb, + 0xa4, 0x65, 0x97, 0x7d, 0xe4, 0xb2, 0x46, 0x9e, 0xbd, 0xb8, 0x63, 0xf3, 0xdd, 0xf6, 0x56, 0xd9, + 0x72, 0x9b, 0x8b, 0x3b, 0xee, 0x8e, 0xbb, 0x28, 0x69, 0xb6, 0xda, 0xdb, 0xf2, 0x9f, 0xfc, 0x23, + 0x7f, 0x29, 0x5e, 0xb3, 0x66, 0x44, 0xb0, 0xe5, 0x7a, 0x42, 0x68, 0x52, 0xde, 0xec, 0xe7, 0x43, + 0x9c, 0x26, 0xb1, 0x76, 0x6d, 0x87, 0x7a, 0x07, 0x8b, 0xad, 0xbd, 0x9d, 0xb8, 0xb6, 0x47, 0xa1, + 0x62, 0x8b, 0x4d, 0xca, 0x49, 0x3f, 0x59, 0x8b, 0x83, 0xa8, 0xbc, 0xb6, 0xc3, 0xed, 0x66, 0xaf, + 0x98, 0xcb, 0x9f, 0x46, 0xc0, 0xac, 0x5d, 0xda, 0x24, 0x49, 0x3a, 0xf3, 0xfb, 0x59, 0x38, 0x59, + 0x69, 0x34, 0x5c, 0x4b, 0xc0, 0x56, 0xe8, 0xbe, 0x6d, 0xd1, 0x1a, 0x27, 0xbc, 0xcd, 0xd0, 0x67, + 0x21, 0x5f, 0xf7, 0xec, 0x7d, 0xea, 0x15, 0x8d, 0x79, 0x63, 0x61, 0xa2, 0x3a, 0xf5, 0xb8, 0x53, + 0x1a, 0xe9, 0x76, 0x4a, 0xf9, 0x15, 0x09, 0xc5, 0x7a, 0x15, 0xcd, 0x43, 0xae, 0xe5, 0xba, 0x8d, + 0x62, 0x46, 0x62, 0x1d, 0xd3, 0x58, 0xb9, 0x0d, 0xd7, 0x6d, 0x60, 0xb9, 0x22, 0x39, 0x49, 0xce, + 0xc5, 0x6c, 0x82, 0x93, 0x84, 0x62, 0xbd, 0x8a, 0x2c, 0x00, 0xcb, 0x75, 0xea, 0x36, 0xb7, 0x5d, + 0x87, 0x15, 0x73, 0xf3, 0xd9, 0x85, 0xc2, 0xd2, 0x62, 0x39, 0xf4, 0x72, 0xb0, 0xb1, 0x72, 0x6b, + 0x6f, 0x47, 0x00, 0x58, 0x59, 0xd8, 0xaf, 0xbc, 0x7f, 0xa9, 0xbc, 0xec, 0xd3, 0x55, 0x91, 0x66, + 0x0e, 0x01, 0x88, 0xe1, 0x08, 0x5b, 0x74, 0x13, 0x72, 0x75, 0xc2, 0x49, 0x71, 0x74, 0xde, 0x58, + 0x28, 0x2c, 0x5d, 0x1c, 0xc8, 0x5e, 0xdb, 0xad, 0x8c, 0xc9, 0xc3, 0xd5, 0x47, 0x9c, 0x3a, 0x4c, + 0x30, 0x1f, 0x17, 0x3b, 0x5b, 0x21, 0x9c, 0x60, 0xc9, 0x04, 0x11, 0x28, 0x38, 0x94, 0x3f, 0x74, + 0xbd, 0x3d, 0x01, 0x2c, 0xe6, 0x25, 0xcf, 0x72, 0x79, 0x48, 0x60, 0x96, 0xd7, 0x35, 0xbe, 0xdc, + 0xb2, 0xa0, 0xaa, 0x4e, 0x77, 0x3b, 0xa5, 0xc2, 0x7a, 0xc8, 0x06, 0x47, 0x79, 0x9a, 0x7f, 0x30, + 0xe0, 0xb8, 0x76, 0x90, 0xed, 0x3a, 0x98, 0xb2, 0x76, 0x83, 0xa3, 0xf7, 0x61, 0x4c, 0xd9, 0x8c, + 0x49, 0xe7, 0x14, 0x96, 0x3e, 0x37, 0x54, 0xa6, 0x12, 0x96, 0xe4, 0x52, 0x9d, 0xd6, 0xa6, 0x1a, + 0x53, 0xeb, 0x0c, 0xfb, 0x4c, 0xd1, 0x5d, 0x38, 0xe6, 0xb8, 0x75, 0x5a, 0xa3, 0x0d, 0x6a, 0x71, + 0xd7, 0x93, 0x7e, 0x2b, 0x2c, 0xcd, 0x47, 0x85, 0x88, 0x2c, 0x11, 0x96, 0x5f, 0x8f, 0xe0, 0x55, + 0x8f, 0x77, 0x3b, 0xa5, 0x63, 0x51, 0x08, 0x8e, 0xf1, 0x31, 0x3f, 0xca, 0x43, 0xa1, 0x4a, 0x98, + 0x6d, 0x29, 0x89, 0xe8, 0x6b, 0x00, 0x84, 0x73, 0xcf, 0xde, 0x6a, 0x73, 0xb9, 0x15, 0xe1, 0xf1, + 0x2b, 0x43, 0xb7, 0x12, 0xa1, 0x2e, 0x57, 0x02, 0xd2, 0x55, 0x87, 0x7b, 0x07, 0xd5, 0x73, 0xbe, + 0xeb, 0xc3, 0x85, 0x6f, 0xfc, 0xbd, 0x34, 0xf9, 0x56, 0x9b, 0x34, 0xec, 0x6d, 0x9b, 0xd6, 0xd7, + 0x49, 0x93, 0xe2, 0x88, 0x40, 0xd4, 0x86, 0x71, 0x8b, 0xb4, 0x88, 0x65, 0xf3, 0x83, 0x62, 0x46, + 0x0a, 0xbf, 0x9c, 0x5a, 0xf8, 0xb2, 0x26, 0x54, 0xa2, 0xcf, 0x6a, 0xd1, 0xe3, 0x3e, 0xb8, 0x57, + 0x70, 0x20, 0x0a, 0x3d, 0x82, 0x69, 0xcb, 0x75, 0x58, 0xbb, 0x49, 0xd9, 0xb2, 0xdb, 0x76, 0x38, + 0x15, 0x06, 0x16, 0xd2, 0xbf, 0x90, 0xc2, 0x8b, 0x9a, 0x62, 0x59, 0x32, 0x68, 0xc9, 0x90, 0xff, + 0x7f, 0x2d, 0x7c, 0x7a, 0x39, 0xce, 0x15, 0x27, 0xc5, 0xa0, 0x05, 0x18, 0x17, 0xfe, 0x10, 0xfa, + 0x14, 0x73, 0x2a, 0x5f, 0x85, 0xd2, 0xeb, 0x1a, 0x86, 0x83, 0xd5, 0x9e, 0x08, 0x18, 0x7d, 0x36, + 0x11, 0x20, 0x34, 0x20, 0x8d, 0x86, 0x40, 0x60, 0x32, 0x5d, 0xc6, 0x95, 0x06, 0x15, 0x0d, 0xc3, + 0xc1, 0x2a, 0xda, 0x80, 0x3c, 0x27, 0xb6, 0xc3, 0x59, 0x71, 0x4c, 0x1a, 0x67, 0x21, 0x85, 0x71, + 0x36, 0x05, 0x41, 0x58, 0x5f, 0xe4, 0x5f, 0x86, 0x35, 0x9f, 0xd9, 0x3d, 0x98, 0x4e, 0x84, 0x0c, + 0x3a, 0x0e, 0xd9, 0x3d, 0x7a, 0xa0, 0x2a, 0x1c, 0x16, 0x3f, 0x51, 0x15, 0x46, 0xf7, 0x49, 0xa3, + 0x4d, 0x65, 0x3d, 0x2b, 0x2c, 0x5d, 0x48, 0x93, 0x58, 0x3e, 0x53, 0xac, 0x48, 0xaf, 0x66, 0xae, + 0x18, 0xb3, 0xbb, 0x30, 0x19, 0x0b, 0x91, 0x3e, 0xa2, 0x2a, 0x71, 0x51, 0xaf, 0xa7, 0xf1, 0xbe, + 0x66, 0x19, 0x91, 0x64, 0xde, 0x80, 0x99, 0xe5, 0xd5, 0x5b, 0xba, 0x76, 0xfb, 0x76, 0x5e, 0x02, + 0xa0, 0x8f, 0x5a, 0x1e, 0x65, 0xa2, 0x6e, 0xe9, 0x0a, 0x1e, 0x94, 0xc6, 0xd5, 0x60, 0x05, 0x47, + 0xb0, 0xcc, 0xf7, 0x61, 0xcc, 0x0f, 0x94, 0x9a, 0xaf, 0x9a, 0xd1, 0x53, 0xd2, 0x7a, 0xaa, 0x70, + 0xa8, 0xeb, 0x5b, 0x6d, 0xe2, 0x70, 0x9b, 0x1f, 0x54, 0x27, 0xb5, 0xa4, 0xd1, 0xbb, 0x82, 0x89, + 0x56, 0xd6, 0xfc, 0x97, 0x01, 0xa0, 0x05, 0xd4, 0x28, 0x17, 0x8d, 0xc3, 0x11, 0x81, 0x68, 0xc4, + 0x1b, 0x87, 0x0c, 0x44, 0xb9, 0x82, 0x2c, 0x18, 0xb7, 0x14, 0x3e, 0xd3, 0xf9, 0x39, 0x3c, 0x43, + 0x42, 0xe6, 0xfe, 0x4f, 0x5d, 0x19, 0x8e, 0x07, 0xe9, 0xa9, 0xc1, 0x38, 0x60, 0x3c, 0x4b, 0x60, + 0x32, 0x86, 0xdc, 0xc7, 0x51, 0x57, 0xe3, 0x8e, 0xfa, 0x4c, 0x1a, 0x25, 0xa2, 0x1e, 0x6a, 0x83, + 0x6e, 0x75, 0x29, 0xf6, 0xbc, 0x06, 0xa3, 0x5b, 0xa2, 0xcc, 0x68, 0x59, 0x0b, 0x69, 0x0b, 0x52, + 0x75, 0x42, 0xd8, 0x5b, 0x02, 0xb0, 0xe2, 0x60, 0x7e, 0x33, 0x03, 0xaf, 0x24, 0x4b, 0xff, 0xb2, + 0xeb, 0x6c, 0xdb, 0x3b, 0x6d, 0x4f, 0xfe, 0x41, 0x5f, 0x84, 0xbc, 0xe2, 0xa8, 0x15, 0x5a, 0xf0, + 0x33, 0xa7, 0x26, 0xa1, 0x87, 0x9d, 0xd2, 0xa9, 0x24, 0xa9, 0x5a, 0xc1, 0x9a, 0x4e, 0xe4, 0xb3, + 0x47, 0x1f, 0xb4, 0x29, 0xe3, 0xca, 0x45, 0xba, 0xa2, 0x60, 0x0d, 0xc3, 0xc1, 0x2a, 0xfa, 0x3a, + 0x9c, 0xa8, 0xeb, 0x0a, 0x16, 0x51, 0x41, 0xb7, 0x96, 0x37, 0x52, 0x55, 0xbe, 0x08, 0x5d, 0xf5, + 0x8c, 0x56, 0xf5, 0x44, 0x9f, 0x45, 0xdc, 0x4f, 0x92, 0xf9, 0x89, 0x01, 0xa7, 0xfa, 0x77, 0x42, + 0x44, 0x61, 0xcc, 0x93, 0xbf, 0xfc, 0x26, 0x74, 0x35, 0x85, 0x3e, 0x7a, 0x8f, 0x83, 0xdb, 0xaa, + 0xfa, 0xcf, 0xb0, 0xcf, 0x1b, 0x6d, 0x41, 0xde, 0x92, 0x2a, 0xe9, 0x68, 0xbe, 0x7a, 0xa4, 0xae, + 0x1d, 0xdf, 0x7f, 0x50, 0xe4, 0x14, 0x18, 0x6b, 0xce, 0xe6, 0x8f, 0x0d, 0x98, 0x4e, 0x94, 0x25, + 0x34, 0x07, 0x59, 0xdb, 0xe1, 0x32, 0xa2, 0xb2, 0xca, 0x3f, 0x6b, 0x0e, 0x57, 0xa9, 0x29, 0x16, + 0xd0, 0x59, 0xc8, 0x6d, 0x89, 0x11, 0x2e, 0x2b, 0x0b, 0xf2, 0x64, 0xb7, 0x53, 0x9a, 0xa8, 0xba, + 0x6e, 0x43, 0x61, 0xc8, 0x25, 0xf4, 0x2a, 0xe4, 0x19, 0xf7, 0x6c, 0x67, 0x47, 0xf7, 0x0d, 0x39, + 0xb4, 0xd4, 0x24, 0x44, 0xa1, 0xe9, 0x65, 0x74, 0x1e, 0xc6, 0xf6, 0xa9, 0x27, 0xab, 0xce, 0xa8, + 0xc4, 0x94, 0x1d, 0xe1, 0xae, 0x02, 0x29, 0x54, 0x1f, 0xc1, 0xa4, 0x30, 0x15, 0x2f, 0x6b, 0xcf, + 0xa7, 0xee, 0xfc, 0x24, 0x03, 0x05, 0x2d, 0xa7, 0x41, 0xec, 0x26, 0xba, 0x17, 0x89, 0x59, 0xe5, + 0xee, 0xf3, 0xe9, 0xdd, 0x1d, 0xd6, 0x92, 0x3e, 0x31, 0x5e, 0x87, 0x82, 0x68, 0xb9, 0xdc, 0x53, + 0x8d, 0x4b, 0x79, 0xf9, 0x62, 0xba, 0xd8, 0xd6, 0x54, 0xd5, 0x13, 0x9a, 0x7f, 0x21, 0x84, 0x31, + 0x1c, 0x65, 0x8b, 0xee, 0x07, 0x61, 0x74, 0x84, 0xb1, 0x41, 0xec, 0x3c, 0x5d, 0x04, 0xfd, 0xd6, + 0x80, 0xe2, 0x20, 0xa2, 0x58, 0xbe, 0x1b, 0x4f, 0x93, 0xef, 0x99, 0x17, 0x96, 0xef, 0xbf, 0x32, + 0x22, 0x6e, 0x67, 0x0c, 0x7d, 0x05, 0xc6, 0xc5, 0x71, 0x41, 0x4e, 0xff, 0x46, 0x8f, 0x16, 0x43, + 0x0e, 0x17, 0x77, 0xb6, 0xbe, 0x4a, 0x2d, 0x7e, 0x9b, 0x72, 0x12, 0xb6, 0xd0, 0x10, 0x86, 0x03, + 0xae, 0x68, 0x1d, 0x72, 0xac, 0x45, 0xad, 0x23, 0x8c, 0x0e, 0x52, 0xb3, 0x5a, 0x8b, 0x5a, 0x61, + 0x2f, 0x10, 0xff, 0xb0, 0xe4, 0x63, 0x7e, 0x37, 0xea, 0x09, 0xc6, 0xe2, 0x9e, 0x18, 0x60, 0x5f, + 0xe3, 0x85, 0xd9, 0xf7, 0x97, 0x41, 0xa5, 0x91, 0xda, 0xdd, 0xb2, 0x19, 0x47, 0xef, 0xf5, 0xd8, + 0xb8, 0x9c, 0xce, 0xc6, 0x82, 0x5a, 0x5a, 0x38, 0x48, 0x2f, 0x1f, 0x12, 0xb1, 0xef, 0x6d, 0x18, + 0xb5, 0x39, 0x6d, 0xfa, 0x89, 0xb5, 0x90, 0xd6, 0xc0, 0x61, 0x5d, 0x58, 0x13, 0xe4, 0x58, 0x71, + 0x31, 0xff, 0x18, 0xdf, 0x80, 0x30, 0x3c, 0x7a, 0x0f, 0x26, 0x98, 0x9e, 0xa1, 0xfc, 0xe2, 0x90, + 0x66, 0x2e, 0x0b, 0xe6, 0xdf, 0x19, 0x2d, 0x69, 0xc2, 0x87, 0x30, 0x1c, 0x32, 0x8c, 0x64, 0x6e, + 0xe6, 0x28, 0x99, 0x9b, 0x70, 0xfd, 0xc0, 0xcc, 0x7d, 0x00, 0xfd, 0xbc, 0x87, 0xde, 0x85, 0xbc, + 0xdb, 0x22, 0x0f, 0x82, 0xaa, 0x3a, 0xfc, 0x90, 0x73, 0x47, 0xa2, 0xf6, 0x0b, 0x11, 0x10, 0x22, + 0xd5, 0x32, 0xd6, 0x1c, 0xcd, 0x6f, 0x19, 0x70, 0x3c, 0x59, 0xc2, 0x8e, 0x50, 0x24, 0x36, 0x60, + 0xaa, 0x49, 0xb8, 0xb5, 0x1b, 0xf4, 0x2a, 0x7d, 0x8d, 0xb0, 0xd0, 0xed, 0x94, 0xa6, 0x6e, 0xc7, + 0x56, 0x0e, 0x3b, 0x25, 0x74, 0xbd, 0xdd, 0x68, 0x1c, 0xc4, 0x8f, 0x55, 0x09, 0x7a, 0xf3, 0xa7, + 0x99, 0x20, 0x67, 0x7a, 0x4e, 0x4a, 0xe8, 0x1a, 0x4c, 0xb2, 0x5d, 0xe2, 0xd1, 0xba, 0x7f, 0xee, + 0x52, 0x63, 0xcf, 0x49, 0x6d, 0xcf, 0xc9, 0x5a, 0x74, 0x11, 0xc7, 0x71, 0xd1, 0x83, 0x9e, 0x69, + 0x74, 0xf9, 0xa9, 0xce, 0x6b, 0x2f, 0xd7, 0x6c, 0xfa, 0xd7, 0x1c, 0x4c, 0xc6, 0x1a, 0x5c, 0x8a, + 0x19, 0xb5, 0x02, 0xd3, 0xf5, 0x30, 0x36, 0xe5, 0x69, 0x52, 0xb9, 0x2d, 0x38, 0x89, 0xae, 0xc4, + 0x97, 0x71, 0x12, 0x3f, 0x9e, 0x67, 0xd9, 0x67, 0x9d, 0x67, 0x77, 0x61, 0x8a, 0x04, 0x73, 0xd3, + 0x6d, 0xb7, 0xee, 0x9f, 0x76, 0xcb, 0x9a, 0x6a, 0xaa, 0x12, 0x5b, 0x3d, 0xec, 0x94, 0xfe, 0x2f, + 0x39, 0x6d, 0x09, 0x38, 0x4e, 0x70, 0x41, 0xe7, 0x60, 0x54, 0xfa, 0x46, 0x8e, 0x36, 0xd9, 0xb0, + 0xac, 0x48, 0xbb, 0x62, 0xb5, 0x86, 0x2e, 0x41, 0x81, 0xd4, 0x9b, 0xb6, 0x53, 0xb1, 0x2c, 0xca, + 0xfc, 0x53, 0xae, 0x9c, 0x97, 0x2a, 0x21, 0x18, 0x47, 0x71, 0x50, 0x13, 0xa6, 0xb6, 0x6d, 0x8f, + 0xf1, 0xca, 0x3e, 0xb1, 0x1b, 0x64, 0xab, 0x41, 0xf5, 0x99, 0x37, 0xcd, 0xe8, 0x50, 0x6b, 0x6f, + 0xf9, 0xa3, 0xc9, 0x29, 0x7f, 0x7b, 0xd7, 0x63, 0xcc, 0x70, 0x82, 0xb9, 0x18, 0x53, 0xb8, 0xdb, + 0xa0, 0x2a, 0xad, 0x59, 0x71, 0x3c, 0xb5, 0xac, 0xcd, 0x80, 0x2a, 0x1c, 0x53, 0x42, 0x18, 0xc3, + 0x51, 0xb6, 0xe6, 0x5f, 0x82, 0xe3, 0xc7, 0x80, 0x49, 0x19, 0xbd, 0x26, 0xc6, 0x6e, 0xb9, 0xa4, + 0x83, 0x2d, 0x32, 0x3a, 0x4b, 0x30, 0xf6, 0xd7, 0x23, 0xb7, 0x91, 0x99, 0x54, 0xb7, 0x91, 0xd9, + 0x14, 0xb7, 0x91, 0xb9, 0xa1, 0xb7, 0x91, 0x09, 0x37, 0x8e, 0xa6, 0x70, 0x63, 0xc2, 0xae, 0xf9, + 0xe7, 0x63, 0xd7, 0x2f, 0xfb, 0x53, 0x73, 0x70, 0xd8, 0x5f, 0x83, 0xac, 0x45, 0x1b, 0x7d, 0x1a, + 0x6e, 0x9f, 0x0a, 0x90, 0xbc, 0x29, 0xa8, 0x8e, 0x75, 0x3b, 0xa5, 0xec, 0xf2, 0xea, 0x2d, 0x2c, + 0x78, 0x98, 0xbf, 0xc8, 0xfa, 0xf5, 0x3c, 0x8c, 0xab, 0xff, 0x55, 0x84, 0xff, 0xb0, 0x22, 0x24, + 0xe2, 0x62, 0xec, 0xf9, 0xc4, 0xc5, 0x3f, 0x83, 0x79, 0x57, 0xde, 0x7b, 0xa1, 0x57, 0x22, 0xbd, + 0xa2, 0x5a, 0xd0, 0xe4, 0xd9, 0x9b, 0xf4, 0x40, 0x35, 0x8e, 0x73, 0xd1, 0xc6, 0x31, 0xd1, 0xff, + 0xe8, 0x84, 0xae, 0x41, 0x9e, 0x6e, 0x6f, 0x53, 0x8b, 0xeb, 0x84, 0xf2, 0xaf, 0x58, 0xf3, 0xab, + 0x12, 0x7a, 0xd8, 0x29, 0xcd, 0x44, 0x44, 0x2a, 0x20, 0xd6, 0x24, 0xe8, 0x1d, 0x98, 0xe0, 0x76, + 0x93, 0x56, 0xea, 0x75, 0x5a, 0x97, 0xe6, 0x8e, 0x1f, 0xb4, 0x86, 0x4c, 0x83, 0x9b, 0x76, 0x93, + 0xaa, 0x73, 0xe8, 0xa6, 0xcf, 0x00, 0x87, 0xbc, 0xae, 0x8e, 0x7f, 0xe7, 0x07, 0xa5, 0x91, 0x0f, + 0xfe, 0x36, 0x3f, 0x62, 0xfe, 0x30, 0xe3, 0x87, 0x6b, 0x68, 0x96, 0x4f, 0xdb, 0xf8, 0x9b, 0x30, + 0xee, 0xb6, 0x04, 0xae, 0xeb, 0x17, 0x93, 0x0b, 0x7e, 0x0b, 0xbe, 0xa3, 0xe1, 0x87, 0x9d, 0x52, + 0x31, 0xc9, 0xd6, 0x5f, 0xc3, 0x01, 0x75, 0x68, 0xc2, 0x6c, 0x2a, 0x13, 0xe6, 0x8e, 0x6e, 0xc2, + 0x65, 0x98, 0x09, 0x5d, 0x5c, 0xa3, 0x96, 0xeb, 0xd4, 0x99, 0x0e, 0xb5, 0x93, 0xdd, 0x4e, 0x69, + 0x66, 0x33, 0xb9, 0x88, 0x7b, 0xf1, 0xcd, 0x9f, 0x19, 0x30, 0xd3, 0xf3, 0xec, 0x20, 0x66, 0x21, + 0x5b, 0x0c, 0x03, 0xdb, 0xc4, 0x52, 0x17, 0xc2, 0x89, 0x59, 0x68, 0x2d, 0xba, 0x88, 0xe3, 0xb8, + 0xe8, 0x34, 0x64, 0xed, 0x96, 0x7f, 0xe3, 0x23, 0x2b, 0xc8, 0xda, 0x06, 0xc3, 0x02, 0x26, 0x4a, + 0xc1, 0x2e, 0xf1, 0xea, 0x0f, 0x89, 0x27, 0xbc, 0xe5, 0x89, 0xda, 0x99, 0x8d, 0x97, 0x82, 0x37, + 0xe3, 0xcb, 0x38, 0x89, 0x6f, 0xfe, 0xc8, 0x80, 0xd3, 0x03, 0xc7, 0xd0, 0xd4, 0x0f, 0x53, 0x04, + 0xa0, 0x45, 0x3c, 0xd2, 0xa4, 0x7a, 0x62, 0x7b, 0x8a, 0xf7, 0x9e, 0xe0, 0xb8, 0xb7, 0x11, 0x30, + 0xc2, 0x11, 0xa6, 0xe6, 0xf7, 0x32, 0x30, 0x89, 0x75, 0xea, 0xaa, 0xbb, 0x85, 0xe7, 0x7f, 0xc8, + 0xdc, 0x88, 0x1d, 0x32, 0x87, 0x57, 0xfb, 0x98, 0x6e, 0x83, 0x8e, 0x99, 0xe8, 0x1e, 0xe4, 0x99, + 0x7c, 0xf3, 0x4b, 0x75, 0x19, 0x17, 0xe7, 0x29, 0xe9, 0x42, 0x17, 0xa8, 0xff, 0x58, 0xf3, 0x33, + 0xbb, 0x06, 0xcc, 0xc5, 0xf0, 0xf5, 0x0b, 0x85, 0x87, 0xe9, 0x36, 0xf5, 0xa8, 0x63, 0x51, 0x74, + 0x01, 0xc6, 0x49, 0xcb, 0xbe, 0xe1, 0xb9, 0xed, 0x96, 0xf6, 0x67, 0x30, 0x10, 0x57, 0x36, 0xd6, + 0x24, 0x1c, 0x07, 0x18, 0x02, 0xdb, 0x57, 0x48, 0x47, 0x55, 0xe4, 0x3a, 0x46, 0xc1, 0x71, 0x80, + 0x11, 0xf4, 0xad, 0xdc, 0xc0, 0xbe, 0x55, 0x85, 0x6c, 0xdb, 0xae, 0xeb, 0x9b, 0xaa, 0x37, 0xfc, + 0x52, 0xf1, 0xf6, 0xda, 0xca, 0x61, 0xa7, 0x74, 0x76, 0xd0, 0x93, 0x2a, 0x3f, 0x68, 0x51, 0x56, + 0x7e, 0x7b, 0x6d, 0x05, 0x0b, 0x62, 0xf3, 0xd7, 0x06, 0xcc, 0xc4, 0x36, 0xf9, 0x02, 0x4e, 0xc2, + 0x77, 0xe2, 0x27, 0xe1, 0xf3, 0xe9, 0x3d, 0x36, 0xe0, 0x2c, 0xbc, 0x9b, 0xd8, 0x83, 0x3c, 0x0c, + 0xd7, 0x92, 0xcf, 0x8c, 0x0b, 0x69, 0x6f, 0x9a, 0x06, 0xbf, 0x2d, 0x9a, 0xbf, 0xcb, 0xc0, 0x89, + 0x3e, 0x31, 0x84, 0xee, 0x03, 0x84, 0xbd, 0x55, 0xcb, 0x1b, 0xde, 0x23, 0x7b, 0x6e, 0x5e, 0xa7, + 0xe4, 0xe3, 0x5f, 0x08, 0x8d, 0x30, 0x44, 0x1e, 0x14, 0x3c, 0xca, 0xa8, 0xb7, 0x4f, 0xeb, 0xd7, + 0x65, 0xe1, 0x17, 0x76, 0xbb, 0x96, 0xde, 0x6e, 0x3d, 0x91, 0x1b, 0x76, 0x64, 0x1c, 0xf2, 0xc5, + 0x51, 0x21, 0xe8, 0x7e, 0x68, 0x3f, 0xf5, 0x9a, 0xbd, 0x94, 0x66, 0x3f, 0xf1, 0x77, 0xf8, 0x21, + 0x96, 0xfc, 0xb3, 0x01, 0x27, 0x63, 0x3a, 0x6e, 0xd2, 0x66, 0xab, 0x41, 0x38, 0x7d, 0x01, 0x55, + 0xe8, 0x5e, 0xac, 0x0a, 0x5d, 0x4e, 0x6f, 0x47, 0x5f, 0xc7, 0x81, 0x97, 0x5e, 0x1f, 0x19, 0x70, + 0xba, 0x2f, 0xc5, 0x0b, 0x48, 0xab, 0x77, 0xe2, 0x69, 0xb5, 0x74, 0xf4, 0x6d, 0x0d, 0x48, 0xaf, + 0x3f, 0x0d, 0xda, 0x94, 0xcc, 0xb3, 0xff, 0xc2, 0xa6, 0x61, 0xfe, 0xdc, 0x80, 0x63, 0x3e, 0xa6, + 0x38, 0x5d, 0xa5, 0x38, 0x24, 0x2c, 0x01, 0xe8, 0xcf, 0x4f, 0xfc, 0x8b, 0xe0, 0x6c, 0xa8, 0xf6, + 0x8d, 0x60, 0x05, 0x47, 0xb0, 0xd0, 0x97, 0x00, 0xf9, 0x0a, 0xd6, 0x1a, 0xfe, 0x75, 0x8a, 0x2c, + 0xfd, 0xd9, 0xea, 0xac, 0xa6, 0x45, 0xb8, 0x07, 0x03, 0xf7, 0xa1, 0x32, 0x7f, 0x63, 0x84, 0xdd, + 0x5a, 0x82, 0x5f, 0x52, 0xc3, 0x4b, 0xdd, 0x06, 0x1a, 0x3e, 0xda, 0x6e, 0x24, 0xe6, 0xcb, 0xda, + 0x6e, 0xa4, 0x72, 0x03, 0xf2, 0xe1, 0xf7, 0xb9, 0xc4, 0x26, 0x64, 0x1e, 0xa4, 0x9d, 0xec, 0x6e, + 0x46, 0x3e, 0x39, 0x2a, 0x2c, 0xbd, 0x96, 0x4a, 0x1b, 0x11, 0xa3, 0x7d, 0xef, 0x03, 0x2e, 0x44, + 0xbe, 0x89, 0x48, 0x8c, 0x14, 0x29, 0xbe, 0x8b, 0xc8, 0x3d, 0xa3, 0xef, 0x22, 0x2e, 0x44, 0xbe, + 0x8b, 0x50, 0x57, 0x0d, 0xe1, 0x18, 0xd4, 0xfb, 0x6d, 0xc4, 0x7a, 0xd8, 0x58, 0xd4, 0x25, 0xc3, + 0xb9, 0x14, 0x8d, 0x79, 0xc8, 0xf7, 0x3e, 0x18, 0x4e, 0xb5, 0xa8, 0xa7, 0xc0, 0xa1, 0x92, 0x22, + 0x4b, 0xc7, 0xa4, 0x2e, 0xb3, 0xdd, 0x4e, 0xe9, 0xd4, 0x46, 0x5f, 0x0c, 0x3c, 0x80, 0x12, 0xed, + 0xc0, 0x54, 0xec, 0xfe, 0xd4, 0xbf, 0x67, 0x7a, 0x35, 0xe5, 0x13, 0x7e, 0x78, 0x9b, 0x15, 0xbb, + 0x95, 0x65, 0x38, 0xc1, 0xb6, 0x5a, 0x79, 0xfc, 0x64, 0x6e, 0xe4, 0xc3, 0x27, 0x73, 0x23, 0x1f, + 0x3f, 0x99, 0x1b, 0xf9, 0xa0, 0x3b, 0x67, 0x3c, 0xee, 0xce, 0x19, 0x1f, 0x76, 0xe7, 0x8c, 0x8f, + 0xbb, 0x73, 0xc6, 0x3f, 0xba, 0x73, 0xc6, 0xb7, 0x3f, 0x99, 0x1b, 0x79, 0xf7, 0xcc, 0x90, 0x4f, + 0x0b, 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xd6, 0xca, 0xa4, 0x4c, 0x78, 0x28, 0x00, 0x00, } func (m *AllocatedDeviceStatus) Marshal() (dAtA []byte, err error) { @@ -1433,6 +1534,49 @@ func (m *BasicDevice) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- + dAtA[i] = 0x3a + } + } + if m.AllNodes != nil { + i-- + if *m.AllNodes { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + } + if m.NodeSelector != nil { + { + size, err := m.NodeSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.NodeName != nil { + i -= len(*m.NodeName) + copy(dAtA[i:], *m.NodeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.NodeName))) + i-- + dAtA[i] = 0x22 + } + if len(m.ConsumesCounter) > 0 { + for iNdEx := len(m.ConsumesCounter) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ConsumesCounter[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x1a } } @@ -1525,6 +1669,96 @@ func (m *CELDeviceSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *Counter) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Counter) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Counter) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Value.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CounterSet) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CounterSet) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CounterSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Counters) > 0 { + keysForCounters := make([]string, 0, len(m.Counters)) + for k := range m.Counters { + keysForCounters = append(keysForCounters, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCounters) + for iNdEx := len(keysForCounters) - 1; iNdEx >= 0; iNdEx-- { + v := m.Counters[string(keysForCounters[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForCounters[iNdEx]) + copy(dAtA[i:], keysForCounters[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForCounters[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *Device) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2103,6 +2337,63 @@ func (m *DeviceConstraint) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *DeviceCounterConsumption) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeviceCounterConsumption) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeviceCounterConsumption) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Counters) > 0 { + keysForCounters := make([]string, 0, len(m.Counters)) + for k := range m.Counters { + keysForCounters = append(keysForCounters, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCounters) + for iNdEx := len(keysForCounters) - 1; iNdEx >= 0; iNdEx-- { + v := m.Counters[string(keysForCounters[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForCounters[iNdEx]) + copy(dAtA[i:], keysForCounters[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForCounters[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.SharedCounter) + copy(dAtA[i:], m.SharedCounter) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SharedCounter))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *DeviceRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3061,6 +3352,30 @@ func (m *ResourceSliceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.SharedCounters) > 0 { + for iNdEx := len(m.SharedCounters) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SharedCounters[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } + if m.PerDeviceNodeSelection != nil { + i-- + if *m.PerDeviceNodeSelection { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + } if len(m.Devices) > 0 { for iNdEx := len(m.Devices) - 1; iNdEx >= 0; iNdEx-- { { @@ -3197,6 +3512,23 @@ func (m *BasicDevice) Size() (n int) { n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) } } + if len(m.ConsumesCounter) > 0 { + for _, e := range m.ConsumesCounter { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.NodeName != nil { + l = len(*m.NodeName) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NodeSelector != nil { + l = m.NodeSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AllNodes != nil { + n += 2 + } if len(m.Taints) > 0 { for _, e := range m.Taints { l = e.Size() @@ -3217,6 +3549,37 @@ func (m *CELDeviceSelector) Size() (n int) { return n } +func (m *Counter) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Value.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CounterSet) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Counters) > 0 { + for k, v := range m.Counters { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + func (m *Device) Size() (n int) { if m == nil { return 0 @@ -3444,6 +3807,26 @@ func (m *DeviceConstraint) Size() (n int) { return n } +func (m *DeviceCounterConsumption) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SharedCounter) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Counters) > 0 { + for k, v := range m.Counters { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + func (m *DeviceRequest) Size() (n int) { if m == nil { return 0 @@ -3813,6 +4196,15 @@ func (m *ResourceSliceSpec) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if m.PerDeviceNodeSelection != nil { + n += 2 + } + if len(m.SharedCounters) > 0 { + for _, e := range m.SharedCounters { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -3857,6 +4249,11 @@ func (this *BasicDevice) String() string { if this == nil { return "nil" } + repeatedStringForConsumesCounter := "[]DeviceCounterConsumption{" + for _, f := range this.ConsumesCounter { + repeatedStringForConsumesCounter += strings.Replace(strings.Replace(f.String(), "DeviceCounterConsumption", "DeviceCounterConsumption", 1), `&`, ``, 1) + "," + } + repeatedStringForConsumesCounter += "}" repeatedStringForTaints := "[]DeviceTaint{" for _, f := range this.Taints { repeatedStringForTaints += fmt.Sprintf("%v", f) + "," @@ -3885,6 +4282,10 @@ func (this *BasicDevice) String() string { s := strings.Join([]string{`&BasicDevice{`, `Attributes:` + mapStringForAttributes + `,`, `Capacity:` + mapStringForCapacity + `,`, + `ConsumesCounter:` + repeatedStringForConsumesCounter + `,`, + `NodeName:` + valueToStringGenerated(this.NodeName) + `,`, + `NodeSelector:` + strings.Replace(fmt.Sprintf("%v", this.NodeSelector), "NodeSelector", "v11.NodeSelector", 1) + `,`, + `AllNodes:` + valueToStringGenerated(this.AllNodes) + `,`, `Taints:` + repeatedStringForTaints + `,`, `}`, }, "") @@ -3900,6 +4301,37 @@ func (this *CELDeviceSelector) String() string { }, "") return s } +func (this *Counter) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Counter{`, + `Value:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Value), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CounterSet) String() string { + if this == nil { + return "nil" + } + keysForCounters := make([]string, 0, len(this.Counters)) + for k := range this.Counters { + keysForCounters = append(keysForCounters, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCounters) + mapStringForCounters := "map[string]Counter{" + for _, k := range keysForCounters { + mapStringForCounters += fmt.Sprintf("%v: %v,", k, this.Counters[k]) + } + mapStringForCounters += "}" + s := strings.Join([]string{`&CounterSet{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Counters:` + mapStringForCounters + `,`, + `}`, + }, "") + return s +} func (this *Device) String() string { if this == nil { return "nil" @@ -4084,6 +4516,27 @@ func (this *DeviceConstraint) String() string { }, "") return s } +func (this *DeviceCounterConsumption) String() string { + if this == nil { + return "nil" + } + keysForCounters := make([]string, 0, len(this.Counters)) + for k := range this.Counters { + keysForCounters = append(keysForCounters, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCounters) + mapStringForCounters := "map[string]Counter{" + for _, k := range keysForCounters { + mapStringForCounters += fmt.Sprintf("%v: %v,", k, this.Counters[k]) + } + mapStringForCounters += "}" + s := strings.Join([]string{`&DeviceCounterConsumption{`, + `SharedCounter:` + fmt.Sprintf("%v", this.SharedCounter) + `,`, + `Counters:` + mapStringForCounters + `,`, + `}`, + }, "") + return s +} func (this *DeviceRequest) String() string { if this == nil { return "nil" @@ -4367,6 +4820,11 @@ func (this *ResourceSliceSpec) String() string { repeatedStringForDevices += strings.Replace(strings.Replace(f.String(), "Device", "Device", 1), `&`, ``, 1) + "," } repeatedStringForDevices += "}" + repeatedStringForSharedCounters := "[]CounterSet{" + for _, f := range this.SharedCounters { + repeatedStringForSharedCounters += strings.Replace(strings.Replace(f.String(), "CounterSet", "CounterSet", 1), `&`, ``, 1) + "," + } + repeatedStringForSharedCounters += "}" s := strings.Join([]string{`&ResourceSliceSpec{`, `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, `Pool:` + strings.Replace(strings.Replace(this.Pool.String(), "ResourcePool", "ResourcePool", 1), `&`, ``, 1) + `,`, @@ -4374,6 +4832,8 @@ func (this *ResourceSliceSpec) String() string { `NodeSelector:` + strings.Replace(fmt.Sprintf("%v", this.NodeSelector), "NodeSelector", "v11.NodeSelector", 1) + `,`, `AllNodes:` + fmt.Sprintf("%v", this.AllNodes) + `,`, `Devices:` + repeatedStringForDevices + `,`, + `PerDeviceNodeSelection:` + valueToStringGenerated(this.PerDeviceNodeSelection) + `,`, + `SharedCounters:` + repeatedStringForSharedCounters + `,`, `}`, }, "") return s @@ -5045,6 +5505,130 @@ func (m *BasicDevice) Unmarshal(dAtA []byte) error { m.Capacity[QualifiedName(mapkey)] = *mapvalue iNdEx = postIndex case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsumesCounter", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConsumesCounter = append(m.ConsumesCounter, DeviceCounterConsumption{}) + if err := m.ConsumesCounter[len(m.ConsumesCounter)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.NodeName = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NodeSelector == nil { + m.NodeSelector = &v11.NodeSelector{} + } + if err := m.NodeSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllNodes", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.AllNodes = &b + case 7: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Taints", wireType) } @@ -5181,6 +5765,300 @@ func (m *CELDeviceSelector) Unmarshal(dAtA []byte) error { } return nil } +func (m *Counter) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Counter: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Counter: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CounterSet) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CounterSet: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CounterSet: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Counters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Counters == nil { + m.Counters = make(map[string]Counter) + } + var mapkey string + mapvalue := &Counter{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &Counter{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Counters[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Device) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -6706,6 +7584,217 @@ func (m *DeviceConstraint) Unmarshal(dAtA []byte) error { } return nil } +func (m *DeviceCounterConsumption) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeviceCounterConsumption: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeviceCounterConsumption: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SharedCounter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SharedCounter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Counters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Counters == nil { + m.Counters = make(map[string]Counter) + } + var mapkey string + mapvalue := &Counter{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &Counter{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Counters[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *DeviceRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -9786,6 +10875,61 @@ func (m *ResourceSliceSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PerDeviceNodeSelection", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.PerDeviceNodeSelection = &b + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SharedCounters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SharedCounters = append(m.SharedCounters, CounterSet{}) + if err := m.SharedCounters[len(m.SharedCounters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/staging/src/k8s.io/api/resource/v1beta1/generated.proto b/staging/src/k8s.io/api/resource/v1beta1/generated.proto index b8c5a263d30..3208388e9a1 100644 --- a/staging/src/k8s.io/api/resource/v1beta1/generated.proto +++ b/staging/src/k8s.io/api/resource/v1beta1/generated.proto @@ -114,6 +114,50 @@ message BasicDevice { // +optional map capacity = 2; + // ConsumesCounter defines a list of references to sharedCounters + // and the set of counters that the device will + // consume from those counter sets. + // + // There can only be a single entry per counterSet. + // + // The maximum number of device counter consumption entries + // is 32. This is the same as the maximum number of shared counters + // allowed in a ResourceSlice. + // + // +optional + // +listType=atomic + // +featureGate=DRAPartitionableDevices + repeated DeviceCounterConsumption consumesCounter = 3; + + // NodeName identifies the node where the device is available. + // + // Must only be set if Spec.PerDeviceNodeSelection is set to true. + // At most one of NodeName, NodeSelector and AllNodes can be set. + // + // +optional + // +oneOf=DeviceNodeSelection + // +featureGate=DRAPartitionableDevices + optional string nodeName = 4; + + // NodeSelector defines the nodes where the device is available. + // + // Must only be set if Spec.PerDeviceNodeSelection is set to true. + // At most one of NodeName, NodeSelector and AllNodes can be set. + // + // +optional + // +oneOf=DeviceNodeSelection + optional .k8s.io.api.core.v1.NodeSelector nodeSelector = 5; + + // AllNodes indicates that all nodes have access to the device. + // + // Must only be set if Spec.PerDeviceNodeSelection is set to true. + // At most one of NodeName, NodeSelector and AllNodes can be set. + // + // +optional + // +oneOf=DeviceNodeSelection + // +featureGate=DRAPartitionableDevices + optional bool allNodes = 6; + // If specified, these are the driver-defined taints. // // The maximum number of taints is 8. @@ -124,7 +168,7 @@ message BasicDevice { // +optional // +listType=atomic // +featureGate=DRADeviceTaints - repeated DeviceTaint taints = 3; + repeated DeviceTaint taints = 7; } // CELDeviceSelector contains a CEL expression for selecting a device. @@ -184,6 +228,38 @@ message CELDeviceSelector { optional string expression = 1; } +// Counter describes a quantity associated with a device. +message Counter { + // Value defines how much of a certain device counter is available. + // + // +required + optional .k8s.io.apimachinery.pkg.api.resource.Quantity value = 1; +} + +// CounterSet defines a named set of counters +// that are available to be used by devices defined in the +// ResourceSlice. +// +// 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. +message CounterSet { + // Name defines the name of the counter set. + // It must be a DNS label. + // + // +required + optional string name = 1; + + // Counters defines the set of counters for this CounterSet + // The name of each counter must be unique in that set and must be a DNS label. + // + // The maximum number of counters is 32. + // + // +required + map counters = 2; +} + // Device represents one individual hardware instance that can be selected based // on its attributes. Besides the name, exactly one field must be set. message Device { @@ -424,6 +500,24 @@ message DeviceConstraint { optional string matchAttribute = 2; } +// DeviceCounterConsumption defines a set of counters that +// a device will consume from a CounterSet. +message DeviceCounterConsumption { + // SharedCounter defines the shared counter from which the + // counters defined will be consumed. + // + // +required + optional string sharedCounter = 1; + + // Counters defines the Counter that will be consumed by + // the device. + // + // The maximum number of Counters is 32. + // + // +required + map counters = 2; +} + // 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. @@ -1132,7 +1226,7 @@ message ResourceSliceSpec { // new nodes of the same type as some old node might also make new // resources available. // - // Exactly one of NodeName, NodeSelector and AllNodes must be set. + // Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. // This field is immutable. // // +optional @@ -1144,7 +1238,7 @@ message ResourceSliceSpec { // // Must use exactly one term. // - // Exactly one of NodeName, NodeSelector and AllNodes must be set. + // Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. // // +optional // +oneOf=NodeSelection @@ -1152,7 +1246,7 @@ message ResourceSliceSpec { // AllNodes indicates that all nodes have access to the resources in the pool. // - // Exactly one of NodeName, NodeSelector and AllNodes must be set. + // Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. // // +optional // +oneOf=NodeSelection @@ -1165,5 +1259,29 @@ message ResourceSliceSpec { // +optional // +listType=atomic repeated Device devices = 6; + + // 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. + // + // Exactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. + // + // +optional + // +oneOf=NodeSelection + // +featureGate=DRAPartitionableDevices + optional bool perDeviceNodeSelection = 7; + + // SharedCounters defines a list of counter sets, each of which + // has a name and a list of counters available. + // + // The names of the SharedCounters must be unique in the ResourceSlice. + // + // The maximum number of SharedCounters is 32. + // + // +optional + // +listType=atomic + // +featureGate=DRAPartitionableDevices + repeated CounterSet sharedCounters = 8; } diff --git a/staging/src/k8s.io/api/resource/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/resource/v1beta1/types_swagger_doc_generated.go index 4c9a80985f3..782b0e94bbb 100644 --- a/staging/src/k8s.io/api/resource/v1beta1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/resource/v1beta1/types_swagger_doc_generated.go @@ -52,10 +52,14 @@ func (AllocationResult) SwaggerDoc() map[string]string { } var map_BasicDevice = map[string]string{ - "": "BasicDevice defines one device instance.", - "attributes": "Attributes defines the set of attributes for this device. The name of each attribute must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", - "capacity": "Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", - "taints": "If specified, these are the driver-defined taints.\n\nThe maximum number of taints is 8.\n\nThis is an alpha field and requires enabling the DRADeviceTaints feature gate.", + "": "BasicDevice defines one device instance.", + "attributes": "Attributes defines the set of attributes for this device. The name of each attribute must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", + "capacity": "Capacity defines the set of capacities for this device. The name of each capacity must be unique in that set.\n\nThe maximum number of attributes and capacities combined is 32.", + "consumesCounter": "ConsumesCounter defines a list of references to sharedCounters and the set of counters that the device will consume from those counter sets.\n\nThere can only be a single entry per counterSet.\n\nThe maximum number of device counter consumption entries is 32. This is the same as the maximum number of shared counters allowed in a ResourceSlice.", + "nodeName": "NodeName identifies the node where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "nodeSelector": "NodeSelector defines the nodes where the device is available.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "allNodes": "AllNodes indicates that all nodes have access to the device.\n\nMust only be set if Spec.PerDeviceNodeSelection is set to true. At most one of NodeName, NodeSelector and AllNodes can be set.", + "taints": "If specified, these are the driver-defined taints.\n\nThe maximum number of taints is 8.\n\nThis is an alpha field and requires enabling the DRADeviceTaints feature gate.", } func (BasicDevice) SwaggerDoc() map[string]string { @@ -71,6 +75,25 @@ func (CELDeviceSelector) SwaggerDoc() map[string]string { return map_CELDeviceSelector } +var map_Counter = map[string]string{ + "": "Counter describes a quantity associated with a device.", + "value": "Value defines how much of a certain device counter is available.", +} + +func (Counter) SwaggerDoc() map[string]string { + return map_Counter +} + +var map_CounterSet = map[string]string{ + "": "CounterSet defines a named set of counters that are available to be used by devices defined in the ResourceSlice.\n\nThe 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.", + "name": "Name defines the name of the counter set. It must be a DNS label.", + "counters": "Counters defines the set of counters for this CounterSet The name of each counter must be unique in that set and must be a DNS label.\n\nThe maximum number of counters is 32.", +} + +func (CounterSet) SwaggerDoc() map[string]string { + return map_CounterSet +} + var map_Device = map[string]string{ "": "Device represents one individual hardware instance that can be selected based on its attributes. Besides the name, exactly one field must be set.", "name": "Name is unique identifier among all devices managed by the driver in the pool. It must be a DNS label.", @@ -199,6 +222,16 @@ func (DeviceConstraint) SwaggerDoc() map[string]string { return map_DeviceConstraint } +var map_DeviceCounterConsumption = map[string]string{ + "": "DeviceCounterConsumption defines a set of counters that a device will consume from a CounterSet.", + "sharedCounter": "SharedCounter defines the shared counter from which the counters defined will be consumed.", + "counters": "Counters defines the Counter that will be consumed by the device.\n\nThe maximum number of Counters is 32.", +} + +func (DeviceCounterConsumption) SwaggerDoc() map[string]string { + return map_DeviceCounterConsumption +} + var map_DeviceRequest = map[string]string{ "": "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.", "name": "Name can be used to reference this request in a pod.spec.containers[].resources.claims entry and in a constraint of the claim.\n\nMust be a DNS label and unique among all DeviceRequests in a ResourceClaim.", @@ -413,13 +446,15 @@ func (ResourceSliceList) SwaggerDoc() map[string]string { } var map_ResourceSliceSpec = map[string]string{ - "": "ResourceSliceSpec contains the information published by the driver in one ResourceSlice.", - "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.\n\nMust be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver. This field is immutable.", - "pool": "Pool describes the pool that this ResourceSlice belongs to.", - "nodeName": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set. This field is immutable.", - "nodeSelector": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", - "allNodes": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector and AllNodes must be set.", - "devices": "Devices lists some or all of the devices in this pool.\n\nMust not have more than 128 entries.", + "": "ResourceSliceSpec contains the information published by the driver in one ResourceSlice.", + "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.\n\nMust be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver. This field is immutable.", + "pool": "Pool describes the pool that this ResourceSlice belongs to.", + "nodeName": "NodeName identifies the node which provides the resources in this pool. A field selector can be used to list only ResourceSlice objects belonging to a certain node.\n\nThis 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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set. This field is immutable.", + "nodeSelector": "NodeSelector defines which nodes have access to the resources in the pool, when that pool is not limited to a single node.\n\nMust use exactly one term.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + "allNodes": "AllNodes indicates that all nodes have access to the resources in the pool.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + "devices": "Devices lists some or all of the devices in this pool.\n\nMust not have more than 128 entries.", + "perDeviceNodeSelection": "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.\n\nExactly one of NodeName, NodeSelector, AllNodes, and PerDeviceNodeSelection must be set.", + "sharedCounters": "SharedCounters defines a list of counter sets, each of which has a name and a list of counters available.\n\nThe names of the SharedCounters must be unique in the ResourceSlice.\n\nThe maximum number of SharedCounters is 32.", } func (ResourceSliceSpec) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/resource/v1beta1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/resource/v1beta1/zz_generated.deepcopy.go index a4d7be37bb9..23cfaa8b2df 100644 --- a/staging/src/k8s.io/api/resource/v1beta1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/resource/v1beta1/zz_generated.deepcopy.go @@ -99,6 +99,28 @@ func (in *BasicDevice) DeepCopyInto(out *BasicDevice) { (*out)[key] = *val.DeepCopy() } } + if in.ConsumesCounter != nil { + in, out := &in.ConsumesCounter, &out.ConsumesCounter + *out = make([]DeviceCounterConsumption, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.NodeName != nil { + in, out := &in.NodeName, &out.NodeName + *out = new(string) + **out = **in + } + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = new(corev1.NodeSelector) + (*in).DeepCopyInto(*out) + } + if in.AllNodes != nil { + in, out := &in.AllNodes, &out.AllNodes + *out = new(bool) + **out = **in + } if in.Taints != nil { in, out := &in.Taints, &out.Taints *out = make([]DeviceTaint, len(*in)) @@ -135,6 +157,46 @@ func (in *CELDeviceSelector) DeepCopy() *CELDeviceSelector { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Counter) DeepCopyInto(out *Counter) { + *out = *in + out.Value = in.Value.DeepCopy() + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Counter. +func (in *Counter) DeepCopy() *Counter { + if in == nil { + return nil + } + out := new(Counter) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CounterSet) DeepCopyInto(out *CounterSet) { + *out = *in + if in.Counters != nil { + in, out := &in.Counters, &out.Counters + *out = make(map[string]Counter, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CounterSet. +func (in *CounterSet) DeepCopy() *CounterSet { + if in == nil { + return nil + } + out := new(CounterSet) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Device) DeepCopyInto(out *Device) { *out = *in @@ -474,6 +536,29 @@ func (in *DeviceConstraint) DeepCopy() *DeviceConstraint { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceCounterConsumption) DeepCopyInto(out *DeviceCounterConsumption) { + *out = *in + if in.Counters != nil { + in, out := &in.Counters, &out.Counters + *out = make(map[string]Counter, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceCounterConsumption. +func (in *DeviceCounterConsumption) DeepCopy() *DeviceCounterConsumption { + if in == nil { + return nil + } + out := new(DeviceCounterConsumption) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeviceRequest) DeepCopyInto(out *DeviceRequest) { *out = *in @@ -971,6 +1056,18 @@ func (in *ResourceSliceSpec) DeepCopyInto(out *ResourceSliceSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.PerDeviceNodeSelection != nil { + in, out := &in.PerDeviceNodeSelection, &out.PerDeviceNodeSelection + *out = new(bool) + **out = **in + } + if in.SharedCounters != nil { + in, out := &in.SharedCounters, &out.SharedCounters + *out = make([]CounterSet, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.json b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.json index d6307670cc5..17c14e5efa2 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.json +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.json @@ -91,6 +91,42 @@ "capacity": { "capacityKey": "0" }, + "consumesCounter": [ + { + "sharedCounter": "sharedCounterValue", + "counters": { + "countersKey": { + "value": "0" + } + } + } + ], + "nodeName": "nodeNameValue", + "nodeSelector": { + "nodeSelectorTerms": [ + { + "matchExpressions": [ + { + "key": "keyValue", + "operator": "operatorValue", + "values": [ + "valuesValue" + ] + } + ], + "matchFields": [ + { + "key": "keyValue", + "operator": "operatorValue", + "values": [ + "valuesValue" + ] + } + ] + } + ] + }, + "allNodes": true, "taints": [ { "key": "keyValue", @@ -101,6 +137,17 @@ ] } } + ], + "perDeviceNodeSelection": true, + "sharedCounters": [ + { + "name": "nameValue", + "counters": { + "countersKey": { + "value": "0" + } + } + } ] } } \ No newline at end of file diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.pb b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.pb index 040fb58c3c1..8f87d9c7f17 100644 Binary files a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.pb and b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.pb differ diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.yaml b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.yaml index 559bd6c1890..4d3f512a199 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceSlice.yaml @@ -36,6 +36,7 @@ spec: allNodes: true devices: - basic: + allNodes: true attributes: attributesKey: bool: true @@ -44,6 +45,24 @@ spec: version: versionValue capacity: capacityKey: "0" + consumesCounter: + - counters: + countersKey: + value: "0" + sharedCounter: sharedCounterValue + nodeName: nodeNameValue + nodeSelector: + nodeSelectorTerms: + - matchExpressions: + - key: keyValue + operator: operatorValue + values: + - valuesValue + matchFields: + - key: keyValue + operator: operatorValue + values: + - valuesValue taints: - effect: effectValue key: keyValue @@ -64,7 +83,13 @@ spec: operator: operatorValue values: - valuesValue + perDeviceNodeSelection: true pool: generation: 2 name: nameValue resourceSliceCount: 3 + sharedCounters: + - counters: + countersKey: + value: "0" + name: nameValue diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.json b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.json index 7e557c07e32..df28b59e786 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.json +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.json @@ -93,6 +93,42 @@ "value": "0" } }, + "consumesCounter": [ + { + "sharedCounter": "sharedCounterValue", + "counters": { + "countersKey": { + "value": "0" + } + } + } + ], + "nodeName": "nodeNameValue", + "nodeSelector": { + "nodeSelectorTerms": [ + { + "matchExpressions": [ + { + "key": "keyValue", + "operator": "operatorValue", + "values": [ + "valuesValue" + ] + } + ], + "matchFields": [ + { + "key": "keyValue", + "operator": "operatorValue", + "values": [ + "valuesValue" + ] + } + ] + } + ] + }, + "allNodes": true, "taints": [ { "key": "keyValue", @@ -103,6 +139,17 @@ ] } } + ], + "perDeviceNodeSelection": true, + "sharedCounters": [ + { + "name": "nameValue", + "counters": { + "countersKey": { + "value": "0" + } + } + } ] } } \ No newline at end of file diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.pb b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.pb index 419e82016d1..f23cac21b6f 100644 Binary files a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.pb and b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.pb differ diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.yaml b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.yaml index 38417c81f0b..c2662563447 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceSlice.yaml @@ -36,6 +36,7 @@ spec: allNodes: true devices: - basic: + allNodes: true attributes: attributesKey: bool: true @@ -45,6 +46,24 @@ spec: capacity: capacityKey: value: "0" + consumesCounter: + - counters: + countersKey: + value: "0" + sharedCounter: sharedCounterValue + nodeName: nodeNameValue + nodeSelector: + nodeSelectorTerms: + - matchExpressions: + - key: keyValue + operator: operatorValue + values: + - valuesValue + matchFields: + - key: keyValue + operator: operatorValue + values: + - valuesValue taints: - effect: effectValue key: keyValue @@ -65,7 +84,13 @@ spec: operator: operatorValue values: - valuesValue + perDeviceNodeSelection: true pool: generation: 2 name: nameValue resourceSliceCount: 3 + sharedCounters: + - counters: + countersKey: + value: "0" + name: nameValue diff --git a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go index 58038c29b0f..769de4016f9 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go @@ -12606,6 +12606,9 @@ var schemaYAML = typed.YAMLObject(`types: - name: io.k8s.api.resource.v1alpha3.BasicDevice map: fields: + - name: allNodes + type: + scalar: boolean - name: attributes type: map: @@ -12616,6 +12619,18 @@ var schemaYAML = typed.YAMLObject(`types: map: elementType: namedType: io.k8s.apimachinery.pkg.api.resource.Quantity + - name: consumesCounter + type: + list: + elementType: + namedType: io.k8s.api.resource.v1alpha3.DeviceCounterConsumption + elementRelationship: atomic + - name: nodeName + type: + scalar: string + - name: nodeSelector + type: + namedType: io.k8s.api.core.v1.NodeSelector - name: taints type: list: @@ -12629,6 +12644,24 @@ var schemaYAML = typed.YAMLObject(`types: type: scalar: string default: "" +- name: io.k8s.api.resource.v1alpha3.Counter + map: + fields: + - name: value + type: + namedType: io.k8s.apimachinery.pkg.api.resource.Quantity +- name: io.k8s.api.resource.v1alpha3.CounterSet + map: + fields: + - name: counters + type: + map: + elementType: + namedType: io.k8s.api.resource.v1alpha3.Counter + - name: name + type: + scalar: string + default: "" - name: io.k8s.api.resource.v1alpha3.Device map: fields: @@ -12768,6 +12801,18 @@ var schemaYAML = typed.YAMLObject(`types: elementType: scalar: string elementRelationship: atomic +- name: io.k8s.api.resource.v1alpha3.DeviceCounterConsumption + map: + fields: + - name: counters + type: + map: + elementType: + namedType: io.k8s.api.resource.v1alpha3.Counter + - name: sharedCounter + type: + scalar: string + default: "" - name: io.k8s.api.resource.v1alpha3.DeviceRequest map: fields: @@ -13130,10 +13175,19 @@ var schemaYAML = typed.YAMLObject(`types: - name: nodeSelector type: namedType: io.k8s.api.core.v1.NodeSelector + - name: perDeviceNodeSelection + type: + scalar: boolean - name: pool type: namedType: io.k8s.api.resource.v1alpha3.ResourcePool default: {} + - name: sharedCounters + type: + list: + elementType: + namedType: io.k8s.api.resource.v1alpha3.CounterSet + elementRelationship: atomic - name: io.k8s.api.resource.v1beta1.AllocatedDeviceStatus map: fields: @@ -13176,6 +13230,9 @@ var schemaYAML = typed.YAMLObject(`types: - name: io.k8s.api.resource.v1beta1.BasicDevice map: fields: + - name: allNodes + type: + scalar: boolean - name: attributes type: map: @@ -13186,6 +13243,18 @@ var schemaYAML = typed.YAMLObject(`types: map: elementType: namedType: io.k8s.api.resource.v1beta1.DeviceCapacity + - name: consumesCounter + type: + list: + elementType: + namedType: io.k8s.api.resource.v1beta1.DeviceCounterConsumption + elementRelationship: atomic + - name: nodeName + type: + scalar: string + - name: nodeSelector + type: + namedType: io.k8s.api.core.v1.NodeSelector - name: taints type: list: @@ -13199,6 +13268,24 @@ var schemaYAML = typed.YAMLObject(`types: type: scalar: string default: "" +- name: io.k8s.api.resource.v1beta1.Counter + map: + fields: + - name: value + type: + namedType: io.k8s.apimachinery.pkg.api.resource.Quantity +- name: io.k8s.api.resource.v1beta1.CounterSet + map: + fields: + - name: counters + type: + map: + elementType: + namedType: io.k8s.api.resource.v1beta1.Counter + - name: name + type: + scalar: string + default: "" - name: io.k8s.api.resource.v1beta1.Device map: fields: @@ -13344,6 +13431,18 @@ var schemaYAML = typed.YAMLObject(`types: elementType: scalar: string elementRelationship: atomic +- name: io.k8s.api.resource.v1beta1.DeviceCounterConsumption + map: + fields: + - name: counters + type: + map: + elementType: + namedType: io.k8s.api.resource.v1beta1.Counter + - name: sharedCounter + type: + scalar: string + default: "" - name: io.k8s.api.resource.v1beta1.DeviceRequest map: fields: @@ -13658,10 +13757,19 @@ var schemaYAML = typed.YAMLObject(`types: - name: nodeSelector type: namedType: io.k8s.api.core.v1.NodeSelector + - name: perDeviceNodeSelection + type: + scalar: boolean - name: pool type: namedType: io.k8s.api.resource.v1beta1.ResourcePool default: {} + - name: sharedCounters + type: + list: + elementType: + namedType: io.k8s.api.resource.v1beta1.CounterSet + elementRelationship: atomic - name: io.k8s.api.scheduling.v1.PriorityClass map: fields: diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/basicdevice.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/basicdevice.go index 3fa06e11fdf..4777aaca3dc 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/basicdevice.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/basicdevice.go @@ -21,14 +21,19 @@ package v1alpha3 import ( resourcev1alpha3 "k8s.io/api/resource/v1alpha3" resource "k8s.io/apimachinery/pkg/api/resource" + v1 "k8s.io/client-go/applyconfigurations/core/v1" ) // BasicDeviceApplyConfiguration represents a declarative configuration of the BasicDevice type for use // with apply. type BasicDeviceApplyConfiguration struct { - Attributes map[resourcev1alpha3.QualifiedName]DeviceAttributeApplyConfiguration `json:"attributes,omitempty"` - Capacity map[resourcev1alpha3.QualifiedName]resource.Quantity `json:"capacity,omitempty"` - Taints []DeviceTaintApplyConfiguration `json:"taints,omitempty"` + Attributes map[resourcev1alpha3.QualifiedName]DeviceAttributeApplyConfiguration `json:"attributes,omitempty"` + Capacity map[resourcev1alpha3.QualifiedName]resource.Quantity `json:"capacity,omitempty"` + ConsumesCounter []DeviceCounterConsumptionApplyConfiguration `json:"consumesCounter,omitempty"` + NodeName *string `json:"nodeName,omitempty"` + NodeSelector *v1.NodeSelectorApplyConfiguration `json:"nodeSelector,omitempty"` + AllNodes *bool `json:"allNodes,omitempty"` + Taints []DeviceTaintApplyConfiguration `json:"taints,omitempty"` } // BasicDeviceApplyConfiguration constructs a declarative configuration of the BasicDevice type for use with @@ -65,6 +70,43 @@ func (b *BasicDeviceApplyConfiguration) WithCapacity(entries map[resourcev1alpha return b } +// WithConsumesCounter adds the given value to the ConsumesCounter field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ConsumesCounter field. +func (b *BasicDeviceApplyConfiguration) WithConsumesCounter(values ...*DeviceCounterConsumptionApplyConfiguration) *BasicDeviceApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConsumesCounter") + } + b.ConsumesCounter = append(b.ConsumesCounter, *values[i]) + } + return b +} + +// WithNodeName sets the NodeName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NodeName field is set to the value of the last call. +func (b *BasicDeviceApplyConfiguration) WithNodeName(value string) *BasicDeviceApplyConfiguration { + b.NodeName = &value + return b +} + +// WithNodeSelector sets the NodeSelector field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NodeSelector field is set to the value of the last call. +func (b *BasicDeviceApplyConfiguration) WithNodeSelector(value *v1.NodeSelectorApplyConfiguration) *BasicDeviceApplyConfiguration { + b.NodeSelector = value + return b +} + +// WithAllNodes sets the AllNodes field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the AllNodes field is set to the value of the last call. +func (b *BasicDeviceApplyConfiguration) WithAllNodes(value bool) *BasicDeviceApplyConfiguration { + b.AllNodes = &value + return b +} + // WithTaints adds the given value to the Taints field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Taints field. diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/counter.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/counter.go new file mode 100644 index 00000000000..10a752ee05b --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/counter.go @@ -0,0 +1,43 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha3 + +import ( + resource "k8s.io/apimachinery/pkg/api/resource" +) + +// CounterApplyConfiguration represents a declarative configuration of the Counter type for use +// with apply. +type CounterApplyConfiguration struct { + Value *resource.Quantity `json:"value,omitempty"` +} + +// CounterApplyConfiguration constructs a declarative configuration of the Counter type for use with +// apply. +func Counter() *CounterApplyConfiguration { + return &CounterApplyConfiguration{} +} + +// WithValue sets the Value field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Value field is set to the value of the last call. +func (b *CounterApplyConfiguration) WithValue(value resource.Quantity) *CounterApplyConfiguration { + b.Value = &value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/counterset.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/counterset.go new file mode 100644 index 00000000000..aa917c6ff80 --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/counterset.go @@ -0,0 +1,54 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha3 + +// CounterSetApplyConfiguration represents a declarative configuration of the CounterSet type for use +// with apply. +type CounterSetApplyConfiguration struct { + Name *string `json:"name,omitempty"` + Counters map[string]CounterApplyConfiguration `json:"counters,omitempty"` +} + +// CounterSetApplyConfiguration constructs a declarative configuration of the CounterSet type for use with +// apply. +func CounterSet() *CounterSetApplyConfiguration { + return &CounterSetApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *CounterSetApplyConfiguration) WithName(value string) *CounterSetApplyConfiguration { + b.Name = &value + return b +} + +// WithCounters puts the entries into the Counters field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Counters field, +// overwriting an existing map entries in Counters field with the same key. +func (b *CounterSetApplyConfiguration) WithCounters(entries map[string]CounterApplyConfiguration) *CounterSetApplyConfiguration { + if b.Counters == nil && len(entries) > 0 { + b.Counters = make(map[string]CounterApplyConfiguration, len(entries)) + } + for k, v := range entries { + b.Counters[k] = v + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/devicecounterconsumption.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/devicecounterconsumption.go new file mode 100644 index 00000000000..31efe635232 --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/devicecounterconsumption.go @@ -0,0 +1,54 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha3 + +// DeviceCounterConsumptionApplyConfiguration represents a declarative configuration of the DeviceCounterConsumption type for use +// with apply. +type DeviceCounterConsumptionApplyConfiguration struct { + SharedCounter *string `json:"sharedCounter,omitempty"` + Counters map[string]CounterApplyConfiguration `json:"counters,omitempty"` +} + +// DeviceCounterConsumptionApplyConfiguration constructs a declarative configuration of the DeviceCounterConsumption type for use with +// apply. +func DeviceCounterConsumption() *DeviceCounterConsumptionApplyConfiguration { + return &DeviceCounterConsumptionApplyConfiguration{} +} + +// WithSharedCounter sets the SharedCounter field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SharedCounter field is set to the value of the last call. +func (b *DeviceCounterConsumptionApplyConfiguration) WithSharedCounter(value string) *DeviceCounterConsumptionApplyConfiguration { + b.SharedCounter = &value + return b +} + +// WithCounters puts the entries into the Counters field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Counters field, +// overwriting an existing map entries in Counters field with the same key. +func (b *DeviceCounterConsumptionApplyConfiguration) WithCounters(entries map[string]CounterApplyConfiguration) *DeviceCounterConsumptionApplyConfiguration { + if b.Counters == nil && len(entries) > 0 { + b.Counters = make(map[string]CounterApplyConfiguration, len(entries)) + } + for k, v := range entries { + b.Counters[k] = v + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/resourceslicespec.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/resourceslicespec.go index 2ded7590739..ec490760f3c 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/resourceslicespec.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/resourceslicespec.go @@ -25,12 +25,14 @@ import ( // ResourceSliceSpecApplyConfiguration represents a declarative configuration of the ResourceSliceSpec type for use // with apply. type ResourceSliceSpecApplyConfiguration struct { - Driver *string `json:"driver,omitempty"` - Pool *ResourcePoolApplyConfiguration `json:"pool,omitempty"` - NodeName *string `json:"nodeName,omitempty"` - NodeSelector *v1.NodeSelectorApplyConfiguration `json:"nodeSelector,omitempty"` - AllNodes *bool `json:"allNodes,omitempty"` - Devices []DeviceApplyConfiguration `json:"devices,omitempty"` + Driver *string `json:"driver,omitempty"` + Pool *ResourcePoolApplyConfiguration `json:"pool,omitempty"` + NodeName *string `json:"nodeName,omitempty"` + NodeSelector *v1.NodeSelectorApplyConfiguration `json:"nodeSelector,omitempty"` + AllNodes *bool `json:"allNodes,omitempty"` + Devices []DeviceApplyConfiguration `json:"devices,omitempty"` + PerDeviceNodeSelection *bool `json:"perDeviceNodeSelection,omitempty"` + SharedCounters []CounterSetApplyConfiguration `json:"sharedCounters,omitempty"` } // ResourceSliceSpecApplyConfiguration constructs a declarative configuration of the ResourceSliceSpec type for use with @@ -91,3 +93,24 @@ func (b *ResourceSliceSpecApplyConfiguration) WithDevices(values ...*DeviceApply } return b } + +// WithPerDeviceNodeSelection sets the PerDeviceNodeSelection field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PerDeviceNodeSelection field is set to the value of the last call. +func (b *ResourceSliceSpecApplyConfiguration) WithPerDeviceNodeSelection(value bool) *ResourceSliceSpecApplyConfiguration { + b.PerDeviceNodeSelection = &value + return b +} + +// WithSharedCounters adds the given value to the SharedCounters field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the SharedCounters field. +func (b *ResourceSliceSpecApplyConfiguration) WithSharedCounters(values ...*CounterSetApplyConfiguration) *ResourceSliceSpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithSharedCounters") + } + b.SharedCounters = append(b.SharedCounters, *values[i]) + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/basicdevice.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/basicdevice.go index 25f3532bafd..1a276f09204 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/basicdevice.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/basicdevice.go @@ -20,14 +20,19 @@ package v1beta1 import ( resourcev1beta1 "k8s.io/api/resource/v1beta1" + v1 "k8s.io/client-go/applyconfigurations/core/v1" ) // BasicDeviceApplyConfiguration represents a declarative configuration of the BasicDevice type for use // with apply. type BasicDeviceApplyConfiguration struct { - Attributes map[resourcev1beta1.QualifiedName]DeviceAttributeApplyConfiguration `json:"attributes,omitempty"` - Capacity map[resourcev1beta1.QualifiedName]DeviceCapacityApplyConfiguration `json:"capacity,omitempty"` - Taints []DeviceTaintApplyConfiguration `json:"taints,omitempty"` + Attributes map[resourcev1beta1.QualifiedName]DeviceAttributeApplyConfiguration `json:"attributes,omitempty"` + Capacity map[resourcev1beta1.QualifiedName]DeviceCapacityApplyConfiguration `json:"capacity,omitempty"` + ConsumesCounter []DeviceCounterConsumptionApplyConfiguration `json:"consumesCounter,omitempty"` + NodeName *string `json:"nodeName,omitempty"` + NodeSelector *v1.NodeSelectorApplyConfiguration `json:"nodeSelector,omitempty"` + AllNodes *bool `json:"allNodes,omitempty"` + Taints []DeviceTaintApplyConfiguration `json:"taints,omitempty"` } // BasicDeviceApplyConfiguration constructs a declarative configuration of the BasicDevice type for use with @@ -64,6 +69,43 @@ func (b *BasicDeviceApplyConfiguration) WithCapacity(entries map[resourcev1beta1 return b } +// WithConsumesCounter adds the given value to the ConsumesCounter field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ConsumesCounter field. +func (b *BasicDeviceApplyConfiguration) WithConsumesCounter(values ...*DeviceCounterConsumptionApplyConfiguration) *BasicDeviceApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConsumesCounter") + } + b.ConsumesCounter = append(b.ConsumesCounter, *values[i]) + } + return b +} + +// WithNodeName sets the NodeName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NodeName field is set to the value of the last call. +func (b *BasicDeviceApplyConfiguration) WithNodeName(value string) *BasicDeviceApplyConfiguration { + b.NodeName = &value + return b +} + +// WithNodeSelector sets the NodeSelector field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NodeSelector field is set to the value of the last call. +func (b *BasicDeviceApplyConfiguration) WithNodeSelector(value *v1.NodeSelectorApplyConfiguration) *BasicDeviceApplyConfiguration { + b.NodeSelector = value + return b +} + +// WithAllNodes sets the AllNodes field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the AllNodes field is set to the value of the last call. +func (b *BasicDeviceApplyConfiguration) WithAllNodes(value bool) *BasicDeviceApplyConfiguration { + b.AllNodes = &value + return b +} + // WithTaints adds the given value to the Taints field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Taints field. diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/counter.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/counter.go new file mode 100644 index 00000000000..b33ed99a592 --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/counter.go @@ -0,0 +1,43 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + resource "k8s.io/apimachinery/pkg/api/resource" +) + +// CounterApplyConfiguration represents a declarative configuration of the Counter type for use +// with apply. +type CounterApplyConfiguration struct { + Value *resource.Quantity `json:"value,omitempty"` +} + +// CounterApplyConfiguration constructs a declarative configuration of the Counter type for use with +// apply. +func Counter() *CounterApplyConfiguration { + return &CounterApplyConfiguration{} +} + +// WithValue sets the Value field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Value field is set to the value of the last call. +func (b *CounterApplyConfiguration) WithValue(value resource.Quantity) *CounterApplyConfiguration { + b.Value = &value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/counterset.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/counterset.go new file mode 100644 index 00000000000..7592fa4d5bf --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/counterset.go @@ -0,0 +1,54 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +// CounterSetApplyConfiguration represents a declarative configuration of the CounterSet type for use +// with apply. +type CounterSetApplyConfiguration struct { + Name *string `json:"name,omitempty"` + Counters map[string]CounterApplyConfiguration `json:"counters,omitempty"` +} + +// CounterSetApplyConfiguration constructs a declarative configuration of the CounterSet type for use with +// apply. +func CounterSet() *CounterSetApplyConfiguration { + return &CounterSetApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *CounterSetApplyConfiguration) WithName(value string) *CounterSetApplyConfiguration { + b.Name = &value + return b +} + +// WithCounters puts the entries into the Counters field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Counters field, +// overwriting an existing map entries in Counters field with the same key. +func (b *CounterSetApplyConfiguration) WithCounters(entries map[string]CounterApplyConfiguration) *CounterSetApplyConfiguration { + if b.Counters == nil && len(entries) > 0 { + b.Counters = make(map[string]CounterApplyConfiguration, len(entries)) + } + for k, v := range entries { + b.Counters[k] = v + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/devicecounterconsumption.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/devicecounterconsumption.go new file mode 100644 index 00000000000..f90a54d30b1 --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/devicecounterconsumption.go @@ -0,0 +1,54 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +// DeviceCounterConsumptionApplyConfiguration represents a declarative configuration of the DeviceCounterConsumption type for use +// with apply. +type DeviceCounterConsumptionApplyConfiguration struct { + SharedCounter *string `json:"sharedCounter,omitempty"` + Counters map[string]CounterApplyConfiguration `json:"counters,omitempty"` +} + +// DeviceCounterConsumptionApplyConfiguration constructs a declarative configuration of the DeviceCounterConsumption type for use with +// apply. +func DeviceCounterConsumption() *DeviceCounterConsumptionApplyConfiguration { + return &DeviceCounterConsumptionApplyConfiguration{} +} + +// WithSharedCounter sets the SharedCounter field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SharedCounter field is set to the value of the last call. +func (b *DeviceCounterConsumptionApplyConfiguration) WithSharedCounter(value string) *DeviceCounterConsumptionApplyConfiguration { + b.SharedCounter = &value + return b +} + +// WithCounters puts the entries into the Counters field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Counters field, +// overwriting an existing map entries in Counters field with the same key. +func (b *DeviceCounterConsumptionApplyConfiguration) WithCounters(entries map[string]CounterApplyConfiguration) *DeviceCounterConsumptionApplyConfiguration { + if b.Counters == nil && len(entries) > 0 { + b.Counters = make(map[string]CounterApplyConfiguration, len(entries)) + } + for k, v := range entries { + b.Counters[k] = v + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/resourceslicespec.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/resourceslicespec.go index 75bbb53c875..6eaae7da85e 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/resourceslicespec.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/resourceslicespec.go @@ -25,12 +25,14 @@ import ( // ResourceSliceSpecApplyConfiguration represents a declarative configuration of the ResourceSliceSpec type for use // with apply. type ResourceSliceSpecApplyConfiguration struct { - Driver *string `json:"driver,omitempty"` - Pool *ResourcePoolApplyConfiguration `json:"pool,omitempty"` - NodeName *string `json:"nodeName,omitempty"` - NodeSelector *v1.NodeSelectorApplyConfiguration `json:"nodeSelector,omitempty"` - AllNodes *bool `json:"allNodes,omitempty"` - Devices []DeviceApplyConfiguration `json:"devices,omitempty"` + Driver *string `json:"driver,omitempty"` + Pool *ResourcePoolApplyConfiguration `json:"pool,omitempty"` + NodeName *string `json:"nodeName,omitempty"` + NodeSelector *v1.NodeSelectorApplyConfiguration `json:"nodeSelector,omitempty"` + AllNodes *bool `json:"allNodes,omitempty"` + Devices []DeviceApplyConfiguration `json:"devices,omitempty"` + PerDeviceNodeSelection *bool `json:"perDeviceNodeSelection,omitempty"` + SharedCounters []CounterSetApplyConfiguration `json:"sharedCounters,omitempty"` } // ResourceSliceSpecApplyConfiguration constructs a declarative configuration of the ResourceSliceSpec type for use with @@ -91,3 +93,24 @@ func (b *ResourceSliceSpecApplyConfiguration) WithDevices(values ...*DeviceApply } return b } + +// WithPerDeviceNodeSelection sets the PerDeviceNodeSelection field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PerDeviceNodeSelection field is set to the value of the last call. +func (b *ResourceSliceSpecApplyConfiguration) WithPerDeviceNodeSelection(value bool) *ResourceSliceSpecApplyConfiguration { + b.PerDeviceNodeSelection = &value + return b +} + +// WithSharedCounters adds the given value to the SharedCounters field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the SharedCounters field. +func (b *ResourceSliceSpecApplyConfiguration) WithSharedCounters(values ...*CounterSetApplyConfiguration) *ResourceSliceSpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithSharedCounters") + } + b.SharedCounters = append(b.SharedCounters, *values[i]) + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/utils.go b/staging/src/k8s.io/client-go/applyconfigurations/utils.go index 83b3ea3c19a..6543c70720e 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/utils.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/utils.go @@ -1616,6 +1616,10 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &resourcev1alpha3.BasicDeviceApplyConfiguration{} case v1alpha3.SchemeGroupVersion.WithKind("CELDeviceSelector"): return &resourcev1alpha3.CELDeviceSelectorApplyConfiguration{} + case v1alpha3.SchemeGroupVersion.WithKind("Counter"): + return &resourcev1alpha3.CounterApplyConfiguration{} + case v1alpha3.SchemeGroupVersion.WithKind("CounterSet"): + return &resourcev1alpha3.CounterSetApplyConfiguration{} case v1alpha3.SchemeGroupVersion.WithKind("Device"): return &resourcev1alpha3.DeviceApplyConfiguration{} case v1alpha3.SchemeGroupVersion.WithKind("DeviceAllocationConfiguration"): @@ -1638,6 +1642,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &resourcev1alpha3.DeviceConfigurationApplyConfiguration{} case v1alpha3.SchemeGroupVersion.WithKind("DeviceConstraint"): return &resourcev1alpha3.DeviceConstraintApplyConfiguration{} + case v1alpha3.SchemeGroupVersion.WithKind("DeviceCounterConsumption"): + return &resourcev1alpha3.DeviceCounterConsumptionApplyConfiguration{} case v1alpha3.SchemeGroupVersion.WithKind("DeviceRequest"): return &resourcev1alpha3.DeviceRequestApplyConfiguration{} case v1alpha3.SchemeGroupVersion.WithKind("DeviceRequestAllocationResult"): @@ -1688,6 +1694,10 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &applyconfigurationsresourcev1beta1.BasicDeviceApplyConfiguration{} case resourcev1beta1.SchemeGroupVersion.WithKind("CELDeviceSelector"): return &applyconfigurationsresourcev1beta1.CELDeviceSelectorApplyConfiguration{} + case resourcev1beta1.SchemeGroupVersion.WithKind("Counter"): + return &applyconfigurationsresourcev1beta1.CounterApplyConfiguration{} + case resourcev1beta1.SchemeGroupVersion.WithKind("CounterSet"): + return &applyconfigurationsresourcev1beta1.CounterSetApplyConfiguration{} case resourcev1beta1.SchemeGroupVersion.WithKind("Device"): return &applyconfigurationsresourcev1beta1.DeviceApplyConfiguration{} case resourcev1beta1.SchemeGroupVersion.WithKind("DeviceAllocationConfiguration"): @@ -1712,6 +1722,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &applyconfigurationsresourcev1beta1.DeviceConfigurationApplyConfiguration{} case resourcev1beta1.SchemeGroupVersion.WithKind("DeviceConstraint"): return &applyconfigurationsresourcev1beta1.DeviceConstraintApplyConfiguration{} + case resourcev1beta1.SchemeGroupVersion.WithKind("DeviceCounterConsumption"): + return &applyconfigurationsresourcev1beta1.DeviceCounterConsumptionApplyConfiguration{} case resourcev1beta1.SchemeGroupVersion.WithKind("DeviceRequest"): return &applyconfigurationsresourcev1beta1.DeviceRequestApplyConfiguration{} case resourcev1beta1.SchemeGroupVersion.WithKind("DeviceRequestAllocationResult"): diff --git a/staging/src/k8s.io/dynamic-resource-allocation/api/zz_generated.conversion.go b/staging/src/k8s.io/dynamic-resource-allocation/api/zz_generated.conversion.go index 78febb4cf89..89cb3fe5d43 100644 --- a/staging/src/k8s.io/dynamic-resource-allocation/api/zz_generated.conversion.go +++ b/staging/src/k8s.io/dynamic-resource-allocation/api/zz_generated.conversion.go @@ -24,9 +24,9 @@ package api import ( unsafe "unsafe" - corev1 "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" v1beta1 "k8s.io/api/resource/v1beta1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" conversion "k8s.io/apimachinery/pkg/conversion" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -48,6 +48,26 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*Counter)(nil), (*v1beta1.Counter)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_api_Counter_To_v1beta1_Counter(a.(*Counter), b.(*v1beta1.Counter), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.Counter)(nil), (*Counter)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_Counter_To_api_Counter(a.(*v1beta1.Counter), b.(*Counter), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*CounterSet)(nil), (*v1beta1.CounterSet)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_api_CounterSet_To_v1beta1_CounterSet(a.(*CounterSet), b.(*v1beta1.CounterSet), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.CounterSet)(nil), (*CounterSet)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_CounterSet_To_api_CounterSet(a.(*v1beta1.CounterSet), b.(*CounterSet), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*Device)(nil), (*v1beta1.Device)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_api_Device_To_v1beta1_Device(a.(*Device), b.(*v1beta1.Device), scope) }); err != nil { @@ -78,6 +98,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*DeviceCounterConsumption)(nil), (*v1beta1.DeviceCounterConsumption)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_api_DeviceCounterConsumption_To_v1beta1_DeviceCounterConsumption(a.(*DeviceCounterConsumption), b.(*v1beta1.DeviceCounterConsumption), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DeviceCounterConsumption)(nil), (*DeviceCounterConsumption)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DeviceCounterConsumption_To_api_DeviceCounterConsumption(a.(*v1beta1.DeviceCounterConsumption), b.(*DeviceCounterConsumption), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*DeviceTaint)(nil), (*v1beta1.DeviceTaint)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_api_DeviceTaint_To_v1beta1_DeviceTaint(a.(*DeviceTaint), b.(*v1beta1.DeviceTaint), scope) }); err != nil { @@ -134,6 +164,20 @@ func RegisterConversions(s *runtime.Scheme) error { func autoConvert_api_BasicDevice_To_v1beta1_BasicDevice(in *BasicDevice, out *v1beta1.BasicDevice, s conversion.Scope) error { out.Attributes = *(*map[v1beta1.QualifiedName]v1beta1.DeviceAttribute)(unsafe.Pointer(&in.Attributes)) out.Capacity = *(*map[v1beta1.QualifiedName]v1beta1.DeviceCapacity)(unsafe.Pointer(&in.Capacity)) + if in.ConsumesCounter != nil { + in, out := &in.ConsumesCounter, &out.ConsumesCounter + *out = make([]v1beta1.DeviceCounterConsumption, len(*in)) + for i := range *in { + if err := Convert_api_DeviceCounterConsumption_To_v1beta1_DeviceCounterConsumption(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.ConsumesCounter = nil + } + out.NodeName = (*string)(unsafe.Pointer(in.NodeName)) + out.NodeSelector = (*v1.NodeSelector)(unsafe.Pointer(in.NodeSelector)) + out.AllNodes = (*bool)(unsafe.Pointer(in.AllNodes)) out.Taints = *(*[]v1beta1.DeviceTaint)(unsafe.Pointer(&in.Taints)) return nil } @@ -146,6 +190,20 @@ func Convert_api_BasicDevice_To_v1beta1_BasicDevice(in *BasicDevice, out *v1beta func autoConvert_v1beta1_BasicDevice_To_api_BasicDevice(in *v1beta1.BasicDevice, out *BasicDevice, s conversion.Scope) error { out.Attributes = *(*map[QualifiedName]DeviceAttribute)(unsafe.Pointer(&in.Attributes)) out.Capacity = *(*map[QualifiedName]DeviceCapacity)(unsafe.Pointer(&in.Capacity)) + if in.ConsumesCounter != nil { + in, out := &in.ConsumesCounter, &out.ConsumesCounter + *out = make([]DeviceCounterConsumption, len(*in)) + for i := range *in { + if err := Convert_v1beta1_DeviceCounterConsumption_To_api_DeviceCounterConsumption(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.ConsumesCounter = nil + } + out.NodeName = (*string)(unsafe.Pointer(in.NodeName)) + out.NodeSelector = (*v1.NodeSelector)(unsafe.Pointer(in.NodeSelector)) + out.AllNodes = (*bool)(unsafe.Pointer(in.AllNodes)) out.Taints = *(*[]v1beta1.DeviceTaint)(unsafe.Pointer(&in.Taints)) return nil } @@ -155,11 +213,65 @@ func Convert_v1beta1_BasicDevice_To_api_BasicDevice(in *v1beta1.BasicDevice, out return autoConvert_v1beta1_BasicDevice_To_api_BasicDevice(in, out, s) } +func autoConvert_api_Counter_To_v1beta1_Counter(in *Counter, out *v1beta1.Counter, s conversion.Scope) error { + out.Value = in.Value + return nil +} + +// Convert_api_Counter_To_v1beta1_Counter is an autogenerated conversion function. +func Convert_api_Counter_To_v1beta1_Counter(in *Counter, out *v1beta1.Counter, s conversion.Scope) error { + return autoConvert_api_Counter_To_v1beta1_Counter(in, out, s) +} + +func autoConvert_v1beta1_Counter_To_api_Counter(in *v1beta1.Counter, out *Counter, s conversion.Scope) error { + out.Value = in.Value + return nil +} + +// Convert_v1beta1_Counter_To_api_Counter is an autogenerated conversion function. +func Convert_v1beta1_Counter_To_api_Counter(in *v1beta1.Counter, out *Counter, s conversion.Scope) error { + return autoConvert_v1beta1_Counter_To_api_Counter(in, out, s) +} + +func autoConvert_api_CounterSet_To_v1beta1_CounterSet(in *CounterSet, out *v1beta1.CounterSet, s conversion.Scope) error { + if err := Convert_api_UniqueString_To_string(&in.Name, &out.Name, s); err != nil { + return err + } + out.Counters = *(*map[string]v1beta1.Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_api_CounterSet_To_v1beta1_CounterSet is an autogenerated conversion function. +func Convert_api_CounterSet_To_v1beta1_CounterSet(in *CounterSet, out *v1beta1.CounterSet, s conversion.Scope) error { + return autoConvert_api_CounterSet_To_v1beta1_CounterSet(in, out, s) +} + +func autoConvert_v1beta1_CounterSet_To_api_CounterSet(in *v1beta1.CounterSet, out *CounterSet, s conversion.Scope) error { + if err := Convert_string_To_api_UniqueString(&in.Name, &out.Name, s); err != nil { + return err + } + out.Counters = *(*map[string]Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_v1beta1_CounterSet_To_api_CounterSet is an autogenerated conversion function. +func Convert_v1beta1_CounterSet_To_api_CounterSet(in *v1beta1.CounterSet, out *CounterSet, s conversion.Scope) error { + return autoConvert_v1beta1_CounterSet_To_api_CounterSet(in, out, s) +} + func autoConvert_api_Device_To_v1beta1_Device(in *Device, out *v1beta1.Device, s conversion.Scope) error { if err := Convert_api_UniqueString_To_string(&in.Name, &out.Name, s); err != nil { return err } - out.Basic = (*v1beta1.BasicDevice)(unsafe.Pointer(in.Basic)) + if in.Basic != nil { + in, out := &in.Basic, &out.Basic + *out = new(v1beta1.BasicDevice) + if err := Convert_api_BasicDevice_To_v1beta1_BasicDevice(*in, *out, s); err != nil { + return err + } + } else { + out.Basic = nil + } return nil } @@ -172,7 +284,15 @@ func autoConvert_v1beta1_Device_To_api_Device(in *v1beta1.Device, out *Device, s if err := Convert_string_To_api_UniqueString(&in.Name, &out.Name, s); err != nil { return err } - out.Basic = (*BasicDevice)(unsafe.Pointer(in.Basic)) + if in.Basic != nil { + in, out := &in.Basic, &out.Basic + *out = new(BasicDevice) + if err := Convert_v1beta1_BasicDevice_To_api_BasicDevice(*in, *out, s); err != nil { + return err + } + } else { + out.Basic = nil + } return nil } @@ -227,11 +347,37 @@ func Convert_v1beta1_DeviceCapacity_To_api_DeviceCapacity(in *v1beta1.DeviceCapa return autoConvert_v1beta1_DeviceCapacity_To_api_DeviceCapacity(in, out, s) } +func autoConvert_api_DeviceCounterConsumption_To_v1beta1_DeviceCounterConsumption(in *DeviceCounterConsumption, out *v1beta1.DeviceCounterConsumption, s conversion.Scope) error { + if err := Convert_api_UniqueString_To_string(&in.SharedCounter, &out.SharedCounter, s); err != nil { + return err + } + out.Counters = *(*map[string]v1beta1.Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_api_DeviceCounterConsumption_To_v1beta1_DeviceCounterConsumption is an autogenerated conversion function. +func Convert_api_DeviceCounterConsumption_To_v1beta1_DeviceCounterConsumption(in *DeviceCounterConsumption, out *v1beta1.DeviceCounterConsumption, s conversion.Scope) error { + return autoConvert_api_DeviceCounterConsumption_To_v1beta1_DeviceCounterConsumption(in, out, s) +} + +func autoConvert_v1beta1_DeviceCounterConsumption_To_api_DeviceCounterConsumption(in *v1beta1.DeviceCounterConsumption, out *DeviceCounterConsumption, s conversion.Scope) error { + if err := Convert_string_To_api_UniqueString(&in.SharedCounter, &out.SharedCounter, s); err != nil { + return err + } + out.Counters = *(*map[string]Counter)(unsafe.Pointer(&in.Counters)) + return nil +} + +// Convert_v1beta1_DeviceCounterConsumption_To_api_DeviceCounterConsumption is an autogenerated conversion function. +func Convert_v1beta1_DeviceCounterConsumption_To_api_DeviceCounterConsumption(in *v1beta1.DeviceCounterConsumption, out *DeviceCounterConsumption, s conversion.Scope) error { + return autoConvert_v1beta1_DeviceCounterConsumption_To_api_DeviceCounterConsumption(in, out, s) +} + func autoConvert_api_DeviceTaint_To_v1beta1_DeviceTaint(in *DeviceTaint, out *v1beta1.DeviceTaint, s conversion.Scope) error { out.Key = in.Key out.Value = in.Value out.Effect = v1beta1.DeviceTaintEffect(in.Effect) - out.TimeAdded = (*v1.Time)(unsafe.Pointer(in.TimeAdded)) + out.TimeAdded = (*metav1.Time)(unsafe.Pointer(in.TimeAdded)) return nil } @@ -244,7 +390,7 @@ func autoConvert_v1beta1_DeviceTaint_To_api_DeviceTaint(in *v1beta1.DeviceTaint, out.Key = in.Key out.Value = in.Value out.Effect = DeviceTaintEffect(in.Effect) - out.TimeAdded = (*v1.Time)(unsafe.Pointer(in.TimeAdded)) + out.TimeAdded = (*metav1.Time)(unsafe.Pointer(in.TimeAdded)) return nil } @@ -317,7 +463,7 @@ func autoConvert_api_ResourceSliceSpec_To_v1beta1_ResourceSliceSpec(in *Resource if err := Convert_api_UniqueString_To_string(&in.NodeName, &out.NodeName, s); err != nil { return err } - out.NodeSelector = (*corev1.NodeSelector)(unsafe.Pointer(in.NodeSelector)) + out.NodeSelector = (*v1.NodeSelector)(unsafe.Pointer(in.NodeSelector)) out.AllNodes = in.AllNodes if in.Devices != nil { in, out := &in.Devices, &out.Devices @@ -330,6 +476,18 @@ func autoConvert_api_ResourceSliceSpec_To_v1beta1_ResourceSliceSpec(in *Resource } else { out.Devices = nil } + out.PerDeviceNodeSelection = (*bool)(unsafe.Pointer(in.PerDeviceNodeSelection)) + if in.SharedCounters != nil { + in, out := &in.SharedCounters, &out.SharedCounters + *out = make([]v1beta1.CounterSet, len(*in)) + for i := range *in { + if err := Convert_api_CounterSet_To_v1beta1_CounterSet(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.SharedCounters = nil + } return nil } @@ -348,7 +506,7 @@ func autoConvert_v1beta1_ResourceSliceSpec_To_api_ResourceSliceSpec(in *v1beta1. if err := Convert_string_To_api_UniqueString(&in.NodeName, &out.NodeName, s); err != nil { return err } - out.NodeSelector = (*corev1.NodeSelector)(unsafe.Pointer(in.NodeSelector)) + out.NodeSelector = (*v1.NodeSelector)(unsafe.Pointer(in.NodeSelector)) out.AllNodes = in.AllNodes if in.Devices != nil { in, out := &in.Devices, &out.Devices @@ -361,6 +519,18 @@ func autoConvert_v1beta1_ResourceSliceSpec_To_api_ResourceSliceSpec(in *v1beta1. } else { out.Devices = nil } + out.PerDeviceNodeSelection = (*bool)(unsafe.Pointer(in.PerDeviceNodeSelection)) + if in.SharedCounters != nil { + in, out := &in.SharedCounters, &out.SharedCounters + *out = make([]CounterSet, len(*in)) + for i := range *in { + if err := Convert_v1beta1_CounterSet_To_api_CounterSet(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.SharedCounters = nil + } return nil } diff --git a/staging/src/k8s.io/dynamic-resource-allocation/resourceslice/zz_generated.deepcopy.go b/staging/src/k8s.io/dynamic-resource-allocation/resourceslice/zz_generated.deepcopy.go index 358d2b94744..ba6212e313c 100644 --- a/staging/src/k8s.io/dynamic-resource-allocation/resourceslice/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/dynamic-resource-allocation/resourceslice/zz_generated.deepcopy.go @@ -103,6 +103,18 @@ func (in *Slice) DeepCopyInto(out *Slice) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.SharedCounters != nil { + in, out := &in.SharedCounters, &out.SharedCounters + *out = make([]v1beta1.CounterSet, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.PerDeviceNodeSelection != nil { + in, out := &in.PerDeviceNodeSelection, &out.PerDeviceNodeSelection + *out = new(bool) + **out = **in + } return }