/*
Copyright 2022 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.
*/

// To regenerate api.pb.go run hack/update-generated-kubelet-plugin-registration.sh

syntax = "proto3";

package v1alpha1;

import "github.com/gogo/protobuf/gogoproto/gogo.proto";

option go_package = "dra";
option (gogoproto.goproto_stringer_all) = false;
option (gogoproto.stringer_all) =  true;
option (gogoproto.goproto_getters_all) = true;
option (gogoproto.marshaler_all) = true;
option (gogoproto.sizer_all) = true;
option (gogoproto.unmarshaler_all) = true;
option (gogoproto.goproto_unrecognized_all) = false;

service Node {
  rpc NodePrepareResource (NodePrepareResourceRequest)
    returns (NodePrepareResourceResponse) {}

  rpc NodeUnprepareResource (NodeUnprepareResourceRequest)
    returns (NodeUnprepareResourceResponse) {}
}

message NodePrepareResourceRequest {
    // The ResourceClaim namespace (ResourceClaim.meta.Namespace).
    // This field is REQUIRED.
    string namespace = 1;
    // The UID of the Resource claim (ResourceClaim.meta.UUID).
    // This field is REQUIRED.
    string claim_uid = 2;
    // The name of the Resource claim (ResourceClaim.meta.Name)
    // This field is REQUIRED.
    string claim_name = 3;
    // Resource handle (AllocationResult.ResourceHandle)
    // This field is REQUIRED.
    string resource_handle = 4;
}

message NodePrepareResourceResponse {
    // These are the additional devices that kubelet must
    // make available via the container runtime. A resource
    // may have zero or more devices.
    repeated string cdi_devices = 1;
}

message NodeUnprepareResourceRequest {
    // The ResourceClaim namespace (ResourceClaim.meta.Namespace).
    // This field is REQUIRED.
    string namespace = 1;
    // The UID of the Resource claim (ResourceClaim.meta.UUID).
    // This field is REQUIRED.
    string claim_uid = 2;
    // The name of the Resource claim (ResourceClaim.meta.Name)
    // This field is REQUIRED.
    string claim_name = 3;
    // List of fully qualified CDI device names
    // Kubelet plugin returns them in the NodePrepareResourceResponse
    repeated string cdi_devices = 4;
}

message NodeUnprepareResourceResponse {
    // Intentionally empty.
}