blob: 630e4f51ddef27b795f6cddfc9cb506363f06396 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you 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.
syntax = "proto3";
import "mesos/mesos.proto";
package mesos.csi.state;
// NOTE: The keywords 'REQUIRED' and 'OPTIONAL' are to be interpreted as
// described in the CSI specification:
// https://github.com/container-storage-interface/spec/blob/master/spec.md#required-vs-optional // NOLINT
// Represents the state of a provisioned volume with respect to a node.
message VolumeState {
enum State {
UNKNOWN = 0;
CREATED = 1; // The volume is provisioned but not published.
NODE_READY = 2; // The volume is made available on the node.
VOL_READY = 8; // The volume is made publishable on the node.
PUBLISHED = 3; // The volume is published on the node.
CONTROLLER_PUBLISH = 4; // `ControllerPublishVolume` is being called.
CONTROLLER_UNPUBLISH = 5; // `ControllerUnpublishVolume` is being called.
NODE_STAGE = 9; // `NodeStageVolume` is being called.
NODE_UNSTAGE = 10; // `NodeUnstageVolume` is being called.
NODE_PUBLISH = 6; // `NodePublishVolume` is being called.
NODE_UNPUBLISH = 7; // `NodeUnpublishVolume` is being called.
}
// The state of the volume. This is a REQUIRED field.
State state = 1;
// The capability used to publish the volume. This is a REQUIRED field.
Volume.Source.CSIVolume.VolumeCapability volume_capability = 2;
// The parameters used when creating the volume. This is an OPTIONAL field.
map<string, string> parameters = 6;
// Attributes of the volume to be used on the node. This field MUST match the
// `volume_context` field of the `Volume` returned by `CreateVolume`. This is
// an OPTIONAL field.
map<string, string> volume_context = 3;
// If the plugin has the `PUBLISH_UNPUBLISH_VOLUME` controller capability,
// this field MUST be set to the `publish_context` field returned by
// `ControllerPublishVolume`. Otherwise, this field MUST remain unset. This is
// an OPTIONAL field.
map<string, string> publish_context = 4;
// This field is used to check if the node has been rebooted since the volume
// is made publishable on the node. It MUST be set to the boot ID of the node
// when the volume is transitioned to `VOL_READY`, and SHOULD be cleared when
// the volume is transitioned to `NODE_READY`. This is an OPTIONAL field.
string boot_id = 5;
// This field is used to check if the volume has been used by a container and
// hence needs cleanup. If set, the resource provider MUST transition the
// volume to `PUBLISHED` state during recovery.
bool node_publish_required = 7;
// Indicates that the volume was not created by a CSI plugin, but rather was
// pre-provisioned by some other means and then attached to the node using a
// CSI plugin.
bool pre_provisioned = 8;
// Indicates that the volume must be mounted read-only.
bool readonly = 9;
// Secrets to be included in `NodeStageVolumeRequest`.
map<string, Secret> node_stage_secrets = 10;
// Secrets to be included in `NodePublishVolumeRequest`.
map<string, Secret> node_publish_secrets = 11;
}