mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-13 10:33:35 +00:00
vendor update for CSI 0.3.0
This commit is contained in:
2
vendor/github.com/container-storage-interface/spec/.travis.yml
generated
vendored
2
vendor/github.com/container-storage-interface/spec/.travis.yml
generated
vendored
@ -29,7 +29,7 @@ jobs:
|
||||
# Lang stage: Go
|
||||
- stage: lang
|
||||
language: go
|
||||
go: 1.8.3
|
||||
go: 1.9.5
|
||||
go_import_path: github.com/container-storage-interface/spec
|
||||
install:
|
||||
- make -C lib/go protoc
|
||||
|
6
vendor/github.com/container-storage-interface/spec/CONTRIBUTING.md
generated
vendored
6
vendor/github.com/container-storage-interface/spec/CONTRIBUTING.md
generated
vendored
@ -24,7 +24,11 @@ This also applies to the code snippets in the markdown files.
|
||||
|
||||
## Git commit
|
||||
|
||||
Prior to committing code please run `make` in order to update the protobuf file and any language bindings.
|
||||
The "system of record" for the specification is the `spec.md` file and all hand-edits of the specification should happen there.
|
||||
**DO NOT** manually edit the generated protobufs or generated language bindings.
|
||||
Once changes to `spec.md` are complete, please run `make` to update generated files.
|
||||
|
||||
**IMPORTANT:** Prior to committing code please run `make` to ensure that your specification changes have landed in all generated files.
|
||||
|
||||
### Commit Style
|
||||
|
||||
|
7
vendor/github.com/container-storage-interface/spec/Makefile
generated
vendored
7
vendor/github.com/container-storage-interface/spec/Makefile
generated
vendored
@ -7,8 +7,9 @@ CSI_PROTO := csi.proto
|
||||
#
|
||||
# The temporary file is not versioned, and thus will always be
|
||||
# built on Travis-CI.
|
||||
$(CSI_PROTO).tmp: $(CSI_SPEC)
|
||||
cat $? | sed -n -e '/```protobuf$$/,/^```$$/ p' | sed '/^```/d' > "$@"
|
||||
$(CSI_PROTO).tmp: $(CSI_SPEC) Makefile
|
||||
echo "// Code generated by make; DO NOT EDIT." > "$@"
|
||||
cat $< | sed -n -e '/```protobuf$$/,/^```$$/ p' | sed '/^```/d' >> "$@"
|
||||
|
||||
# This is the target for building the CSI protobuf file.
|
||||
#
|
||||
@ -37,8 +38,10 @@ build:
|
||||
endif
|
||||
|
||||
clean:
|
||||
$(MAKE) -C lib/go $@
|
||||
|
||||
clobber: clean
|
||||
$(MAKE) -C lib/go $@
|
||||
rm -f $(CSI_PROTO) $(CSI_PROTO).tmp
|
||||
|
||||
# check generated files for violation of standards
|
||||
|
8
vendor/github.com/container-storage-interface/spec/README.md
generated
vendored
8
vendor/github.com/container-storage-interface/spec/README.md
generated
vendored
@ -3,3 +3,11 @@
|
||||

|
||||
|
||||
This project contains the CSI [specification](spec.md) and [protobuf](csi.proto) files.
|
||||
|
||||
## CSI Adoption
|
||||
|
||||
### Container Orchestrators (CO)
|
||||
|
||||
* [Cloud Foundry](https://github.com/cloudfoundry/csi-local-volume-release)
|
||||
* [Kubernetes](https://kubernetes-csi.github.io/docs/)
|
||||
* [Mesos](http://mesos.apache.org/documentation/latest/csi/)
|
||||
|
2
vendor/github.com/container-storage-interface/spec/VERSION
generated
vendored
2
vendor/github.com/container-storage-interface/spec/VERSION
generated
vendored
@ -1 +1 @@
|
||||
0.2.0
|
||||
0.3.0
|
||||
|
668
vendor/github.com/container-storage-interface/spec/csi.proto
generated
vendored
668
vendor/github.com/container-storage-interface/spec/csi.proto
generated
vendored
@ -1,6 +1,9 @@
|
||||
// Code generated by make; DO NOT EDIT.
|
||||
syntax = "proto3";
|
||||
package csi.v0;
|
||||
|
||||
import "google/protobuf/wrappers.proto";
|
||||
|
||||
option go_package = "csi";
|
||||
service Identity {
|
||||
rpc GetPluginInfo(GetPluginInfoRequest)
|
||||
@ -36,7 +39,16 @@ service Controller {
|
||||
returns (GetCapacityResponse) {}
|
||||
|
||||
rpc ControllerGetCapabilities (ControllerGetCapabilitiesRequest)
|
||||
returns (ControllerGetCapabilitiesResponse) {}
|
||||
returns (ControllerGetCapabilitiesResponse) {}
|
||||
|
||||
rpc CreateSnapshot (CreateSnapshotRequest)
|
||||
returns (CreateSnapshotResponse) {}
|
||||
|
||||
rpc DeleteSnapshot (DeleteSnapshotRequest)
|
||||
returns (DeleteSnapshotResponse) {}
|
||||
|
||||
rpc ListSnapshots (ListSnapshotsRequest)
|
||||
returns (ListSnapshotsResponse) {}
|
||||
}
|
||||
|
||||
service Node {
|
||||
@ -52,13 +64,25 @@ service Node {
|
||||
rpc NodeUnpublishVolume (NodeUnpublishVolumeRequest)
|
||||
returns (NodeUnpublishVolumeResponse) {}
|
||||
|
||||
// NodeGetId is being deprecated in favor of NodeGetInfo and will be
|
||||
// removed in CSI 1.0. Existing drivers, however, may depend on this
|
||||
// RPC call and hence this RPC call MUST be implemented by the CSI
|
||||
// plugin prior to v1.0.
|
||||
rpc NodeGetId (NodeGetIdRequest)
|
||||
returns (NodeGetIdResponse) {}
|
||||
returns (NodeGetIdResponse) {
|
||||
option deprecated = true;
|
||||
}
|
||||
|
||||
rpc NodeGetCapabilities (NodeGetCapabilitiesRequest)
|
||||
returns (NodeGetCapabilitiesResponse) {}
|
||||
|
||||
// Prior to CSI 1.0 - CSI plugins MUST implement both NodeGetId and
|
||||
// NodeGetInfo RPC calls.
|
||||
rpc NodeGetInfo (NodeGetInfoRequest)
|
||||
returns (NodeGetInfoResponse) {}
|
||||
}
|
||||
message GetPluginInfoRequest {
|
||||
// Intentionally empty.
|
||||
}
|
||||
|
||||
message GetPluginInfoResponse {
|
||||
@ -78,6 +102,7 @@ message GetPluginInfoResponse {
|
||||
map<string, string> manifest = 3;
|
||||
}
|
||||
message GetPluginCapabilitiesRequest {
|
||||
// Intentionally empty.
|
||||
}
|
||||
|
||||
message GetPluginCapabilitiesResponse {
|
||||
@ -101,6 +126,14 @@ message PluginCapability {
|
||||
// attempt to invoke the REQUIRED ControllerService RPCs, as well
|
||||
// as specific RPCs as indicated by ControllerGetCapabilities.
|
||||
CONTROLLER_SERVICE = 1;
|
||||
|
||||
// ACCESSIBILITY_CONSTRAINTS indicates that the volumes for this
|
||||
// plugin may not be equally accessible by all nodes in the
|
||||
// cluster. The CO MUST use the topology information returned by
|
||||
// CreateVolumeRequest along with the topology information
|
||||
// returned by NodeGetInfo to ensure that a given volume is
|
||||
// accessible from a given node when scheduling workloads.
|
||||
ACCESSIBILITY_CONSTRAINTS = 2;
|
||||
}
|
||||
Type type = 1;
|
||||
}
|
||||
@ -111,10 +144,31 @@ message PluginCapability {
|
||||
}
|
||||
}
|
||||
message ProbeRequest {
|
||||
// Intentionally empty.
|
||||
}
|
||||
|
||||
message ProbeResponse {
|
||||
// Intentionally empty.
|
||||
// Readiness allows a plugin to report its initialization status back
|
||||
// to the CO. Initialization for some plugins MAY be time consuming
|
||||
// and it is important for a CO to distinguish between the following
|
||||
// cases:
|
||||
//
|
||||
// 1) The plugin is in an unhealthy state and MAY need restarting. In
|
||||
// this case a gRPC error code SHALL be returned.
|
||||
// 2) The plugin is still initializing, but is otherwise perfectly
|
||||
// healthy. In this case a successful response SHALL be returned
|
||||
// with a readiness value of `false`. Calls to the plugin's
|
||||
// Controller and/or Node services MAY fail due to an incomplete
|
||||
// initialization state.
|
||||
// 3) The plugin has finished initializing and is ready to service
|
||||
// calls to its Controller and/or Node services. A successful
|
||||
// response is returned with a readiness value of `true`.
|
||||
//
|
||||
// This field is OPTIONAL. If not present, the caller SHALL assume
|
||||
// that the plugin is in a ready state and is accepting calls to its
|
||||
// Controller and/or Node services (according to the plugin's reported
|
||||
// capabilities).
|
||||
.google.protobuf.BoolValue ready = 1;
|
||||
}
|
||||
message CreateVolumeRequest {
|
||||
// The suggested name for the storage space. This field is REQUIRED.
|
||||
@ -136,7 +190,11 @@ message CreateVolumeRequest {
|
||||
|
||||
// This field is OPTIONAL. This allows the CO to specify the capacity
|
||||
// requirement of the volume to be provisioned. If not specified, the
|
||||
// Plugin MAY choose an implementation-defined capacity range.
|
||||
// Plugin MAY choose an implementation-defined capacity range. If
|
||||
// specified it MUST always be honored, even when creating volumes
|
||||
// from a source; which may force some backends to internally extend
|
||||
// the volume after creating it.
|
||||
|
||||
CapacityRange capacity_range = 2;
|
||||
|
||||
// The capabilities that the provisioned volume MUST have: the Plugin
|
||||
@ -155,23 +213,42 @@ message CreateVolumeRequest {
|
||||
map<string, string> parameters = 4;
|
||||
|
||||
// Secrets required by plugin to complete volume creation request.
|
||||
// A secret is a string to string map where the key identifies the
|
||||
// name of the secret (e.g. "username" or "password"), and the value
|
||||
// contains the secret data (e.g. "bob" or "abc123").
|
||||
// Each key MUST consist of alphanumeric characters, '-', '_' or '.'.
|
||||
// Each value MUST contain a valid string. An SP MAY choose to accept
|
||||
// binary (non-string) data by using a binary-to-text encoding scheme,
|
||||
// like base64.
|
||||
// An SP SHALL advertise the requirements for required secret keys and
|
||||
// values in documentation.
|
||||
// CO SHALL permit passing through the required secrets.
|
||||
// A CO MAY pass the same secrets to all RPCs, therefore the keys for
|
||||
// all unique secrets that an SP expects must be unique across all CSI
|
||||
// operations.
|
||||
// This information is sensitive and MUST be treated as such (not
|
||||
// logged, etc.) by the CO.
|
||||
// This field is OPTIONAL.
|
||||
// This field is OPTIONAL. Refer to the `Secrets Requirements`
|
||||
// section on how to use this field.
|
||||
map<string, string> controller_create_secrets = 5;
|
||||
|
||||
// If specified, the new volume will be pre-populated with data from
|
||||
// this source. This field is OPTIONAL.
|
||||
VolumeContentSource volume_content_source = 6;
|
||||
|
||||
// Specifies where (regions, zones, racks, etc.) the provisioned
|
||||
// volume MUST be accessible from.
|
||||
// An SP SHALL advertise the requirements for topological
|
||||
// accessibility information in documentation. COs SHALL only specify
|
||||
// topological accessibility information supported by the SP.
|
||||
// This field is OPTIONAL.
|
||||
// This field SHALL NOT be specified unless the SP has the
|
||||
// ACCESSIBILITY_CONSTRAINTS plugin capability.
|
||||
// If this field is not specified and the SP has the
|
||||
// ACCESSIBILITY_CONSTRAINTS plugin capability, the SP MAY choose
|
||||
// where the provisioned volume is accessible from.
|
||||
TopologyRequirement accessibility_requirements = 7;
|
||||
}
|
||||
|
||||
// Specifies what source the volume will be created from. One of the
|
||||
// type fields MUST be specified.
|
||||
message VolumeContentSource {
|
||||
message SnapshotSource {
|
||||
// Contains identity information for the existing source snapshot.
|
||||
// This field is REQUIRED. Plugin is REQUIRED to support creating
|
||||
// volume from snapshot if it supports the capability
|
||||
// CREATE_DELETE_SNAPSHOT.
|
||||
string id = 1;
|
||||
}
|
||||
|
||||
oneof type {
|
||||
SnapshotSource snapshot = 1;
|
||||
}
|
||||
}
|
||||
|
||||
message CreateVolumeResponse {
|
||||
@ -199,7 +276,7 @@ message VolumeCapability {
|
||||
// Therefore, the CO and the Plugin MUST NOT leak this information
|
||||
// to untrusted entities. The total size of this repeated field
|
||||
// SHALL NOT exceed 4 KiB.
|
||||
repeated string mount_flags = 2;
|
||||
repeated string mount_flags = 2;
|
||||
}
|
||||
|
||||
// Specify how a volume can be accessed.
|
||||
@ -243,17 +320,17 @@ message VolumeCapability {
|
||||
}
|
||||
|
||||
// The capacity of the storage space in bytes. To specify an exact size,
|
||||
// `required_bytes` and `limit_bytes` can be set to the same value. At
|
||||
// `required_bytes` and `limit_bytes` SHALL be set to the same value. At
|
||||
// least one of the these fields MUST be specified.
|
||||
message CapacityRange {
|
||||
// Volume must be at least this big. This field is OPTIONAL.
|
||||
// Volume MUST be at least this big. This field is OPTIONAL.
|
||||
// A value of 0 is equal to an unspecified field value.
|
||||
// The value of this field MUST NOT be negative.
|
||||
// The value of this field MUST NOT be negative.
|
||||
int64 required_bytes = 1;
|
||||
|
||||
// Volume must not be bigger than this. This field is OPTIONAL.
|
||||
// Volume MUST not be bigger than this. This field is OPTIONAL.
|
||||
// A value of 0 is equal to an unspecified field value.
|
||||
// The value of this field MUST NOT be negative.
|
||||
// The value of this field MUST NOT be negative.
|
||||
int64 limit_bytes = 2;
|
||||
}
|
||||
|
||||
@ -262,7 +339,7 @@ message Volume {
|
||||
// The capacity of the volume in bytes. This field is OPTIONAL. If not
|
||||
// set (value of 0), it indicates that the capacity of the volume is
|
||||
// unknown (e.g., NFS share).
|
||||
// The value of this field MUST NOT be negative.
|
||||
// The value of this field MUST NOT be negative.
|
||||
int64 capacity_bytes = 1;
|
||||
|
||||
// Contains identity information for the created volume. This field is
|
||||
@ -278,7 +355,200 @@ message Volume {
|
||||
// a volume. A volume uniquely identified by `id` SHALL always report
|
||||
// the same attributes. This field is OPTIONAL and when present MUST
|
||||
// be passed to volume validation and publishing calls.
|
||||
map<string,string> attributes = 3;
|
||||
map<string, string> attributes = 3;
|
||||
|
||||
// If specified, indicates that the volume is not empty and is
|
||||
// pre-populated with data from the specified source.
|
||||
// This field is OPTIONAL.
|
||||
VolumeContentSource content_source = 4;
|
||||
|
||||
// Specifies where (regions, zones, racks, etc.) the provisioned
|
||||
// volume is accessible from.
|
||||
// A plugin that returns this field MUST also set the
|
||||
// ACCESSIBILITY_CONSTRAINTS plugin capability.
|
||||
// An SP MAY specify multiple topologies to indicate the volume is
|
||||
// accessible from multiple locations.
|
||||
// COs MAY use this information along with the topology information
|
||||
// returned by NodeGetInfo to ensure that a given volume is accessible
|
||||
// from a given node when scheduling workloads.
|
||||
// This field is OPTIONAL. If it is not specified, the CO MAY assume
|
||||
// the volume is equally accessible from all nodes in the cluster and
|
||||
// may schedule workloads referencing the volume on any available
|
||||
// node.
|
||||
//
|
||||
// Example 1:
|
||||
// accessible_topology = {"region": "R1", "zone": "Z2"}
|
||||
// Indicates a volume accessible only from the "region" "R1" and the
|
||||
// "zone" "Z2".
|
||||
//
|
||||
// Example 2:
|
||||
// accessible_topology =
|
||||
// {"region": "R1", "zone": "Z2"},
|
||||
// {"region": "R1", "zone": "Z3"}
|
||||
// Indicates a volume accessible from both "zone" "Z2" and "zone" "Z3"
|
||||
// in the "region" "R1".
|
||||
repeated Topology accessible_topology = 5;
|
||||
}
|
||||
|
||||
message TopologyRequirement {
|
||||
// Specifies the list of topologies the provisioned volume MUST be
|
||||
// accessible from.
|
||||
// This field is OPTIONAL. If TopologyRequirement is specified either
|
||||
// requisite or preferred or both MUST be specified.
|
||||
//
|
||||
// If requisite is specified, the provisioned volume MUST be
|
||||
// accessible from at least one of the requisite topologies.
|
||||
//
|
||||
// Given
|
||||
// x = number of topologies provisioned volume is accessible from
|
||||
// n = number of requisite topologies
|
||||
// The CO MUST ensure n >= 1. The SP MUST ensure x >= 1
|
||||
// If x==n, than the SP MUST make the provisioned volume available to
|
||||
// all topologies from the list of requisite topologies. If it is
|
||||
// unable to do so, the SP MUST fail the CreateVolume call.
|
||||
// For example, if a volume should be accessible from a single zone,
|
||||
// and requisite =
|
||||
// {"region": "R1", "zone": "Z2"}
|
||||
// then the provisioned volume MUST be accessible from the "region"
|
||||
// "R1" and the "zone" "Z2".
|
||||
// Similarly, if a volume should be accessible from two zones, and
|
||||
// requisite =
|
||||
// {"region": "R1", "zone": "Z2"},
|
||||
// {"region": "R1", "zone": "Z3"}
|
||||
// then the provisioned volume MUST be accessible from the "region"
|
||||
// "R1" and both "zone" "Z2" and "zone" "Z3".
|
||||
//
|
||||
// If x<n, than the SP SHALL choose x unique topologies from the list
|
||||
// of requisite topologies. If it is unable to do so, the SP MUST fail
|
||||
// the CreateVolume call.
|
||||
// For example, if a volume should be accessible from a single zone,
|
||||
// and requisite =
|
||||
// {"region": "R1", "zone": "Z2"},
|
||||
// {"region": "R1", "zone": "Z3"}
|
||||
// then the SP may choose to make the provisioned volume available in
|
||||
// either the "zone" "Z2" or the "zone" "Z3" in the "region" "R1".
|
||||
// Similarly, if a volume should be accessible from two zones, and
|
||||
// requisite =
|
||||
// {"region": "R1", "zone": "Z2"},
|
||||
// {"region": "R1", "zone": "Z3"},
|
||||
// {"region": "R1", "zone": "Z4"}
|
||||
// then the provisioned volume MUST be accessible from any combination
|
||||
// of two unique topologies: e.g. "R1/Z2" and "R1/Z3", or "R1/Z2" and
|
||||
// "R1/Z4", or "R1/Z3" and "R1/Z4".
|
||||
//
|
||||
// If x>n, than the SP MUST make the provisioned volume available from
|
||||
// all topologies from the list of requisite topologies and MAY choose
|
||||
// the remaining x-n unique topologies from the list of all possible
|
||||
// topologies. If it is unable to do so, the SP MUST fail the
|
||||
// CreateVolume call.
|
||||
// For example, if a volume should be accessible from two zones, and
|
||||
// requisite =
|
||||
// {"region": "R1", "zone": "Z2"}
|
||||
// then the provisioned volume MUST be accessible from the "region"
|
||||
// "R1" and the "zone" "Z2" and the SP may select the second zone
|
||||
// independently, e.g. "R1/Z4".
|
||||
repeated Topology requisite = 1;
|
||||
|
||||
// Specifies the list of topologies the CO would prefer the volume to
|
||||
// be provisioned in.
|
||||
//
|
||||
// This field is OPTIONAL. If TopologyRequirement is specified either
|
||||
// requisite or preferred or both MUST be specified.
|
||||
//
|
||||
// An SP MUST attempt to make the provisioned volume available using
|
||||
// the preferred topologies in order from first to last.
|
||||
//
|
||||
// If requisite is specified, all topologies in preferred list MUST
|
||||
// also be present in the list of requisite topologies.
|
||||
//
|
||||
// If the SP is unable to to make the provisioned volume available
|
||||
// from any of the preferred topologies, the SP MAY choose a topology
|
||||
// from the list of requisite topologies.
|
||||
// If the list of requisite topologies is not specified, then the SP
|
||||
// MAY choose from the list of all possible topologies.
|
||||
// If the list of requisite topologies is specified and the SP is
|
||||
// unable to to make the provisioned volume available from any of the
|
||||
// requisite topologies it MUST fail the CreateVolume call.
|
||||
//
|
||||
// Example 1:
|
||||
// Given a volume should be accessible from a single zone, and
|
||||
// requisite =
|
||||
// {"region": "R1", "zone": "Z2"},
|
||||
// {"region": "R1", "zone": "Z3"}
|
||||
// preferred =
|
||||
// {"region": "R1", "zone": "Z3"}
|
||||
// then the the SP SHOULD first attempt to make the provisioned volume
|
||||
// available from "zone" "Z3" in the "region" "R1" and fall back to
|
||||
// "zone" "Z2" in the "region" "R1" if that is not possible.
|
||||
//
|
||||
// Example 2:
|
||||
// Given a volume should be accessible from a single zone, and
|
||||
// requisite =
|
||||
// {"region": "R1", "zone": "Z2"},
|
||||
// {"region": "R1", "zone": "Z3"},
|
||||
// {"region": "R1", "zone": "Z4"},
|
||||
// {"region": "R1", "zone": "Z5"}
|
||||
// preferred =
|
||||
// {"region": "R1", "zone": "Z4"},
|
||||
// {"region": "R1", "zone": "Z2"}
|
||||
// then the the SP SHOULD first attempt to make the provisioned volume
|
||||
// accessible from "zone" "Z4" in the "region" "R1" and fall back to
|
||||
// "zone" "Z2" in the "region" "R1" if that is not possible. If that
|
||||
// is not possible, the SP may choose between either the "zone"
|
||||
// "Z3" or "Z5" in the "region" "R1".
|
||||
//
|
||||
// Example 3:
|
||||
// Given a volume should be accessible from TWO zones (because an
|
||||
// opaque parameter in CreateVolumeRequest, for example, specifies
|
||||
// the volume is accessible from two zones, aka synchronously
|
||||
// replicated), and
|
||||
// requisite =
|
||||
// {"region": "R1", "zone": "Z2"},
|
||||
// {"region": "R1", "zone": "Z3"},
|
||||
// {"region": "R1", "zone": "Z4"},
|
||||
// {"region": "R1", "zone": "Z5"}
|
||||
// preferred =
|
||||
// {"region": "R1", "zone": "Z5"},
|
||||
// {"region": "R1", "zone": "Z3"}
|
||||
// then the the SP SHOULD first attempt to make the provisioned volume
|
||||
// accessible from the combination of the two "zones" "Z5" and "Z3" in
|
||||
// the "region" "R1". If that's not possible, it should fall back to
|
||||
// a combination of "Z5" and other possibilities from the list of
|
||||
// requisite. If that's not possible, it should fall back to a
|
||||
// combination of "Z3" and other possibilities from the list of
|
||||
// requisite. If that's not possible, it should fall back to a
|
||||
// combination of other possibilities from the list of requisite.
|
||||
repeated Topology preferred = 2;
|
||||
}
|
||||
|
||||
// Topology is a map of topological domains to topological segments.
|
||||
// A topological domain is a sub-division of a cluster, like "region",
|
||||
// "zone", "rack", etc.
|
||||
// A topological segment is a specific instance of a topological domain,
|
||||
// like "zone3", "rack3", etc.
|
||||
// For example {"com.company/zone": "Z1", "com.company/rack": "R3"}
|
||||
// Valid keys have two segments: an optional prefix and name, separated
|
||||
// by a slash (/), for example: "com.company.example/zone".
|
||||
// The key name segment is required. The prefix is optional.
|
||||
// Both the key name and the prefix MUST each be 63 characters or less,
|
||||
// begin and end with an alphanumeric character ([a-z0-9A-Z]) and
|
||||
// contain only dashes (-), underscores (_), dots (.), or alphanumerics
|
||||
// in between, for example "zone".
|
||||
// The key prefix MUST follow reverse domain name notation format
|
||||
// (https://en.wikipedia.org/wiki/Reverse_domain_name_notation).
|
||||
// The key prefix SHOULD include the plugin's host company name and/or
|
||||
// the plugin name, to minimize the possibility of collisions with keys
|
||||
// from other plugins.
|
||||
// If a key prefix is specified, it MUST be identical across all
|
||||
// topology keys returned by the SP (across all RPCs).
|
||||
// Keys MUST be case-insensitive. Meaning the keys "Zone" and "zone"
|
||||
// MUST not both exist.
|
||||
// Each value (topological segment) MUST contain 1 or more strings.
|
||||
// Each string MUST be 63 characters or less and begin and end with an
|
||||
// alphanumeric character with '-', '_', '.', or alphanumerics in
|
||||
// between.
|
||||
message Topology {
|
||||
map<string, string> segments = 1;
|
||||
}
|
||||
message DeleteVolumeRequest {
|
||||
// The ID of the volume to be deprovisioned.
|
||||
@ -286,26 +556,13 @@ message DeleteVolumeRequest {
|
||||
string volume_id = 1;
|
||||
|
||||
// Secrets required by plugin to complete volume deletion request.
|
||||
// A secret is a string to string map where the key identifies the
|
||||
// name of the secret (e.g. "username" or "password"), and the value
|
||||
// contains the secret data (e.g. "bob" or "abc123").
|
||||
// Each key MUST consist of alphanumeric characters, '-', '_' or '.'.
|
||||
// Each value MUST contain a valid string. An SP MAY choose to accept
|
||||
// binary (non-string) data by using a binary-to-text encoding scheme,
|
||||
// like base64.
|
||||
// An SP SHALL advertise the requirements for required secret keys and
|
||||
// values in documentation.
|
||||
// CO SHALL permit passing through the required secrets.
|
||||
// A CO MAY pass the same secrets to all RPCs, therefore the keys for
|
||||
// all unique secrets that an SP expects must be unique across all CSI
|
||||
// operations.
|
||||
// This information is sensitive and MUST be treated as such (not
|
||||
// logged, etc.) by the CO.
|
||||
// This field is OPTIONAL.
|
||||
// This field is OPTIONAL. Refer to the `Secrets Requirements`
|
||||
// section on how to use this field.
|
||||
map<string, string> controller_delete_secrets = 2;
|
||||
}
|
||||
|
||||
message DeleteVolumeResponse {
|
||||
// Intentionally empty.
|
||||
}
|
||||
message ControllerPublishVolumeRequest {
|
||||
// The ID of the volume to be used on a node.
|
||||
@ -313,7 +570,7 @@ message ControllerPublishVolumeRequest {
|
||||
string volume_id = 1;
|
||||
|
||||
// The ID of the node. This field is REQUIRED. The CO SHALL set this
|
||||
// field to match the node ID returned by `NodeGetId`.
|
||||
// field to match the node ID returned by `NodeGetInfo`.
|
||||
string node_id = 2;
|
||||
|
||||
// The capability of the volume the CO expects the volume to have.
|
||||
@ -325,29 +582,14 @@ message ControllerPublishVolumeRequest {
|
||||
bool readonly = 4;
|
||||
|
||||
// Secrets required by plugin to complete controller publish volume
|
||||
// request.
|
||||
// A secret is a string to string map where the key identifies the
|
||||
// name of the secret (e.g. "username" or "password"), and the value
|
||||
// contains the secret data (e.g. "bob" or "abc123").
|
||||
// Each key MUST consist of alphanumeric characters, '-', '_' or '.'.
|
||||
// Each value MUST contain a valid string. An SP MAY choose to accept
|
||||
// binary (non-string) data by using a binary-to-text encoding scheme,
|
||||
// like base64.
|
||||
// An SP SHALL advertise the requirements for required secret keys and
|
||||
// values in documentation.
|
||||
// CO SHALL permit passing through the required secrets.
|
||||
// A CO MAY pass the same secrets to all RPCs, therefore the keys for
|
||||
// all unique secrets that an SP expects must be unique across all CSI
|
||||
// operations.
|
||||
// This information is sensitive and MUST be treated as such (not
|
||||
// logged, etc.) by the CO.
|
||||
// This field is OPTIONAL.
|
||||
// request. This field is OPTIONAL. Refer to the
|
||||
// `Secrets Requirements` section on how to use this field.
|
||||
map<string, string> controller_publish_secrets = 5;
|
||||
|
||||
// Attributes of the volume to be used on a node. This field is
|
||||
// OPTIONAL and MUST match the attributes of the Volume identified
|
||||
// by `volume_id`.
|
||||
map<string,string> volume_attributes = 6;
|
||||
map<string, string> volume_attributes = 6;
|
||||
}
|
||||
|
||||
message ControllerPublishVolumeResponse {
|
||||
@ -362,7 +604,7 @@ message ControllerUnpublishVolumeRequest {
|
||||
string volume_id = 1;
|
||||
|
||||
// The ID of the node. This field is OPTIONAL. The CO SHOULD set this
|
||||
// field to match the node ID returned by `NodeGetId` or leave it
|
||||
// field to match the node ID returned by `NodeGetInfo` or leave it
|
||||
// unset. If the value is set, the SP MUST unpublish the volume from
|
||||
// the specified node. If the value is unset, the SP MUST unpublish
|
||||
// the volume from all nodes it is published to.
|
||||
@ -370,28 +612,14 @@ message ControllerUnpublishVolumeRequest {
|
||||
|
||||
// Secrets required by plugin to complete controller unpublish volume
|
||||
// request. This SHOULD be the same secrets passed to the
|
||||
// ControllerPublishVolume.
|
||||
// call for the specified volume.
|
||||
// A secret is a string to string map where the key identifies the
|
||||
// name of the secret (e.g. "username" or "password"), and the value
|
||||
// contains the secret data (e.g. "bob" or "abc123").
|
||||
// Each key MUST consist of alphanumeric characters, '-', '_' or '.'.
|
||||
// Each value MUST contain a valid string. An SP MAY choose to accept
|
||||
// binary (non-string) data by using a binary-to-text encoding scheme,
|
||||
// like base64.
|
||||
// An SP SHALL advertise the requirements for required secret keys and
|
||||
// values in documentation.
|
||||
// CO SHALL permit passing through the required secrets.
|
||||
// A CO MAY pass the same secrets to all RPCs, therefore the keys for
|
||||
// all unique secrets that an SP expects must be unique across all CSI
|
||||
// operations.
|
||||
// This information is sensitive and MUST be treated as such (not
|
||||
// logged, etc.) by the CO.
|
||||
// This field is OPTIONAL.
|
||||
// ControllerPublishVolume call for the specified volume.
|
||||
// This field is OPTIONAL. Refer to the `Secrets Requirements`
|
||||
// section on how to use this field.
|
||||
map<string, string> controller_unpublish_secrets = 3;
|
||||
}
|
||||
|
||||
message ControllerUnpublishVolumeResponse {
|
||||
// Intentionally empty.
|
||||
}
|
||||
message ValidateVolumeCapabilitiesRequest {
|
||||
// The ID of the volume to check. This field is REQUIRED.
|
||||
@ -404,7 +632,15 @@ message ValidateVolumeCapabilitiesRequest {
|
||||
|
||||
// Attributes of the volume to check. This field is OPTIONAL and MUST
|
||||
// match the attributes of the Volume identified by `volume_id`.
|
||||
map<string,string> volume_attributes = 3;
|
||||
map<string, string> volume_attributes = 3;
|
||||
|
||||
// Specifies where (regions, zones, racks, etc.) the caller believes
|
||||
// the volume is accessible from.
|
||||
// A caller MAY specify multiple topologies to indicate they believe
|
||||
// the volume to be accessible from multiple locations.
|
||||
// This field is OPTIONAL. This field SHALL NOT be set unless the
|
||||
// plugin advertises the ACCESSIBILITY_CONSTRAINTS capability.
|
||||
repeated Topology accessible_topology = 4;
|
||||
}
|
||||
|
||||
message ValidateVolumeCapabilitiesResponse {
|
||||
@ -425,7 +661,7 @@ message ListVolumesRequest {
|
||||
// in the subsequent `ListVolumes` call. This field is OPTIONAL. If
|
||||
// not specified (zero value), it means there is no restriction on the
|
||||
// number of entries that can be returned.
|
||||
// The value of this field MUST NOT be negative.
|
||||
// The value of this field MUST NOT be negative.
|
||||
int32 max_entries = 1;
|
||||
|
||||
// A token to specify where to start paginating. Set this field to
|
||||
@ -463,18 +699,27 @@ message GetCapacityRequest {
|
||||
// specific `parameters`. These are the same `parameters` the CO will
|
||||
// use in `CreateVolumeRequest`. This field is OPTIONAL.
|
||||
map<string, string> parameters = 2;
|
||||
|
||||
// If specified, the Plugin SHALL report the capacity of the storage
|
||||
// that can be used to provision volumes that in the specified
|
||||
// `accessible_topology`. This is the same as the
|
||||
// `accessible_topology` the CO returns in a `CreateVolumeResponse`.
|
||||
// This field is OPTIONAL. This field SHALL NOT be set unless the
|
||||
// plugin advertises the ACCESSIBILITY_CONSTRAINTS capability.
|
||||
Topology accessible_topology = 3;
|
||||
}
|
||||
|
||||
message GetCapacityResponse {
|
||||
// The available capacity of the storage that can be used to
|
||||
// provision volumes. If `volume_capabilities` or `parameters` is
|
||||
// The available capacity, in bytes, of the storage that can be used
|
||||
// to provision volumes. If `volume_capabilities` or `parameters` is
|
||||
// specified in the request, the Plugin SHALL take those into
|
||||
// consideration when calculating the available capacity of the
|
||||
// storage. This field is REQUIRED.
|
||||
// The value of this field MUST NOT be negative.
|
||||
// The value of this field MUST NOT be negative.
|
||||
int64 available_capacity = 1;
|
||||
}
|
||||
message ControllerGetCapabilitiesRequest {
|
||||
// Intentionally empty.
|
||||
}
|
||||
|
||||
message ControllerGetCapabilitiesResponse {
|
||||
@ -492,6 +737,16 @@ message ControllerServiceCapability {
|
||||
PUBLISH_UNPUBLISH_VOLUME = 2;
|
||||
LIST_VOLUMES = 3;
|
||||
GET_CAPACITY = 4;
|
||||
// Currently the only way to consume a snapshot is to create
|
||||
// a volume from it. Therefore plugins supporting
|
||||
// CREATE_DELETE_SNAPSHOT MUST support creating volume from
|
||||
// snapshot.
|
||||
CREATE_DELETE_SNAPSHOT = 5;
|
||||
// LIST_SNAPSHOTS is NOT REQUIRED. For plugins that need to upload
|
||||
// a snapshot after it is being cut, LIST_SNAPSHOTS COULD be used
|
||||
// with the snapshot_id as the filter to query whether the
|
||||
// uploading process is complete or not.
|
||||
LIST_SNAPSHOTS = 6;
|
||||
}
|
||||
|
||||
Type type = 1;
|
||||
@ -502,6 +757,158 @@ message ControllerServiceCapability {
|
||||
RPC rpc = 1;
|
||||
}
|
||||
}
|
||||
message CreateSnapshotRequest {
|
||||
// The ID of the source volume to be snapshotted.
|
||||
// This field is REQUIRED.
|
||||
string source_volume_id = 1;
|
||||
|
||||
// The suggested name for the snapshot. This field is REQUIRED for
|
||||
// idempotency.
|
||||
string name = 2;
|
||||
|
||||
// Secrets required by plugin to complete snapshot creation request.
|
||||
// This field is OPTIONAL. Refer to the `Secrets Requirements`
|
||||
// section on how to use this field.
|
||||
map<string, string> create_snapshot_secrets = 3;
|
||||
|
||||
// Plugin specific parameters passed in as opaque key-value pairs.
|
||||
// This field is OPTIONAL. The Plugin is responsible for parsing and
|
||||
// validating these parameters. COs will treat these as opaque.
|
||||
// Use cases for opaque parameters:
|
||||
// - Specify a policy to automatically clean up the snapshot.
|
||||
// - Specify an expiration date for the snapshot.
|
||||
// - Specify whether the snapshot is readonly or read/write.
|
||||
// - Specify if the snapshot should be replicated to some place.
|
||||
// - Specify primary or secondary for replication systems that
|
||||
// support snapshotting only on primary.
|
||||
map<string, string> parameters = 4;
|
||||
}
|
||||
|
||||
message CreateSnapshotResponse {
|
||||
// Contains all attributes of the newly created snapshot that are
|
||||
// relevant to the CO along with information required by the Plugin
|
||||
// to uniquely identify the snapshot. This field is REQUIRED.
|
||||
Snapshot snapshot = 1;
|
||||
}
|
||||
|
||||
// The information about a provisioned snapshot.
|
||||
message Snapshot {
|
||||
// This is the complete size of the snapshot in bytes. The purpose of
|
||||
// this field is to give CO guidance on how much space is needed to
|
||||
// create a volume from this snapshot. The size of the volume MUST NOT
|
||||
// be less than the size of the source snapshot. This field is
|
||||
// OPTIONAL. If this field is not set, it indicates that this size is
|
||||
// unknown. The value of this field MUST NOT be negative and a size of
|
||||
// zero means it is unspecified.
|
||||
int64 size_bytes = 1;
|
||||
|
||||
// Uniquely identifies a snapshot and is generated by the plugin. It
|
||||
// will not change over time. This field is REQUIRED. The identity
|
||||
// information will be used by the CO in subsequent calls to refer to
|
||||
// the provisioned snapshot.
|
||||
string id = 2;
|
||||
|
||||
// Identity information for the source volume. Note that creating a
|
||||
// snapshot from a snapshot is not supported here so the source has to
|
||||
// be a volume. This field is REQUIRED.
|
||||
string source_volume_id = 3;
|
||||
|
||||
// Timestamp when the point-in-time snapshot is taken on the storage
|
||||
// system. The format of this field should be a Unix nanoseconds time
|
||||
// encoded as an int64. On Unix, the command `date +%s%N` returns the
|
||||
// current time in nanoseconds since 1970-01-01 00:00:00 UTC. This
|
||||
// field is REQUIRED.
|
||||
int64 created_at = 4;
|
||||
|
||||
// The status of a snapshot.
|
||||
SnapshotStatus status = 5;
|
||||
}
|
||||
|
||||
// The status of a snapshot.
|
||||
message SnapshotStatus {
|
||||
enum Type {
|
||||
UNKNOWN = 0;
|
||||
// A snapshot is ready for use.
|
||||
READY = 1;
|
||||
// A snapshot is cut and is now being uploaded.
|
||||
// Some cloud providers and storage systems uploads the snapshot
|
||||
// to the cloud after the snapshot is cut. During this phase,
|
||||
// `thaw` can be done so the application can be running again if
|
||||
// `freeze` was done before taking the snapshot.
|
||||
UPLOADING = 2;
|
||||
// An error occurred during the snapshot uploading process.
|
||||
// This error status is specific for uploading because
|
||||
// `CreateSnaphot` is a blocking call before the snapshot is
|
||||
// cut and therefore it SHOULD NOT come back with an error
|
||||
// status when an error occurs. Instead a gRPC error code SHALL
|
||||
// be returned by `CreateSnapshot` when an error occurs before
|
||||
// a snapshot is cut.
|
||||
ERROR_UPLOADING = 3;
|
||||
}
|
||||
// This field is REQUIRED.
|
||||
Type type = 1;
|
||||
|
||||
// Additional information to describe why a snapshot ended up in the
|
||||
// `ERROR_UPLOADING` status. This field is OPTIONAL.
|
||||
string details = 2;
|
||||
}
|
||||
message DeleteSnapshotRequest {
|
||||
// The ID of the snapshot to be deleted.
|
||||
// This field is REQUIRED.
|
||||
string snapshot_id = 1;
|
||||
|
||||
// Secrets required by plugin to complete snapshot deletion request.
|
||||
// This field is OPTIONAL. Refer to the `Secrets Requirements`
|
||||
// section on how to use this field.
|
||||
map<string, string> delete_snapshot_secrets = 2;
|
||||
}
|
||||
|
||||
message DeleteSnapshotResponse {}
|
||||
// List all snapshots on the storage system regardless of how they were
|
||||
// created.
|
||||
message ListSnapshotsRequest {
|
||||
// If specified (non-zero value), the Plugin MUST NOT return more
|
||||
// entries than this number in the response. If the actual number of
|
||||
// entries is more than this number, the Plugin MUST set `next_token`
|
||||
// in the response which can be used to get the next page of entries
|
||||
// in the subsequent `ListSnapshots` call. This field is OPTIONAL. If
|
||||
// not specified (zero value), it means there is no restriction on the
|
||||
// number of entries that can be returned.
|
||||
// The value of this field MUST NOT be negative.
|
||||
int32 max_entries = 1;
|
||||
|
||||
// A token to specify where to start paginating. Set this field to
|
||||
// `next_token` returned by a previous `ListSnapshots` call to get the
|
||||
// next page of entries. This field is OPTIONAL.
|
||||
// An empty string is equal to an unspecified field value.
|
||||
string starting_token = 2;
|
||||
|
||||
// Identity information for the source volume. This field is OPTIONAL.
|
||||
// It can be used to list snapshots by volume.
|
||||
string source_volume_id = 3;
|
||||
|
||||
// Identity information for a specific snapshot. This field is
|
||||
// OPTIONAL. It can be used to list only a specific snapshot.
|
||||
// ListSnapshots will return with current snapshot information
|
||||
// and will not block if the snapshot is being uploaded.
|
||||
string snapshot_id = 4;
|
||||
}
|
||||
|
||||
message ListSnapshotsResponse {
|
||||
message Entry {
|
||||
Snapshot snapshot = 1;
|
||||
}
|
||||
|
||||
repeated Entry entries = 1;
|
||||
|
||||
// This token allows you to get the next page of entries for
|
||||
// `ListSnapshots` request. If the number of entries is larger than
|
||||
// `max_entries`, use the `next_token` as a value for the
|
||||
// `starting_token` field in the next `ListSnapshots` request. This
|
||||
// field is OPTIONAL.
|
||||
// An empty string is equal to an unspecified field value.
|
||||
string next_token = 2;
|
||||
}
|
||||
message NodeStageVolumeRequest {
|
||||
// The ID of the volume to publish. This field is REQUIRED.
|
||||
string volume_id = 1;
|
||||
@ -515,7 +922,7 @@ message NodeStageVolumeRequest {
|
||||
|
||||
// The path to which the volume will be published. It MUST be an
|
||||
// absolute path in the root filesystem of the process serving this
|
||||
// request. The CO SHALL ensure that there is only one
|
||||
// request. The CO SHALL ensure that there is only one
|
||||
// staging_target_path per volume.
|
||||
// This is a REQUIRED field.
|
||||
string staging_target_path = 3;
|
||||
@ -525,31 +932,18 @@ message NodeStageVolumeRequest {
|
||||
VolumeCapability volume_capability = 4;
|
||||
|
||||
// Secrets required by plugin to complete node stage volume request.
|
||||
// A secret is a string to string map where the key identifies the
|
||||
// name of the secret (e.g. "username" or "password"), and the value
|
||||
// contains the secret data (e.g. "bob" or "abc123").
|
||||
// Each key MUST consist of alphanumeric characters, '-', '_' or '.'.
|
||||
// Each value MUST contain a valid string. An SP MAY choose to accept
|
||||
// binary (non-string) data by using a binary-to-text encoding scheme,
|
||||
// like base64.
|
||||
// An SP SHALL advertise the requirements for required secret keys and
|
||||
// values in documentation.
|
||||
// CO SHALL permit passing through the required secrets.
|
||||
// A CO MAY pass the same secrets to all RPCs, therefore the keys for
|
||||
// all unique secrets that an SP expects must be unique across all CSI
|
||||
// operations.
|
||||
// This information is sensitive and MUST be treated as such (not
|
||||
// logged, etc.) by the CO.
|
||||
// This field is OPTIONAL.
|
||||
// This field is OPTIONAL. Refer to the `Secrets Requirements`
|
||||
// section on how to use this field.
|
||||
map<string, string> node_stage_secrets = 5;
|
||||
|
||||
// Attributes of the volume to publish. This field is OPTIONAL and
|
||||
// MUST match the attributes of the VolumeInfo identified by
|
||||
// MUST match the attributes of the `Volume` identified by
|
||||
// `volume_id`.
|
||||
map<string,string> volume_attributes = 6;
|
||||
map<string, string> volume_attributes = 6;
|
||||
}
|
||||
|
||||
message NodeStageVolumeResponse {
|
||||
// Intentionally empty.
|
||||
}
|
||||
message NodeUnstageVolumeRequest {
|
||||
// The ID of the volume. This field is REQUIRED.
|
||||
@ -562,6 +956,7 @@ message NodeUnstageVolumeRequest {
|
||||
}
|
||||
|
||||
message NodeUnstageVolumeResponse {
|
||||
// Intentionally empty.
|
||||
}
|
||||
message NodePublishVolumeRequest {
|
||||
// The ID of the volume to publish. This field is REQUIRED.
|
||||
@ -577,7 +972,7 @@ message NodePublishVolumeRequest {
|
||||
// The path to which the device was mounted by `NodeStageVolume`.
|
||||
// It MUST be an absolute path in the root filesystem of the process
|
||||
// serving this request.
|
||||
// It MUST be set if the Node Plugin implements the
|
||||
// It MUST be set if the Node Plugin implements the
|
||||
// `STAGE_UNSTAGE_VOLUME` node capability.
|
||||
// This is an OPTIONAL field.
|
||||
string staging_target_path = 3;
|
||||
@ -599,31 +994,18 @@ message NodePublishVolumeRequest {
|
||||
bool readonly = 6;
|
||||
|
||||
// Secrets required by plugin to complete node publish volume request.
|
||||
// A secret is a string to string map where the key identifies the
|
||||
// name of the secret (e.g. "username" or "password"), and the value
|
||||
// contains the secret data (e.g. "bob" or "abc123").
|
||||
// Each key MUST consist of alphanumeric characters, '-', '_' or '.'.
|
||||
// Each value MUST contain a valid string. An SP MAY choose to accept
|
||||
// binary (non-string) data by using a binary-to-text encoding scheme,
|
||||
// like base64.
|
||||
// An SP SHALL advertise the requirements for required secret keys and
|
||||
// values in documentation.
|
||||
// CO SHALL permit passing through the required secrets.
|
||||
// A CO MAY pass the same secrets to all RPCs, therefore the keys for
|
||||
// all unique secrets that an SP expects must be unique across all CSI
|
||||
// operations.
|
||||
// This information is sensitive and MUST be treated as such (not
|
||||
// logged, etc.) by the CO.
|
||||
// This field is OPTIONAL.
|
||||
// This field is OPTIONAL. Refer to the `Secrets Requirements`
|
||||
// section on how to use this field.
|
||||
map<string, string> node_publish_secrets = 7;
|
||||
|
||||
// Attributes of the volume to publish. This field is OPTIONAL and
|
||||
// MUST match the attributes of the Volume identified by
|
||||
// `volume_id`.
|
||||
map<string,string> volume_attributes = 8;
|
||||
map<string, string> volume_attributes = 8;
|
||||
}
|
||||
|
||||
message NodePublishVolumeResponse {
|
||||
// Intentionally empty.
|
||||
}
|
||||
message NodeUnpublishVolumeRequest {
|
||||
// The ID of the volume. This field is REQUIRED.
|
||||
@ -636,8 +1018,10 @@ message NodeUnpublishVolumeRequest {
|
||||
}
|
||||
|
||||
message NodeUnpublishVolumeResponse {
|
||||
// Intentionally empty.
|
||||
}
|
||||
message NodeGetIdRequest {
|
||||
// Intentionally empty.
|
||||
}
|
||||
|
||||
message NodeGetIdResponse {
|
||||
@ -647,6 +1031,7 @@ message NodeGetIdResponse {
|
||||
string node_id = 1;
|
||||
}
|
||||
message NodeGetCapabilitiesRequest {
|
||||
// Intentionally empty.
|
||||
}
|
||||
|
||||
message NodeGetCapabilitiesResponse {
|
||||
@ -671,3 +1056,38 @@ message NodeServiceCapability {
|
||||
RPC rpc = 1;
|
||||
}
|
||||
}
|
||||
message NodeGetInfoRequest {
|
||||
}
|
||||
|
||||
message NodeGetInfoResponse {
|
||||
// The ID of the node as understood by the SP which SHALL be used by
|
||||
// CO in subsequent calls to `ControllerPublishVolume`.
|
||||
// This is a REQUIRED field.
|
||||
string node_id = 1;
|
||||
|
||||
// Maximum number of volumes that controller can publish to the node.
|
||||
// If value is not set or zero CO SHALL decide how many volumes of
|
||||
// this type can be published by the controller to the node. The
|
||||
// plugin MUST NOT set negative values here.
|
||||
// This field is OPTIONAL.
|
||||
int64 max_volumes_per_node = 2;
|
||||
|
||||
// Specifies where (regions, zones, racks, etc.) the node is
|
||||
// accessible from.
|
||||
// A plugin that returns this field MUST also set the
|
||||
// ACCESSIBILITY_CONSTRAINTS plugin capability.
|
||||
// COs MAY use this information along with the topology information
|
||||
// returned in CreateVolumeResponse to ensure that a given volume is
|
||||
// accessible from a given node when scheduling workloads.
|
||||
// This field is OPTIONAL. If it is not specified, the CO MAY assume
|
||||
// the node is not subject to any topological constraint, and MAY
|
||||
// schedule workloads that reference any volume V, such that there are
|
||||
// no topological constraints declared for V.
|
||||
//
|
||||
// Example 1:
|
||||
// accessible_topology =
|
||||
// {"region": "R1", "zone": "R2"}
|
||||
// Indicates the node exists within the "region" "R1" and the "zone"
|
||||
// "Z2".
|
||||
Topology accessible_topology = 3;
|
||||
}
|
||||
|
1
vendor/github.com/container-storage-interface/spec/lib/go/.gitignore
generated
vendored
1
vendor/github.com/container-storage-interface/spec/lib/go/.gitignore
generated
vendored
@ -1,3 +1,4 @@
|
||||
/protoc
|
||||
/protoc-gen-go
|
||||
/csi.a
|
||||
/.protoc
|
||||
|
19
vendor/github.com/container-storage-interface/spec/lib/go/Makefile
generated
vendored
19
vendor/github.com/container-storage-interface/spec/lib/go/Makefile
generated
vendored
@ -46,7 +46,6 @@ $(PROTOC):
|
||||
unzip "$(PROTOC_TMP_DIR)/$(PROTOC_ZIP)" -d "$(PROTOC_TMP_DIR)" && \
|
||||
chmod 0755 "$(PROTOC_TMP_BIN)" && \
|
||||
cp -f "$(PROTOC_TMP_BIN)" "$@"
|
||||
-rm -fr "$(PROTOC_TMP_DIR)"
|
||||
stat "$@" > /dev/null 2>&1
|
||||
|
||||
|
||||
@ -58,8 +57,15 @@ $(PROTOC):
|
||||
# for protoc
|
||||
PROTOC_GEN_GO_PKG := github.com/golang/protobuf/protoc-gen-go
|
||||
PROTOC_GEN_GO := protoc-gen-go
|
||||
$(PROTOC_GEN_GO): PROTOBUF_PKG := $(dir $(PROTOC_GEN_GO_PKG))
|
||||
$(PROTOC_GEN_GO): PROTOBUF_VERSION := v1.1.0
|
||||
$(PROTOC_GEN_GO):
|
||||
go get -d $(PROTOC_GEN_GO_PKG) && \
|
||||
mkdir -p $(dir $(GOPATH)/src/$(PROTOBUF_PKG))
|
||||
test -d $(GOPATH)/src/$(PROTOBUF_PKG)/.git || git clone https://$(PROTOBUF_PKG) $(GOPATH)/src/$(PROTOBUF_PKG)
|
||||
(cd $(GOPATH)/src/$(PROTOBUF_PKG) && \
|
||||
(test "$$(git describe --tags | head -1)" = "$(PROTOBUF_VERSION)" || \
|
||||
(git fetch && git checkout tags/$(PROTOBUF_VERSION))))
|
||||
(cd $(GOPATH)/src/$(PROTOBUF_PKG) && go get -v -d ./...) && \
|
||||
go build -o "$@" $(PROTOC_GEN_GO_PKG)
|
||||
|
||||
|
||||
@ -83,9 +89,12 @@ CSI_A := csi.a
|
||||
CSI_GO_TMP := $(CSI_PKG)/.build/csi.pb.go
|
||||
|
||||
# This recipe generates the go language bindings to a temp area.
|
||||
$(CSI_GO_TMP): GO_OUT := plugins=grpc
|
||||
$(CSI_GO_TMP): GO_OUT := $(GO_OUT),Mgoogle/protobuf/wrappers.proto=github.com/golang/protobuf/ptypes/wrappers
|
||||
$(CSI_GO_TMP): INCLUDE = -I$(PROTOC_TMP_DIR)/include
|
||||
$(CSI_GO_TMP): $(CSI_PROTO) | $(PROTOC) $(PROTOC_GEN_GO)
|
||||
@mkdir -p "$(@D)"
|
||||
$(PROTOC) -I "$(<D)" --go_out=plugins=grpc:"$(@D)" "$<"
|
||||
$(PROTOC) -I "$(<D)" $(INCLUDE) --go_out=$(GO_OUT):"$(@D)" "$<"
|
||||
|
||||
# The temp language bindings are compared to the ones that are
|
||||
# versioned. If they are different then it means the language
|
||||
@ -104,7 +113,7 @@ endif
|
||||
# 2. Cache the packages.
|
||||
# 3. Build the archive file.
|
||||
$(CSI_A): $(CSI_GO)
|
||||
go get -d ./...
|
||||
go get -v -d ./...
|
||||
go install ./$(CSI_PKG)
|
||||
go build -o "$@" ./$(CSI_PKG)
|
||||
|
||||
@ -115,6 +124,6 @@ clean:
|
||||
rm -f "$(CSI_A)"
|
||||
|
||||
clobber: clean
|
||||
rm -fr "$(PROTOC)" "$(PROTOC_GEN_GO)" "$(dir $(CSI_GO))"
|
||||
rm -fr "$(PROTOC)" "$(PROTOC_GEN_GO)" "$(CSI_PKG)"
|
||||
|
||||
.PHONY: clean clobber
|
||||
|
3320
vendor/github.com/container-storage-interface/spec/lib/go/csi/v0/csi.pb.go
generated
vendored
3320
vendor/github.com/container-storage-interface/spec/lib/go/csi/v0/csi.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
879
vendor/github.com/container-storage-interface/spec/spec.md
generated
vendored
879
vendor/github.com/container-storage-interface/spec/spec.md
generated
vendored
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user