blob: 712de1c7e57dc54cbed65838326498ee1dc9df17 [file] [log] [blame]
// Copyright 2020 The Monogon Project Authors.
//
// SPDX-License-Identifier: Apache-2.0
//
// 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.
syntax = "proto3";
package metropolis.node.build.fsspec;
option go_package = "source.monogon.dev/metropolis/node/build/fsspec";
// FSSpec is the spec from which a filesystem is generated. It consists of files, directories and symbolic
// links. Directories are also automatically inferred when required for the placement of files or symbolic
// links. Inferred directories always have uid 0, gid 0 and permissions 0555. This can be overridden by
// explicitly specifying a directory at a given path.
message FSSpec {
repeated File file = 1;
repeated Directory directory = 2;
repeated SymbolicLink symbolic_link = 3;
repeated SpecialFile special_file = 4;
}
// For internal use only. Represents all supported inodes in a oneof.
message Inode {
oneof type {
File file = 1;
Directory directory = 2;
SymbolicLink symbolic_link = 3;
SpecialFile special_file = 4;
}
}
message File {
// The path where the file ends up in the filesystem.
string path = 1;
// The path on the host filesystem where the file contents should be taken from.
string source_path = 2;
// Unix permission bits
uint32 mode = 3;
// Owner uid
uint32 uid = 4;
// Owner gid
uint32 gid = 5;
}
message Directory {
// The path where the directory ends up in the filesystem.
string path = 1;
// Unix permission bits
uint32 mode = 2;
// Owner uid
uint32 uid = 3;
// Owner gid
uint32 gid = 4;
}
message SymbolicLink {
// The path where the symbolic link ends up in the filesystem.
string path = 1;
// The path to which the symbolic link resolves to.
string target_path = 2;
}
message SpecialFile {
// The path where the special file ends up in the filesystem.
string path = 1;
enum Type {
CHARACTER_DEV = 0;
BLOCK_DEV = 1;
FIFO = 2;
}
// Type of special file.
Type type = 2;
// The major device number of the special file.
uint32 major = 3;
// The minor number of the special file. Ignored for FIFO-type special files.
uint32 minor = 4;
// Unix permission bits
uint32 mode = 5;
// Owner uid
uint32 uid = 6;
// Owner gid
uint32 gid = 7;
}