syntax = "proto3";
package generated;

import "Shared.proto";

message CreateVolumeRequest {
    string plugin = 1;
    string snapshotID = 2;
    string volumeType = 3;
    string volumeAZ = 4;
    int64 iops = 5;
}

message CreateVolumeResponse {
    string volumeID = 1;
}

message GetVolumeInfoRequest {
    string plugin = 1;
    string volumeID = 2;
    string volumeAZ = 3;
}

message GetVolumeInfoResponse {
    string volumeType = 1;
    int64 iops = 2;
}

message CreateSnapshotRequest {
    string plugin = 1;
    string volumeID = 2;
    string volumeAZ = 3;
    map<string, string> tags = 4;
}

message CreateSnapshotResponse {
    string snapshotID = 1;
}

message DeleteSnapshotRequest {
    string plugin = 1;
    string snapshotID = 2;
}

message GetVolumeIDRequest {
  string plugin = 1;
  bytes persistentVolume = 2;
}

message GetVolumeIDResponse {
  string volumeID = 1;
}

message SetVolumeIDRequest {
  string plugin = 1;
  bytes persistentVolume = 2;
  string volumeID = 3;
}

message SetVolumeIDResponse {
  bytes persistentVolume = 1;
}

message VolumeSnapshotterInitRequest {
  string plugin = 1;
  map<string, string> config = 2;
}

service VolumeSnapshotter {
    rpc Init(VolumeSnapshotterInitRequest) returns (Empty);
    rpc CreateVolumeFromSnapshot(CreateVolumeRequest) returns (CreateVolumeResponse);
    rpc GetVolumeInfo(GetVolumeInfoRequest) returns (GetVolumeInfoResponse);
    rpc CreateSnapshot(CreateSnapshotRequest) returns (CreateSnapshotResponse);
    rpc DeleteSnapshot(DeleteSnapshotRequest) returns (Empty);
    rpc GetVolumeID(GetVolumeIDRequest) returns (GetVolumeIDResponse);
    rpc SetVolumeID(SetVolumeIDRequest) returns (SetVolumeIDResponse);
}
