diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 3056830f512..d26687f86ea 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -14959,7 +14959,7 @@ "description": "Opaque provides driver-specific configuration parameters." }, "requests": { - "description": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.", + "description": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", "items": { "type": "string" }, @@ -15059,7 +15059,7 @@ "description": "Opaque provides driver-specific configuration parameters." }, "requests": { - "description": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.", + "description": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", "items": { "type": "string" }, @@ -15176,7 +15176,7 @@ "type": "string" }, "requests": { - "description": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.", + "description": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the constraint applies to all subrequests.", "items": { "type": "string" }, @@ -15187,7 +15187,7 @@ "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.\n\nA DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.", + "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": { "adminAccess": { "description": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", @@ -15203,9 +15203,17 @@ "type": "integer" }, "deviceClassName": { - "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required if no subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", "type": "string" }, + "firstAvailable": { + "description": "FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the schduler will only check the second one if it determines that the first one can not be used.\n\nThis field may only be set in the entries of DeviceClaim.Requests.\n\nDRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.", + "items": { + "$ref": "#/definitions/io.k8s.api.resource.v1alpha3.DeviceSubRequest" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, "name": { "description": "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.", "type": "string" @@ -15220,8 +15228,7 @@ } }, "required": [ - "name", - "deviceClassName" + "name" ], "type": "object" }, @@ -15245,7 +15252,7 @@ "type": "string" }, "request": { - "description": "Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.", + "description": "Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format
/.\n\nMultiple devices may have been allocated per request.", "type": "string" } }, @@ -15267,6 +15274,41 @@ }, "type": "object" }, + "io.k8s.api.resource.v1alpha3.DeviceSubRequest": { + "description": "DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.\n\nDeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.", + "properties": { + "allocationMode": { + "description": "AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:\n\n- ExactCount: This request is for a specific number of devices.\n This is the default. The exact number is provided in the\n count field.\n\n- All: This request is for all of the matching devices in a pool.\n Allocation will fail if some devices are already allocated,\n unless adminAccess is requested.\n\nIf AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.\n\nMore modes may get added in the future. Clients must refuse to handle requests with unknown modes.", + "type": "string" + }, + "count": { + "description": "Count is used only when the count mode is \"ExactCount\". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.", + "format": "int64", + "type": "integer" + }, + "deviceClassName": { + "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "type": "string" + }, + "name": { + "description": "Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format
/.\n\nMust be a DNS label.", + "type": "string" + }, + "selectors": { + "description": "Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.", + "items": { + "$ref": "#/definitions/io.k8s.api.resource.v1alpha3.DeviceSelector" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + } + }, + "required": [ + "name", + "deviceClassName" + ], + "type": "object" + }, "io.k8s.api.resource.v1alpha3.NetworkDeviceData": { "description": "NetworkDeviceData provides network-related details for the allocated device. This information may be filled by drivers or other components to configure or identify the device within a network context.", "properties": { @@ -15779,7 +15821,7 @@ "description": "Opaque provides driver-specific configuration parameters." }, "requests": { - "description": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.", + "description": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", "items": { "type": "string" }, @@ -15892,7 +15934,7 @@ "description": "Opaque provides driver-specific configuration parameters." }, "requests": { - "description": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.", + "description": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", "items": { "type": "string" }, @@ -16009,7 +16051,7 @@ "type": "string" }, "requests": { - "description": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.", + "description": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the constraint applies to all subrequests.", "items": { "type": "string" }, @@ -16020,7 +16062,7 @@ "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.\n\nA DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.", + "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": { "adminAccess": { "description": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", @@ -16036,11 +16078,19 @@ "type": "integer" }, "deviceClassName": { - "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required if no subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", "type": "string" }, + "firstAvailable": { + "description": "FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the schduler will only check the second one if it determines that the first one can not be used.\n\nThis field may only be set in the entries of DeviceClaim.Requests.\n\nDRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.", + "items": { + "$ref": "#/definitions/io.k8s.api.resource.v1beta1.DeviceSubRequest" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, "name": { - "description": "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.", + "description": "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.", "type": "string" }, "selectors": { @@ -16053,8 +16103,7 @@ } }, "required": [ - "name", - "deviceClassName" + "name" ], "type": "object" }, @@ -16078,7 +16127,7 @@ "type": "string" }, "request": { - "description": "Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.", + "description": "Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format
/.\n\nMultiple devices may have been allocated per request.", "type": "string" } }, @@ -16100,6 +16149,41 @@ }, "type": "object" }, + "io.k8s.api.resource.v1beta1.DeviceSubRequest": { + "description": "DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.\n\nDeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.", + "properties": { + "allocationMode": { + "description": "AllocationMode and its related fields define how devices are allocated to satisfy this subrequest. Supported values are:\n\n- ExactCount: This request is for a specific number of devices.\n This is the default. The exact number is provided in the\n count field.\n\n- All: This subrequest is for all of the matching devices in a pool.\n Allocation will fail if some devices are already allocated,\n unless adminAccess is requested.\n\nIf AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other subrequests must specify this field.\n\nMore modes may get added in the future. Clients must refuse to handle requests with unknown modes.", + "type": "string" + }, + "count": { + "description": "Count is used only when the count mode is \"ExactCount\". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.", + "format": "int64", + "type": "integer" + }, + "deviceClassName": { + "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "type": "string" + }, + "name": { + "description": "Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format
/.\n\nMust be a DNS label.", + "type": "string" + }, + "selectors": { + "description": "Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this subrequest. All selectors must be satisfied for a device to be considered.", + "items": { + "$ref": "#/definitions/io.k8s.api.resource.v1beta1.DeviceSelector" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + } + }, + "required": [ + "name", + "deviceClassName" + ], + "type": "object" + }, "io.k8s.api.resource.v1beta1.NetworkDeviceData": { "description": "NetworkDeviceData provides network-related details for the allocated device. This information may be filled by drivers or other components to configure or identify the device within a network context.", "properties": { 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 4082f020f97..108882a00d6 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 @@ -240,7 +240,7 @@ "description": "Opaque provides driver-specific configuration parameters." }, "requests": { - "description": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.", + "description": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", "items": { "default": "", "type": "string" @@ -371,7 +371,7 @@ "description": "Opaque provides driver-specific configuration parameters." }, "requests": { - "description": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.", + "description": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", "items": { "default": "", "type": "string" @@ -523,7 +523,7 @@ "type": "string" }, "requests": { - "description": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.", + "description": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the constraint applies to all subrequests.", "items": { "default": "", "type": "string" @@ -535,7 +535,7 @@ "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.\n\nA DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.", + "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": { "adminAccess": { "description": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", @@ -552,9 +552,22 @@ }, "deviceClassName": { "default": "", - "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required if no subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", "type": "string" }, + "firstAvailable": { + "description": "FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the schduler will only check the second one if it determines that the first one can not be used.\n\nThis field may only be set in the entries of DeviceClaim.Requests.\n\nDRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1alpha3.DeviceSubRequest" + } + ], + "default": {} + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, "name": { "default": "", "description": "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.", @@ -575,8 +588,7 @@ } }, "required": [ - "name", - "deviceClassName" + "name" ], "type": "object" }, @@ -604,7 +616,7 @@ }, "request": { "default": "", - "description": "Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.", + "description": "Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format
/.\n\nMultiple devices may have been allocated per request.", "type": "string" } }, @@ -630,6 +642,48 @@ }, "type": "object" }, + "io.k8s.api.resource.v1alpha3.DeviceSubRequest": { + "description": "DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.\n\nDeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.", + "properties": { + "allocationMode": { + "description": "AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:\n\n- ExactCount: This request is for a specific number of devices.\n This is the default. The exact number is provided in the\n count field.\n\n- All: This request is for all of the matching devices in a pool.\n Allocation will fail if some devices are already allocated,\n unless adminAccess is requested.\n\nIf AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.\n\nMore modes may get added in the future. Clients must refuse to handle requests with unknown modes.", + "type": "string" + }, + "count": { + "description": "Count is used only when the count mode is \"ExactCount\". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.", + "format": "int64", + "type": "integer" + }, + "deviceClassName": { + "default": "", + "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "type": "string" + }, + "name": { + "default": "", + "description": "Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format
/.\n\nMust be a DNS label.", + "type": "string" + }, + "selectors": { + "description": "Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1alpha3.DeviceSelector" + } + ], + "default": {} + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + } + }, + "required": [ + "name", + "deviceClassName" + ], + "type": "object" + }, "io.k8s.api.resource.v1alpha3.NetworkDeviceData": { "description": "NetworkDeviceData provides network-related details for the allocated device. This information may be filled by drivers or other components to configure or identify the device within a network context.", "properties": { 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 c2c971a888a..5c13e45c0e4 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 @@ -245,7 +245,7 @@ "description": "Opaque provides driver-specific configuration parameters." }, "requests": { - "description": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.", + "description": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", "items": { "default": "", "type": "string" @@ -393,7 +393,7 @@ "description": "Opaque provides driver-specific configuration parameters." }, "requests": { - "description": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.", + "description": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", "items": { "default": "", "type": "string" @@ -545,7 +545,7 @@ "type": "string" }, "requests": { - "description": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.", + "description": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the constraint applies to all subrequests.", "items": { "default": "", "type": "string" @@ -557,7 +557,7 @@ "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.\n\nA DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.", + "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": { "adminAccess": { "description": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", @@ -574,12 +574,25 @@ }, "deviceClassName": { "default": "", - "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required if no subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", "type": "string" }, + "firstAvailable": { + "description": "FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the schduler will only check the second one if it determines that the first one can not be used.\n\nThis field may only be set in the entries of DeviceClaim.Requests.\n\nDRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1beta1.DeviceSubRequest" + } + ], + "default": {} + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, "name": { "default": "", - "description": "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.", + "description": "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.", "type": "string" }, "selectors": { @@ -597,8 +610,7 @@ } }, "required": [ - "name", - "deviceClassName" + "name" ], "type": "object" }, @@ -626,7 +638,7 @@ }, "request": { "default": "", - "description": "Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.", + "description": "Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format
/.\n\nMultiple devices may have been allocated per request.", "type": "string" } }, @@ -652,6 +664,48 @@ }, "type": "object" }, + "io.k8s.api.resource.v1beta1.DeviceSubRequest": { + "description": "DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.\n\nDeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.", + "properties": { + "allocationMode": { + "description": "AllocationMode and its related fields define how devices are allocated to satisfy this subrequest. Supported values are:\n\n- ExactCount: This request is for a specific number of devices.\n This is the default. The exact number is provided in the\n count field.\n\n- All: This subrequest is for all of the matching devices in a pool.\n Allocation will fail if some devices are already allocated,\n unless adminAccess is requested.\n\nIf AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other subrequests must specify this field.\n\nMore modes may get added in the future. Clients must refuse to handle requests with unknown modes.", + "type": "string" + }, + "count": { + "description": "Count is used only when the count mode is \"ExactCount\". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.", + "format": "int64", + "type": "integer" + }, + "deviceClassName": { + "default": "", + "description": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "type": "string" + }, + "name": { + "default": "", + "description": "Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format
/.\n\nMust be a DNS label.", + "type": "string" + }, + "selectors": { + "description": "Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this subrequest. All selectors must be satisfied for a device to be considered.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.resource.v1beta1.DeviceSelector" + } + ], + "default": {} + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + } + }, + "required": [ + "name", + "deviceClassName" + ], + "type": "object" + }, "io.k8s.api.resource.v1beta1.NetworkDeviceData": { "description": "NetworkDeviceData provides network-related details for the allocated device. This information may be filled by drivers or other components to configure or identify the device within a network context.", "properties": { diff --git a/pkg/apis/resource/v1alpha3/zz_generated.conversion.go b/pkg/apis/resource/v1alpha3/zz_generated.conversion.go index 9b4d7d1fb68..21d069e4f75 100644 --- a/pkg/apis/resource/v1alpha3/zz_generated.conversion.go +++ b/pkg/apis/resource/v1alpha3/zz_generated.conversion.go @@ -232,6 +232,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*resourcev1alpha3.DeviceSubRequest)(nil), (*resource.DeviceSubRequest)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DeviceSubRequest_To_resource_DeviceSubRequest(a.(*resourcev1alpha3.DeviceSubRequest), b.(*resource.DeviceSubRequest), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*resource.DeviceSubRequest)(nil), (*resourcev1alpha3.DeviceSubRequest)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_resource_DeviceSubRequest_To_v1alpha3_DeviceSubRequest(a.(*resource.DeviceSubRequest), b.(*resourcev1alpha3.DeviceSubRequest), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*resourcev1alpha3.NetworkDeviceData)(nil), (*resource.NetworkDeviceData)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha3_NetworkDeviceData_To_resource_NetworkDeviceData(a.(*resourcev1alpha3.NetworkDeviceData), b.(*resource.NetworkDeviceData), scope) }); err != nil { @@ -814,6 +824,7 @@ func autoConvert_v1alpha3_DeviceRequest_To_resource_DeviceRequest(in *resourcev1 out.AllocationMode = resource.DeviceAllocationMode(in.AllocationMode) out.Count = in.Count out.AdminAccess = (*bool)(unsafe.Pointer(in.AdminAccess)) + out.FirstAvailable = *(*[]resource.DeviceSubRequest)(unsafe.Pointer(&in.FirstAvailable)) return nil } @@ -829,6 +840,7 @@ func autoConvert_resource_DeviceRequest_To_v1alpha3_DeviceRequest(in *resource.D out.AllocationMode = resourcev1alpha3.DeviceAllocationMode(in.AllocationMode) out.Count = in.Count out.AdminAccess = (*bool)(unsafe.Pointer(in.AdminAccess)) + out.FirstAvailable = *(*[]resourcev1alpha3.DeviceSubRequest)(unsafe.Pointer(&in.FirstAvailable)) return nil } @@ -885,6 +897,34 @@ func Convert_resource_DeviceSelector_To_v1alpha3_DeviceSelector(in *resource.Dev return autoConvert_resource_DeviceSelector_To_v1alpha3_DeviceSelector(in, out, s) } +func autoConvert_v1alpha3_DeviceSubRequest_To_resource_DeviceSubRequest(in *resourcev1alpha3.DeviceSubRequest, out *resource.DeviceSubRequest, s conversion.Scope) error { + out.Name = in.Name + out.DeviceClassName = in.DeviceClassName + out.Selectors = *(*[]resource.DeviceSelector)(unsafe.Pointer(&in.Selectors)) + out.AllocationMode = resource.DeviceAllocationMode(in.AllocationMode) + out.Count = in.Count + return nil +} + +// Convert_v1alpha3_DeviceSubRequest_To_resource_DeviceSubRequest is an autogenerated conversion function. +func Convert_v1alpha3_DeviceSubRequest_To_resource_DeviceSubRequest(in *resourcev1alpha3.DeviceSubRequest, out *resource.DeviceSubRequest, s conversion.Scope) error { + return autoConvert_v1alpha3_DeviceSubRequest_To_resource_DeviceSubRequest(in, out, s) +} + +func autoConvert_resource_DeviceSubRequest_To_v1alpha3_DeviceSubRequest(in *resource.DeviceSubRequest, out *resourcev1alpha3.DeviceSubRequest, s conversion.Scope) error { + out.Name = in.Name + out.DeviceClassName = in.DeviceClassName + out.Selectors = *(*[]resourcev1alpha3.DeviceSelector)(unsafe.Pointer(&in.Selectors)) + out.AllocationMode = resourcev1alpha3.DeviceAllocationMode(in.AllocationMode) + out.Count = in.Count + return nil +} + +// Convert_resource_DeviceSubRequest_To_v1alpha3_DeviceSubRequest is an autogenerated conversion function. +func Convert_resource_DeviceSubRequest_To_v1alpha3_DeviceSubRequest(in *resource.DeviceSubRequest, out *resourcev1alpha3.DeviceSubRequest, s conversion.Scope) error { + return autoConvert_resource_DeviceSubRequest_To_v1alpha3_DeviceSubRequest(in, out, s) +} + func autoConvert_v1alpha3_NetworkDeviceData_To_resource_NetworkDeviceData(in *resourcev1alpha3.NetworkDeviceData, out *resource.NetworkDeviceData, s conversion.Scope) error { out.InterfaceName = in.InterfaceName out.IPs = *(*[]string)(unsafe.Pointer(&in.IPs)) diff --git a/pkg/apis/resource/v1alpha3/zz_generated.defaults.go b/pkg/apis/resource/v1alpha3/zz_generated.defaults.go index 874f5eba20d..67ba496b84f 100644 --- a/pkg/apis/resource/v1alpha3/zz_generated.defaults.go +++ b/pkg/apis/resource/v1alpha3/zz_generated.defaults.go @@ -45,6 +45,10 @@ func SetObjectDefaults_ResourceClaim(in *resourcev1alpha3.ResourceClaim) { for i := range in.Spec.Devices.Requests { a := &in.Spec.Devices.Requests[i] SetDefaults_DeviceRequest(a) + for j := range a.FirstAvailable { + b := &a.FirstAvailable[j] + SetDefaults_DeviceSubRequest(b) + } } } @@ -59,6 +63,10 @@ func SetObjectDefaults_ResourceClaimTemplate(in *resourcev1alpha3.ResourceClaimT for i := range in.Spec.Spec.Devices.Requests { a := &in.Spec.Spec.Devices.Requests[i] SetDefaults_DeviceRequest(a) + for j := range a.FirstAvailable { + b := &a.FirstAvailable[j] + SetDefaults_DeviceSubRequest(b) + } } } diff --git a/pkg/apis/resource/v1beta1/zz_generated.conversion.go b/pkg/apis/resource/v1beta1/zz_generated.conversion.go index 74b674ee42b..e74a848827f 100644 --- a/pkg/apis/resource/v1beta1/zz_generated.conversion.go +++ b/pkg/apis/resource/v1beta1/zz_generated.conversion.go @@ -241,6 +241,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*resourcev1beta1.DeviceSubRequest)(nil), (*resource.DeviceSubRequest)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DeviceSubRequest_To_resource_DeviceSubRequest(a.(*resourcev1beta1.DeviceSubRequest), b.(*resource.DeviceSubRequest), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*resource.DeviceSubRequest)(nil), (*resourcev1beta1.DeviceSubRequest)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_resource_DeviceSubRequest_To_v1beta1_DeviceSubRequest(a.(*resource.DeviceSubRequest), b.(*resourcev1beta1.DeviceSubRequest), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*resourcev1beta1.NetworkDeviceData)(nil), (*resource.NetworkDeviceData)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_NetworkDeviceData_To_resource_NetworkDeviceData(a.(*resourcev1beta1.NetworkDeviceData), b.(*resource.NetworkDeviceData), scope) }); err != nil { @@ -793,6 +803,7 @@ func autoConvert_v1beta1_DeviceRequest_To_resource_DeviceRequest(in *resourcev1b out.AllocationMode = resource.DeviceAllocationMode(in.AllocationMode) out.Count = in.Count out.AdminAccess = (*bool)(unsafe.Pointer(in.AdminAccess)) + out.FirstAvailable = *(*[]resource.DeviceSubRequest)(unsafe.Pointer(&in.FirstAvailable)) return nil } @@ -808,6 +819,7 @@ func autoConvert_resource_DeviceRequest_To_v1beta1_DeviceRequest(in *resource.De out.AllocationMode = resourcev1beta1.DeviceAllocationMode(in.AllocationMode) out.Count = in.Count out.AdminAccess = (*bool)(unsafe.Pointer(in.AdminAccess)) + out.FirstAvailable = *(*[]resourcev1beta1.DeviceSubRequest)(unsafe.Pointer(&in.FirstAvailable)) return nil } @@ -864,6 +876,34 @@ func Convert_resource_DeviceSelector_To_v1beta1_DeviceSelector(in *resource.Devi return autoConvert_resource_DeviceSelector_To_v1beta1_DeviceSelector(in, out, s) } +func autoConvert_v1beta1_DeviceSubRequest_To_resource_DeviceSubRequest(in *resourcev1beta1.DeviceSubRequest, out *resource.DeviceSubRequest, s conversion.Scope) error { + out.Name = in.Name + out.DeviceClassName = in.DeviceClassName + out.Selectors = *(*[]resource.DeviceSelector)(unsafe.Pointer(&in.Selectors)) + out.AllocationMode = resource.DeviceAllocationMode(in.AllocationMode) + out.Count = in.Count + return nil +} + +// Convert_v1beta1_DeviceSubRequest_To_resource_DeviceSubRequest is an autogenerated conversion function. +func Convert_v1beta1_DeviceSubRequest_To_resource_DeviceSubRequest(in *resourcev1beta1.DeviceSubRequest, out *resource.DeviceSubRequest, s conversion.Scope) error { + return autoConvert_v1beta1_DeviceSubRequest_To_resource_DeviceSubRequest(in, out, s) +} + +func autoConvert_resource_DeviceSubRequest_To_v1beta1_DeviceSubRequest(in *resource.DeviceSubRequest, out *resourcev1beta1.DeviceSubRequest, s conversion.Scope) error { + out.Name = in.Name + out.DeviceClassName = in.DeviceClassName + out.Selectors = *(*[]resourcev1beta1.DeviceSelector)(unsafe.Pointer(&in.Selectors)) + out.AllocationMode = resourcev1beta1.DeviceAllocationMode(in.AllocationMode) + out.Count = in.Count + return nil +} + +// Convert_resource_DeviceSubRequest_To_v1beta1_DeviceSubRequest is an autogenerated conversion function. +func Convert_resource_DeviceSubRequest_To_v1beta1_DeviceSubRequest(in *resource.DeviceSubRequest, out *resourcev1beta1.DeviceSubRequest, s conversion.Scope) error { + return autoConvert_resource_DeviceSubRequest_To_v1beta1_DeviceSubRequest(in, out, s) +} + func autoConvert_v1beta1_NetworkDeviceData_To_resource_NetworkDeviceData(in *resourcev1beta1.NetworkDeviceData, out *resource.NetworkDeviceData, s conversion.Scope) error { out.InterfaceName = in.InterfaceName out.IPs = *(*[]string)(unsafe.Pointer(&in.IPs)) diff --git a/pkg/apis/resource/v1beta1/zz_generated.defaults.go b/pkg/apis/resource/v1beta1/zz_generated.defaults.go index a9e274fe6ab..2335929c404 100644 --- a/pkg/apis/resource/v1beta1/zz_generated.defaults.go +++ b/pkg/apis/resource/v1beta1/zz_generated.defaults.go @@ -45,6 +45,10 @@ func SetObjectDefaults_ResourceClaim(in *resourcev1beta1.ResourceClaim) { for i := range in.Spec.Devices.Requests { a := &in.Spec.Devices.Requests[i] SetDefaults_DeviceRequest(a) + for j := range a.FirstAvailable { + b := &a.FirstAvailable[j] + SetDefaults_DeviceSubRequest(b) + } } } @@ -59,6 +63,10 @@ func SetObjectDefaults_ResourceClaimTemplate(in *resourcev1beta1.ResourceClaimTe for i := range in.Spec.Spec.Devices.Requests { a := &in.Spec.Spec.Devices.Requests[i] SetDefaults_DeviceRequest(a) + for j := range a.FirstAvailable { + b := &a.FirstAvailable[j] + SetDefaults_DeviceSubRequest(b) + } } } diff --git a/pkg/apis/resource/zz_generated.deepcopy.go b/pkg/apis/resource/zz_generated.deepcopy.go index edbff8751e2..fb893b8528e 100644 --- a/pkg/apis/resource/zz_generated.deepcopy.go +++ b/pkg/apis/resource/zz_generated.deepcopy.go @@ -482,6 +482,13 @@ func (in *DeviceRequest) DeepCopyInto(out *DeviceRequest) { *out = new(bool) **out = **in } + if in.FirstAvailable != nil { + in, out := &in.FirstAvailable, &out.FirstAvailable + *out = make([]DeviceSubRequest, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -537,6 +544,29 @@ func (in *DeviceSelector) DeepCopy() *DeviceSelector { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceSubRequest) DeepCopyInto(out *DeviceSubRequest) { + *out = *in + if in.Selectors != nil { + in, out := &in.Selectors, &out.Selectors + *out = make([]DeviceSelector, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceSubRequest. +func (in *DeviceSubRequest) DeepCopy() *DeviceSubRequest { + if in == nil { + return nil + } + out := new(DeviceSubRequest) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkDeviceData) DeepCopyInto(out *NetworkDeviceData) { *out = *in diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index ae02265df4e..7fadfc8aa57 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -930,6 +930,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "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), + "k8s.io/api/resource/v1alpha3.DeviceSubRequest": schema_k8sio_api_resource_v1alpha3_DeviceSubRequest(ref), "k8s.io/api/resource/v1alpha3.NetworkDeviceData": schema_k8sio_api_resource_v1alpha3_NetworkDeviceData(ref), "k8s.io/api/resource/v1alpha3.OpaqueDeviceConfiguration": schema_k8sio_api_resource_v1alpha3_OpaqueDeviceConfiguration(ref), "k8s.io/api/resource/v1alpha3.ResourceClaim": schema_k8sio_api_resource_v1alpha3_ResourceClaim(ref), @@ -964,6 +965,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "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), + "k8s.io/api/resource/v1beta1.DeviceSubRequest": schema_k8sio_api_resource_v1beta1_DeviceSubRequest(ref), "k8s.io/api/resource/v1beta1.NetworkDeviceData": schema_k8sio_api_resource_v1beta1_NetworkDeviceData(ref), "k8s.io/api/resource/v1beta1.OpaqueDeviceConfiguration": schema_k8sio_api_resource_v1beta1_OpaqueDeviceConfiguration(ref), "k8s.io/api/resource/v1beta1.ResourceClaim": schema_k8sio_api_resource_v1beta1_ResourceClaim(ref), @@ -47070,7 +47072,7 @@ func schema_k8sio_api_resource_v1alpha3_DeviceAllocationConfiguration(ref common }, }, SchemaProps: spec.SchemaProps{ - Description: "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.", + Description: "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ @@ -47278,7 +47280,7 @@ func schema_k8sio_api_resource_v1alpha3_DeviceClaimConfiguration(ref common.Refe }, }, SchemaProps: spec.SchemaProps{ - Description: "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.", + Description: "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ @@ -47509,7 +47511,7 @@ func schema_k8sio_api_resource_v1alpha3_DeviceConstraint(ref common.ReferenceCal }, }, SchemaProps: spec.SchemaProps{ - Description: "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.", + Description: "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the constraint applies to all subrequests.", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ @@ -47539,7 +47541,7 @@ func schema_k8sio_api_resource_v1alpha3_DeviceRequest(ref common.ReferenceCallba return common.OpenAPIDefinition{ Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ - 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.\n\nA DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.", + 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.", Type: []string{"object"}, Properties: map[string]spec.Schema{ "name": { @@ -47552,7 +47554,7 @@ func schema_k8sio_api_resource_v1alpha3_DeviceRequest(ref common.ReferenceCallba }, "deviceClassName": { SchemaProps: spec.SchemaProps{ - Description: "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + Description: "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required if no subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", Default: "", Type: []string{"string"}, Format: "", @@ -47598,12 +47600,31 @@ func schema_k8sio_api_resource_v1alpha3_DeviceRequest(ref common.ReferenceCallba Format: "", }, }, + "firstAvailable": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the schduler will only check the second one if it determines that the first one can not be used.\n\nThis field may only be set in the entries of DeviceClaim.Requests.\n\nDRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1alpha3.DeviceSubRequest"), + }, + }, + }, + }, + }, }, - Required: []string{"name", "deviceClassName"}, + Required: []string{"name"}, }, }, Dependencies: []string{ - "k8s.io/api/resource/v1alpha3.DeviceSelector"}, + "k8s.io/api/resource/v1alpha3.DeviceSelector", "k8s.io/api/resource/v1alpha3.DeviceSubRequest"}, } } @@ -47616,7 +47637,7 @@ func schema_k8sio_api_resource_v1alpha3_DeviceRequestAllocationResult(ref common Properties: map[string]spec.Schema{ "request": { SchemaProps: spec.SchemaProps{ - Description: "Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.", + Description: "Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format
/.\n\nMultiple devices may have been allocated per request.", Default: "", Type: []string{"string"}, Format: "", @@ -47681,6 +47702,71 @@ func schema_k8sio_api_resource_v1alpha3_DeviceSelector(ref common.ReferenceCallb } } +func schema_k8sio_api_resource_v1alpha3_DeviceSubRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.\n\nDeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format
/.\n\nMust be a DNS label.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "deviceClassName": { + SchemaProps: spec.SchemaProps{ + Description: "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "selectors": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1alpha3.DeviceSelector"), + }, + }, + }, + }, + }, + "allocationMode": { + SchemaProps: spec.SchemaProps{ + Description: "AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:\n\n- ExactCount: This request is for a specific number of devices.\n This is the default. The exact number is provided in the\n count field.\n\n- All: This request is for all of the matching devices in a pool.\n Allocation will fail if some devices are already allocated,\n unless adminAccess is requested.\n\nIf AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.\n\nMore modes may get added in the future. Clients must refuse to handle requests with unknown modes.", + Type: []string{"string"}, + Format: "", + }, + }, + "count": { + SchemaProps: spec.SchemaProps{ + Description: "Count is used only when the count mode is \"ExactCount\". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + Required: []string{"name", "deviceClassName"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/resource/v1alpha3.DeviceSelector"}, + } +} + func schema_k8sio_api_resource_v1alpha3_NetworkDeviceData(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -48545,7 +48631,7 @@ func schema_k8sio_api_resource_v1beta1_DeviceAllocationConfiguration(ref common. }, }, SchemaProps: spec.SchemaProps{ - Description: "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.", + Description: "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ @@ -48775,7 +48861,7 @@ func schema_k8sio_api_resource_v1beta1_DeviceClaimConfiguration(ref common.Refer }, }, SchemaProps: spec.SchemaProps{ - Description: "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.", + Description: "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ @@ -49006,7 +49092,7 @@ func schema_k8sio_api_resource_v1beta1_DeviceConstraint(ref common.ReferenceCall }, }, SchemaProps: spec.SchemaProps{ - Description: "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.", + Description: "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the constraint applies to all subrequests.", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ @@ -49036,12 +49122,12 @@ func schema_k8sio_api_resource_v1beta1_DeviceRequest(ref common.ReferenceCallbac return common.OpenAPIDefinition{ Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ - 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.\n\nA DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.", + 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.", Type: []string{"object"}, Properties: map[string]spec.Schema{ "name": { SchemaProps: spec.SchemaProps{ - Description: "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.", + Description: "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.", Default: "", Type: []string{"string"}, Format: "", @@ -49049,7 +49135,7 @@ func schema_k8sio_api_resource_v1beta1_DeviceRequest(ref common.ReferenceCallbac }, "deviceClassName": { SchemaProps: spec.SchemaProps{ - Description: "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + Description: "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required if no subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", Default: "", Type: []string{"string"}, Format: "", @@ -49095,12 +49181,31 @@ func schema_k8sio_api_resource_v1beta1_DeviceRequest(ref common.ReferenceCallbac Format: "", }, }, + "firstAvailable": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the schduler will only check the second one if it determines that the first one can not be used.\n\nThis field may only be set in the entries of DeviceClaim.Requests.\n\nDRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1beta1.DeviceSubRequest"), + }, + }, + }, + }, + }, }, - Required: []string{"name", "deviceClassName"}, + Required: []string{"name"}, }, }, Dependencies: []string{ - "k8s.io/api/resource/v1beta1.DeviceSelector"}, + "k8s.io/api/resource/v1beta1.DeviceSelector", "k8s.io/api/resource/v1beta1.DeviceSubRequest"}, } } @@ -49113,7 +49218,7 @@ func schema_k8sio_api_resource_v1beta1_DeviceRequestAllocationResult(ref common. Properties: map[string]spec.Schema{ "request": { SchemaProps: spec.SchemaProps{ - Description: "Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.", + Description: "Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format
/.\n\nMultiple devices may have been allocated per request.", Default: "", Type: []string{"string"}, Format: "", @@ -49178,6 +49283,71 @@ func schema_k8sio_api_resource_v1beta1_DeviceSelector(ref common.ReferenceCallba } } +func schema_k8sio_api_resource_v1beta1_DeviceSubRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.\n\nDeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format
/.\n\nMust be a DNS label.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "deviceClassName": { + SchemaProps: spec.SchemaProps{ + Description: "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "selectors": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this subrequest. All selectors must be satisfied for a device to be considered.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/resource/v1beta1.DeviceSelector"), + }, + }, + }, + }, + }, + "allocationMode": { + SchemaProps: spec.SchemaProps{ + Description: "AllocationMode and its related fields define how devices are allocated to satisfy this subrequest. Supported values are:\n\n- ExactCount: This request is for a specific number of devices.\n This is the default. The exact number is provided in the\n count field.\n\n- All: This subrequest is for all of the matching devices in a pool.\n Allocation will fail if some devices are already allocated,\n unless adminAccess is requested.\n\nIf AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other subrequests must specify this field.\n\nMore modes may get added in the future. Clients must refuse to handle requests with unknown modes.", + Type: []string{"string"}, + Format: "", + }, + }, + "count": { + SchemaProps: spec.SchemaProps{ + Description: "Count is used only when the count mode is \"ExactCount\". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + Required: []string{"name", "deviceClassName"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/resource/v1beta1.DeviceSelector"}, + } +} + func schema_k8sio_api_resource_v1beta1_NetworkDeviceData(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ 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 9339406f4d4..ec3586e55e9 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/generated.pb.go +++ b/staging/src/k8s.io/api/resource/v1alpha3/generated.pb.go @@ -582,10 +582,38 @@ func (m *DeviceSelector) XXX_DiscardUnknown() { 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} +} +func (m *DeviceSubRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeviceSubRequest) 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 *DeviceSubRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeviceSubRequest.Merge(m, src) +} +func (m *DeviceSubRequest) XXX_Size() int { + return m.Size() +} +func (m *DeviceSubRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeviceSubRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeviceSubRequest proto.InternalMessageInfo + func (m *NetworkDeviceData) Reset() { *m = NetworkDeviceData{} } func (*NetworkDeviceData) ProtoMessage() {} func (*NetworkDeviceData) Descriptor() ([]byte, []int) { - return fileDescriptor_66649ee9bbcd89d2, []int{19} + return fileDescriptor_66649ee9bbcd89d2, []int{20} } func (m *NetworkDeviceData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -613,7 +641,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{20} + return fileDescriptor_66649ee9bbcd89d2, []int{21} } func (m *OpaqueDeviceConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -641,7 +669,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{21} + return fileDescriptor_66649ee9bbcd89d2, []int{22} } func (m *ResourceClaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -669,7 +697,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{22} + return fileDescriptor_66649ee9bbcd89d2, []int{23} } func (m *ResourceClaimConsumerReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -697,7 +725,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{23} + return fileDescriptor_66649ee9bbcd89d2, []int{24} } func (m *ResourceClaimList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -725,7 +753,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{24} + return fileDescriptor_66649ee9bbcd89d2, []int{25} } func (m *ResourceClaimSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -753,7 +781,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{25} + return fileDescriptor_66649ee9bbcd89d2, []int{26} } func (m *ResourceClaimStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -781,7 +809,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{26} + return fileDescriptor_66649ee9bbcd89d2, []int{27} } func (m *ResourceClaimTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -809,7 +837,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{27} + return fileDescriptor_66649ee9bbcd89d2, []int{28} } func (m *ResourceClaimTemplateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -837,7 +865,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{28} + return fileDescriptor_66649ee9bbcd89d2, []int{29} } func (m *ResourceClaimTemplateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -865,7 +893,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{29} + return fileDescriptor_66649ee9bbcd89d2, []int{30} } func (m *ResourcePool) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -893,7 +921,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{30} + return fileDescriptor_66649ee9bbcd89d2, []int{31} } func (m *ResourceSlice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -921,7 +949,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{31} + return fileDescriptor_66649ee9bbcd89d2, []int{32} } func (m *ResourceSliceList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -949,7 +977,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{32} + return fileDescriptor_66649ee9bbcd89d2, []int{33} } func (m *ResourceSliceSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -996,6 +1024,7 @@ func init() { 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") + proto.RegisterType((*DeviceSubRequest)(nil), "k8s.io.api.resource.v1alpha3.DeviceSubRequest") proto.RegisterType((*NetworkDeviceData)(nil), "k8s.io.api.resource.v1alpha3.NetworkDeviceData") proto.RegisterType((*OpaqueDeviceConfiguration)(nil), "k8s.io.api.resource.v1alpha3.OpaqueDeviceConfiguration") proto.RegisterType((*ResourceClaim)(nil), "k8s.io.api.resource.v1alpha3.ResourceClaim") @@ -1017,134 +1046,138 @@ func init() { } var fileDescriptor_66649ee9bbcd89d2 = []byte{ - // 2031 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x19, 0x4b, 0x73, 0x1c, 0x47, - 0x59, 0xb3, 0xb3, 0x7a, 0x7d, 0xab, 0x97, 0xdb, 0x38, 0xc8, 0x22, 0xec, 0xca, 0x13, 0x0a, 0xe4, - 0xc4, 0xd9, 0x8d, 0xe5, 0x54, 0x12, 0x30, 0x07, 0x34, 0x92, 0x62, 0x64, 0x6c, 0x59, 0x6e, 0x25, - 0x2e, 0x0c, 0xc1, 0xd0, 0x9a, 0x6d, 0x49, 0x83, 0x66, 0x67, 0x36, 0xd3, 0x3d, 0x72, 0x74, 0xa1, - 0x52, 0x70, 0x77, 0xf1, 0x07, 0xa8, 0xdc, 0xa8, 0xe2, 0x02, 0xfc, 0x03, 0xa8, 0x82, 0x2a, 0x5c, - 0x70, 0x71, 0x15, 0x1c, 0x72, 0x5a, 0xe2, 0xa5, 0x38, 0x73, 0xf7, 0x89, 0xea, 0x9e, 0x9e, 0xe7, - 0xee, 0xc8, 0xb3, 0xa9, 0xa0, 0x32, 0xb7, 0x9d, 0xef, 0xdd, 0xdf, 0xbb, 0x7b, 0xe1, 0xca, 0xd1, - 0x3b, 0xac, 0x69, 0x7b, 0x2d, 0xd2, 0xb5, 0x5b, 0x3e, 0x65, 0x5e, 0xe0, 0x5b, 0xb4, 0x75, 0x7c, - 0x95, 0x38, 0xdd, 0x43, 0x72, 0xad, 0x75, 0x40, 0x5d, 0xea, 0x13, 0x4e, 0xdb, 0xcd, 0xae, 0xef, - 0x71, 0x0f, 0xbd, 0x1c, 0x52, 0x37, 0x49, 0xd7, 0x6e, 0x46, 0xd4, 0xcd, 0x88, 0x7a, 0xe9, 0xf5, - 0x03, 0x9b, 0x1f, 0x06, 0x7b, 0x4d, 0xcb, 0xeb, 0xb4, 0x0e, 0xbc, 0x03, 0xaf, 0x25, 0x99, 0xf6, - 0x82, 0x7d, 0xf9, 0x25, 0x3f, 0xe4, 0xaf, 0x50, 0xd8, 0x92, 0x91, 0x52, 0x6d, 0x79, 0xbe, 0x50, - 0x9b, 0x57, 0xb8, 0xf4, 0x66, 0x42, 0xd3, 0x21, 0xd6, 0xa1, 0xed, 0x52, 0xff, 0xa4, 0xd5, 0x3d, - 0x3a, 0xc8, 0xda, 0x3b, 0x0a, 0x17, 0x6b, 0x75, 0x28, 0x27, 0xc3, 0x74, 0xb5, 0x8a, 0xb8, 0xfc, - 0xc0, 0xe5, 0x76, 0x67, 0x50, 0xcd, 0x5b, 0xcf, 0x63, 0x60, 0xd6, 0x21, 0xed, 0x90, 0x3c, 0x9f, - 0xf1, 0x89, 0x0e, 0x17, 0xd6, 0x1c, 0xc7, 0xb3, 0x04, 0x6c, 0x83, 0x1e, 0xdb, 0x16, 0xdd, 0xe5, - 0x84, 0x07, 0x0c, 0x7d, 0x1d, 0x26, 0xda, 0xbe, 0x7d, 0x4c, 0xfd, 0x45, 0x6d, 0x59, 0x5b, 0x99, - 0x36, 0xe7, 0x1e, 0xf7, 0x1a, 0x63, 0xfd, 0x5e, 0x63, 0x62, 0x43, 0x42, 0xb1, 0xc2, 0xa2, 0x65, - 0xa8, 0x76, 0x3d, 0xcf, 0x59, 0xac, 0x48, 0xaa, 0x19, 0x45, 0x55, 0xdd, 0xf1, 0x3c, 0x07, 0x4b, - 0x8c, 0x94, 0x24, 0x25, 0x2f, 0xea, 0x39, 0x49, 0x12, 0x8a, 0x15, 0x16, 0x59, 0x00, 0x96, 0xe7, - 0xb6, 0x6d, 0x6e, 0x7b, 0x2e, 0x5b, 0xac, 0x2e, 0xeb, 0x2b, 0xb5, 0xd5, 0x56, 0x33, 0x09, 0x73, - 0x7c, 0xb0, 0x66, 0xf7, 0xe8, 0x40, 0x00, 0x58, 0x53, 0xf8, 0xaf, 0x79, 0x7c, 0xb5, 0xb9, 0x1e, - 0xf1, 0x99, 0x48, 0x09, 0x87, 0x18, 0xc4, 0x70, 0x4a, 0x2c, 0xfa, 0x1e, 0x54, 0xdb, 0x84, 0x93, - 0xc5, 0xf1, 0x65, 0x6d, 0xa5, 0xb6, 0xfa, 0x7a, 0xa1, 0x78, 0xe5, 0xb7, 0x26, 0x26, 0x0f, 0x37, - 0x3f, 0xe2, 0xd4, 0x65, 0x42, 0xf8, 0x94, 0x38, 0xd9, 0x06, 0xe1, 0x04, 0x4b, 0x21, 0x68, 0x0f, - 0x6a, 0x2e, 0xe5, 0x0f, 0x3d, 0xff, 0x48, 0x00, 0x17, 0x27, 0xa4, 0xcc, 0xb4, 0xc9, 0x83, 0x99, - 0xd9, 0xdc, 0x56, 0x0c, 0xf2, 0xcc, 0x82, 0xcd, 0x9c, 0xef, 0xf7, 0x1a, 0xb5, 0xed, 0x44, 0x0e, - 0x4e, 0x0b, 0x35, 0xfe, 0xa6, 0xc1, 0x82, 0x8a, 0x90, 0xed, 0xb9, 0x98, 0xb2, 0xc0, 0xe1, 0xe8, - 0xc7, 0x30, 0x19, 0x3a, 0x8d, 0xc9, 0xe8, 0xd4, 0x56, 0xdf, 0x3c, 0x5d, 0x69, 0xa8, 0x2d, 0x2f, - 0xc6, 0x9c, 0x57, 0xce, 0x9a, 0x0c, 0xf1, 0x0c, 0x47, 0x52, 0xd1, 0x3d, 0x98, 0x71, 0xbd, 0x36, - 0xdd, 0xa5, 0x0e, 0xb5, 0xb8, 0xe7, 0xcb, 0xc8, 0xd5, 0x56, 0x97, 0xd3, 0x5a, 0x44, 0x9d, 0x08, - 0xdf, 0x6f, 0xa7, 0xe8, 0xcc, 0x85, 0x7e, 0xaf, 0x31, 0x93, 0x86, 0xe0, 0x8c, 0x1c, 0xe3, 0x33, - 0x1d, 0x6a, 0x26, 0x61, 0xb6, 0x15, 0x6a, 0x44, 0x3f, 0x03, 0x20, 0x9c, 0xfb, 0xf6, 0x5e, 0xc0, - 0xe5, 0x59, 0x44, 0xcc, 0xbf, 0x79, 0xfa, 0x59, 0x52, 0xec, 0xcd, 0xb5, 0x98, 0x77, 0xd3, 0xe5, - 0xfe, 0x89, 0xf9, 0x4a, 0x14, 0xfd, 0x04, 0xf1, 0xf3, 0x7f, 0x36, 0x66, 0xef, 0x06, 0xc4, 0xb1, - 0xf7, 0x6d, 0xda, 0xde, 0x26, 0x1d, 0x8a, 0x53, 0x1a, 0xd1, 0x31, 0x4c, 0x59, 0xa4, 0x4b, 0x2c, - 0x9b, 0x9f, 0x2c, 0x56, 0xa4, 0xf6, 0xb7, 0xcb, 0x6b, 0x5f, 0x57, 0x9c, 0xa1, 0xee, 0x4b, 0x4a, - 0xf7, 0x54, 0x04, 0x1e, 0xd4, 0x1c, 0xeb, 0x5a, 0x72, 0x60, 0x3e, 0x67, 0x3b, 0x5a, 0x00, 0xfd, - 0x88, 0x9e, 0x84, 0xd5, 0x86, 0xc5, 0x4f, 0xb4, 0x0e, 0xe3, 0xc7, 0xc4, 0x09, 0xa8, 0xac, 0xad, - 0x6c, 0xb2, 0x16, 0xc7, 0x38, 0x92, 0x8a, 0x43, 0xde, 0x6f, 0x55, 0xde, 0xd1, 0x96, 0x8e, 0x60, - 0x36, 0x63, 0xeb, 0x10, 0x5d, 0x1b, 0x59, 0x5d, 0xcd, 0xd3, 0xea, 0x2e, 0x51, 0x7e, 0x37, 0x20, - 0x2e, 0xb7, 0xf9, 0x49, 0x4a, 0x99, 0x71, 0x03, 0xce, 0xad, 0x6f, 0xde, 0x52, 0xbd, 0x44, 0xc5, - 0x1d, 0xad, 0x02, 0xd0, 0x8f, 0xba, 0x3e, 0x65, 0xa2, 0x8e, 0x54, 0x47, 0x89, 0x4b, 0x75, 0x33, - 0xc6, 0xe0, 0x14, 0x95, 0x71, 0x0c, 0xaa, 0x43, 0x88, 0x1e, 0xe3, 0x92, 0x0e, 0x55, 0x7c, 0x71, - 0x8f, 0x91, 0x3e, 0x95, 0x18, 0x74, 0x13, 0xc6, 0xf7, 0x44, 0x64, 0x94, 0xf9, 0x97, 0x4b, 0x07, - 0xd1, 0x9c, 0xee, 0xf7, 0x1a, 0xe3, 0x12, 0x80, 0x43, 0x11, 0xc6, 0xa3, 0x0a, 0x7c, 0x35, 0x5f, - 0x30, 0xeb, 0x9e, 0xbb, 0x6f, 0x1f, 0x04, 0xbe, 0xfc, 0x40, 0xdf, 0x81, 0x89, 0x50, 0xa4, 0xb2, - 0x68, 0x25, 0xea, 0x68, 0xbb, 0x12, 0xfa, 0xac, 0xd7, 0x78, 0x29, 0xcf, 0x1a, 0x62, 0xb0, 0xe2, - 0x43, 0x2b, 0x30, 0xe5, 0xd3, 0x0f, 0x03, 0xca, 0x38, 0x93, 0x79, 0x37, 0x6d, 0xce, 0x88, 0xd4, - 0xc1, 0x0a, 0x86, 0x63, 0x2c, 0xfa, 0x58, 0x83, 0xf3, 0x61, 0x55, 0x66, 0x6c, 0x50, 0x15, 0x79, - 0xb5, 0x4c, 0x4e, 0x64, 0x18, 0xcd, 0xaf, 0x28, 0x63, 0xcf, 0x0f, 0x41, 0xe2, 0x61, 0xaa, 0x8c, - 0x7f, 0x6b, 0xf0, 0xd2, 0xf0, 0x0e, 0x82, 0xf6, 0x61, 0xd2, 0x97, 0xbf, 0xa2, 0xe2, 0xbd, 0x5e, - 0xc6, 0x20, 0x75, 0xcc, 0xe2, 0x7e, 0x14, 0x7e, 0x33, 0x1c, 0x09, 0x47, 0x16, 0x4c, 0x58, 0xd2, - 0x26, 0x55, 0xa5, 0xd7, 0x47, 0xeb, 0x77, 0x59, 0x0f, 0xc4, 0x03, 0x28, 0x04, 0x63, 0x25, 0xda, - 0xf8, 0x8d, 0x06, 0xf3, 0xb9, 0x2a, 0x42, 0x75, 0xd0, 0x6d, 0x97, 0xcb, 0xb4, 0xd2, 0xc3, 0x18, - 0x6d, 0xb9, 0xfc, 0x9e, 0x48, 0x76, 0x2c, 0x10, 0xe8, 0x12, 0x54, 0xf7, 0xc4, 0xf8, 0x13, 0xe1, - 0x98, 0x32, 0x67, 0xfb, 0xbd, 0xc6, 0xb4, 0xe9, 0x79, 0x4e, 0x48, 0x21, 0x51, 0xe8, 0x1b, 0x30, - 0xc1, 0xb8, 0x6f, 0xbb, 0x07, 0x8b, 0x55, 0x99, 0x2d, 0xb2, 0xdf, 0xef, 0x4a, 0x48, 0x48, 0xa6, - 0xd0, 0xe8, 0x55, 0x98, 0x3c, 0xa6, 0xbe, 0xac, 0x90, 0x71, 0x49, 0x29, 0xbb, 0xe9, 0xbd, 0x10, - 0x14, 0x92, 0x46, 0x04, 0xc6, 0xef, 0x2a, 0x50, 0x53, 0x01, 0x74, 0x88, 0xdd, 0x41, 0xf7, 0x53, - 0x09, 0x15, 0x46, 0xe2, 0xb5, 0x11, 0x22, 0x61, 0x2e, 0x44, 0xcd, 0x6b, 0x48, 0x06, 0x52, 0xa8, - 0x59, 0x9e, 0xcb, 0xb8, 0x4f, 0x6c, 0x57, 0xa5, 0x6b, 0xb6, 0x41, 0x9c, 0x96, 0x78, 0x8a, 0xcd, - 0x3c, 0xaf, 0x14, 0xd4, 0x12, 0x18, 0xc3, 0x69, 0xb9, 0xe8, 0x41, 0x1c, 0x62, 0x5d, 0x6a, 0x78, - 0xab, 0x94, 0x06, 0x71, 0xf8, 0x72, 0xd1, 0xfd, 0x8b, 0x06, 0x8b, 0x45, 0x4c, 0x99, 0x7a, 0xd4, - 0x3e, 0x57, 0x3d, 0x56, 0xce, 0xae, 0x1e, 0xff, 0xa8, 0xa5, 0x62, 0xcf, 0x18, 0xfa, 0x09, 0x4c, - 0x89, 0x45, 0x48, 0xee, 0x35, 0xe1, 0x3a, 0xf0, 0x46, 0xb9, 0xb5, 0xe9, 0xce, 0xde, 0x4f, 0xa9, - 0xc5, 0x6f, 0x53, 0x4e, 0x92, 0x66, 0x9c, 0xc0, 0x70, 0x2c, 0x15, 0xdd, 0x81, 0x2a, 0xeb, 0x52, - 0x6b, 0x94, 0x41, 0x24, 0x4d, 0xdb, 0xed, 0x52, 0x2b, 0xe9, 0xd7, 0xe2, 0x0b, 0x4b, 0x41, 0xc6, - 0xaf, 0xd2, 0xc1, 0x60, 0x2c, 0x1b, 0x8c, 0x22, 0x17, 0x6b, 0x67, 0xe7, 0xe2, 0x3f, 0xc4, 0xad, - 0x40, 0xda, 0x77, 0xcb, 0x66, 0x1c, 0x7d, 0x30, 0xe0, 0xe6, 0x66, 0x39, 0x37, 0x0b, 0x6e, 0xe9, - 0xe4, 0xb8, 0xca, 0x22, 0x48, 0xca, 0xc5, 0xdb, 0x30, 0x6e, 0x73, 0xda, 0x89, 0xea, 0xeb, 0x72, - 0x69, 0x1f, 0x9b, 0xb3, 0x4a, 0xea, 0xf8, 0x96, 0xe0, 0xc7, 0xa1, 0x18, 0xe3, 0x49, 0xf6, 0x04, - 0xc2, 0xf7, 0xe8, 0x47, 0x30, 0xcd, 0xd4, 0x44, 0x8e, 0xba, 0xc4, 0x95, 0x32, 0x7a, 0xe2, 0xf5, - 0xee, 0x9c, 0x52, 0x35, 0x1d, 0x41, 0x18, 0x4e, 0x24, 0xa6, 0x2a, 0xb8, 0x32, 0x52, 0x05, 0xe7, - 0xe2, 0x5f, 0x58, 0xc1, 0x3e, 0x0c, 0x0b, 0x20, 0xfa, 0x21, 0x4c, 0x78, 0x5d, 0xf2, 0x61, 0x40, - 0x55, 0x54, 0x9e, 0xb3, 0xc1, 0xdd, 0x91, 0xb4, 0xc3, 0xd2, 0x04, 0x84, 0xce, 0x10, 0x8d, 0x95, - 0x48, 0xe3, 0x91, 0x06, 0x0b, 0xf9, 0x66, 0x36, 0x42, 0xb7, 0xd8, 0x81, 0xb9, 0x0e, 0xe1, 0xd6, - 0x61, 0x3c, 0x50, 0xd4, 0x3d, 0x69, 0xa5, 0xdf, 0x6b, 0xcc, 0xdd, 0xce, 0x60, 0x9e, 0xf5, 0x1a, - 0xe8, 0xdd, 0xc0, 0x71, 0x4e, 0xb2, 0x3b, 0x63, 0x8e, 0xdf, 0xf8, 0x85, 0x0e, 0xb3, 0x99, 0xde, - 0x5d, 0x62, 0x3b, 0x5a, 0x83, 0xf9, 0x76, 0xe2, 0x6c, 0x81, 0x50, 0x66, 0x7c, 0x59, 0x11, 0xa7, - 0x33, 0x45, 0xf2, 0xe5, 0xe9, 0xb3, 0xa9, 0xa3, 0x7f, 0xe1, 0xa9, 0x73, 0x0f, 0xe6, 0x48, 0x3c, - 0xad, 0x6f, 0x7b, 0x6d, 0xaa, 0x66, 0x65, 0x53, 0x71, 0xcd, 0xad, 0x65, 0xb0, 0xcf, 0x7a, 0x8d, - 0x2f, 0xe5, 0x67, 0xbc, 0x80, 0xe3, 0x9c, 0x14, 0xf4, 0x0a, 0x8c, 0x5b, 0x5e, 0xe0, 0x72, 0x39, - 0x50, 0xf5, 0xa4, 0x54, 0xd6, 0x05, 0x10, 0x87, 0x38, 0x74, 0x15, 0x6a, 0xa4, 0xdd, 0xb1, 0xdd, - 0x35, 0xcb, 0xa2, 0x8c, 0xc9, 0x6b, 0xdc, 0x54, 0x38, 0xa5, 0xd7, 0x12, 0x30, 0x4e, 0xd3, 0x18, - 0xff, 0xd1, 0xa2, 0x1d, 0xb1, 0x60, 0x97, 0x41, 0x97, 0xc5, 0x66, 0x24, 0x51, 0x2a, 0x30, 0xa9, - 0xe5, 0x46, 0x82, 0x71, 0x84, 0x4f, 0x5d, 0xb5, 0x2b, 0xa5, 0xae, 0xda, 0x7a, 0x89, 0xab, 0x76, - 0xf5, 0xd4, 0xab, 0x76, 0xee, 0xc4, 0xe3, 0x25, 0x4e, 0xfc, 0x01, 0xcc, 0xe5, 0x76, 0xfa, 0x9b, - 0xa0, 0x5b, 0xd4, 0x51, 0x45, 0xf7, 0x9c, 0x5b, 0xef, 0xc0, 0x8d, 0xc0, 0x9c, 0xec, 0xf7, 0x1a, - 0xfa, 0xfa, 0xe6, 0x2d, 0x2c, 0x84, 0x18, 0xbf, 0xd5, 0xe0, 0xdc, 0xc0, 0xcd, 0x18, 0x5d, 0x87, - 0x59, 0xdb, 0xe5, 0xd4, 0xdf, 0x27, 0x16, 0xdd, 0x4e, 0x52, 0xfc, 0x82, 0x3a, 0xd5, 0xec, 0x56, - 0x1a, 0x89, 0xb3, 0xb4, 0xe8, 0x22, 0xe8, 0x76, 0x37, 0xda, 0xae, 0xa5, 0xb6, 0xad, 0x1d, 0x86, - 0x05, 0x4c, 0xd4, 0xc3, 0x21, 0xf1, 0xdb, 0x0f, 0x89, 0x4f, 0xd7, 0xda, 0x6d, 0x71, 0xdf, 0x50, - 0x3e, 0x8d, 0xeb, 0xe1, 0xbb, 0x59, 0x34, 0xce, 0xd3, 0x1b, 0xbf, 0xd6, 0xe0, 0x62, 0x61, 0x27, - 0x29, 0xfd, 0x78, 0x42, 0x00, 0xba, 0xc4, 0x27, 0x1d, 0xca, 0xa9, 0xcf, 0x86, 0x4c, 0xd7, 0x12, - 0x6f, 0x12, 0xf1, 0xe0, 0xde, 0x89, 0x05, 0xe1, 0x94, 0x50, 0xe3, 0x93, 0x0a, 0xcc, 0x62, 0x15, - 0x8f, 0x70, 0x55, 0xfc, 0xdf, 0xaf, 0x0b, 0x77, 0x33, 0xeb, 0xc2, 0x73, 0x52, 0x23, 0x63, 0x5c, - 0xd1, 0xc2, 0x80, 0xee, 0x8b, 0x25, 0x9a, 0xf0, 0x80, 0x95, 0xbb, 0xf8, 0x64, 0x85, 0x4a, 0xc6, - 0x24, 0x08, 0xe1, 0x37, 0x56, 0x02, 0x8d, 0xbe, 0x06, 0xf5, 0x0c, 0xbd, 0xe8, 0xf4, 0x41, 0x87, - 0xfa, 0x98, 0xee, 0x53, 0x9f, 0xba, 0x16, 0x45, 0x57, 0x60, 0x8a, 0x74, 0xed, 0x1b, 0xbe, 0x17, - 0x74, 0x55, 0x44, 0xe3, 0x51, 0xbe, 0xb6, 0xb3, 0x25, 0xe1, 0x38, 0xa6, 0x10, 0xd4, 0x91, 0x45, - 0x2a, 0xaf, 0x52, 0xeb, 0x75, 0x08, 0xc7, 0x31, 0x45, 0xdc, 0xbe, 0xab, 0x85, 0xed, 0xdb, 0x04, - 0x3d, 0xb0, 0xdb, 0xea, 0x4e, 0xf0, 0x86, 0x22, 0xd0, 0xdf, 0xdf, 0xda, 0x78, 0xd6, 0x6b, 0x5c, - 0x2a, 0x7a, 0xf8, 0xe3, 0x27, 0x5d, 0xca, 0x9a, 0xef, 0x6f, 0x6d, 0x60, 0xc1, 0x6c, 0xfc, 0x49, - 0x83, 0x73, 0x99, 0x43, 0x9e, 0xc1, 0x4a, 0xb3, 0x93, 0x5d, 0x69, 0x5e, 0x1b, 0x21, 0x64, 0x05, - 0x4b, 0x8d, 0x9d, 0x3b, 0x84, 0xdc, 0x6a, 0xde, 0xcb, 0x3f, 0x86, 0x5d, 0x2e, 0x7d, 0x73, 0x28, - 0x7e, 0x01, 0x33, 0xfe, 0x5a, 0x81, 0xf3, 0x43, 0xb2, 0x08, 0x3d, 0x00, 0x48, 0x66, 0xcc, 0x10, - 0xa7, 0x0d, 0x51, 0x38, 0x70, 0xcf, 0x9d, 0x93, 0x4f, 0x54, 0x09, 0x34, 0x25, 0x11, 0x31, 0xa8, - 0xf9, 0x94, 0x51, 0xff, 0x98, 0xb6, 0xdf, 0xf5, 0x7c, 0xe5, 0xba, 0x6f, 0x8f, 0xe0, 0xba, 0x81, - 0xec, 0x4d, 0xee, 0x5e, 0x38, 0x11, 0x8c, 0xd3, 0x5a, 0xd0, 0x83, 0xc4, 0x85, 0xe1, 0xbb, 0xeb, - 0xb5, 0x52, 0x27, 0xca, 0x3e, 0x19, 0x9f, 0xe2, 0xcc, 0x7f, 0x68, 0x70, 0x21, 0x63, 0xe4, 0x7b, - 0xb4, 0xd3, 0x75, 0x08, 0xa7, 0x67, 0xd0, 0x8c, 0xee, 0x67, 0x9a, 0xd1, 0xdb, 0x23, 0x78, 0x32, - 0x32, 0xb2, 0xf0, 0x16, 0xf3, 0x77, 0x0d, 0x2e, 0x0e, 0xe5, 0x38, 0x83, 0xe2, 0xfa, 0x7e, 0xb6, - 0xb8, 0xae, 0x7d, 0x8e, 0x73, 0x15, 0xdf, 0x1c, 0x2e, 0x16, 0xfa, 0xe1, 0xff, 0x72, 0x7a, 0x18, - 0xbf, 0xd7, 0x60, 0x26, 0xa2, 0x14, 0xeb, 0x52, 0x89, 0x9d, 0x79, 0x15, 0x40, 0xfd, 0x59, 0x12, - 0xdd, 0xee, 0xf5, 0xc4, 0xee, 0x1b, 0x31, 0x06, 0xa7, 0xa8, 0xd0, 0x4d, 0x40, 0x91, 0x85, 0xbb, - 0x8e, 0x5c, 0x0a, 0xc4, 0xea, 0xa9, 0x4b, 0xde, 0x25, 0xc5, 0x8b, 0xf0, 0x00, 0x05, 0x1e, 0xc2, - 0x65, 0xfc, 0x59, 0x4b, 0xe6, 0xb6, 0x04, 0xbf, 0xa8, 0x9e, 0x97, 0xc6, 0x15, 0x7a, 0x3e, 0x3d, - 0x77, 0x24, 0xe5, 0x0b, 0x3b, 0x77, 0xa4, 0x75, 0x05, 0x25, 0xf1, 0x48, 0xcf, 0x9d, 0x42, 0x96, - 0x42, 0xd9, 0x2d, 0xef, 0x56, 0xea, 0x2f, 0xb2, 0xda, 0xea, 0xab, 0xe5, 0xcc, 0x11, 0x69, 0x3a, - 0x74, 0xc7, 0xbf, 0x02, 0x53, 0xae, 0xd7, 0x0e, 0xf7, 0xe1, 0xdc, 0x76, 0xb1, 0xad, 0xe0, 0x38, - 0xa6, 0x18, 0xf8, 0x23, 0xa7, 0xfa, 0xc5, 0xfc, 0x91, 0x23, 0x37, 0x22, 0xc7, 0x11, 0x04, 0xd1, - 0xf5, 0x21, 0xd9, 0x88, 0x14, 0x1c, 0xc7, 0x14, 0xe8, 0x4e, 0x32, 0x5f, 0x26, 0x64, 0x4c, 0xbe, - 0x56, 0x66, 0x44, 0x17, 0x0f, 0x14, 0xd3, 0x7c, 0xfc, 0xb4, 0x3e, 0xf6, 0xe4, 0x69, 0x7d, 0xec, - 0xd3, 0xa7, 0xf5, 0xb1, 0x8f, 0xfb, 0x75, 0xed, 0x71, 0xbf, 0xae, 0x3d, 0xe9, 0xd7, 0xb5, 0x4f, - 0xfb, 0x75, 0xed, 0xb3, 0x7e, 0x5d, 0xfb, 0xe5, 0xbf, 0xea, 0x63, 0x3f, 0x78, 0xf9, 0xb4, 0x7f, - 0x94, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xba, 0x87, 0x1a, 0xe0, 0x70, 0x1e, 0x00, 0x00, + // 2087 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3a, 0xcb, 0x73, 0x1c, 0x47, + 0xf9, 0x9a, 0x9d, 0xd5, 0xeb, 0x5b, 0xbd, 0xdc, 0xfe, 0xd9, 0xbf, 0xb5, 0x08, 0xbb, 0xf2, 0x84, + 0x02, 0x39, 0x71, 0x76, 0x63, 0x39, 0x95, 0x04, 0xcc, 0x01, 0xad, 0x24, 0x1b, 0x19, 0x5b, 0x96, + 0x5b, 0x89, 0x0b, 0x43, 0x30, 0xb4, 0x66, 0x5b, 0xd2, 0xa0, 0xd9, 0x99, 0xcd, 0x74, 0xcf, 0x3a, + 0xba, 0x50, 0x29, 0xfe, 0x00, 0x17, 0xff, 0x00, 0x95, 0x1b, 0x55, 0x5c, 0x80, 0xff, 0x00, 0xaa, + 0xa0, 0x0a, 0x17, 0x5c, 0x5c, 0x15, 0x0e, 0x39, 0x2d, 0xf1, 0x52, 0x9c, 0x39, 0x70, 0xf3, 0x89, + 0xea, 0x9e, 0x9e, 0xe7, 0xee, 0x48, 0xa3, 0x10, 0x54, 0xa1, 0x8a, 0x9b, 0xe6, 0x7b, 0xf7, 0xf7, + 0xea, 0xef, 0xeb, 0x15, 0x5c, 0x3d, 0x7c, 0x9b, 0x35, 0x2c, 0xb7, 0x49, 0xba, 0x56, 0xd3, 0xa3, + 0xcc, 0xf5, 0x3d, 0x93, 0x36, 0x7b, 0xd7, 0x88, 0xdd, 0x3d, 0x20, 0xd7, 0x9b, 0xfb, 0xd4, 0xa1, + 0x1e, 0xe1, 0xb4, 0xdd, 0xe8, 0x7a, 0x2e, 0x77, 0xd1, 0x4b, 0x01, 0x75, 0x83, 0x74, 0xad, 0x46, + 0x48, 0xdd, 0x08, 0xa9, 0x17, 0x5f, 0xdb, 0xb7, 0xf8, 0x81, 0xbf, 0xdb, 0x30, 0xdd, 0x4e, 0x73, + 0xdf, 0xdd, 0x77, 0x9b, 0x92, 0x69, 0xd7, 0xdf, 0x93, 0x5f, 0xf2, 0x43, 0xfe, 0x15, 0x08, 0x5b, + 0x34, 0x12, 0xaa, 0x4d, 0xd7, 0x13, 0x6a, 0xb3, 0x0a, 0x17, 0xdf, 0x88, 0x69, 0x3a, 0xc4, 0x3c, + 0xb0, 0x1c, 0xea, 0x1d, 0x35, 0xbb, 0x87, 0xfb, 0x69, 0x7b, 0x4f, 0xc3, 0xc5, 0x9a, 0x1d, 0xca, + 0xc9, 0x28, 0x5d, 0xcd, 0x3c, 0x2e, 0xcf, 0x77, 0xb8, 0xd5, 0x19, 0x56, 0xf3, 0xe6, 0x49, 0x0c, + 0xcc, 0x3c, 0xa0, 0x1d, 0x92, 0xe5, 0x33, 0x3e, 0xd2, 0xe1, 0xc2, 0xaa, 0x6d, 0xbb, 0xa6, 0x80, + 0xad, 0xd3, 0x9e, 0x65, 0xd2, 0x1d, 0x4e, 0xb8, 0xcf, 0xd0, 0x57, 0x61, 0xa2, 0xed, 0x59, 0x3d, + 0xea, 0x55, 0xb5, 0x25, 0x6d, 0x79, 0xba, 0x35, 0xf7, 0xb4, 0x5f, 0x1f, 0x1b, 0xf4, 0xeb, 0x13, + 0xeb, 0x12, 0x8a, 0x15, 0x16, 0x2d, 0x41, 0xb9, 0xeb, 0xba, 0x76, 0xb5, 0x24, 0xa9, 0x66, 0x14, + 0x55, 0x79, 0xdb, 0x75, 0x6d, 0x2c, 0x31, 0x52, 0x92, 0x94, 0x5c, 0xd5, 0x33, 0x92, 0x24, 0x14, + 0x2b, 0x2c, 0x32, 0x01, 0x4c, 0xd7, 0x69, 0x5b, 0xdc, 0x72, 0x1d, 0x56, 0x2d, 0x2f, 0xe9, 0xcb, + 0x95, 0x95, 0x66, 0x23, 0x0e, 0x73, 0x74, 0xb0, 0x46, 0xf7, 0x70, 0x5f, 0x00, 0x58, 0x43, 0xf8, + 0xaf, 0xd1, 0xbb, 0xd6, 0x58, 0x0b, 0xf9, 0x5a, 0x48, 0x09, 0x87, 0x08, 0xc4, 0x70, 0x42, 0x2c, + 0xfa, 0x0e, 0x94, 0xdb, 0x84, 0x93, 0xea, 0xf8, 0x92, 0xb6, 0x5c, 0x59, 0x79, 0x2d, 0x57, 0xbc, + 0xf2, 0x5b, 0x03, 0x93, 0xc7, 0x1b, 0x1f, 0x70, 0xea, 0x30, 0x21, 0x7c, 0x4a, 0x9c, 0x6c, 0x9d, + 0x70, 0x82, 0xa5, 0x10, 0xb4, 0x0b, 0x15, 0x87, 0xf2, 0xc7, 0xae, 0x77, 0x28, 0x80, 0xd5, 0x09, + 0x29, 0x33, 0x69, 0xf2, 0x70, 0x66, 0x36, 0xb6, 0x14, 0x83, 0x3c, 0xb3, 0x60, 0x6b, 0xcd, 0x0f, + 0xfa, 0xf5, 0xca, 0x56, 0x2c, 0x07, 0x27, 0x85, 0x1a, 0x7f, 0xd6, 0x60, 0x41, 0x45, 0xc8, 0x72, + 0x1d, 0x4c, 0x99, 0x6f, 0x73, 0xf4, 0x43, 0x98, 0x0c, 0x9c, 0xc6, 0x64, 0x74, 0x2a, 0x2b, 0x6f, + 0x1c, 0xaf, 0x34, 0xd0, 0x96, 0x15, 0xd3, 0x9a, 0x57, 0xce, 0x9a, 0x0c, 0xf0, 0x0c, 0x87, 0x52, + 0xd1, 0x03, 0x98, 0x71, 0xdc, 0x36, 0xdd, 0xa1, 0x36, 0x35, 0xb9, 0xeb, 0xc9, 0xc8, 0x55, 0x56, + 0x96, 0x92, 0x5a, 0x44, 0x9d, 0x08, 0xdf, 0x6f, 0x25, 0xe8, 0x5a, 0x0b, 0x83, 0x7e, 0x7d, 0x26, + 0x09, 0xc1, 0x29, 0x39, 0xc6, 0xa7, 0x3a, 0x54, 0x5a, 0x84, 0x59, 0x66, 0xa0, 0x11, 0xfd, 0x04, + 0x80, 0x70, 0xee, 0x59, 0xbb, 0x3e, 0x97, 0x67, 0x11, 0x31, 0xff, 0xfa, 0xf1, 0x67, 0x49, 0xb0, + 0x37, 0x56, 0x23, 0xde, 0x0d, 0x87, 0x7b, 0x47, 0xad, 0x97, 0xc3, 0xe8, 0xc7, 0x88, 0x9f, 0xfe, + 0xb5, 0x3e, 0x7b, 0xdf, 0x27, 0xb6, 0xb5, 0x67, 0xd1, 0xf6, 0x16, 0xe9, 0x50, 0x9c, 0xd0, 0x88, + 0x7a, 0x30, 0x65, 0x92, 0x2e, 0x31, 0x2d, 0x7e, 0x54, 0x2d, 0x49, 0xed, 0x6f, 0x15, 0xd7, 0xbe, + 0xa6, 0x38, 0x03, 0xdd, 0x97, 0x95, 0xee, 0xa9, 0x10, 0x3c, 0xac, 0x39, 0xd2, 0xb5, 0x68, 0xc3, + 0x7c, 0xc6, 0x76, 0xb4, 0x00, 0xfa, 0x21, 0x3d, 0x0a, 0xaa, 0x0d, 0x8b, 0x3f, 0xd1, 0x1a, 0x8c, + 0xf7, 0x88, 0xed, 0x53, 0x59, 0x5b, 0xe9, 0x64, 0xcd, 0x8f, 0x71, 0x28, 0x15, 0x07, 0xbc, 0xdf, + 0x28, 0xbd, 0xad, 0x2d, 0x1e, 0xc2, 0x6c, 0xca, 0xd6, 0x11, 0xba, 0xd6, 0xd3, 0xba, 0x1a, 0xc7, + 0xd5, 0x5d, 0xac, 0xfc, 0xbe, 0x4f, 0x1c, 0x6e, 0xf1, 0xa3, 0x84, 0x32, 0xe3, 0x16, 0x9c, 0x5b, + 0xdb, 0xb8, 0xa3, 0x7a, 0x89, 0x8a, 0x3b, 0x5a, 0x01, 0xa0, 0x1f, 0x74, 0x3d, 0xca, 0x44, 0x1d, + 0xa9, 0x8e, 0x12, 0x95, 0xea, 0x46, 0x84, 0xc1, 0x09, 0x2a, 0xa3, 0x07, 0xaa, 0x43, 0x88, 0x1e, + 0xe3, 0x90, 0x0e, 0x55, 0x7c, 0x51, 0x8f, 0x91, 0x3e, 0x95, 0x18, 0x74, 0x1b, 0xc6, 0x77, 0x45, + 0x64, 0x94, 0xf9, 0x57, 0x0a, 0x07, 0xb1, 0x35, 0x3d, 0xe8, 0xd7, 0xc7, 0x25, 0x00, 0x07, 0x22, + 0x8c, 0x27, 0x25, 0xf8, 0x72, 0xb6, 0x60, 0xd6, 0x5c, 0x67, 0xcf, 0xda, 0xf7, 0x3d, 0xf9, 0x81, + 0xbe, 0x05, 0x13, 0x81, 0x48, 0x65, 0xd1, 0x72, 0xd8, 0xd1, 0x76, 0x24, 0xf4, 0x45, 0xbf, 0x7e, + 0x31, 0xcb, 0x1a, 0x60, 0xb0, 0xe2, 0x43, 0xcb, 0x30, 0xe5, 0xd1, 0xf7, 0x7d, 0xca, 0x38, 0x93, + 0x79, 0x37, 0xdd, 0x9a, 0x11, 0xa9, 0x83, 0x15, 0x0c, 0x47, 0x58, 0xf4, 0xa1, 0x06, 0xe7, 0x83, + 0xaa, 0x4c, 0xd9, 0xa0, 0x2a, 0xf2, 0x5a, 0x91, 0x9c, 0x48, 0x31, 0xb6, 0xbe, 0xa4, 0x8c, 0x3d, + 0x3f, 0x02, 0x89, 0x47, 0xa9, 0x32, 0xfe, 0xae, 0xc1, 0xc5, 0xd1, 0x1d, 0x04, 0xed, 0xc1, 0xa4, + 0x27, 0xff, 0x0a, 0x8b, 0xf7, 0x46, 0x11, 0x83, 0xd4, 0x31, 0xf3, 0xfb, 0x51, 0xf0, 0xcd, 0x70, + 0x28, 0x1c, 0x99, 0x30, 0x61, 0x4a, 0x9b, 0x54, 0x95, 0xde, 0x38, 0x5d, 0xbf, 0x4b, 0x7b, 0x20, + 0xba, 0x80, 0x02, 0x30, 0x56, 0xa2, 0x8d, 0x5f, 0x6a, 0x30, 0x9f, 0xa9, 0x22, 0x54, 0x03, 0xdd, + 0x72, 0xb8, 0x4c, 0x2b, 0x3d, 0x88, 0xd1, 0xa6, 0xc3, 0x1f, 0x88, 0x64, 0xc7, 0x02, 0x81, 0x2e, + 0x43, 0x79, 0x57, 0x5c, 0x7f, 0x22, 0x1c, 0x53, 0xad, 0xd9, 0x41, 0xbf, 0x3e, 0xdd, 0x72, 0x5d, + 0x3b, 0xa0, 0x90, 0x28, 0xf4, 0x35, 0x98, 0x60, 0xdc, 0xb3, 0x9c, 0xfd, 0x6a, 0x59, 0x66, 0x8b, + 0xec, 0xf7, 0x3b, 0x12, 0x12, 0x90, 0x29, 0x34, 0x7a, 0x05, 0x26, 0x7b, 0xd4, 0x93, 0x15, 0x32, + 0x2e, 0x29, 0x65, 0x37, 0x7d, 0x10, 0x80, 0x02, 0xd2, 0x90, 0xc0, 0xf8, 0x75, 0x09, 0x2a, 0x2a, + 0x80, 0x36, 0xb1, 0x3a, 0xe8, 0x61, 0x22, 0xa1, 0x82, 0x48, 0xbc, 0x7a, 0x8a, 0x48, 0xb4, 0x16, + 0xc2, 0xe6, 0x35, 0x22, 0x03, 0x29, 0x54, 0x4c, 0xd7, 0x61, 0xdc, 0x23, 0x96, 0xa3, 0xd2, 0x35, + 0xdd, 0x20, 0x8e, 0x4b, 0x3c, 0xc5, 0xd6, 0x3a, 0xaf, 0x14, 0x54, 0x62, 0x18, 0xc3, 0x49, 0xb9, + 0xe8, 0x51, 0x14, 0x62, 0x5d, 0x6a, 0x78, 0xb3, 0x90, 0x06, 0x71, 0xf8, 0x62, 0xd1, 0xfd, 0xa3, + 0x06, 0xd5, 0x3c, 0xa6, 0x54, 0x3d, 0x6a, 0x9f, 0xa9, 0x1e, 0x4b, 0x67, 0x57, 0x8f, 0xbf, 0xd3, + 0x12, 0xb1, 0x67, 0x0c, 0xfd, 0x08, 0xa6, 0xc4, 0x20, 0x24, 0xe7, 0x9a, 0x60, 0x1c, 0x78, 0xbd, + 0xd8, 0xd8, 0x74, 0x6f, 0xf7, 0xc7, 0xd4, 0xe4, 0x77, 0x29, 0x27, 0x71, 0x33, 0x8e, 0x61, 0x38, + 0x92, 0x8a, 0xee, 0x41, 0x99, 0x75, 0xa9, 0x79, 0x9a, 0x8b, 0x48, 0x9a, 0xb6, 0xd3, 0xa5, 0x66, + 0xdc, 0xaf, 0xc5, 0x17, 0x96, 0x82, 0x8c, 0x9f, 0x27, 0x83, 0xc1, 0x58, 0x3a, 0x18, 0x79, 0x2e, + 0xd6, 0xce, 0xce, 0xc5, 0xbf, 0x8d, 0x5a, 0x81, 0xb4, 0xef, 0x8e, 0xc5, 0x38, 0x7a, 0x6f, 0xc8, + 0xcd, 0x8d, 0x62, 0x6e, 0x16, 0xdc, 0xd2, 0xc9, 0x51, 0x95, 0x85, 0x90, 0x84, 0x8b, 0xb7, 0x60, + 0xdc, 0xe2, 0xb4, 0x13, 0xd6, 0xd7, 0x95, 0xc2, 0x3e, 0x6e, 0xcd, 0x2a, 0xa9, 0xe3, 0x9b, 0x82, + 0x1f, 0x07, 0x62, 0x8c, 0x67, 0xe9, 0x13, 0x08, 0xdf, 0xa3, 0x1f, 0xc0, 0x34, 0x53, 0x37, 0x72, + 0xd8, 0x25, 0xae, 0x16, 0xd1, 0x13, 0x8d, 0x77, 0xe7, 0x94, 0xaa, 0xe9, 0x10, 0xc2, 0x70, 0x2c, + 0x31, 0x51, 0xc1, 0xa5, 0x53, 0x55, 0x70, 0x26, 0xfe, 0xb9, 0x15, 0xec, 0xc1, 0xa8, 0x00, 0xa2, + 0xef, 0xc3, 0x84, 0xdb, 0x25, 0xef, 0xfb, 0x54, 0x45, 0xe5, 0x84, 0x09, 0xee, 0x9e, 0xa4, 0x1d, + 0x95, 0x26, 0x20, 0x74, 0x06, 0x68, 0xac, 0x44, 0x1a, 0x4f, 0x34, 0x58, 0xc8, 0x36, 0xb3, 0x53, + 0x74, 0x8b, 0x6d, 0x98, 0xeb, 0x10, 0x6e, 0x1e, 0x44, 0x17, 0x8a, 0xda, 0x93, 0x96, 0x07, 0xfd, + 0xfa, 0xdc, 0xdd, 0x14, 0xe6, 0x45, 0xbf, 0x8e, 0x6e, 0xfa, 0xb6, 0x7d, 0x94, 0x9e, 0x19, 0x33, + 0xfc, 0xc6, 0x3f, 0x75, 0x98, 0x4d, 0xf5, 0xee, 0x02, 0xd3, 0xd1, 0x2a, 0xcc, 0xb7, 0x63, 0x67, + 0x0b, 0x84, 0x32, 0xe3, 0xff, 0x15, 0x71, 0x32, 0x53, 0x24, 0x5f, 0x96, 0x3e, 0x9d, 0x3a, 0xfa, + 0xe7, 0x9e, 0x3a, 0x0f, 0x60, 0x8e, 0x44, 0xb7, 0xf5, 0x5d, 0xb7, 0x4d, 0xd5, 0x5d, 0xd9, 0x50, + 0x5c, 0x73, 0xab, 0x29, 0xec, 0x8b, 0x7e, 0xfd, 0xff, 0xb2, 0x77, 0xbc, 0x80, 0xe3, 0x8c, 0x14, + 0xf4, 0x32, 0x8c, 0x9b, 0xae, 0xef, 0x70, 0x79, 0xa1, 0xea, 0x71, 0xa9, 0xac, 0x09, 0x20, 0x0e, + 0x70, 0xe8, 0x1a, 0x54, 0x48, 0xbb, 0x63, 0x39, 0xab, 0xa6, 0x49, 0x19, 0x93, 0x6b, 0xdc, 0x54, + 0x70, 0x4b, 0xaf, 0xc6, 0x60, 0x9c, 0xa4, 0x41, 0x0e, 0xcc, 0xed, 0x59, 0x1e, 0xe3, 0xab, 0x3d, + 0x62, 0xd9, 0x64, 0xd7, 0xa6, 0xd5, 0xc9, 0xe2, 0xd7, 0xe2, 0x8e, 0xbf, 0x1b, 0xde, 0xbb, 0x17, + 0xc3, 0xf3, 0xdd, 0x4c, 0x49, 0xc3, 0x19, 0xe9, 0xc6, 0x3f, 0xb4, 0x70, 0x26, 0xcd, 0x99, 0x9d, + 0xd0, 0x15, 0x31, 0x89, 0x49, 0x94, 0x4a, 0x84, 0xc4, 0x30, 0x25, 0xc1, 0x38, 0xc4, 0x27, 0x56, + 0xfb, 0x52, 0xa1, 0xd5, 0x5e, 0x2f, 0xb0, 0xda, 0x97, 0x8f, 0x5d, 0xed, 0x33, 0x1e, 0x1e, 0x3f, + 0xd9, 0xc3, 0xc6, 0x7b, 0x30, 0x97, 0xd9, 0x21, 0x6e, 0x83, 0x6e, 0x52, 0x5b, 0x15, 0xf9, 0x09, + 0x5b, 0xf6, 0xd0, 0x06, 0xd2, 0x9a, 0x1c, 0xf4, 0xeb, 0xfa, 0xda, 0xc6, 0x1d, 0x2c, 0x84, 0x18, + 0x1f, 0x97, 0xc2, 0xb2, 0x8e, 0x83, 0xf1, 0xbf, 0x42, 0xfa, 0x37, 0x0b, 0xc9, 0xf8, 0x95, 0x06, + 0xe7, 0x86, 0xde, 0x37, 0xd0, 0x0d, 0x98, 0xb5, 0x1c, 0x4e, 0xbd, 0x3d, 0x62, 0xd2, 0xad, 0xd8, + 0xbf, 0x17, 0x94, 0x88, 0xd9, 0xcd, 0x24, 0x12, 0xa7, 0x69, 0xd1, 0x25, 0xd0, 0xad, 0x6e, 0xb8, + 0x23, 0xc9, 0x18, 0x6e, 0x6e, 0x33, 0x2c, 0x60, 0x22, 0x18, 0x07, 0xc4, 0x6b, 0x3f, 0x26, 0x1e, + 0x5d, 0x6d, 0xb7, 0xc5, 0xd6, 0xa8, 0x32, 0x35, 0x0a, 0xc6, 0xb7, 0xd3, 0x68, 0x9c, 0xa5, 0x37, + 0x7e, 0xa1, 0xc1, 0xa5, 0xdc, 0xfb, 0xa0, 0xf0, 0x13, 0x18, 0x01, 0xe8, 0x12, 0x8f, 0x74, 0x28, + 0xa7, 0x1e, 0x1b, 0x31, 0x23, 0x15, 0x78, 0x59, 0x8a, 0xc6, 0xaf, 0xed, 0x48, 0x10, 0x4e, 0x08, + 0x35, 0x3e, 0x2a, 0xc1, 0x2c, 0x56, 0x99, 0x11, 0x0c, 0xfc, 0xff, 0xf9, 0xa1, 0xef, 0x7e, 0x6a, + 0xe8, 0x3b, 0xa1, 0xe0, 0x52, 0xc6, 0xe5, 0x8d, 0x7d, 0xe8, 0xa1, 0x58, 0x85, 0x08, 0xf7, 0x59, + 0xb1, 0xf5, 0x35, 0x2d, 0x54, 0x32, 0xc6, 0x41, 0x08, 0xbe, 0xb1, 0x12, 0x68, 0x0c, 0x34, 0xa8, + 0xa5, 0xe8, 0xc5, 0x7d, 0xed, 0x77, 0xa8, 0x87, 0xe9, 0x1e, 0xf5, 0xa8, 0x63, 0x52, 0x74, 0x15, + 0xa6, 0x48, 0xd7, 0xba, 0xe5, 0xb9, 0x7e, 0x57, 0x45, 0x34, 0x1a, 0xc8, 0x56, 0xb7, 0x37, 0x25, + 0x1c, 0x47, 0x14, 0x82, 0x3a, 0xb4, 0x48, 0xe5, 0x55, 0x62, 0x49, 0x0a, 0xe0, 0x38, 0xa2, 0x88, + 0x7a, 0x47, 0x39, 0xb7, 0x77, 0xb4, 0x40, 0xf7, 0xad, 0xb6, 0xda, 0xec, 0x5e, 0x57, 0x04, 0xfa, + 0xbb, 0x9b, 0xeb, 0x2f, 0xfa, 0xf5, 0xcb, 0x79, 0xcf, 0xb7, 0xfc, 0xa8, 0x4b, 0x59, 0xe3, 0xdd, + 0xcd, 0x75, 0x2c, 0x98, 0x8d, 0xdf, 0x6b, 0x70, 0x2e, 0x75, 0xc8, 0x33, 0x18, 0x4c, 0xb7, 0xd3, + 0x83, 0xe9, 0xab, 0xa7, 0x08, 0x59, 0xce, 0x68, 0x6a, 0x65, 0x0e, 0x21, 0x67, 0xd3, 0x77, 0xb2, + 0x4f, 0x9a, 0x57, 0x0a, 0xef, 0x7f, 0xf9, 0xef, 0x98, 0xc6, 0x9f, 0x4a, 0x70, 0x7e, 0x44, 0x16, + 0xa1, 0x47, 0x00, 0x71, 0x83, 0x1b, 0xe1, 0xb4, 0x11, 0x0a, 0x87, 0x5e, 0x2b, 0xe6, 0xe4, 0x43, + 0x63, 0x0c, 0x4d, 0x48, 0x44, 0x0c, 0x2a, 0x1e, 0x65, 0xd4, 0xeb, 0xd1, 0xf6, 0x4d, 0xd7, 0x53, + 0xae, 0xfb, 0xe6, 0x29, 0x5c, 0x37, 0x94, 0xbd, 0xf1, 0x06, 0x8d, 0x63, 0xc1, 0x38, 0xa9, 0x05, + 0x3d, 0x8a, 0x5d, 0x18, 0xbc, 0x9e, 0x5f, 0x2f, 0x74, 0xa2, 0xf4, 0xc3, 0xff, 0x31, 0xce, 0xfc, + 0x8b, 0x06, 0x17, 0x52, 0x46, 0xbe, 0x43, 0x3b, 0x5d, 0x9b, 0x70, 0x7a, 0x06, 0xcd, 0xe8, 0x61, + 0xaa, 0x19, 0xbd, 0x75, 0x0a, 0x4f, 0x86, 0x46, 0xe6, 0xee, 0xa2, 0x1f, 0x6b, 0x70, 0x69, 0x24, + 0xc7, 0x19, 0x14, 0xd7, 0x77, 0xd3, 0xc5, 0x75, 0xfd, 0x33, 0x9c, 0x2b, 0x7f, 0xff, 0xbb, 0x94, + 0xeb, 0x87, 0xff, 0xca, 0xdb, 0xc3, 0xf8, 0x8d, 0x06, 0x33, 0x21, 0xa5, 0x18, 0x42, 0x0b, 0x0c, + 0x6c, 0x2b, 0x00, 0xea, 0x27, 0xaf, 0xf0, 0x8d, 0x46, 0x8f, 0xed, 0xbe, 0x15, 0x61, 0x70, 0x82, + 0x0a, 0xdd, 0x06, 0x14, 0x5a, 0xb8, 0x63, 0xcb, 0xa1, 0x40, 0xcc, 0x3d, 0xba, 0xe4, 0x5d, 0x54, + 0xbc, 0x08, 0x0f, 0x51, 0xe0, 0x11, 0x5c, 0xc6, 0x1f, 0xb4, 0xf8, 0xde, 0x96, 0xe0, 0x2f, 0xaa, + 0xe7, 0xa5, 0x71, 0xb9, 0x9e, 0x4f, 0xde, 0x3b, 0x92, 0xf2, 0x0b, 0x7b, 0xef, 0x48, 0xeb, 0x72, + 0x4a, 0xe2, 0x89, 0x9e, 0x39, 0x85, 0x2c, 0x85, 0xa2, 0x53, 0xde, 0x9d, 0xc4, 0x0f, 0x9d, 0x95, + 0x95, 0x57, 0x8a, 0x99, 0x23, 0xd2, 0x74, 0xe4, 0xe6, 0x74, 0x15, 0xa6, 0x1c, 0xb7, 0x1d, 0xcc, + 0xc3, 0x99, 0xe9, 0x62, 0x4b, 0xc1, 0x71, 0x44, 0x31, 0xf4, 0x73, 0x5c, 0xf9, 0xf3, 0xf9, 0x39, + 0x4e, 0x4e, 0x44, 0xb6, 0x2d, 0x08, 0xc2, 0xa5, 0x2c, 0x9e, 0x88, 0x14, 0x1c, 0x47, 0x14, 0xe8, + 0x5e, 0x7c, 0xbf, 0x4c, 0xc8, 0x98, 0x7c, 0xa5, 0xc8, 0x15, 0x9d, 0x7f, 0xa1, 0xb4, 0x5a, 0x4f, + 0x9f, 0xd7, 0xc6, 0x9e, 0x3d, 0xaf, 0x8d, 0x7d, 0xf2, 0xbc, 0x36, 0xf6, 0xe1, 0xa0, 0xa6, 0x3d, + 0x1d, 0xd4, 0xb4, 0x67, 0x83, 0x9a, 0xf6, 0xc9, 0xa0, 0xa6, 0x7d, 0x3a, 0xa8, 0x69, 0x3f, 0xfb, + 0x5b, 0x6d, 0xec, 0x7b, 0x2f, 0x1d, 0xf7, 0x7f, 0x01, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xc2, + 0x62, 0xe6, 0x4b, 0x36, 0x20, 0x00, 0x00, } func (m *AllocatedDeviceStatus) Marshal() (dAtA []byte, err error) { @@ -1942,6 +1975,20 @@ func (m *DeviceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.FirstAvailable) > 0 { + for iNdEx := len(m.FirstAvailable) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.FirstAvailable[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } if m.AdminAccess != nil { i-- if *m.AdminAccess { @@ -2075,6 +2122,61 @@ func (m *DeviceSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *DeviceSubRequest) 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 *DeviceSubRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeviceSubRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.Count)) + i-- + dAtA[i] = 0x28 + i -= len(m.AllocationMode) + copy(dAtA[i:], m.AllocationMode) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllocationMode))) + i-- + dAtA[i] = 0x22 + if len(m.Selectors) > 0 { + for iNdEx := len(m.Selectors) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Selectors[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.DeviceClassName) + copy(dAtA[i:], m.DeviceClassName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DeviceClassName))) + 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 *NetworkDeviceData) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3059,6 +3161,12 @@ func (m *DeviceRequest) Size() (n int) { if m.AdminAccess != nil { n += 2 } + if len(m.FirstAvailable) > 0 { + for _, e := range m.FirstAvailable { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -3095,6 +3203,28 @@ func (m *DeviceSelector) Size() (n int) { return n } +func (m *DeviceSubRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DeviceClassName) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Selectors) > 0 { + for _, e := range m.Selectors { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.AllocationMode) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Count)) + return n +} + func (m *NetworkDeviceData) Size() (n int) { if m == nil { return 0 @@ -3585,6 +3715,11 @@ func (this *DeviceRequest) String() string { repeatedStringForSelectors += strings.Replace(strings.Replace(f.String(), "DeviceSelector", "DeviceSelector", 1), `&`, ``, 1) + "," } repeatedStringForSelectors += "}" + repeatedStringForFirstAvailable := "[]DeviceSubRequest{" + for _, f := range this.FirstAvailable { + repeatedStringForFirstAvailable += strings.Replace(strings.Replace(f.String(), "DeviceSubRequest", "DeviceSubRequest", 1), `&`, ``, 1) + "," + } + repeatedStringForFirstAvailable += "}" s := strings.Join([]string{`&DeviceRequest{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `DeviceClassName:` + fmt.Sprintf("%v", this.DeviceClassName) + `,`, @@ -3592,6 +3727,7 @@ func (this *DeviceRequest) String() string { `AllocationMode:` + fmt.Sprintf("%v", this.AllocationMode) + `,`, `Count:` + fmt.Sprintf("%v", this.Count) + `,`, `AdminAccess:` + valueToStringGenerated(this.AdminAccess) + `,`, + `FirstAvailable:` + repeatedStringForFirstAvailable + `,`, `}`, }, "") return s @@ -3620,6 +3756,25 @@ func (this *DeviceSelector) String() string { }, "") return s } +func (this *DeviceSubRequest) String() string { + if this == nil { + return "nil" + } + repeatedStringForSelectors := "[]DeviceSelector{" + for _, f := range this.Selectors { + repeatedStringForSelectors += strings.Replace(strings.Replace(f.String(), "DeviceSelector", "DeviceSelector", 1), `&`, ``, 1) + "," + } + repeatedStringForSelectors += "}" + s := strings.Join([]string{`&DeviceSubRequest{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `DeviceClassName:` + fmt.Sprintf("%v", this.DeviceClassName) + `,`, + `Selectors:` + repeatedStringForSelectors + `,`, + `AllocationMode:` + fmt.Sprintf("%v", this.AllocationMode) + `,`, + `Count:` + fmt.Sprintf("%v", this.Count) + `,`, + `}`, + }, "") + return s +} func (this *NetworkDeviceData) String() string { if this == nil { return "nil" @@ -6223,6 +6378,40 @@ func (m *DeviceRequest) Unmarshal(dAtA []byte) error { } b := bool(v != 0) m.AdminAccess = &b + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FirstAvailable", 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.FirstAvailable = append(m.FirstAvailable, DeviceSubRequest{}) + if err := m.FirstAvailable[len(m.FirstAvailable)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -6529,6 +6718,205 @@ func (m *DeviceSelector) Unmarshal(dAtA []byte) error { } return nil } +func (m *DeviceSubRequest) 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: DeviceSubRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeviceSubRequest: 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 DeviceClassName", 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.DeviceClassName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selectors", 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.Selectors = append(m.Selectors, DeviceSelector{}) + if err := m.Selectors[len(m.Selectors)-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 AllocationMode", 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.AllocationMode = DeviceAllocationMode(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + } + m.Count = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Count |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 *NetworkDeviceData) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/staging/src/k8s.io/api/resource/v1alpha3/generated.proto b/staging/src/k8s.io/api/resource/v1alpha3/generated.proto index 19ac86c7722..3fcbb744df5 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/generated.proto +++ b/staging/src/k8s.io/api/resource/v1alpha3/generated.proto @@ -200,6 +200,10 @@ message DeviceAllocationConfiguration { // Requests lists the names of requests where the configuration applies. // If empty, its applies to all requests. // + // References to subrequests must include the name of the main request + // and may include the subrequest using the format
[/]. If just + // the main request is given, the configuration applies to all subrequests. + // // +optional // +listType=atomic repeated string requests = 2; @@ -286,6 +290,10 @@ message DeviceClaimConfiguration { // Requests lists the names of requests where the configuration applies. // If empty, it applies to all requests. // + // References to subrequests must include the name of the main request + // and may include the subrequest using the format
[/]. If just + // the main request is given, the configuration applies to all subrequests. + // // +optional // +listType=atomic repeated string requests = 1; @@ -370,6 +378,10 @@ message DeviceConstraint { // constraint. If this is not specified, this constraint applies to all // requests in this claim. // + // References to subrequests must include the name of the main request + // and may include the subrequest using the format
[/]. If just + // the main request is given, the constraint applies to all subrequests. + // // +optional // +listType=atomic repeated string requests = 1; @@ -395,11 +407,6 @@ message DeviceConstraint { // 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. -// -// A DeviceClassName is currently required. Clients must check that it is -// indeed set. It's absence indicates that something changed in a way that -// is not supported by the client yet, in which case it must refuse to -// handle the request. message DeviceRequest { // Name can be used to reference this request in a pod.spec.containers[].resources.claims // entry and in a constraint of the claim. @@ -413,7 +420,8 @@ message DeviceRequest { // additional configuration and selectors to be inherited by this // request. // - // A class is required. Which classes are available depends on the cluster. + // A class is required if no subrequests are specified in the + // firstAvailable list. Which classes are available depends on the cluster. // // Administrators may use this to restrict which devices may get // requested by only installing classes with selectors for permitted @@ -421,7 +429,8 @@ message DeviceRequest { // then administrators can create an empty DeviceClass for users // to reference. // - // +required + // +optional + // +oneOf=deviceRequestType optional string deviceClassName = 2; // Selectors define criteria which must be satisfied by a specific @@ -475,13 +484,39 @@ message DeviceRequest { // +optional // +featureGate=DRAAdminAccess optional bool adminAccess = 6; + + // FirstAvailable contains subrequests, of which exactly one will be + // satisfied by the scheduler to satisfy this request. It tries to + // satisfy them in the order in which they are listed here. So if + // there are two entries in the list, the schduler will only check + // the second one if it determines that the first one can not be used. + // + // This field may only be set in the entries of DeviceClaim.Requests. + // + // DRA does not yet implement scoring, so the scheduler will + // select the first set of devices that satisfies all the + // requests in the claim. And if the requirements can + // be satisfied on more than one node, other scheduling features + // will determine which node is chosen. This means that the set of + // devices allocated to a claim might not be the optimal set + // available to the cluster. Scoring will be implemented later. + // + // +optional + // +oneOf=deviceRequestType + // +listType=atomic + // +featureGate=DRAPrioritizedList + repeated DeviceSubRequest firstAvailable = 7; } // DeviceRequestAllocationResult contains the allocation result for one request. message DeviceRequestAllocationResult { // Request is the name of the request in the claim which caused this - // device to be allocated. Multiple devices may have been allocated - // per request. + // device to be allocated. If it references a subrequest in the + // firstAvailable list on a DeviceRequest, this field must + // include both the name of the main request and the subrequest + // using the format
/. + // + // Multiple devices may have been allocated per request. // // +required optional string request = 1; @@ -533,6 +568,78 @@ message DeviceSelector { optional CELDeviceSelector cel = 1; } +// DeviceSubRequest describes a request for device provided in the +// claim.spec.devices.requests[].firstAvailable array. Each +// is typically a request for a single resource like a device, but can +// also ask for several identical devices. +// +// DeviceSubRequest is similar to Request, but doesn't expose the AdminAccess +// or FirstAvailable fields, as those can only be set on the top-level request. +// AdminAccess is not supported for requests with a prioritized list, and +// recursive FirstAvailable fields are not supported. +message DeviceSubRequest { + // Name can be used to reference this subrequest in the list of constraints + // or the list of configurations for the claim. References must use the + // format
/. + // + // Must be a DNS label. + // + // +required + optional string name = 1; + + // DeviceClassName references a specific DeviceClass, which can define + // additional configuration and selectors to be inherited by this + // subrequest. + // + // A class is required. Which classes are available depends on the cluster. + // + // Administrators may use this to restrict which devices may get + // requested by only installing classes with selectors for permitted + // devices. If users are free to request anything without restrictions, + // then administrators can create an empty DeviceClass for users + // to reference. + // + // +required + optional string deviceClassName = 2; + + // Selectors define criteria which must be satisfied by a specific + // device in order for that device to be considered for this + // request. All selectors must be satisfied for a device to be + // considered. + // + // +optional + // +listType=atomic + repeated DeviceSelector selectors = 3; + + // AllocationMode and its related fields define how devices are allocated + // to satisfy this request. Supported values are: + // + // - ExactCount: This request is for a specific number of devices. + // This is the default. The exact number is provided in the + // count field. + // + // - All: This request is for all of the matching devices in a pool. + // Allocation will fail if some devices are already allocated, + // unless adminAccess is requested. + // + // If AlloctionMode is not specified, the default mode is ExactCount. If + // the mode is ExactCount and count is not specified, the default count is + // one. Any other requests must specify this field. + // + // More modes may get added in the future. Clients must refuse to handle + // requests with unknown modes. + // + // +optional + optional string allocationMode = 4; + + // Count is used only when the count mode is "ExactCount". Must be greater than zero. + // If AllocationMode is ExactCount and this field is not specified, the default is one. + // + // +optional + // +oneOf=AllocationMode + optional int64 count = 5; +} + // NetworkDeviceData provides network-related details for the allocated device. // This information may be filled by drivers or other components to configure // or identify the device within a network context. 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 ecc83f15662..89186d905d4 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 @@ -83,7 +83,7 @@ func (Device) SwaggerDoc() map[string]string { var map_DeviceAllocationConfiguration = map[string]string{ "": "DeviceAllocationConfiguration gets embedded in an AllocationResult.", "source": "Source records whether the configuration comes from a class and thus is not something that a normal user would have been able to set or from a claim.", - "requests": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.", + "requests": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", } func (DeviceAllocationConfiguration) SwaggerDoc() map[string]string { @@ -125,7 +125,7 @@ func (DeviceClaim) SwaggerDoc() map[string]string { var map_DeviceClaimConfiguration = map[string]string{ "": "DeviceClaimConfiguration is used for configuration parameters in DeviceClaim.", - "requests": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.", + "requests": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", } func (DeviceClaimConfiguration) SwaggerDoc() map[string]string { @@ -181,7 +181,7 @@ func (DeviceConfiguration) SwaggerDoc() map[string]string { var map_DeviceConstraint = map[string]string{ "": "DeviceConstraint must have exactly one field set besides Requests.", - "requests": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.", + "requests": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the constraint applies to all subrequests.", "matchAttribute": "MatchAttribute requires that all devices in question have this attribute and that its type and value are the same across those devices.\n\nFor example, if you specified \"dra.example.com/numa\" (a hypothetical example!), then only devices in the same NUMA node will be chosen. A device which does not have that attribute will not be chosen. All devices should use a value of the same type for this attribute because that is part of its specification, but if one device doesn't, then it also will not be chosen.\n\nMust include the domain qualifier.", } @@ -190,13 +190,14 @@ func (DeviceConstraint) SwaggerDoc() map[string]string { } 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.\n\nA DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.", + "": "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.", - "deviceClassName": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "deviceClassName": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required if no subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", "selectors": "Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.", "allocationMode": "AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:\n\n- ExactCount: This request is for a specific number of devices.\n This is the default. The exact number is provided in the\n count field.\n\n- All: This request is for all of the matching devices in a pool.\n At least one device must exist on the node for the allocation to succeed.\n Allocation will fail if some devices are already allocated,\n unless adminAccess is requested.\n\nIf AllocationMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.\n\nMore modes may get added in the future. Clients must refuse to handle requests with unknown modes.", "count": "Count is used only when the count mode is \"ExactCount\". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.", "adminAccess": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", + "firstAvailable": "FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the schduler will only check the second one if it determines that the first one can not be used.\n\nThis field may only be set in the entries of DeviceClaim.Requests.\n\nDRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.", } func (DeviceRequest) SwaggerDoc() map[string]string { @@ -205,7 +206,7 @@ func (DeviceRequest) SwaggerDoc() map[string]string { var map_DeviceRequestAllocationResult = map[string]string{ "": "DeviceRequestAllocationResult contains the allocation result for one request.", - "request": "Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.", + "request": "Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format
/.\n\nMultiple devices may have been allocated per request.", "driver": "Driver specifies the name of the DRA driver whose kubelet plugin should be invoked to process the allocation once the claim is needed on a node.\n\nMust be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver.", "pool": "This name together with the driver name and the device name field identify which device was allocated (`//`).\n\nMust not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.", "device": "Device references one device instance via its name in the driver's resource pool. It must be a DNS label.", @@ -225,6 +226,19 @@ func (DeviceSelector) SwaggerDoc() map[string]string { return map_DeviceSelector } +var map_DeviceSubRequest = map[string]string{ + "": "DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.\n\nDeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.", + "name": "Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format
/.\n\nMust be a DNS label.", + "deviceClassName": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "selectors": "Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.", + "allocationMode": "AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:\n\n- ExactCount: This request is for a specific number of devices.\n This is the default. The exact number is provided in the\n count field.\n\n- All: This request is for all of the matching devices in a pool.\n Allocation will fail if some devices are already allocated,\n unless adminAccess is requested.\n\nIf AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.\n\nMore modes may get added in the future. Clients must refuse to handle requests with unknown modes.", + "count": "Count is used only when the count mode is \"ExactCount\". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.", +} + +func (DeviceSubRequest) SwaggerDoc() map[string]string { + return map_DeviceSubRequest +} + var map_NetworkDeviceData = map[string]string{ "": "NetworkDeviceData provides network-related details for the allocated device. This information may be filled by drivers or other components to configure or identify the device within a network context.", "interfaceName": "InterfaceName specifies the name of the network interface associated with the allocated device. This might be the name of a physical or virtual network interface being configured in the pod.\n\nMust not be longer than 256 characters.", 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 9b26b79efe6..6f604acf6c3 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 @@ -466,6 +466,13 @@ func (in *DeviceRequest) DeepCopyInto(out *DeviceRequest) { *out = new(bool) **out = **in } + if in.FirstAvailable != nil { + in, out := &in.FirstAvailable, &out.FirstAvailable + *out = make([]DeviceSubRequest, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -521,6 +528,29 @@ func (in *DeviceSelector) DeepCopy() *DeviceSelector { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceSubRequest) DeepCopyInto(out *DeviceSubRequest) { + *out = *in + if in.Selectors != nil { + in, out := &in.Selectors, &out.Selectors + *out = make([]DeviceSelector, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceSubRequest. +func (in *DeviceSubRequest) DeepCopy() *DeviceSubRequest { + if in == nil { + return nil + } + out := new(DeviceSubRequest) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkDeviceData) DeepCopyInto(out *NetworkDeviceData) { *out = *in 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 4812f9ecf44..9d2ecffd67c 100644 --- a/staging/src/k8s.io/api/resource/v1beta1/generated.pb.go +++ b/staging/src/k8s.io/api/resource/v1beta1/generated.pb.go @@ -609,10 +609,38 @@ func (m *DeviceSelector) XXX_DiscardUnknown() { 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} +} +func (m *DeviceSubRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeviceSubRequest) 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 *DeviceSubRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeviceSubRequest.Merge(m, src) +} +func (m *DeviceSubRequest) XXX_Size() int { + return m.Size() +} +func (m *DeviceSubRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeviceSubRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeviceSubRequest proto.InternalMessageInfo + func (m *NetworkDeviceData) Reset() { *m = NetworkDeviceData{} } func (*NetworkDeviceData) ProtoMessage() {} func (*NetworkDeviceData) Descriptor() ([]byte, []int) { - return fileDescriptor_ba331e3ec6484c27, []int{20} + return fileDescriptor_ba331e3ec6484c27, []int{21} } func (m *NetworkDeviceData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -640,7 +668,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{21} + return fileDescriptor_ba331e3ec6484c27, []int{22} } func (m *OpaqueDeviceConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -668,7 +696,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{22} + return fileDescriptor_ba331e3ec6484c27, []int{23} } func (m *ResourceClaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -696,7 +724,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{23} + return fileDescriptor_ba331e3ec6484c27, []int{24} } func (m *ResourceClaimConsumerReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -724,7 +752,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{24} + return fileDescriptor_ba331e3ec6484c27, []int{25} } func (m *ResourceClaimList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -752,7 +780,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{25} + return fileDescriptor_ba331e3ec6484c27, []int{26} } func (m *ResourceClaimSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -780,7 +808,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{26} + return fileDescriptor_ba331e3ec6484c27, []int{27} } func (m *ResourceClaimStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -808,7 +836,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{27} + return fileDescriptor_ba331e3ec6484c27, []int{28} } func (m *ResourceClaimTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -836,7 +864,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{28} + return fileDescriptor_ba331e3ec6484c27, []int{29} } func (m *ResourceClaimTemplateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -864,7 +892,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{29} + return fileDescriptor_ba331e3ec6484c27, []int{30} } func (m *ResourceClaimTemplateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -892,7 +920,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{30} + return fileDescriptor_ba331e3ec6484c27, []int{31} } func (m *ResourcePool) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -920,7 +948,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{31} + return fileDescriptor_ba331e3ec6484c27, []int{32} } func (m *ResourceSlice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -948,7 +976,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{32} + return fileDescriptor_ba331e3ec6484c27, []int{33} } func (m *ResourceSliceList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -976,7 +1004,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{33} + return fileDescriptor_ba331e3ec6484c27, []int{34} } func (m *ResourceSliceSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1024,6 +1052,7 @@ func init() { 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") + proto.RegisterType((*DeviceSubRequest)(nil), "k8s.io.api.resource.v1beta1.DeviceSubRequest") proto.RegisterType((*NetworkDeviceData)(nil), "k8s.io.api.resource.v1beta1.NetworkDeviceData") proto.RegisterType((*OpaqueDeviceConfiguration)(nil), "k8s.io.api.resource.v1beta1.OpaqueDeviceConfiguration") proto.RegisterType((*ResourceClaim)(nil), "k8s.io.api.resource.v1beta1.ResourceClaim") @@ -1045,136 +1074,139 @@ func init() { } var fileDescriptor_ba331e3ec6484c27 = []byte{ - // 2051 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x19, 0x4b, 0x8f, 0x1b, 0x49, - 0x79, 0xda, 0xed, 0x79, 0x7d, 0x9e, 0x57, 0x2a, 0x64, 0x71, 0x26, 0xc2, 0x9e, 0x74, 0x24, 0xf0, - 0x66, 0xb3, 0xed, 0x8d, 0x81, 0x28, 0xca, 0x5e, 0x70, 0xcf, 0xcc, 0x06, 0xb3, 0xc9, 0x64, 0xb6, - 0x86, 0x0d, 0xd1, 0xb2, 0x41, 0xd4, 0xb4, 0x6b, 0x66, 0x9a, 0xb1, 0xbb, 0x9d, 0xee, 0xea, 0xc9, - 0xce, 0x01, 0x81, 0xf6, 0xbc, 0x42, 0xdc, 0x11, 0x1c, 0x91, 0x90, 0x10, 0xe2, 0x17, 0x80, 0x04, - 0x42, 0x44, 0x1c, 0x60, 0x05, 0x97, 0x15, 0x07, 0x43, 0xbc, 0x3f, 0x80, 0x7b, 0x4e, 0xa8, 0xaa, - 0xab, 0x9f, 0x76, 0x9b, 0x1e, 0xb4, 0x8c, 0xc2, 0xcd, 0xfd, 0xbd, 0xeb, 0x7b, 0x57, 0x19, 0x5e, - 0x3b, 0xbe, 0xed, 0xe9, 0x96, 0xd3, 0x24, 0x03, 0xab, 0xe9, 0x52, 0xcf, 0xf1, 0x5d, 0x93, 0x36, - 0x4f, 0x6e, 0xee, 0x53, 0x46, 0x6e, 0x36, 0x0f, 0xa9, 0x4d, 0x5d, 0xc2, 0x68, 0x57, 0x1f, 0xb8, - 0x0e, 0x73, 0xd0, 0x95, 0x80, 0x58, 0x27, 0x03, 0x4b, 0x0f, 0x89, 0x75, 0x49, 0xbc, 0xfe, 0xfa, - 0xa1, 0xc5, 0x8e, 0xfc, 0x7d, 0xdd, 0x74, 0xfa, 0xcd, 0x43, 0xe7, 0xd0, 0x69, 0x0a, 0x9e, 0x7d, - 0xff, 0x40, 0x7c, 0x89, 0x0f, 0xf1, 0x2b, 0x90, 0xb5, 0xae, 0x25, 0x14, 0x9b, 0x8e, 0xcb, 0x95, - 0x66, 0xf5, 0xad, 0x7f, 0x25, 0xa6, 0xe9, 0x13, 0xf3, 0xc8, 0xb2, 0xa9, 0x7b, 0xda, 0x1c, 0x1c, - 0x1f, 0xa6, 0xad, 0x3d, 0x0b, 0x97, 0xd7, 0xec, 0x53, 0x46, 0x26, 0xe9, 0x6a, 0xe6, 0x71, 0xb9, - 0xbe, 0xcd, 0xac, 0xfe, 0xb8, 0x9a, 0x5b, 0xff, 0x89, 0xc1, 0x33, 0x8f, 0x68, 0x9f, 0x64, 0xf9, - 0xb4, 0x9f, 0xa9, 0x70, 0xa9, 0xdd, 0xeb, 0x39, 0x26, 0x87, 0x6d, 0xd1, 0x13, 0xcb, 0xa4, 0x7b, - 0x8c, 0x30, 0xdf, 0x43, 0x5f, 0x84, 0xb9, 0xae, 0x6b, 0x9d, 0x50, 0xb7, 0xaa, 0x6c, 0x28, 0x8d, - 0x45, 0x63, 0xe5, 0xd9, 0xb0, 0x3e, 0x33, 0x1a, 0xd6, 0xe7, 0xb6, 0x04, 0x14, 0x4b, 0x2c, 0xda, - 0x80, 0xf2, 0xc0, 0x71, 0x7a, 0xd5, 0x92, 0xa0, 0x5a, 0x92, 0x54, 0xe5, 0x5d, 0xc7, 0xe9, 0x61, - 0x81, 0x11, 0x92, 0x84, 0xe4, 0xaa, 0x9a, 0x91, 0x24, 0xa0, 0x58, 0x62, 0x91, 0x09, 0x60, 0x3a, - 0x76, 0xd7, 0x62, 0x96, 0x63, 0x7b, 0xd5, 0xf2, 0x86, 0xda, 0xa8, 0xb4, 0x9a, 0x7a, 0x1c, 0xe5, - 0xe8, 0x60, 0xfa, 0xe0, 0xf8, 0x90, 0x03, 0x3c, 0x9d, 0xfb, 0x4f, 0x3f, 0xb9, 0xa9, 0x6f, 0x86, - 0x7c, 0x06, 0x92, 0xc2, 0x21, 0x02, 0x79, 0x38, 0x21, 0x16, 0xbd, 0x0d, 0xe5, 0x2e, 0x61, 0xa4, - 0x3a, 0xbb, 0xa1, 0x34, 0x2a, 0xad, 0xd7, 0x73, 0xc5, 0x4b, 0xbf, 0xe9, 0x98, 0x3c, 0xdd, 0xfe, - 0x80, 0x51, 0xdb, 0xe3, 0xc2, 0x17, 0xf8, 0xc9, 0xb6, 0x08, 0x23, 0x58, 0x08, 0x41, 0x04, 0x2a, - 0x36, 0x65, 0x4f, 0x1d, 0xf7, 0x98, 0x03, 0xab, 0x73, 0x42, 0xa6, 0xae, 0x4f, 0x49, 0x4c, 0x7d, - 0x47, 0xd2, 0x8b, 0x23, 0x73, 0x2e, 0x63, 0x75, 0x34, 0xac, 0x57, 0x76, 0x62, 0x31, 0x38, 0x29, - 0x53, 0xfb, 0x93, 0x02, 0x6b, 0x32, 0x40, 0x96, 0x63, 0x63, 0xea, 0xf9, 0x3d, 0x86, 0xbe, 0x03, - 0xf3, 0x81, 0xcf, 0x3c, 0x11, 0x9c, 0x4a, 0xeb, 0xcb, 0x53, 0x75, 0x06, 0xca, 0xb2, 0x52, 0x8c, - 0x55, 0xe9, 0xaa, 0xf9, 0x00, 0xef, 0xe1, 0x50, 0x28, 0x7a, 0x08, 0x4b, 0xb6, 0xd3, 0xa5, 0x7b, - 0xb4, 0x47, 0x4d, 0xe6, 0xb8, 0x22, 0x6e, 0x95, 0xd6, 0x46, 0x52, 0x09, 0xaf, 0x12, 0xee, 0xf9, - 0x9d, 0x04, 0x9d, 0xb1, 0x36, 0x1a, 0xd6, 0x97, 0x92, 0x10, 0x9c, 0x92, 0xa3, 0xfd, 0x5d, 0x85, - 0x8a, 0x41, 0x3c, 0xcb, 0x0c, 0x34, 0xa2, 0xef, 0x03, 0x10, 0xc6, 0x5c, 0x6b, 0xdf, 0x67, 0xe2, - 0x28, 0x3c, 0xe2, 0xb7, 0xa7, 0x1e, 0x25, 0xc1, 0xad, 0xb7, 0x23, 0xd6, 0x6d, 0x9b, 0xb9, 0xa7, - 0xc6, 0xb5, 0x30, 0xf4, 0x31, 0xe2, 0xc3, 0x7f, 0xd4, 0x97, 0xdf, 0xf1, 0x49, 0xcf, 0x3a, 0xb0, - 0x68, 0x77, 0x87, 0xf4, 0x29, 0x4e, 0x28, 0x44, 0x3e, 0x2c, 0x98, 0x64, 0x40, 0x4c, 0x8b, 0x9d, - 0x56, 0x4b, 0x42, 0xf9, 0xad, 0xc2, 0xca, 0x37, 0x25, 0x63, 0xa0, 0xfa, 0xaa, 0x54, 0xbd, 0x10, - 0x82, 0xc7, 0x15, 0x47, 0xaa, 0xd6, 0x8f, 0x61, 0x35, 0x63, 0x3a, 0x5a, 0x03, 0xf5, 0x98, 0x9e, - 0x06, 0x95, 0x86, 0xf9, 0x4f, 0x64, 0xc0, 0xec, 0x09, 0xe9, 0xf9, 0x54, 0xd4, 0x55, 0xa5, 0x75, - 0xa3, 0x48, 0x80, 0x43, 0xa1, 0x38, 0x60, 0xbd, 0x53, 0xba, 0xad, 0xac, 0x1f, 0xc1, 0x72, 0xca, - 0xd4, 0x09, 0xaa, 0xda, 0x69, 0x55, 0xaf, 0x15, 0x50, 0x15, 0x8a, 0x4c, 0x68, 0xd2, 0xee, 0xc2, - 0x85, 0xcd, 0xed, 0x7b, 0xb2, 0x87, 0xc8, 0x88, 0xa3, 0x16, 0x00, 0xfd, 0x60, 0xe0, 0x52, 0x8f, - 0xd7, 0x8f, 0xec, 0x24, 0x51, 0x89, 0x6e, 0x47, 0x18, 0x9c, 0xa0, 0xd2, 0x7c, 0x90, 0x9d, 0x81, - 0xf7, 0x16, 0x9b, 0xf4, 0xa9, 0xe4, 0x8b, 0x7a, 0x8b, 0xf0, 0xa7, 0xc0, 0xa0, 0x0e, 0xcc, 0xee, - 0xf3, 0xa8, 0x48, 0xdb, 0x1b, 0x45, 0xe3, 0x67, 0x2c, 0x8e, 0x86, 0xf5, 0x59, 0x01, 0xc0, 0x81, - 0x04, 0xed, 0xa3, 0x12, 0x7c, 0x21, 0x5b, 0x29, 0x9b, 0x8e, 0x7d, 0x60, 0x1d, 0xfa, 0xae, 0xf8, - 0x40, 0x5f, 0x83, 0xb9, 0x40, 0xa2, 0x34, 0xa8, 0x11, 0x36, 0xb2, 0x3d, 0x01, 0x7d, 0x31, 0xac, - 0xbf, 0x92, 0x65, 0x0d, 0x30, 0x58, 0xf2, 0xa1, 0x06, 0x2c, 0xb8, 0xf4, 0x89, 0x4f, 0x3d, 0xe6, - 0x89, 0x8c, 0x5b, 0x34, 0x96, 0x78, 0xd6, 0x60, 0x09, 0xc3, 0x11, 0x16, 0xfd, 0x00, 0x2e, 0x06, - 0xd5, 0x98, 0x32, 0x41, 0x56, 0xe2, 0x1b, 0x45, 0x42, 0x94, 0xe4, 0x33, 0xae, 0x48, 0x53, 0x2f, - 0x4e, 0x40, 0xe2, 0x49, 0x9a, 0xb4, 0x4f, 0x15, 0x78, 0x65, 0x72, 0xe3, 0x40, 0x14, 0xe6, 0x5d, - 0xf1, 0x2b, 0xac, 0xd9, 0x3b, 0x05, 0xec, 0x91, 0x67, 0xcc, 0xef, 0x42, 0xc1, 0xb7, 0x87, 0x43, - 0xd9, 0x68, 0x1f, 0xe6, 0x4c, 0x61, 0x92, 0x2c, 0xce, 0x3b, 0x67, 0x6a, 0x72, 0xe9, 0xf3, 0x47, - 0x33, 0x27, 0x00, 0x63, 0x29, 0x59, 0xfb, 0x85, 0x02, 0xab, 0x99, 0xea, 0x41, 0x35, 0x50, 0x2d, - 0x9b, 0x89, 0x8c, 0x52, 0x83, 0xf8, 0x74, 0x6c, 0xf6, 0x90, 0xe7, 0x39, 0xe6, 0x08, 0x74, 0x15, - 0xca, 0xfb, 0x7c, 0xe2, 0xf1, 0x58, 0x2c, 0x18, 0xcb, 0xa3, 0x61, 0x7d, 0xd1, 0x70, 0x9c, 0x5e, - 0x40, 0x21, 0x50, 0xe8, 0x4b, 0x30, 0xe7, 0x31, 0xd7, 0xb2, 0x0f, 0xab, 0x65, 0x91, 0x29, 0xa2, - 0xc7, 0xef, 0x09, 0x48, 0x40, 0x26, 0xd1, 0xe8, 0x3a, 0xcc, 0x9f, 0x50, 0x57, 0x14, 0xc7, 0xac, - 0xa0, 0x14, 0x2d, 0xf4, 0x61, 0x00, 0x0a, 0x48, 0x43, 0x02, 0x8d, 0xc2, 0x4a, 0xba, 0xfa, 0xd0, - 0x5e, 0x58, 0xb9, 0xca, 0xd8, 0xe4, 0x19, 0x1b, 0x96, 0xb1, 0xc7, 0xde, 0xf1, 0x89, 0xcd, 0x2c, - 0x76, 0x6a, 0x2c, 0x4b, 0xa7, 0xcc, 0x06, 0x8a, 0x02, 0x59, 0xda, 0x2f, 0x4b, 0x50, 0x91, 0x7a, - 0x7a, 0xc4, 0xea, 0xa3, 0x47, 0x89, 0x9c, 0x0d, 0xc2, 0x7d, 0xbd, 0x78, 0xb8, 0x8d, 0xb5, 0xb0, - 0x33, 0x4e, 0xc8, 0xf1, 0x2e, 0x54, 0x4c, 0xc7, 0xf6, 0x98, 0x4b, 0x2c, 0x5b, 0x16, 0x44, 0x7a, - 0x24, 0x4f, 0xc9, 0x6d, 0xc9, 0x65, 0x5c, 0x94, 0xf2, 0x2b, 0x31, 0xcc, 0xc3, 0x49, 0xb1, 0xe8, - 0x71, 0x94, 0x46, 0xaa, 0x50, 0xf0, 0xd5, 0x22, 0x0a, 0xf8, 0xc9, 0x8b, 0x65, 0xd0, 0x1f, 0x14, - 0xa8, 0xe6, 0x31, 0xa5, 0xea, 0x5d, 0xf9, 0x6f, 0xea, 0xbd, 0x74, 0x6e, 0xf5, 0xfe, 0x5b, 0x25, - 0x11, 0x76, 0xcf, 0x43, 0xdf, 0x85, 0x05, 0xbe, 0x5d, 0x89, 0x65, 0x49, 0x19, 0xb3, 0x62, 0xca, - 0x2e, 0xf6, 0x60, 0xff, 0x7b, 0xd4, 0x64, 0xf7, 0x29, 0x23, 0x71, 0xa7, 0x8f, 0x61, 0x38, 0x92, - 0x8a, 0x76, 0xa0, 0xec, 0x0d, 0xa8, 0x79, 0x86, 0x09, 0x27, 0x2c, 0xdb, 0x1b, 0x50, 0x33, 0x9e, - 0x05, 0xfc, 0x0b, 0x0b, 0x39, 0xda, 0x4f, 0x92, 0x91, 0xf0, 0xbc, 0x74, 0x24, 0x72, 0xfc, 0xab, - 0x9c, 0x9b, 0x7f, 0x7f, 0x13, 0x75, 0x1a, 0x61, 0xdd, 0x3d, 0xcb, 0x63, 0xe8, 0xfd, 0x31, 0x1f, - 0xeb, 0xc5, 0x7c, 0xcc, 0xb9, 0x85, 0x87, 0xa3, 0xf2, 0x0a, 0x21, 0x09, 0xff, 0xde, 0x87, 0x59, - 0x8b, 0xd1, 0x7e, 0x58, 0x58, 0x8d, 0xa2, 0x0e, 0x8e, 0xfb, 0x42, 0x87, 0xb3, 0xe3, 0x40, 0x8a, - 0xf6, 0xe7, 0xf4, 0x01, 0xb8, 0xe3, 0xd1, 0xfb, 0xb0, 0xe8, 0xc9, 0x51, 0x1f, 0x36, 0x87, 0x22, - 0xeb, 0x43, 0xb4, 0x30, 0x5e, 0x90, 0x9a, 0x16, 0x43, 0x88, 0x87, 0x63, 0x81, 0x89, 0xca, 0x2d, - 0x9d, 0xa5, 0x72, 0x33, 0xa1, 0xcf, 0xad, 0xdc, 0x27, 0x30, 0x29, 0x7a, 0xe8, 0x3d, 0x98, 0x73, - 0x06, 0xe4, 0x49, 0xd4, 0x55, 0xa7, 0xef, 0x84, 0x0f, 0x04, 0xe9, 0xa4, 0x14, 0x01, 0xae, 0x32, - 0x40, 0x63, 0x29, 0x51, 0xfb, 0x91, 0x02, 0x6b, 0xd9, 0x16, 0x76, 0x86, 0x26, 0xb1, 0x0b, 0x2b, - 0x7d, 0xc2, 0xcc, 0xa3, 0x68, 0x56, 0xc9, 0x5b, 0x57, 0x63, 0x34, 0xac, 0xaf, 0xdc, 0x4f, 0x61, - 0x5e, 0x0c, 0xeb, 0xe8, 0x2d, 0xbf, 0xd7, 0x3b, 0x4d, 0x6f, 0xa1, 0x19, 0x7e, 0xed, 0x43, 0x15, - 0x96, 0x53, 0x0d, 0xbb, 0xc0, 0xce, 0xd5, 0x86, 0xd5, 0x6e, 0xec, 0x6b, 0x8e, 0x90, 0x66, 0x7c, - 0x5e, 0x12, 0x27, 0xd3, 0x44, 0xf0, 0x65, 0xe9, 0xd3, 0x79, 0xa3, 0x7e, 0xd6, 0x79, 0xf3, 0x10, - 0x56, 0x48, 0xb4, 0x07, 0xdc, 0x77, 0xba, 0x54, 0x4e, 0x61, 0x5d, 0x72, 0xad, 0xb4, 0x53, 0xd8, - 0x17, 0xc3, 0xfa, 0xe7, 0xb2, 0xdb, 0x03, 0x87, 0xe3, 0x8c, 0x14, 0x74, 0x0d, 0x66, 0x4d, 0xc7, - 0xb7, 0x99, 0x18, 0xd5, 0x6a, 0x5c, 0x26, 0x9b, 0x1c, 0x88, 0x03, 0x1c, 0xba, 0x09, 0x15, 0xd2, - 0xed, 0x5b, 0x76, 0xdb, 0x34, 0xa9, 0xe7, 0x89, 0x3b, 0xe1, 0x42, 0x30, 0xff, 0xdb, 0x31, 0x18, - 0x27, 0x69, 0xb4, 0x7f, 0x29, 0xe1, 0xe6, 0x99, 0xb3, 0x24, 0xa1, 0x57, 0xf9, 0xc6, 0x25, 0x50, - 0x32, 0x2e, 0x89, 0xad, 0x49, 0x80, 0x71, 0x88, 0x4f, 0xdc, 0xdb, 0x4b, 0x85, 0xee, 0xed, 0x6a, - 0x81, 0x7b, 0x7b, 0x79, 0xea, 0xbd, 0x3d, 0x73, 0xe2, 0xd9, 0x02, 0x27, 0xfe, 0x76, 0xb8, 0xca, - 0x44, 0x17, 0x85, 0x0e, 0xa8, 0x26, 0xed, 0x4d, 0xe8, 0x82, 0xe3, 0xb9, 0x30, 0x76, 0xcb, 0x30, - 0xe6, 0x47, 0xc3, 0xba, 0xba, 0xb9, 0x7d, 0x0f, 0x73, 0x19, 0xda, 0xaf, 0x14, 0xb8, 0x30, 0x76, - 0xcd, 0x46, 0x6f, 0xc2, 0xb2, 0x65, 0x33, 0xea, 0x1e, 0x10, 0x93, 0xee, 0xc4, 0x09, 0x7e, 0x49, - 0x1e, 0x6a, 0xb9, 0x93, 0x44, 0xe2, 0x34, 0x2d, 0xba, 0x0c, 0xaa, 0x35, 0x08, 0x57, 0x76, 0xa1, - 0xad, 0xb3, 0xeb, 0x61, 0x0e, 0xe3, 0xd5, 0x70, 0x44, 0xdc, 0xee, 0x53, 0xe2, 0xd2, 0x76, 0xb7, - 0xcb, 0xef, 0x30, 0xd2, 0xa5, 0x51, 0x35, 0x7c, 0x3d, 0x8d, 0xc6, 0x59, 0x7a, 0xed, 0xe7, 0x0a, - 0x5c, 0xce, 0xed, 0x23, 0x85, 0x1f, 0x62, 0x08, 0xc0, 0x80, 0xb8, 0xa4, 0x4f, 0x19, 0x75, 0x3d, - 0x39, 0x54, 0xcf, 0xf8, 0xbe, 0x11, 0xcd, 0xeb, 0xdd, 0x48, 0x10, 0x4e, 0x08, 0xd5, 0x7e, 0x5a, - 0x82, 0x65, 0x2c, 0xc3, 0x11, 0x2c, 0x87, 0xff, 0xfb, 0x2d, 0x61, 0x37, 0xb5, 0x25, 0x4c, 0xcf, - 0x8c, 0x94, 0x6d, 0x79, 0x7b, 0x02, 0x7a, 0xc4, 0x97, 0x73, 0xc2, 0x7c, 0xaf, 0xd0, 0x6d, 0x2a, - 0x2d, 0x53, 0xf0, 0xc5, 0x21, 0x08, 0xbe, 0xb1, 0x94, 0xa7, 0x8d, 0x14, 0xa8, 0xa5, 0xe8, 0x79, - 0x97, 0xf7, 0xfb, 0xd4, 0xc5, 0xf4, 0x80, 0xba, 0xd4, 0x36, 0x29, 0xba, 0x01, 0x0b, 0x64, 0x60, - 0xdd, 0x75, 0x1d, 0x7f, 0x20, 0xe3, 0x19, 0x8d, 0xf0, 0xf6, 0x6e, 0x47, 0xc0, 0x71, 0x44, 0xc1, - 0xa9, 0x43, 0x83, 0x64, 0x56, 0x25, 0xf6, 0xe9, 0x00, 0x8e, 0x23, 0x8a, 0xa8, 0x75, 0x97, 0x73, - 0x5b, 0xb7, 0x01, 0xaa, 0x6f, 0x75, 0xe5, 0x55, 0xe3, 0x0d, 0x49, 0xa0, 0xbe, 0xdb, 0xd9, 0x7a, - 0x31, 0xac, 0x5f, 0xcd, 0x7b, 0x42, 0x64, 0xa7, 0x03, 0xea, 0xe9, 0xef, 0x76, 0xb6, 0x30, 0x67, - 0xd6, 0x7e, 0xa7, 0xc0, 0x85, 0xd4, 0x21, 0xcf, 0x61, 0x95, 0x79, 0x90, 0x5e, 0x65, 0xae, 0x17, - 0x8f, 0x58, 0xce, 0x32, 0x73, 0x94, 0x39, 0x83, 0xd8, 0x66, 0xf6, 0xb2, 0xcf, 0x6a, 0x8d, 0xa2, - 0x57, 0x85, 0xfc, 0xb7, 0x34, 0xed, 0x8f, 0x25, 0xb8, 0x38, 0x21, 0x87, 0xd0, 0x63, 0x80, 0x78, - 0xbc, 0x48, 0x7d, 0xd3, 0xef, 0x3e, 0x63, 0x57, 0xe7, 0x15, 0xf1, 0xd8, 0x15, 0x43, 0x13, 0x02, - 0x91, 0x0b, 0x15, 0x97, 0x7a, 0xd4, 0x3d, 0xa1, 0xdd, 0xb7, 0x1c, 0x57, 0xfa, 0xed, 0xcd, 0xe2, - 0x7e, 0x1b, 0xcb, 0xdc, 0xf8, 0xa6, 0x85, 0x63, 0xb9, 0x38, 0xa9, 0x04, 0x3d, 0x8e, 0xfd, 0x17, - 0xbc, 0xde, 0xb6, 0x8a, 0x9c, 0x27, 0xfd, 0xee, 0x3c, 0xc5, 0x93, 0x7f, 0x53, 0xe0, 0x52, 0xca, - 0xc6, 0x6f, 0xd2, 0xfe, 0xa0, 0x47, 0x18, 0x3d, 0x87, 0x2e, 0xf4, 0x28, 0xd5, 0x85, 0x6e, 0x15, - 0xf7, 0x63, 0x68, 0x63, 0xee, 0xad, 0xe5, 0xaf, 0x0a, 0x5c, 0x9e, 0xc8, 0x71, 0x0e, 0x65, 0xf5, - 0xad, 0x74, 0x59, 0xb5, 0xce, 0x7e, 0xac, 0x9c, 0xf2, 0xfa, 0x4b, 0xde, 0xa1, 0x44, 0x9d, 0xfd, - 0x1f, 0x0e, 0x0d, 0xed, 0xd7, 0x0a, 0x2c, 0x85, 0x94, 0x7c, 0x47, 0x2a, 0xb0, 0x27, 0xb7, 0x00, - 0xe4, 0xdf, 0x2d, 0xe1, 0x4d, 0x5e, 0x8d, 0xcd, 0xbe, 0x1b, 0x61, 0x70, 0x82, 0x0a, 0x7d, 0x03, - 0x50, 0x68, 0xe0, 0x5e, 0x4f, 0xac, 0x02, 0x7c, 0xdf, 0x54, 0x05, 0xef, 0xba, 0xe4, 0x45, 0x78, - 0x8c, 0x02, 0x4f, 0xe0, 0xd2, 0x7e, 0xaf, 0xc4, 0xd3, 0x5a, 0x80, 0x5f, 0x52, 0xc7, 0x0b, 0xdb, - 0x72, 0x1d, 0x9f, 0x1c, 0x37, 0x82, 0xf2, 0x65, 0x1d, 0x37, 0xc2, 0xb8, 0x9c, 0x7a, 0xf8, 0x48, - 0xcd, 0x1c, 0x42, 0xd4, 0x41, 0xd1, 0xcd, 0xee, 0xed, 0xc4, 0x5f, 0x6c, 0x95, 0xd6, 0xab, 0x85, - 0xac, 0xe1, 0x39, 0x3a, 0x71, 0xab, 0xbf, 0x01, 0x0b, 0xb6, 0xd3, 0x0d, 0x56, 0xe0, 0xcc, 0x4a, - 0xb1, 0x23, 0xe1, 0x38, 0xa2, 0x18, 0xfb, 0x27, 0xa8, 0xfc, 0xd9, 0xfc, 0x13, 0x24, 0xd6, 0xa0, - 0x5e, 0x8f, 0x13, 0x84, 0x17, 0x86, 0x78, 0x0d, 0x92, 0x70, 0x1c, 0x51, 0xa0, 0x9d, 0x78, 0xb0, - 0xcc, 0x89, 0x88, 0x5c, 0x2b, 0x30, 0x98, 0xf3, 0x27, 0x89, 0xd1, 0x7e, 0xf6, 0xbc, 0x36, 0xf3, - 0xf1, 0xf3, 0xda, 0xcc, 0x27, 0xcf, 0x6b, 0x33, 0x3f, 0x1c, 0xd5, 0x94, 0x67, 0xa3, 0x9a, 0xf2, - 0xf1, 0xa8, 0xa6, 0x7c, 0x32, 0xaa, 0x29, 0xff, 0x1c, 0xd5, 0x94, 0x1f, 0x7f, 0x5a, 0x9b, 0x79, - 0xef, 0xca, 0x94, 0x7f, 0xa3, 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xe1, 0xe6, 0x3e, 0xd5, 0xab, - 0x1e, 0x00, 0x00, + // 2103 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x1a, 0x4b, 0x6f, 0x1c, 0x49, + 0xd9, 0x3d, 0x3d, 0x7e, 0x7d, 0xe3, 0x57, 0x2a, 0x24, 0x4c, 0x1c, 0x31, 0xe3, 0x74, 0x24, 0xf0, + 0x66, 0xb3, 0x33, 0x9b, 0x01, 0xa2, 0x28, 0x7b, 0x61, 0xda, 0x76, 0x82, 0xd9, 0xc4, 0xf1, 0x96, + 0xd9, 0x10, 0x2d, 0x1b, 0x44, 0x4d, 0x4f, 0xd9, 0x6e, 0xdc, 0xd3, 0x3d, 0xe9, 0xae, 0x76, 0xd6, + 0x07, 0x04, 0xe2, 0xbc, 0x42, 0xdc, 0x11, 0x1c, 0x91, 0x90, 0x10, 0xe2, 0x17, 0x80, 0x04, 0x42, + 0x44, 0x1c, 0x60, 0xb5, 0x5c, 0x56, 0x1c, 0x06, 0x32, 0xfb, 0x03, 0x10, 0xd7, 0x9c, 0x50, 0x55, + 0x57, 0x3f, 0x67, 0x7a, 0xb6, 0x0d, 0x8b, 0x15, 0x24, 0x6e, 0xee, 0xef, 0x5d, 0xdf, 0xbb, 0x6a, + 0x0c, 0xaf, 0x1e, 0xdd, 0xf2, 0x1a, 0xa6, 0xd3, 0x24, 0x7d, 0xb3, 0xe9, 0x52, 0xcf, 0xf1, 0x5d, + 0x83, 0x36, 0x8f, 0x6f, 0x74, 0x28, 0x23, 0x37, 0x9a, 0x07, 0xd4, 0xa6, 0x2e, 0x61, 0xb4, 0xdb, + 0xe8, 0xbb, 0x0e, 0x73, 0xd0, 0xe5, 0x80, 0xb8, 0x41, 0xfa, 0x66, 0x23, 0x24, 0x6e, 0x48, 0xe2, + 0xd5, 0xd7, 0x0e, 0x4c, 0x76, 0xe8, 0x77, 0x1a, 0x86, 0xd3, 0x6b, 0x1e, 0x38, 0x07, 0x4e, 0x53, + 0xf0, 0x74, 0xfc, 0x7d, 0xf1, 0x25, 0x3e, 0xc4, 0x5f, 0x81, 0xac, 0x55, 0x2d, 0xa1, 0xd8, 0x70, + 0x5c, 0xae, 0x34, 0xab, 0x6f, 0xf5, 0x4b, 0x31, 0x4d, 0x8f, 0x18, 0x87, 0xa6, 0x4d, 0xdd, 0x93, + 0x66, 0xff, 0xe8, 0x20, 0x6d, 0xed, 0x69, 0xb8, 0xbc, 0x66, 0x8f, 0x32, 0x32, 0x4e, 0x57, 0x33, + 0x8f, 0xcb, 0xf5, 0x6d, 0x66, 0xf6, 0x46, 0xd5, 0xdc, 0xfc, 0x24, 0x06, 0xcf, 0x38, 0xa4, 0x3d, + 0x92, 0xe5, 0xd3, 0x7e, 0xaa, 0xc2, 0x85, 0xb6, 0x65, 0x39, 0x06, 0x87, 0x6d, 0xd2, 0x63, 0xd3, + 0xa0, 0x7b, 0x8c, 0x30, 0xdf, 0x43, 0x9f, 0x87, 0x99, 0xae, 0x6b, 0x1e, 0x53, 0xb7, 0xaa, 0xac, + 0x29, 0xeb, 0xf3, 0xfa, 0xd2, 0xb3, 0x41, 0x7d, 0x6a, 0x38, 0xa8, 0xcf, 0x6c, 0x0a, 0x28, 0x96, + 0x58, 0xb4, 0x06, 0xe5, 0xbe, 0xe3, 0x58, 0xd5, 0x92, 0xa0, 0x5a, 0x90, 0x54, 0xe5, 0x5d, 0xc7, + 0xb1, 0xb0, 0xc0, 0x08, 0x49, 0x42, 0x72, 0x55, 0xcd, 0x48, 0x12, 0x50, 0x2c, 0xb1, 0xc8, 0x00, + 0x30, 0x1c, 0xbb, 0x6b, 0x32, 0xd3, 0xb1, 0xbd, 0x6a, 0x79, 0x4d, 0x5d, 0xaf, 0xb4, 0x9a, 0x8d, + 0x38, 0xca, 0xd1, 0xc1, 0x1a, 0xfd, 0xa3, 0x03, 0x0e, 0xf0, 0x1a, 0xdc, 0x7f, 0x8d, 0xe3, 0x1b, + 0x8d, 0x8d, 0x90, 0x4f, 0x47, 0x52, 0x38, 0x44, 0x20, 0x0f, 0x27, 0xc4, 0xa2, 0x37, 0xa1, 0xdc, + 0x25, 0x8c, 0x54, 0xa7, 0xd7, 0x94, 0xf5, 0x4a, 0xeb, 0xb5, 0x5c, 0xf1, 0xd2, 0x6f, 0x0d, 0x4c, + 0x9e, 0x6e, 0xbd, 0xc7, 0xa8, 0xed, 0x71, 0xe1, 0x73, 0xfc, 0x64, 0x9b, 0x84, 0x11, 0x2c, 0x84, + 0x20, 0x02, 0x15, 0x9b, 0xb2, 0xa7, 0x8e, 0x7b, 0xc4, 0x81, 0xd5, 0x19, 0x21, 0xb3, 0xd1, 0x98, + 0x90, 0x98, 0x8d, 0x1d, 0x49, 0x2f, 0x8e, 0xcc, 0xb9, 0xf4, 0xe5, 0xe1, 0xa0, 0x5e, 0xd9, 0x89, + 0xc5, 0xe0, 0xa4, 0x4c, 0xed, 0x8f, 0x0a, 0xac, 0xc8, 0x00, 0x99, 0x8e, 0x8d, 0xa9, 0xe7, 0x5b, + 0x0c, 0x7d, 0x0b, 0x66, 0x03, 0x9f, 0x79, 0x22, 0x38, 0x95, 0xd6, 0x17, 0x27, 0xea, 0x0c, 0x94, + 0x65, 0xa5, 0xe8, 0xcb, 0xd2, 0x55, 0xb3, 0x01, 0xde, 0xc3, 0xa1, 0x50, 0xf4, 0x10, 0x16, 0x6c, + 0xa7, 0x4b, 0xf7, 0xa8, 0x45, 0x0d, 0xe6, 0xb8, 0x22, 0x6e, 0x95, 0xd6, 0x5a, 0x52, 0x09, 0xaf, + 0x12, 0xee, 0xf9, 0x9d, 0x04, 0x9d, 0xbe, 0x32, 0x1c, 0xd4, 0x17, 0x92, 0x10, 0x9c, 0x92, 0xa3, + 0xfd, 0x55, 0x85, 0x8a, 0x4e, 0x3c, 0xd3, 0x08, 0x34, 0xa2, 0xef, 0x02, 0x10, 0xc6, 0x5c, 0xb3, + 0xe3, 0x33, 0x71, 0x14, 0x1e, 0xf1, 0x5b, 0x13, 0x8f, 0x92, 0xe0, 0x6e, 0xb4, 0x23, 0xd6, 0x2d, + 0x9b, 0xb9, 0x27, 0xfa, 0xd5, 0x30, 0xf4, 0x31, 0xe2, 0x07, 0x7f, 0xab, 0x2f, 0xbe, 0xe5, 0x13, + 0xcb, 0xdc, 0x37, 0x69, 0x77, 0x87, 0xf4, 0x28, 0x4e, 0x28, 0x44, 0x3e, 0xcc, 0x19, 0xa4, 0x4f, + 0x0c, 0x93, 0x9d, 0x54, 0x4b, 0x42, 0xf9, 0xcd, 0xc2, 0xca, 0x37, 0x24, 0x63, 0xa0, 0xfa, 0x8a, + 0x54, 0x3d, 0x17, 0x82, 0x47, 0x15, 0x47, 0xaa, 0x56, 0x8f, 0x60, 0x39, 0x63, 0x3a, 0x5a, 0x01, + 0xf5, 0x88, 0x9e, 0x04, 0x95, 0x86, 0xf9, 0x9f, 0x48, 0x87, 0xe9, 0x63, 0x62, 0xf9, 0x54, 0xd4, + 0x55, 0xa5, 0x75, 0xbd, 0x48, 0x80, 0x43, 0xa1, 0x38, 0x60, 0xbd, 0x5d, 0xba, 0xa5, 0xac, 0x1e, + 0xc2, 0x62, 0xca, 0xd4, 0x31, 0xaa, 0xda, 0x69, 0x55, 0xaf, 0x16, 0x50, 0x15, 0x8a, 0x4c, 0x68, + 0xd2, 0xee, 0xc2, 0xb9, 0x8d, 0xad, 0x7b, 0xb2, 0x87, 0xc8, 0x88, 0xa3, 0x16, 0x00, 0x7d, 0xaf, + 0xef, 0x52, 0x8f, 0xd7, 0x8f, 0xec, 0x24, 0x51, 0x89, 0x6e, 0x45, 0x18, 0x9c, 0xa0, 0xd2, 0x7c, + 0x90, 0x9d, 0x81, 0xf7, 0x16, 0x9b, 0xf4, 0xa8, 0xe4, 0x8b, 0x7a, 0x8b, 0xf0, 0xa7, 0xc0, 0xa0, + 0x6d, 0x98, 0xee, 0xf0, 0xa8, 0x48, 0xdb, 0xd7, 0x8b, 0xc6, 0x4f, 0x9f, 0x1f, 0x0e, 0xea, 0xd3, + 0x02, 0x80, 0x03, 0x09, 0xda, 0xfb, 0x25, 0xf8, 0x5c, 0xb6, 0x52, 0x36, 0x1c, 0x7b, 0xdf, 0x3c, + 0xf0, 0x5d, 0xf1, 0x81, 0xbe, 0x02, 0x33, 0x81, 0x44, 0x69, 0xd0, 0x7a, 0xd8, 0xc8, 0xf6, 0x04, + 0xf4, 0xc5, 0xa0, 0x7e, 0x31, 0xcb, 0x1a, 0x60, 0xb0, 0xe4, 0x43, 0xeb, 0x30, 0xe7, 0xd2, 0x27, + 0x3e, 0xf5, 0x98, 0x27, 0x32, 0x6e, 0x5e, 0x5f, 0xe0, 0x59, 0x83, 0x25, 0x0c, 0x47, 0x58, 0xf4, + 0x3d, 0x38, 0x1f, 0x54, 0x63, 0xca, 0x04, 0x59, 0x89, 0xaf, 0x17, 0x09, 0x51, 0x92, 0x4f, 0xbf, + 0x2c, 0x4d, 0x3d, 0x3f, 0x06, 0x89, 0xc7, 0x69, 0xd2, 0x3e, 0x56, 0xe0, 0xe2, 0xf8, 0xc6, 0x81, + 0x28, 0xcc, 0xba, 0xe2, 0xaf, 0xb0, 0x66, 0x6f, 0x17, 0xb0, 0x47, 0x9e, 0x31, 0xbf, 0x0b, 0x05, + 0xdf, 0x1e, 0x0e, 0x65, 0xa3, 0x0e, 0xcc, 0x18, 0xc2, 0x24, 0x59, 0x9c, 0xb7, 0x4f, 0xd5, 0xe4, + 0xd2, 0xe7, 0x8f, 0x66, 0x4e, 0x00, 0xc6, 0x52, 0xb2, 0xf6, 0x73, 0x05, 0x96, 0x33, 0xd5, 0x83, + 0x6a, 0xa0, 0x9a, 0x36, 0x13, 0x19, 0xa5, 0x06, 0xf1, 0xd9, 0xb6, 0xd9, 0x43, 0x9e, 0xe7, 0x98, + 0x23, 0xd0, 0x15, 0x28, 0x77, 0xf8, 0xc4, 0xe3, 0xb1, 0x98, 0xd3, 0x17, 0x87, 0x83, 0xfa, 0xbc, + 0xee, 0x38, 0x56, 0x40, 0x21, 0x50, 0xe8, 0x0b, 0x30, 0xe3, 0x31, 0xd7, 0xb4, 0x0f, 0xaa, 0x65, + 0x91, 0x29, 0xa2, 0xc7, 0xef, 0x09, 0x48, 0x40, 0x26, 0xd1, 0xe8, 0x1a, 0xcc, 0x1e, 0x53, 0x57, + 0x14, 0xc7, 0xb4, 0xa0, 0x14, 0x2d, 0xf4, 0x61, 0x00, 0x0a, 0x48, 0x43, 0x02, 0x8d, 0xc2, 0x52, + 0xba, 0xfa, 0xd0, 0x5e, 0x58, 0xb9, 0xca, 0xc8, 0xe4, 0x19, 0x19, 0x96, 0xb1, 0xc7, 0xde, 0xf2, + 0x89, 0xcd, 0x4c, 0x76, 0xa2, 0x2f, 0x4a, 0xa7, 0x4c, 0x07, 0x8a, 0x02, 0x59, 0xda, 0x2f, 0x4a, + 0x50, 0x91, 0x7a, 0x2c, 0x62, 0xf6, 0xd0, 0xa3, 0x44, 0xce, 0x06, 0xe1, 0xbe, 0x56, 0x3c, 0xdc, + 0xfa, 0x4a, 0xd8, 0x19, 0xc7, 0xe4, 0x78, 0x17, 0x2a, 0x86, 0x63, 0x7b, 0xcc, 0x25, 0xa6, 0x2d, + 0x0b, 0x22, 0x3d, 0x92, 0x27, 0xe4, 0xb6, 0xe4, 0xd2, 0xcf, 0x4b, 0xf9, 0x95, 0x18, 0xe6, 0xe1, + 0xa4, 0x58, 0xf4, 0x38, 0x4a, 0x23, 0x55, 0x28, 0xf8, 0x72, 0x11, 0x05, 0xfc, 0xe4, 0xc5, 0x32, + 0xe8, 0xf7, 0x0a, 0x54, 0xf3, 0x98, 0x52, 0xf5, 0xae, 0xfc, 0x3b, 0xf5, 0x5e, 0x3a, 0xb3, 0x7a, + 0xff, 0x8d, 0x92, 0x08, 0xbb, 0xe7, 0xa1, 0x6f, 0xc3, 0x1c, 0xdf, 0xae, 0xc4, 0xb2, 0xa4, 0x8c, + 0x58, 0x31, 0x61, 0x17, 0x7b, 0xd0, 0xf9, 0x0e, 0x35, 0xd8, 0x7d, 0xca, 0x48, 0xdc, 0xe9, 0x63, + 0x18, 0x8e, 0xa4, 0xa2, 0x1d, 0x28, 0x7b, 0x7d, 0x6a, 0x9c, 0x62, 0xc2, 0x09, 0xcb, 0xf6, 0xfa, + 0xd4, 0x88, 0x67, 0x01, 0xff, 0xc2, 0x42, 0x8e, 0xf6, 0xe3, 0x64, 0x24, 0x3c, 0x2f, 0x1d, 0x89, + 0x1c, 0xff, 0x2a, 0x67, 0xe6, 0xdf, 0x5f, 0x47, 0x9d, 0x46, 0x58, 0x77, 0xcf, 0xf4, 0x18, 0x7a, + 0x77, 0xc4, 0xc7, 0x8d, 0x62, 0x3e, 0xe6, 0xdc, 0xc2, 0xc3, 0x51, 0x79, 0x85, 0x90, 0x84, 0x7f, + 0xef, 0xc3, 0xb4, 0xc9, 0x68, 0x2f, 0x2c, 0xac, 0xf5, 0xa2, 0x0e, 0x8e, 0xfb, 0xc2, 0x36, 0x67, + 0xc7, 0x81, 0x14, 0xed, 0x4f, 0xe9, 0x03, 0x70, 0xc7, 0xa3, 0x77, 0x61, 0xde, 0x93, 0xa3, 0x3e, + 0x6c, 0x0e, 0x45, 0xd6, 0x87, 0x68, 0x61, 0x3c, 0x27, 0x35, 0xcd, 0x87, 0x10, 0x0f, 0xc7, 0x02, + 0x13, 0x95, 0x5b, 0x3a, 0x4d, 0xe5, 0x66, 0x42, 0x9f, 0x5b, 0xb9, 0x4f, 0x60, 0x5c, 0xf4, 0xd0, + 0x3b, 0x30, 0xe3, 0xf4, 0xc9, 0x93, 0xa8, 0xab, 0x4e, 0xde, 0x09, 0x1f, 0x08, 0xd2, 0x71, 0x29, + 0x02, 0x5c, 0x65, 0x80, 0xc6, 0x52, 0xa2, 0xf6, 0x43, 0x05, 0x56, 0xb2, 0x2d, 0xec, 0x14, 0x4d, + 0x62, 0x17, 0x96, 0x7a, 0x84, 0x19, 0x87, 0xd1, 0xac, 0x92, 0xb7, 0xae, 0xf5, 0xe1, 0xa0, 0xbe, + 0x74, 0x3f, 0x85, 0x79, 0x31, 0xa8, 0xa3, 0x3b, 0xbe, 0x65, 0x9d, 0xa4, 0xb7, 0xd0, 0x0c, 0xbf, + 0xf6, 0x4f, 0x15, 0x16, 0x53, 0x0d, 0xbb, 0xc0, 0xce, 0xd5, 0x86, 0xe5, 0x6e, 0xec, 0x6b, 0x8e, + 0x90, 0x66, 0x7c, 0x56, 0x12, 0x27, 0xd3, 0x44, 0xf0, 0x65, 0xe9, 0xd3, 0x79, 0xa3, 0x7e, 0xda, + 0x79, 0xf3, 0x10, 0x96, 0x48, 0xb4, 0x07, 0xdc, 0x77, 0xba, 0x54, 0x4e, 0xe1, 0x86, 0xe4, 0x5a, + 0x6a, 0xa7, 0xb0, 0x2f, 0x06, 0xf5, 0xcf, 0x64, 0xb7, 0x07, 0x0e, 0xc7, 0x19, 0x29, 0xe8, 0x2a, + 0x4c, 0x1b, 0x8e, 0x6f, 0x33, 0x31, 0xaa, 0xd5, 0xb8, 0x4c, 0x36, 0x38, 0x10, 0x07, 0x38, 0x74, + 0x03, 0x2a, 0xa4, 0xdb, 0x33, 0xed, 0xb6, 0x61, 0x50, 0xcf, 0x13, 0x77, 0xc2, 0xb9, 0x60, 0xfe, + 0xb7, 0x63, 0x30, 0x4e, 0xd2, 0xa0, 0x1e, 0x2c, 0xed, 0x9b, 0xae, 0xc7, 0xda, 0xc7, 0xc4, 0xb4, + 0x48, 0xc7, 0xa2, 0xd5, 0xd9, 0xc2, 0xa3, 0x70, 0xcf, 0xef, 0x84, 0xa3, 0xf6, 0x62, 0x78, 0xbc, + 0x3b, 0x29, 0x61, 0x38, 0x23, 0x5c, 0xfb, 0x87, 0x12, 0x2e, 0xba, 0x39, 0x3b, 0x19, 0x7a, 0x85, + 0x2f, 0x78, 0x02, 0x25, 0xd3, 0x20, 0xb1, 0xa4, 0x09, 0x30, 0x0e, 0xf1, 0x89, 0x67, 0x82, 0x52, + 0xa1, 0x67, 0x02, 0xb5, 0xc0, 0x33, 0x41, 0x79, 0xe2, 0x33, 0x41, 0xc6, 0xc1, 0xd3, 0x9f, 0xec, + 0x60, 0xed, 0x9b, 0xe1, 0xe6, 0x14, 0xdd, 0x4b, 0xb6, 0x41, 0x35, 0xa8, 0x35, 0xa6, 0xe9, 0x8e, + 0xfa, 0x79, 0xe4, 0x52, 0xa3, 0xcf, 0x0e, 0x07, 0x75, 0x75, 0x63, 0xeb, 0x1e, 0xe6, 0x32, 0xb4, + 0x0f, 0x4b, 0x61, 0x4d, 0xc7, 0xb1, 0xf8, 0x7f, 0x15, 0xfd, 0x67, 0x55, 0xa4, 0xfd, 0x52, 0x81, + 0x73, 0x23, 0x4f, 0x25, 0xe8, 0x0d, 0x58, 0x34, 0x6d, 0x46, 0xdd, 0x7d, 0x62, 0xd0, 0x9d, 0xd8, + 0xbd, 0x17, 0xa4, 0x88, 0xc5, 0xed, 0x24, 0x12, 0xa7, 0x69, 0xd1, 0x25, 0x50, 0xcd, 0x7e, 0x78, + 0xed, 0x12, 0x21, 0xdc, 0xde, 0xf5, 0x30, 0x87, 0xf1, 0x58, 0x1c, 0x12, 0xb7, 0xfb, 0x94, 0xb8, + 0xb4, 0xdd, 0xed, 0xf2, 0x7b, 0xa8, 0xcc, 0xd3, 0x28, 0x16, 0x5f, 0x4d, 0xa3, 0x71, 0x96, 0x5e, + 0xfb, 0x99, 0x02, 0x97, 0x72, 0x67, 0x41, 0xe1, 0xc7, 0x34, 0x02, 0xd0, 0x27, 0x2e, 0xe9, 0x51, + 0x46, 0x5d, 0x4f, 0x2e, 0x46, 0xa7, 0x7c, 0xa3, 0x8a, 0x76, 0xae, 0xdd, 0x48, 0x10, 0x4e, 0x08, + 0xd5, 0x7e, 0x52, 0x82, 0x45, 0x2c, 0x13, 0x23, 0x58, 0xf0, 0xff, 0xfb, 0x9b, 0xde, 0x6e, 0x6a, + 0xd3, 0x9b, 0x5c, 0x6e, 0x29, 0xdb, 0xf2, 0x76, 0x3d, 0xf4, 0x88, 0x5f, 0xb0, 0x08, 0xf3, 0xbd, + 0x42, 0x37, 0xe2, 0xb4, 0x4c, 0xc1, 0x17, 0x87, 0x20, 0xf8, 0xc6, 0x52, 0x9e, 0x36, 0x54, 0xa0, + 0x96, 0xa2, 0xe7, 0x93, 0xda, 0xef, 0x51, 0x17, 0xd3, 0x7d, 0xea, 0x52, 0xdb, 0xa0, 0xe8, 0x3a, + 0xcc, 0x91, 0xbe, 0x79, 0xd7, 0x75, 0xfc, 0xbe, 0x8c, 0x67, 0xb4, 0x86, 0xb5, 0x77, 0xb7, 0x05, + 0x1c, 0x47, 0x14, 0x9c, 0x3a, 0x34, 0x48, 0x66, 0x55, 0xe2, 0x4e, 0x14, 0xc0, 0x71, 0x44, 0x11, + 0x35, 0x8e, 0x72, 0x6e, 0xe3, 0xd0, 0x41, 0xf5, 0xcd, 0xae, 0xbc, 0x2e, 0xbe, 0x2e, 0x09, 0xd4, + 0xb7, 0xb7, 0x37, 0x5f, 0x0c, 0xea, 0x57, 0xf2, 0x9e, 0x81, 0xd9, 0x49, 0x9f, 0x7a, 0x8d, 0xb7, + 0xb7, 0x37, 0x31, 0x67, 0xd6, 0x7e, 0xab, 0xc0, 0xb9, 0xd4, 0x21, 0xcf, 0x60, 0x1d, 0x7d, 0x90, + 0x5e, 0x47, 0xaf, 0x15, 0x8f, 0x58, 0xce, 0x42, 0x7a, 0x98, 0x39, 0x83, 0xd8, 0x48, 0xf7, 0xb2, + 0x4f, 0xa3, 0xeb, 0x45, 0xaf, 0x7b, 0xf9, 0xef, 0xa1, 0xda, 0x1f, 0x4a, 0x70, 0x7e, 0x4c, 0x0e, + 0xa1, 0xc7, 0x00, 0x71, 0x73, 0x93, 0xfa, 0x26, 0x0f, 0xed, 0x91, 0xe7, 0x8f, 0x25, 0xf1, 0x60, + 0x19, 0x43, 0x13, 0x02, 0x91, 0x0b, 0x15, 0x97, 0x7a, 0xd4, 0x3d, 0xa6, 0xdd, 0x3b, 0x8e, 0x2b, + 0xfd, 0xf6, 0x46, 0x71, 0xbf, 0x8d, 0x64, 0x6e, 0x7c, 0x5b, 0xc6, 0xb1, 0x5c, 0x9c, 0x54, 0x82, + 0x1e, 0xc7, 0xfe, 0x0b, 0x5e, 0xe0, 0x5b, 0x45, 0xce, 0x93, 0xfe, 0xed, 0x60, 0x82, 0x27, 0xff, + 0xa2, 0xc0, 0x85, 0x94, 0x8d, 0x5f, 0xa7, 0xbd, 0xbe, 0x45, 0x18, 0x3d, 0x83, 0x2e, 0xf4, 0x28, + 0xd5, 0x85, 0x6e, 0x16, 0xf7, 0x63, 0x68, 0x63, 0xee, 0xcd, 0xf3, 0x43, 0x05, 0x2e, 0x8d, 0xe5, + 0x38, 0x83, 0xb2, 0xfa, 0x46, 0xba, 0xac, 0x5a, 0xa7, 0x3f, 0x56, 0x4e, 0x79, 0xfd, 0x39, 0xef, + 0x50, 0xa2, 0xce, 0xfe, 0x07, 0x87, 0x86, 0xf6, 0x2b, 0x05, 0x16, 0x42, 0x4a, 0xbe, 0x78, 0x16, + 0xd8, 0xd2, 0x5a, 0x00, 0xf2, 0x27, 0xb3, 0xf0, 0x35, 0x46, 0x8d, 0xcd, 0xbe, 0x1b, 0x61, 0x70, + 0x82, 0x0a, 0x7d, 0x0d, 0x50, 0x68, 0xe0, 0x9e, 0x25, 0x56, 0x01, 0xbe, 0xed, 0xa8, 0x82, 0x77, + 0x55, 0xf2, 0x22, 0x3c, 0x42, 0x81, 0xc7, 0x70, 0x69, 0xbf, 0x53, 0xe2, 0x69, 0x2d, 0xc0, 0x2f, + 0xa9, 0xe3, 0x85, 0x6d, 0xb9, 0x8e, 0x4f, 0x8e, 0x1b, 0x41, 0xf9, 0xb2, 0x8e, 0x1b, 0x61, 0x5c, + 0x4e, 0x3d, 0xbc, 0xaf, 0x66, 0x0e, 0x21, 0xea, 0xa0, 0xe8, 0x66, 0xf7, 0x66, 0xe2, 0x67, 0xd2, + 0x4a, 0xeb, 0x95, 0x42, 0xd6, 0xf0, 0x1c, 0x1d, 0x7b, 0x55, 0xba, 0x0e, 0x73, 0xb6, 0xd3, 0x0d, + 0x56, 0xe0, 0xcc, 0x4a, 0xb1, 0x23, 0xe1, 0x38, 0xa2, 0x18, 0xf9, 0x35, 0xaf, 0xfc, 0xe9, 0xfc, + 0x9a, 0x27, 0xd6, 0x20, 0xcb, 0xe2, 0x04, 0xe1, 0x2d, 0x2c, 0x5e, 0x83, 0x24, 0x1c, 0x47, 0x14, + 0x68, 0x27, 0x1e, 0x2c, 0x33, 0x22, 0x22, 0x57, 0x0b, 0x0c, 0xe6, 0xfc, 0x49, 0xa2, 0xb7, 0x9f, + 0x3d, 0xaf, 0x4d, 0x7d, 0xf0, 0xbc, 0x36, 0xf5, 0xd1, 0xf3, 0xda, 0xd4, 0xf7, 0x87, 0x35, 0xe5, + 0xd9, 0xb0, 0xa6, 0x7c, 0x30, 0xac, 0x29, 0x1f, 0x0d, 0x6b, 0xca, 0xdf, 0x87, 0x35, 0xe5, 0x47, + 0x1f, 0xd7, 0xa6, 0xde, 0xb9, 0x3c, 0xe1, 0x3f, 0x0a, 0xfe, 0x15, 0x00, 0x00, 0xff, 0xff, 0xa6, + 0xd4, 0xe9, 0x0d, 0x6f, 0x20, 0x00, 0x00, } func (m *AllocatedDeviceStatus) Marshal() (dAtA []byte, err error) { @@ -2005,6 +2037,20 @@ func (m *DeviceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.FirstAvailable) > 0 { + for iNdEx := len(m.FirstAvailable) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.FirstAvailable[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } if m.AdminAccess != nil { i-- if *m.AdminAccess { @@ -2138,6 +2184,61 @@ func (m *DeviceSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *DeviceSubRequest) 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 *DeviceSubRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeviceSubRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.Count)) + i-- + dAtA[i] = 0x28 + i -= len(m.AllocationMode) + copy(dAtA[i:], m.AllocationMode) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllocationMode))) + i-- + dAtA[i] = 0x22 + if len(m.Selectors) > 0 { + for iNdEx := len(m.Selectors) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Selectors[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.DeviceClassName) + copy(dAtA[i:], m.DeviceClassName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DeviceClassName))) + 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 *NetworkDeviceData) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3133,6 +3234,12 @@ func (m *DeviceRequest) Size() (n int) { if m.AdminAccess != nil { n += 2 } + if len(m.FirstAvailable) > 0 { + for _, e := range m.FirstAvailable { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -3169,6 +3276,28 @@ func (m *DeviceSelector) Size() (n int) { return n } +func (m *DeviceSubRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DeviceClassName) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Selectors) > 0 { + for _, e := range m.Selectors { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.AllocationMode) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Count)) + return n +} + func (m *NetworkDeviceData) Size() (n int) { if m == nil { return 0 @@ -3669,6 +3798,11 @@ func (this *DeviceRequest) String() string { repeatedStringForSelectors += strings.Replace(strings.Replace(f.String(), "DeviceSelector", "DeviceSelector", 1), `&`, ``, 1) + "," } repeatedStringForSelectors += "}" + repeatedStringForFirstAvailable := "[]DeviceSubRequest{" + for _, f := range this.FirstAvailable { + repeatedStringForFirstAvailable += strings.Replace(strings.Replace(f.String(), "DeviceSubRequest", "DeviceSubRequest", 1), `&`, ``, 1) + "," + } + repeatedStringForFirstAvailable += "}" s := strings.Join([]string{`&DeviceRequest{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `DeviceClassName:` + fmt.Sprintf("%v", this.DeviceClassName) + `,`, @@ -3676,6 +3810,7 @@ func (this *DeviceRequest) String() string { `AllocationMode:` + fmt.Sprintf("%v", this.AllocationMode) + `,`, `Count:` + fmt.Sprintf("%v", this.Count) + `,`, `AdminAccess:` + valueToStringGenerated(this.AdminAccess) + `,`, + `FirstAvailable:` + repeatedStringForFirstAvailable + `,`, `}`, }, "") return s @@ -3704,6 +3839,25 @@ func (this *DeviceSelector) String() string { }, "") return s } +func (this *DeviceSubRequest) String() string { + if this == nil { + return "nil" + } + repeatedStringForSelectors := "[]DeviceSelector{" + for _, f := range this.Selectors { + repeatedStringForSelectors += strings.Replace(strings.Replace(f.String(), "DeviceSelector", "DeviceSelector", 1), `&`, ``, 1) + "," + } + repeatedStringForSelectors += "}" + s := strings.Join([]string{`&DeviceSubRequest{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `DeviceClassName:` + fmt.Sprintf("%v", this.DeviceClassName) + `,`, + `Selectors:` + repeatedStringForSelectors + `,`, + `AllocationMode:` + fmt.Sprintf("%v", this.AllocationMode) + `,`, + `Count:` + fmt.Sprintf("%v", this.Count) + `,`, + `}`, + }, "") + return s +} func (this *NetworkDeviceData) String() string { if this == nil { return "nil" @@ -6390,6 +6544,40 @@ func (m *DeviceRequest) Unmarshal(dAtA []byte) error { } b := bool(v != 0) m.AdminAccess = &b + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FirstAvailable", 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.FirstAvailable = append(m.FirstAvailable, DeviceSubRequest{}) + if err := m.FirstAvailable[len(m.FirstAvailable)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -6696,6 +6884,205 @@ func (m *DeviceSelector) Unmarshal(dAtA []byte) error { } return nil } +func (m *DeviceSubRequest) 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: DeviceSubRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeviceSubRequest: 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 DeviceClassName", 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.DeviceClassName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selectors", 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.Selectors = append(m.Selectors, DeviceSelector{}) + if err := m.Selectors[len(m.Selectors)-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 AllocationMode", 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.AllocationMode = DeviceAllocationMode(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + } + m.Count = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Count |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 *NetworkDeviceData) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/staging/src/k8s.io/api/resource/v1beta1/generated.proto b/staging/src/k8s.io/api/resource/v1beta1/generated.proto index f52413f2456..4d860e1bc01 100644 --- a/staging/src/k8s.io/api/resource/v1beta1/generated.proto +++ b/staging/src/k8s.io/api/resource/v1beta1/generated.proto @@ -200,6 +200,10 @@ message DeviceAllocationConfiguration { // Requests lists the names of requests where the configuration applies. // If empty, its applies to all requests. // + // References to subrequests must include the name of the main request + // and may include the subrequest using the format
[/]. If just + // the main request is given, the configuration applies to all subrequests. + // // +optional // +listType=atomic repeated string requests = 2; @@ -294,6 +298,10 @@ message DeviceClaimConfiguration { // Requests lists the names of requests where the configuration applies. // If empty, it applies to all requests. // + // References to subrequests must include the name of the main request + // and may include the subrequest using the format
[/]. If just + // the main request is given, the configuration applies to all subrequests. + // // +optional // +listType=atomic repeated string requests = 1; @@ -378,6 +386,10 @@ message DeviceConstraint { // constraint. If this is not specified, this constraint applies to all // requests in this claim. // + // References to subrequests must include the name of the main request + // and may include the subrequest using the format
[/]. If just + // the main request is given, the constraint applies to all subrequests. + // // +optional // +listType=atomic repeated string requests = 1; @@ -403,16 +415,12 @@ message DeviceConstraint { // 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. -// -// A DeviceClassName is currently required. Clients must check that it is -// indeed set. It's absence indicates that something changed in a way that -// is not supported by the client yet, in which case it must refuse to -// handle the request. message DeviceRequest { // Name can be used to reference this request in a pod.spec.containers[].resources.claims // entry and in a constraint of the claim. // - // Must be a DNS label. + // Must be a DNS label and unique among all DeviceRequests in a + // ResourceClaim. // // +required optional string name = 1; @@ -421,7 +429,8 @@ message DeviceRequest { // additional configuration and selectors to be inherited by this // request. // - // A class is required. Which classes are available depends on the cluster. + // A class is required if no subrequests are specified in the + // firstAvailable list. Which classes are available depends on the cluster. // // Administrators may use this to restrict which devices may get // requested by only installing classes with selectors for permitted @@ -429,7 +438,8 @@ message DeviceRequest { // then administrators can create an empty DeviceClass for users // to reference. // - // +required + // +optional + // +oneOf=deviceRequestType optional string deviceClassName = 2; // Selectors define criteria which must be satisfied by a specific @@ -483,13 +493,39 @@ message DeviceRequest { // +optional // +featureGate=DRAAdminAccess optional bool adminAccess = 6; + + // FirstAvailable contains subrequests, of which exactly one will be + // satisfied by the scheduler to satisfy this request. It tries to + // satisfy them in the order in which they are listed here. So if + // there are two entries in the list, the schduler will only check + // the second one if it determines that the first one can not be used. + // + // This field may only be set in the entries of DeviceClaim.Requests. + // + // DRA does not yet implement scoring, so the scheduler will + // select the first set of devices that satisfies all the + // requests in the claim. And if the requirements can + // be satisfied on more than one node, other scheduling features + // will determine which node is chosen. This means that the set of + // devices allocated to a claim might not be the optimal set + // available to the cluster. Scoring will be implemented later. + // + // +optional + // +oneOf=deviceRequestType + // +listType=atomic + // +featureGate=DRAPrioritizedList + repeated DeviceSubRequest firstAvailable = 7; } // DeviceRequestAllocationResult contains the allocation result for one request. message DeviceRequestAllocationResult { // Request is the name of the request in the claim which caused this - // device to be allocated. Multiple devices may have been allocated - // per request. + // device to be allocated. If it references a subrequest in the + // firstAvailable list on a DeviceRequest, this field must + // include both the name of the main request and the subrequest + // using the format
/. + // + // Multiple devices may have been allocated per request. // // +required optional string request = 1; @@ -541,6 +577,78 @@ message DeviceSelector { optional CELDeviceSelector cel = 1; } +// DeviceSubRequest describes a request for device provided in the +// claim.spec.devices.requests[].firstAvailable array. Each +// is typically a request for a single resource like a device, but can +// also ask for several identical devices. +// +// DeviceSubRequest is similar to Request, but doesn't expose the AdminAccess +// or FirstAvailable fields, as those can only be set on the top-level request. +// AdminAccess is not supported for requests with a prioritized list, and +// recursive FirstAvailable fields are not supported. +message DeviceSubRequest { + // Name can be used to reference this subrequest in the list of constraints + // or the list of configurations for the claim. References must use the + // format
/. + // + // Must be a DNS label. + // + // +required + optional string name = 1; + + // DeviceClassName references a specific DeviceClass, which can define + // additional configuration and selectors to be inherited by this + // subrequest. + // + // A class is required. Which classes are available depends on the cluster. + // + // Administrators may use this to restrict which devices may get + // requested by only installing classes with selectors for permitted + // devices. If users are free to request anything without restrictions, + // then administrators can create an empty DeviceClass for users + // to reference. + // + // +required + optional string deviceClassName = 2; + + // Selectors define criteria which must be satisfied by a specific + // device in order for that device to be considered for this + // subrequest. All selectors must be satisfied for a device to be + // considered. + // + // +optional + // +listType=atomic + repeated DeviceSelector selectors = 3; + + // AllocationMode and its related fields define how devices are allocated + // to satisfy this subrequest. Supported values are: + // + // - ExactCount: This request is for a specific number of devices. + // This is the default. The exact number is provided in the + // count field. + // + // - All: This subrequest is for all of the matching devices in a pool. + // Allocation will fail if some devices are already allocated, + // unless adminAccess is requested. + // + // If AlloctionMode is not specified, the default mode is ExactCount. If + // the mode is ExactCount and count is not specified, the default count is + // one. Any other subrequests must specify this field. + // + // More modes may get added in the future. Clients must refuse to handle + // requests with unknown modes. + // + // +optional + optional string allocationMode = 4; + + // Count is used only when the count mode is "ExactCount". Must be greater than zero. + // If AllocationMode is ExactCount and this field is not specified, the default is one. + // + // +optional + // +oneOf=AllocationMode + optional int64 count = 5; +} + // NetworkDeviceData provides network-related details for the allocated device. // This information may be filled by drivers or other components to configure // or identify the device within a network context. 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 fac9987e3ae..3c3a227abfe 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 @@ -83,7 +83,7 @@ func (Device) SwaggerDoc() map[string]string { var map_DeviceAllocationConfiguration = map[string]string{ "": "DeviceAllocationConfiguration gets embedded in an AllocationResult.", "source": "Source records whether the configuration comes from a class and thus is not something that a normal user would have been able to set or from a claim.", - "requests": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.", + "requests": "Requests lists the names of requests where the configuration applies. If empty, its applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", } func (DeviceAllocationConfiguration) SwaggerDoc() map[string]string { @@ -134,7 +134,7 @@ func (DeviceClaim) SwaggerDoc() map[string]string { var map_DeviceClaimConfiguration = map[string]string{ "": "DeviceClaimConfiguration is used for configuration parameters in DeviceClaim.", - "requests": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.", + "requests": "Requests lists the names of requests where the configuration applies. If empty, it applies to all requests.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the configuration applies to all subrequests.", } func (DeviceClaimConfiguration) SwaggerDoc() map[string]string { @@ -190,7 +190,7 @@ func (DeviceConfiguration) SwaggerDoc() map[string]string { var map_DeviceConstraint = map[string]string{ "": "DeviceConstraint must have exactly one field set besides Requests.", - "requests": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.", + "requests": "Requests is a list of the one or more requests in this claim which must co-satisfy this constraint. If a request is fulfilled by multiple devices, then all of the devices must satisfy the constraint. If this is not specified, this constraint applies to all requests in this claim.\n\nReferences to subrequests must include the name of the main request and may include the subrequest using the format
[/]. If just the main request is given, the constraint applies to all subrequests.", "matchAttribute": "MatchAttribute requires that all devices in question have this attribute and that its type and value are the same across those devices.\n\nFor example, if you specified \"dra.example.com/numa\" (a hypothetical example!), then only devices in the same NUMA node will be chosen. A device which does not have that attribute will not be chosen. All devices should use a value of the same type for this attribute because that is part of its specification, but if one device doesn't, then it also will not be chosen.\n\nMust include the domain qualifier.", } @@ -199,13 +199,14 @@ func (DeviceConstraint) SwaggerDoc() map[string]string { } 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.\n\nA DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.", - "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.", - "deviceClassName": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "": "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.", + "deviceClassName": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this request.\n\nA class is required if no subrequests are specified in the firstAvailable list. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", "selectors": "Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.", "allocationMode": "AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:\n\n- ExactCount: This request is for a specific number of devices.\n This is the default. The exact number is provided in the\n count field.\n\n- All: This request is for all of the matching devices in a pool.\n At least one device must exist on the node for the allocation to succeed.\n Allocation will fail if some devices are already allocated,\n unless adminAccess is requested.\n\nIf AllocationMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.\n\nMore modes may get added in the future. Clients must refuse to handle requests with unknown modes.", "count": "Count is used only when the count mode is \"ExactCount\". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.", "adminAccess": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", + "firstAvailable": "FirstAvailable contains subrequests, of which exactly one will be satisfied by the scheduler to satisfy this request. It tries to satisfy them in the order in which they are listed here. So if there are two entries in the list, the schduler will only check the second one if it determines that the first one can not be used.\n\nThis field may only be set in the entries of DeviceClaim.Requests.\n\nDRA does not yet implement scoring, so the scheduler will select the first set of devices that satisfies all the requests in the claim. And if the requirements can be satisfied on more than one node, other scheduling features will determine which node is chosen. This means that the set of devices allocated to a claim might not be the optimal set available to the cluster. Scoring will be implemented later.", } func (DeviceRequest) SwaggerDoc() map[string]string { @@ -214,7 +215,7 @@ func (DeviceRequest) SwaggerDoc() map[string]string { var map_DeviceRequestAllocationResult = map[string]string{ "": "DeviceRequestAllocationResult contains the allocation result for one request.", - "request": "Request is the name of the request in the claim which caused this device to be allocated. Multiple devices may have been allocated per request.", + "request": "Request is the name of the request in the claim which caused this device to be allocated. If it references a subrequest in the firstAvailable list on a DeviceRequest, this field must include both the name of the main request and the subrequest using the format
/.\n\nMultiple devices may have been allocated per request.", "driver": "Driver specifies the name of the DRA driver whose kubelet plugin should be invoked to process the allocation once the claim is needed on a node.\n\nMust be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver.", "pool": "This name together with the driver name and the device name field identify which device was allocated (`//`).\n\nMust not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.", "device": "Device references one device instance via its name in the driver's resource pool. It must be a DNS label.", @@ -234,6 +235,19 @@ func (DeviceSelector) SwaggerDoc() map[string]string { return map_DeviceSelector } +var map_DeviceSubRequest = map[string]string{ + "": "DeviceSubRequest describes a request for device provided in the claim.spec.devices.requests[].firstAvailable array. Each is typically a request for a single resource like a device, but can also ask for several identical devices.\n\nDeviceSubRequest is similar to Request, but doesn't expose the AdminAccess or FirstAvailable fields, as those can only be set on the top-level request. AdminAccess is not supported for requests with a prioritized list, and recursive FirstAvailable fields are not supported.", + "name": "Name can be used to reference this subrequest in the list of constraints or the list of configurations for the claim. References must use the format
/.\n\nMust be a DNS label.", + "deviceClassName": "DeviceClassName references a specific DeviceClass, which can define additional configuration and selectors to be inherited by this subrequest.\n\nA class is required. Which classes are available depends on the cluster.\n\nAdministrators may use this to restrict which devices may get requested by only installing classes with selectors for permitted devices. If users are free to request anything without restrictions, then administrators can create an empty DeviceClass for users to reference.", + "selectors": "Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this subrequest. All selectors must be satisfied for a device to be considered.", + "allocationMode": "AllocationMode and its related fields define how devices are allocated to satisfy this subrequest. Supported values are:\n\n- ExactCount: This request is for a specific number of devices.\n This is the default. The exact number is provided in the\n count field.\n\n- All: This subrequest is for all of the matching devices in a pool.\n Allocation will fail if some devices are already allocated,\n unless adminAccess is requested.\n\nIf AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other subrequests must specify this field.\n\nMore modes may get added in the future. Clients must refuse to handle requests with unknown modes.", + "count": "Count is used only when the count mode is \"ExactCount\". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.", +} + +func (DeviceSubRequest) SwaggerDoc() map[string]string { + return map_DeviceSubRequest +} + var map_NetworkDeviceData = map[string]string{ "": "NetworkDeviceData provides network-related details for the allocated device. This information may be filled by drivers or other components to configure or identify the device within a network context.", "interfaceName": "InterfaceName specifies the name of the network interface associated with the allocated device. This might be the name of a physical or virtual network interface being configured in the pod.\n\nMust not be longer than 256 characters.", 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 ec08c15b0af..f2592e39b39 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 @@ -482,6 +482,13 @@ func (in *DeviceRequest) DeepCopyInto(out *DeviceRequest) { *out = new(bool) **out = **in } + if in.FirstAvailable != nil { + in, out := &in.FirstAvailable, &out.FirstAvailable + *out = make([]DeviceSubRequest, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -537,6 +544,29 @@ func (in *DeviceSelector) DeepCopy() *DeviceSelector { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceSubRequest) DeepCopyInto(out *DeviceSubRequest) { + *out = *in + if in.Selectors != nil { + in, out := &in.Selectors, &out.Selectors + *out = make([]DeviceSelector, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceSubRequest. +func (in *DeviceSubRequest) DeepCopy() *DeviceSubRequest { + if in == nil { + return nil + } + out := new(DeviceSubRequest) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkDeviceData) DeepCopyInto(out *NetworkDeviceData) { *out = *in diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.json b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.json index f61f244ae7e..b3a610c4b2f 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.json +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.json @@ -58,7 +58,22 @@ ], "allocationMode": "allocationModeValue", "count": 5, - "adminAccess": true + "adminAccess": true, + "firstAvailable": [ + { + "name": "nameValue", + "deviceClassName": "deviceClassNameValue", + "selectors": [ + { + "cel": { + "expression": "expressionValue" + } + } + ], + "allocationMode": "allocationModeValue", + "count": 5 + } + ] } ], "constraints": [ diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.pb b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.pb index 30923fd8e35..e70287ec054 100644 Binary files a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.pb and b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.pb differ diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.yaml b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.yaml index bc7855856b1..c2c12181b3c 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaim.yaml @@ -55,6 +55,14 @@ spec: allocationMode: allocationModeValue count: 5 deviceClassName: deviceClassNameValue + firstAvailable: + - allocationMode: allocationModeValue + count: 5 + deviceClassName: deviceClassNameValue + name: nameValue + selectors: + - cel: + expression: expressionValue name: nameValue selectors: - cel: diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.json b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.json index 0669af6df46..5dabc4458f4 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.json +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.json @@ -101,7 +101,22 @@ ], "allocationMode": "allocationModeValue", "count": 5, - "adminAccess": true + "adminAccess": true, + "firstAvailable": [ + { + "name": "nameValue", + "deviceClassName": "deviceClassNameValue", + "selectors": [ + { + "cel": { + "expression": "expressionValue" + } + } + ], + "allocationMode": "allocationModeValue", + "count": 5 + } + ] } ], "constraints": [ diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.pb b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.pb index fab18a8e9e5..832be05eb94 100644 Binary files a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.pb and b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.pb differ diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.yaml b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.yaml index b0e5939dd5f..13b06c07493 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1alpha3.ResourceClaimTemplate.yaml @@ -88,6 +88,14 @@ spec: allocationMode: allocationModeValue count: 5 deviceClassName: deviceClassNameValue + firstAvailable: + - allocationMode: allocationModeValue + count: 5 + deviceClassName: deviceClassNameValue + name: nameValue + selectors: + - cel: + expression: expressionValue name: nameValue selectors: - cel: diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.json b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.json index f0f993218bc..7982a35a1c8 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.json +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.json @@ -58,7 +58,22 @@ ], "allocationMode": "allocationModeValue", "count": 5, - "adminAccess": true + "adminAccess": true, + "firstAvailable": [ + { + "name": "nameValue", + "deviceClassName": "deviceClassNameValue", + "selectors": [ + { + "cel": { + "expression": "expressionValue" + } + } + ], + "allocationMode": "allocationModeValue", + "count": 5 + } + ] } ], "constraints": [ diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.pb b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.pb index 9265e325d91..ed044a4d13d 100644 Binary files a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.pb and b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.pb differ diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.yaml b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.yaml index 71d30617a56..5e56d97b587 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaim.yaml @@ -55,6 +55,14 @@ spec: allocationMode: allocationModeValue count: 5 deviceClassName: deviceClassNameValue + firstAvailable: + - allocationMode: allocationModeValue + count: 5 + deviceClassName: deviceClassNameValue + name: nameValue + selectors: + - cel: + expression: expressionValue name: nameValue selectors: - cel: diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.json b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.json index 9342cb4faa0..bf5f56abe70 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.json +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.json @@ -101,7 +101,22 @@ ], "allocationMode": "allocationModeValue", "count": 5, - "adminAccess": true + "adminAccess": true, + "firstAvailable": [ + { + "name": "nameValue", + "deviceClassName": "deviceClassNameValue", + "selectors": [ + { + "cel": { + "expression": "expressionValue" + } + } + ], + "allocationMode": "allocationModeValue", + "count": 5 + } + ] } ], "constraints": [ diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.pb b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.pb index af0631e6030..6b6cd72e38c 100644 Binary files a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.pb and b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.pb differ diff --git a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.yaml b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.yaml index 3d2209315d1..6711b1d802d 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/resource.k8s.io.v1beta1.ResourceClaimTemplate.yaml @@ -88,6 +88,14 @@ spec: allocationMode: allocationModeValue count: 5 deviceClassName: deviceClassNameValue + firstAvailable: + - allocationMode: allocationModeValue + count: 5 + deviceClassName: deviceClassNameValue + name: nameValue + selectors: + - cel: + expression: expressionValue name: nameValue selectors: - cel: 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 ae67f4ad81b..c116160535f 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go @@ -12708,6 +12708,12 @@ var schemaYAML = typed.YAMLObject(`types: type: scalar: string default: "" + - name: firstAvailable + type: + list: + elementType: + namedType: io.k8s.api.resource.v1alpha3.DeviceSubRequest + elementRelationship: atomic - name: name type: scalar: string @@ -12746,6 +12752,29 @@ var schemaYAML = typed.YAMLObject(`types: - name: cel type: namedType: io.k8s.api.resource.v1alpha3.CELDeviceSelector +- name: io.k8s.api.resource.v1alpha3.DeviceSubRequest + map: + fields: + - name: allocationMode + type: + scalar: string + - name: count + type: + scalar: numeric + - name: deviceClassName + type: + scalar: string + default: "" + - name: name + type: + scalar: string + default: "" + - name: selectors + type: + list: + elementType: + namedType: io.k8s.api.resource.v1alpha3.DeviceSelector + elementRelationship: atomic - name: io.k8s.api.resource.v1alpha3.NetworkDeviceData map: fields: @@ -13147,6 +13176,12 @@ var schemaYAML = typed.YAMLObject(`types: type: scalar: string default: "" + - name: firstAvailable + type: + list: + elementType: + namedType: io.k8s.api.resource.v1beta1.DeviceSubRequest + elementRelationship: atomic - name: name type: scalar: string @@ -13185,6 +13220,29 @@ var schemaYAML = typed.YAMLObject(`types: - name: cel type: namedType: io.k8s.api.resource.v1beta1.CELDeviceSelector +- name: io.k8s.api.resource.v1beta1.DeviceSubRequest + map: + fields: + - name: allocationMode + type: + scalar: string + - name: count + type: + scalar: numeric + - name: deviceClassName + type: + scalar: string + default: "" + - name: name + type: + scalar: string + default: "" + - name: selectors + type: + list: + elementType: + namedType: io.k8s.api.resource.v1beta1.DeviceSelector + elementRelationship: atomic - name: io.k8s.api.resource.v1beta1.NetworkDeviceData map: fields: diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/devicerequest.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/devicerequest.go index e5c87efe475..f91c8b41b26 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/devicerequest.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/devicerequest.go @@ -31,6 +31,7 @@ type DeviceRequestApplyConfiguration struct { AllocationMode *resourcev1alpha3.DeviceAllocationMode `json:"allocationMode,omitempty"` Count *int64 `json:"count,omitempty"` AdminAccess *bool `json:"adminAccess,omitempty"` + FirstAvailable []DeviceSubRequestApplyConfiguration `json:"firstAvailable,omitempty"` } // DeviceRequestApplyConfiguration constructs a declarative configuration of the DeviceRequest type for use with @@ -91,3 +92,16 @@ func (b *DeviceRequestApplyConfiguration) WithAdminAccess(value bool) *DeviceReq b.AdminAccess = &value return b } + +// WithFirstAvailable adds the given value to the FirstAvailable 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 FirstAvailable field. +func (b *DeviceRequestApplyConfiguration) WithFirstAvailable(values ...*DeviceSubRequestApplyConfiguration) *DeviceRequestApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithFirstAvailable") + } + b.FirstAvailable = append(b.FirstAvailable, *values[i]) + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/devicesubrequest.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/devicesubrequest.go new file mode 100644 index 00000000000..408c0daa55b --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1alpha3/devicesubrequest.go @@ -0,0 +1,84 @@ +/* +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 ( + resourcev1alpha3 "k8s.io/api/resource/v1alpha3" +) + +// DeviceSubRequestApplyConfiguration represents a declarative configuration of the DeviceSubRequest type for use +// with apply. +type DeviceSubRequestApplyConfiguration struct { + Name *string `json:"name,omitempty"` + DeviceClassName *string `json:"deviceClassName,omitempty"` + Selectors []DeviceSelectorApplyConfiguration `json:"selectors,omitempty"` + AllocationMode *resourcev1alpha3.DeviceAllocationMode `json:"allocationMode,omitempty"` + Count *int64 `json:"count,omitempty"` +} + +// DeviceSubRequestApplyConfiguration constructs a declarative configuration of the DeviceSubRequest type for use with +// apply. +func DeviceSubRequest() *DeviceSubRequestApplyConfiguration { + return &DeviceSubRequestApplyConfiguration{} +} + +// 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 *DeviceSubRequestApplyConfiguration) WithName(value string) *DeviceSubRequestApplyConfiguration { + b.Name = &value + return b +} + +// WithDeviceClassName sets the DeviceClassName 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 DeviceClassName field is set to the value of the last call. +func (b *DeviceSubRequestApplyConfiguration) WithDeviceClassName(value string) *DeviceSubRequestApplyConfiguration { + b.DeviceClassName = &value + return b +} + +// WithSelectors adds the given value to the Selectors 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 Selectors field. +func (b *DeviceSubRequestApplyConfiguration) WithSelectors(values ...*DeviceSelectorApplyConfiguration) *DeviceSubRequestApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithSelectors") + } + b.Selectors = append(b.Selectors, *values[i]) + } + return b +} + +// WithAllocationMode sets the AllocationMode 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 AllocationMode field is set to the value of the last call. +func (b *DeviceSubRequestApplyConfiguration) WithAllocationMode(value resourcev1alpha3.DeviceAllocationMode) *DeviceSubRequestApplyConfiguration { + b.AllocationMode = &value + return b +} + +// WithCount sets the Count 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 Count field is set to the value of the last call. +func (b *DeviceSubRequestApplyConfiguration) WithCount(value int64) *DeviceSubRequestApplyConfiguration { + b.Count = &value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/devicerequest.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/devicerequest.go index ea454a275c0..1099b6dd01f 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/devicerequest.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/devicerequest.go @@ -31,6 +31,7 @@ type DeviceRequestApplyConfiguration struct { AllocationMode *resourcev1beta1.DeviceAllocationMode `json:"allocationMode,omitempty"` Count *int64 `json:"count,omitempty"` AdminAccess *bool `json:"adminAccess,omitempty"` + FirstAvailable []DeviceSubRequestApplyConfiguration `json:"firstAvailable,omitempty"` } // DeviceRequestApplyConfiguration constructs a declarative configuration of the DeviceRequest type for use with @@ -91,3 +92,16 @@ func (b *DeviceRequestApplyConfiguration) WithAdminAccess(value bool) *DeviceReq b.AdminAccess = &value return b } + +// WithFirstAvailable adds the given value to the FirstAvailable 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 FirstAvailable field. +func (b *DeviceRequestApplyConfiguration) WithFirstAvailable(values ...*DeviceSubRequestApplyConfiguration) *DeviceRequestApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithFirstAvailable") + } + b.FirstAvailable = append(b.FirstAvailable, *values[i]) + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/devicesubrequest.go b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/devicesubrequest.go new file mode 100644 index 00000000000..0cc96d76990 --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/resource/v1beta1/devicesubrequest.go @@ -0,0 +1,84 @@ +/* +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 ( + resourcev1beta1 "k8s.io/api/resource/v1beta1" +) + +// DeviceSubRequestApplyConfiguration represents a declarative configuration of the DeviceSubRequest type for use +// with apply. +type DeviceSubRequestApplyConfiguration struct { + Name *string `json:"name,omitempty"` + DeviceClassName *string `json:"deviceClassName,omitempty"` + Selectors []DeviceSelectorApplyConfiguration `json:"selectors,omitempty"` + AllocationMode *resourcev1beta1.DeviceAllocationMode `json:"allocationMode,omitempty"` + Count *int64 `json:"count,omitempty"` +} + +// DeviceSubRequestApplyConfiguration constructs a declarative configuration of the DeviceSubRequest type for use with +// apply. +func DeviceSubRequest() *DeviceSubRequestApplyConfiguration { + return &DeviceSubRequestApplyConfiguration{} +} + +// 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 *DeviceSubRequestApplyConfiguration) WithName(value string) *DeviceSubRequestApplyConfiguration { + b.Name = &value + return b +} + +// WithDeviceClassName sets the DeviceClassName 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 DeviceClassName field is set to the value of the last call. +func (b *DeviceSubRequestApplyConfiguration) WithDeviceClassName(value string) *DeviceSubRequestApplyConfiguration { + b.DeviceClassName = &value + return b +} + +// WithSelectors adds the given value to the Selectors 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 Selectors field. +func (b *DeviceSubRequestApplyConfiguration) WithSelectors(values ...*DeviceSelectorApplyConfiguration) *DeviceSubRequestApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithSelectors") + } + b.Selectors = append(b.Selectors, *values[i]) + } + return b +} + +// WithAllocationMode sets the AllocationMode 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 AllocationMode field is set to the value of the last call. +func (b *DeviceSubRequestApplyConfiguration) WithAllocationMode(value resourcev1beta1.DeviceAllocationMode) *DeviceSubRequestApplyConfiguration { + b.AllocationMode = &value + return b +} + +// WithCount sets the Count 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 Count field is set to the value of the last call. +func (b *DeviceSubRequestApplyConfiguration) WithCount(value int64) *DeviceSubRequestApplyConfiguration { + b.Count = &value + 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 5a09a885031..00bb2644d28 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/utils.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/utils.go @@ -1634,6 +1634,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &resourcev1alpha3.DeviceRequestAllocationResultApplyConfiguration{} case v1alpha3.SchemeGroupVersion.WithKind("DeviceSelector"): return &resourcev1alpha3.DeviceSelectorApplyConfiguration{} + case v1alpha3.SchemeGroupVersion.WithKind("DeviceSubRequest"): + return &resourcev1alpha3.DeviceSubRequestApplyConfiguration{} case v1alpha3.SchemeGroupVersion.WithKind("NetworkDeviceData"): return &resourcev1alpha3.NetworkDeviceDataApplyConfiguration{} case v1alpha3.SchemeGroupVersion.WithKind("OpaqueDeviceConfiguration"): @@ -1696,6 +1698,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &applyconfigurationsresourcev1beta1.DeviceRequestAllocationResultApplyConfiguration{} case resourcev1beta1.SchemeGroupVersion.WithKind("DeviceSelector"): return &applyconfigurationsresourcev1beta1.DeviceSelectorApplyConfiguration{} + case resourcev1beta1.SchemeGroupVersion.WithKind("DeviceSubRequest"): + return &applyconfigurationsresourcev1beta1.DeviceSubRequestApplyConfiguration{} case resourcev1beta1.SchemeGroupVersion.WithKind("NetworkDeviceData"): return &applyconfigurationsresourcev1beta1.NetworkDeviceDataApplyConfiguration{} case resourcev1beta1.SchemeGroupVersion.WithKind("OpaqueDeviceConfiguration"): diff --git a/test/featuregates_linter/test_data/versioned_feature_list.yaml b/test/featuregates_linter/test_data/versioned_feature_list.yaml index deb494360aa..85b5d991518 100644 --- a/test/featuregates_linter/test_data/versioned_feature_list.yaml +++ b/test/featuregates_linter/test_data/versioned_feature_list.yaml @@ -426,6 +426,12 @@ lockToDefault: false preRelease: Alpha version: "1.32" +- name: DRAPrioritizedList + versionedSpecs: + - default: false + lockToDefault: false + preRelease: Alpha + version: "1.33" - name: DRAResourceClaimDeviceStatus versionedSpecs: - default: false