syntax = "proto3"; package v1alpha1; service Filesystem { // PathExists checks if the requested path exists in the host's filesystem rpc PathExists(PathExistsRequest) returns (PathExistsResponse) {} // Mkdir creates a directory at the requested path in the host's filesystem rpc Mkdir(MkdirRequest) returns (MkdirResponse) {} // Rmdir removes the directory at the requested path in the host's filesystem. // This may be used for unlinking a symlink created through LinkPath rpc Rmdir(RmdirRequest) returns (RmdirResponse) {} // LinkPath creates a local directory symbolic link between a source path // and target path in the host's filesystem rpc LinkPath(LinkPathRequest) returns (LinkPathResponse) {} //IsMountPoint checks if a given path is mount or not rpc IsMountPoint(IsMountPointRequest) returns (IsMountPointResponse) {} } // Context of the paths used for path prefix validation enum PathContext { // Indicates the kubelet-csi-plugins-path parameter of csi-proxy be used as // the path context. This may be used while handling NodeStageVolume where // a volume may need to be mounted at a plugin-specific path like: // kubelet\plugins\kubernetes.io\csi\pv\\globalmount PLUGIN = 0; // Indicates the kubelet-pod-path parameter of csi-proxy be used as the path // context. This may be used while handling NodePublishVolume where a staged // volume may be need to be symlinked to a pod-specific path like: // kubelet\pods\\volumes\kubernetes.io~csi\\mount POD = 1; } message PathExistsRequest { // The path whose existence we want to check in the host's filesystem string path = 1; // Context of the path parameter. // This is used to validate prefix for absolute paths passed PathContext context = 2; } message PathExistsResponse { // Error message if any. Empty string indicates success string error = 1; // Indicates whether the path in PathExistsRequest exists in the host's filesystem bool exists = 2; } message MkdirRequest { // The path to create in the host's filesystem. // All special characters allowed by Windows in path names will be allowed // except for restrictions noted below. For details, please check: // https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file // Non-existent parent directories in the path will be automatically created. // Directories will be created with Read and Write privileges of the Windows // User account under which csi-proxy is started (typically LocalSystem). // // Restrictions: // Only absolute path (indicated by a drive letter prefix: e.g. "C:\") is accepted. // Depending on the context parameter of this function, the path prefix needs // to match the paths specified either as kubelet-csi-plugins-path // or as kubelet-pod-path parameters of csi-proxy. // The path parameter cannot already exist in the host's filesystem. // UNC paths of the form "\\server\share\path\file" are not allowed. // All directory separators need to be backslash character: "\". // Characters: .. / : | ? * in the path are not allowed. // Maximum path length will be capped to 260 characters. string path = 1; // Context of the path parameter. // This is used to validate prefix for absolute paths passed PathContext context = 2; } message MkdirResponse { // Error message if any. Empty string indicates success string error = 1; } message RmdirRequest { // The path to remove in the host's filesystem. // All special characters allowed by Windows in path names will be allowed // except for restrictions noted below. For details, please check: // https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file // // Restrictions: // Only absolute path (indicated by a drive letter prefix: e.g. "C:\") is accepted. // Depending on the context parameter of this function, the path prefix needs // to match the paths specified either as kubelet-csi-plugins-path // or as kubelet-pod-path parameters of csi-proxy. // UNC paths of the form "\\server\share\path\file" are not allowed. // All directory separators need to be backslash character: "\". // Characters: .. / : | ? * in the path are not allowed. // Path cannot be a file of type symlink. // Maximum path length will be capped to 260 characters. string path = 1; // Context of the path parameter. // This is used to validate prefix for absolute paths passed PathContext context = 2; // Force remove all contents under path (if any). bool force = 3; } message RmdirResponse { // Error message if any. Empty string indicates success string error = 1; } message LinkPathRequest { // The path where the symlink is created in the host's filesystem. // All special characters allowed by Windows in path names will be allowed // except for restrictions noted below. For details, please check: // https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file // // Restrictions: // Only absolute path (indicated by a drive letter prefix: e.g. "C:\") is accepted. // The path prefix needs needs to match the paths specified as // kubelet-csi-plugins-path parameter of csi-proxy. // UNC paths of the form "\\server\share\path\file" are not allowed. // All directory separators need to be backslash character: "\". // Characters: .. / : | ? * in the path are not allowed. // source_path cannot already exist in the host filesystem. // Maximum path length will be capped to 260 characters. string source_path = 1; // Target path in the host's filesystem used for the symlink creation. // All special characters allowed by Windows in path names will be allowed // except for restrictions noted below. For details, please check: // https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file // // Restrictions: // Only absolute path (indicated by a drive letter prefix: e.g. "C:\") is accepted. // The path prefix needs to match the paths specified as // kubelet-pod-path parameter of csi-proxy. // UNC paths of the form "\\server\share\path\file" are not allowed. // All directory separators need to be backslash character: "\". // Characters: .. / : | ? * in the path are not allowed. // target_path needs to exist as a directory in the host that is empty. // target_path cannot be a symbolic link. // Maximum path length will be capped to 260 characters. string target_path = 2; } message LinkPathResponse { // Error message if any. Empty string indicates success string error = 1; } message IsMountPointRequest { // The path whose existence we want to check in the host's filesystem string path = 1; } message IsMountPointResponse { // Error message if any. Empty string indicates success string error = 1; // Indicates whether the path in PathExistsRequest exists in the host's filesystem bool is_mount_point = 2; }