You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
411 lines
12 KiB
411 lines
12 KiB
// Copyright 2017 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
syntax = "proto3";
|
|
option optimize_for = LITE_RUNTIME;
|
|
|
|
// This file defines messages used for starting, stopping, and managing VMs.
|
|
package vm_tools.concierge;
|
|
option go_package = "vm_concierge_proto";
|
|
|
|
// Specification of the key components of a VM.
|
|
message VirtualMachineSpec {
|
|
// Path to the kernel that should be used for the VM.
|
|
string kernel = 1;
|
|
|
|
// Path to the disk image that should be used as the root file system for
|
|
// the VM.
|
|
string rootfs = 2;
|
|
}
|
|
|
|
// The type of disk image.
|
|
enum DiskImageType {
|
|
// A raw file.
|
|
DISK_IMAGE_RAW = 0;
|
|
|
|
// A qcow2-compatible disk image.
|
|
DISK_IMAGE_QCOW2 = 1;
|
|
}
|
|
|
|
// Describes any additional disk images that should be mounted inside the VM.
|
|
message DiskImage {
|
|
// Path to the disk image on the host.
|
|
string path = 1;
|
|
|
|
// Path where this disk image will be mounted inside the VM.
|
|
string mount_point = 2;
|
|
|
|
// The file system type for this disk image.
|
|
string fstype = 3;
|
|
|
|
// Any special flags to be used when mounting the file system. Specified the
|
|
// same way as in mount(2).
|
|
uint64 flags = 4;
|
|
|
|
// Any additional data associated with the mount.
|
|
string data = 5;
|
|
|
|
// If true, the disk image will be mounted writable.
|
|
bool writable = 6;
|
|
|
|
// If true, the disk image will be mounted.
|
|
bool do_mount = 7;
|
|
|
|
// Image type of the disk.
|
|
DiskImageType image_type = 8;
|
|
}
|
|
|
|
// Information about a particular VM.
|
|
message VmInfo {
|
|
// The IPv4 address assigned to the VM, in network byte order.
|
|
fixed32 ipv4_address = 1;
|
|
|
|
// The process ID of the main crosvm process for the VM.
|
|
int32 pid = 2;
|
|
|
|
// The virtual socket context id assigned to the VM.
|
|
int64 cid = 3;
|
|
|
|
// The handle to a 9p server managed by the seneschal system service. Use
|
|
// this handle when making requests to that service to manage the files shared
|
|
// with this VM.
|
|
uint64 seneschal_server_handle = 4;
|
|
}
|
|
|
|
// Information that must be included with every StartVm dbus message.
|
|
message StartVmRequest {
|
|
// The VM that should be started. This is ignored if starting a termina VM,
|
|
// which will always use the latest component from imageloader.
|
|
VirtualMachineSpec vm = 1;
|
|
|
|
// Any additional disks that should be mounted inside the VM.
|
|
repeated DiskImage disks = 2;
|
|
|
|
// Path to a shared directory that will be mounted via NFS inside the VM.
|
|
// DEPRECATED: The server never did anything with this field. Instead callers
|
|
// should use the |shared_dir_handle| field of the VmInfo message to get a
|
|
// server handle that can be used in requests to the seneschal system service.
|
|
string shared_directory = 3 [deprecated = true];
|
|
|
|
// The human-readable name to be assigned to this VM.
|
|
string name = 4;
|
|
|
|
// If true, concierge should also perform termina-specific setup.
|
|
bool start_termina = 5;
|
|
|
|
// If true, a file descriptor must be passed along with the message and that
|
|
// file descriptor will be used for storage.
|
|
// Ignored unless |start_termina| is true.
|
|
bool use_fd_for_storage = 6;
|
|
|
|
// The owner of the vm.
|
|
string owner_id = 7;
|
|
}
|
|
|
|
enum VmStatus {
|
|
// Unknown status.
|
|
VM_STATUS_UNKNOWN = 0;
|
|
|
|
// The VM is already running.
|
|
VM_STATUS_RUNNING = 1;
|
|
|
|
// The VM is currently starting up.
|
|
VM_STATUS_STARTING = 2;
|
|
|
|
// The VM failed to startup.
|
|
VM_STATUS_FAILURE = 3;
|
|
}
|
|
|
|
// Information sent back by vm_concierge in response to a StartVm dbus message.
|
|
message StartVmResponse {
|
|
// If true, the VM was started successfully. |vm_info| will have non-default
|
|
// values only if this is true.
|
|
bool success = 1;
|
|
|
|
// If the VM failed to start, the reason for the failure.
|
|
string failure_reason = 2;
|
|
|
|
// Information about the VM that was started, if successful.
|
|
VmInfo vm_info = 3;
|
|
|
|
// Status of the VM. If VM_STATUS_RUNNING, it is not necessary to wait for a
|
|
// TremplinStartedSignal before starting a container in the VM.
|
|
VmStatus status = 4;
|
|
}
|
|
|
|
// Information that must be included with every StopVm dbus message.
|
|
message StopVmRequest {
|
|
// The name of the VM to be stopped.
|
|
string name = 1;
|
|
|
|
// The owner of the vm.
|
|
string owner_id = 2;
|
|
}
|
|
|
|
// Response sent back by vm_concierge when it receives a StopVm dbus message.
|
|
message StopVmResponse {
|
|
// If true, the requested VM was stopped.
|
|
bool success = 1;
|
|
|
|
// The failure_reason if the requested VM could not be stopped.
|
|
string failure_reason = 2;
|
|
}
|
|
|
|
// Request for information about the VM.
|
|
message GetVmInfoRequest {
|
|
// The name of the VM to query.
|
|
string name = 1;
|
|
|
|
// The owner of the vm.
|
|
string owner_id = 2;
|
|
}
|
|
|
|
// Response sent back by vm_concierge for a GetVmInfo dbus message.
|
|
message GetVmInfoResponse {
|
|
// If true, the requested VM exists and info was returned.
|
|
bool success = 1;
|
|
|
|
// Information about the VM that was requested.
|
|
VmInfo vm_info = 2;
|
|
}
|
|
|
|
// The type of storage location for a disk image.
|
|
enum StorageLocation {
|
|
// Subdirectory under /home/root/<id>/crosvm.
|
|
STORAGE_CRYPTOHOME_ROOT = 0;
|
|
|
|
// The user's Downloads directory, under /home/user/<id>/Downloads.
|
|
STORAGE_CRYPTOHOME_DOWNLOADS = 1;
|
|
}
|
|
|
|
enum DiskImageStatus {
|
|
// Unknown status.
|
|
DISK_STATUS_UNKNOWN = 0;
|
|
|
|
// The disk image was created.
|
|
DISK_STATUS_CREATED = 1;
|
|
|
|
// The disk already existed.
|
|
DISK_STATUS_EXISTS = 2;
|
|
|
|
// Unable to create the disk image.
|
|
DISK_STATUS_FAILED = 3;
|
|
|
|
// Specified Disk does not exist.
|
|
DISK_STATUS_DOES_NOT_EXIST = 4;
|
|
|
|
// The specified disk was destroyed.
|
|
DISK_STATUS_DESTROYED = 5;
|
|
}
|
|
|
|
// Request to concierge to create a disk image.
|
|
message CreateDiskImageRequest {
|
|
// The cryptohome id for the user's encrypted storage.
|
|
string cryptohome_id = 1;
|
|
|
|
// The path to the disk image. This must be a relative path, and any
|
|
// directories must already exist.
|
|
string disk_path = 2;
|
|
|
|
// The logical size of the new disk image, in bytes.
|
|
uint64 disk_size = 3;
|
|
|
|
// The type of disk image to be created.
|
|
DiskImageType image_type = 4;
|
|
|
|
// The storage location for the disk image.
|
|
StorageLocation storage_location = 5;
|
|
}
|
|
|
|
// Response to a CreateDiskImageRequest.
|
|
message CreateDiskImageResponse {
|
|
// If true, the disk image has been successfully created.
|
|
DiskImageStatus status = 1;
|
|
|
|
// The absolute path to the created disk image, if it was successfully
|
|
// created or already existed.
|
|
string disk_path = 2;
|
|
|
|
// The failure reason if the disk image could not be created or doesn't exist.
|
|
string failure_reason = 3;
|
|
}
|
|
|
|
// Request to concierge to destroy a disk image.
|
|
message DestroyDiskImageRequest {
|
|
// The cryptohome id for the user's encrypted storage.
|
|
string cryptohome_id = 1;
|
|
|
|
// The path to the disk image. This must be a relative path.
|
|
string disk_path = 2;
|
|
|
|
// The storage location for the disk image.
|
|
StorageLocation storage_location = 3;
|
|
}
|
|
|
|
// Response to a DestroyDiskImageRequest.
|
|
message DestroyDiskImageResponse {
|
|
// If DISK_STATUS_DESTROYED, the disk image has been successfully destroyed.
|
|
// If DISK_STATUS_DOES_NOT_EXIST, the disk image had already been removed.
|
|
DiskImageStatus status = 1;
|
|
|
|
// The failure reason if the disk image could not be destroyed or doesn't exist.
|
|
string failure_reason = 3;
|
|
}
|
|
|
|
// Request to concierge to export a disk image.
|
|
// Must be accompanied by an FD. The contents of `disk_path` will be written to
|
|
// the passed FD.
|
|
message ExportDiskImageRequest {
|
|
// The cryptohome id for the user's encrypted storage.
|
|
string cryptohome_id = 1;
|
|
|
|
// The path to the disk image. This must be a relative path.
|
|
string disk_path = 2;
|
|
}
|
|
|
|
// Response to a ExportDiskImageRequest.
|
|
message ExportDiskImageResponse {
|
|
// If DISK_STATUS_CREATED, the disk image has been successfully exported.
|
|
DiskImageStatus status = 1;
|
|
|
|
// The failure reason if the disk image could not be exported.
|
|
string failure_reason = 2;
|
|
}
|
|
|
|
// Request to list all VM disk images in the given storage area.
|
|
message ListVmDisksRequest {
|
|
// The cryptohome id for the user's encrypted storage.
|
|
string cryptohome_id = 1;
|
|
|
|
// The storage location to check.
|
|
StorageLocation storage_location = 2;
|
|
}
|
|
|
|
// Response to ListVmDisks {
|
|
message ListVmDisksResponse {
|
|
// If true, the images array is valid.
|
|
bool success = 1;
|
|
|
|
// List of disk images.
|
|
repeated string images = 2;
|
|
|
|
// The failure reason if the disks could not be listed.
|
|
string failure_reason = 3;
|
|
|
|
// The total size in bytes on disk of the disk images in the response.
|
|
uint64 total_size = 4;
|
|
}
|
|
|
|
// Message used in the signal for when a container has failed to start up.
|
|
message ContainerStartedSignal {
|
|
// Name of the VM the container is in.
|
|
string vm_name = 1;
|
|
|
|
// Name of the container within the VM.
|
|
string container_name = 2;
|
|
|
|
// The owner of the vm and container.
|
|
string owner_id = 3;
|
|
}
|
|
|
|
// Request to start a specified container image within a VM. If the container
|
|
// does not exist in the VM it will be created. Used with the StartContainer
|
|
// D-Bus message into vm_concierge.
|
|
message StartContainerRequest {
|
|
// Name of the VM to start the container in.
|
|
string vm_name = 1;
|
|
|
|
// Name of the container to start within the VM. If empty, the default
|
|
// container name will be used.
|
|
string container_name = 2;
|
|
|
|
// Username for the default user in the container. This is only used if the
|
|
// container has not been created yet.
|
|
string container_username = 3;
|
|
|
|
// Async mode is always used now.
|
|
bool async = 4 [deprecated=true];
|
|
|
|
// The cryptohome id for the user's encrypted storage. This is used for SSH
|
|
// key storage.
|
|
string cryptohome_id = 5;
|
|
}
|
|
|
|
enum ContainerStatus {
|
|
// Unknown status.
|
|
CONTAINER_STATUS_UNKNOWN = 0;
|
|
|
|
// The container is already running.
|
|
CONTAINER_STATUS_RUNNING = 1;
|
|
|
|
// The container is currently starting up.
|
|
CONTAINER_STATUS_STARTING = 2;
|
|
|
|
// The container failed to startup.
|
|
CONTAINER_STATUS_FAILURE = 3;
|
|
}
|
|
|
|
// Response sent back by vm_concierge when it receives a StartContaienr D-Bus
|
|
// message.
|
|
message StartContainerResponse {
|
|
// Use the status field instead.
|
|
bool success = 1 [deprecated=true];
|
|
|
|
// The failure_reason if the status is CONTAINER_STATUS_FAILURE.
|
|
string failure_reason = 2;
|
|
|
|
// The status of the container as a result of the StartContainer call. If the
|
|
// status is CONTAINER_STATUS_STARTING then a D-Bus signal will be sent to
|
|
// indicate whether success or failure occurred. The signal should be
|
|
// registered for before the StartContainer call is made because it may be
|
|
// sent before the call returns.
|
|
ContainerStatus status = 3;
|
|
}
|
|
|
|
// Request to get the SSH keys associated with the host and a specific
|
|
// container for the GetContainerSshKeys call. These keys will be generated
|
|
// when StartContainer is called the first time for a container, so this should
|
|
// not be called until after that call is invoked.
|
|
message ContainerSshKeysRequest {
|
|
// Name of the VM to target.
|
|
string vm_name = 1;
|
|
|
|
// Name of the container within the VM to target, if empty the default
|
|
// container name will be used.
|
|
string container_name = 2;
|
|
|
|
// The cryptohome id for the user's encrypted storage.
|
|
string cryptohome_id = 3;
|
|
}
|
|
|
|
// Response sent back by vm_concierge when it receives a GetContainerSshKeys
|
|
// call. If either of the keys do not exist, the empty string will be set for
|
|
// that value.
|
|
message ContainerSshKeysResponse {
|
|
// Public key of the container for verification of it as a known host. This
|
|
// will be a single line string equivalent to the contents in the ssh-keygen
|
|
// generated file.
|
|
string container_public_key = 1;
|
|
|
|
// Private key for the host, counterpart to the public key which is stored in
|
|
// the container as an authorized host. This will be a multiline string that
|
|
// is equivalent to the contents in the ssh-keygen generated file. This will
|
|
// be the same for all VMs/containers.
|
|
string host_private_key = 2;
|
|
|
|
// The hostname of the container.
|
|
string hostname = 3;
|
|
|
|
// Public key of the host for verification of it as a known host. This
|
|
// will be a single line string equivalent to the contents in the ssh-keygen
|
|
// generated file.
|
|
string host_public_key = 4;
|
|
|
|
// Private key for the container, counterpart to the public key which is
|
|
// stored in the container. This will be a multiline string that
|
|
// is equivalent to the contents in the ssh-keygen generated file. This is
|
|
// unique for each container.
|
|
string container_private_key = 5;
|
|
}
|