syntax = "proto3"; option go_package = "github.com/coder/coder/provisionersdk/proto"; package provisioner; // Empty indicates a successful request/response. message Empty {} // ParameterSource represents the source location for a parameter to get it's value from. message ParameterSource { enum Scheme { DATA = 0; } Scheme scheme = 1; string value = 2; } // ParameterDestination represents the target location for a provisioner to set the value. message ParameterDestination { enum Scheme { ENVIRONMENT_VARIABLE = 0; PROVISIONER_VARIABLE = 1; } Scheme scheme = 1; } // ParameterValue represents the resolved source and destination of a parameter. message ParameterValue { ParameterDestination.Scheme destination_scheme = 1; string name = 2; string value = 3; } // ParameterSchema represents validation and type information for a parsed parameter. message ParameterSchema { string name = 1; string description = 2; ParameterSource default_source = 3; bool allow_override_source = 4; ParameterDestination default_destination = 5; bool allow_override_destination = 6; bool redisplay_value = 7; enum TypeSystem { None = 0; HCL = 1; } TypeSystem validation_type_system = 8; string validation_value_type = 9; string validation_error = 10; string validation_condition = 11; } // RichParameterOption represents a singular option that a parameter may expose. message RichParameterOption { string name = 1; string description = 2; string value = 3; string icon = 4; } // RichParameter represents a variable that is exposed. message RichParameter { string name = 1; string description = 2; string type = 3; bool mutable = 4; string default_value = 5; string icon = 6; repeated RichParameterOption options = 7; string validation_regex = 8; string validation_error = 9; int32 validation_min = 10; int32 validation_max = 11; } // RichParameterValue holds the key/value mapping of a parameter. message RichParameterValue { string name = 1; string value = 2; } // LogLevel represents severity of the log. enum LogLevel { TRACE = 0; DEBUG = 1; INFO = 2; WARN = 3; ERROR = 4; } // Log represents output from a request. message Log { LogLevel level = 1; string output = 2; } message InstanceIdentityAuth { string instance_id = 1; } // Agent represents a running agent on the workspace. message Agent { string id = 1; string name = 2; map env = 3; string startup_script = 4; string operating_system = 5; string architecture = 6; string directory = 7; repeated App apps = 8; oneof auth { string token = 9; string instance_id = 10; } int32 connection_timeout_seconds = 11; string troubleshooting_url = 12; string motd_file = 13; bool login_before_ready = 14; int32 startup_script_timeout_seconds = 15; } enum AppSharingLevel { OWNER = 0; AUTHENTICATED = 1; PUBLIC = 2; } // App represents a dev-accessible application on the workspace. message App { // slug is the unique identifier for the app, usually the name from the // template. It must be URL-safe and hostname-safe. string slug = 1; string display_name = 2; string command = 3; string url = 4; string icon = 5; bool subdomain = 6; Healthcheck healthcheck = 7; AppSharingLevel sharing_level = 8; bool external = 9; } // Healthcheck represents configuration for checking for app readiness. message Healthcheck { string url = 1; int32 interval = 2; int32 threshold = 3; } // Resource represents created infrastructure. message Resource { string name = 1; string type = 2; repeated Agent agents = 3; message Metadata { string key = 1; string value = 2; bool sensitive = 3; bool is_null = 4; } repeated Metadata metadata = 4; bool hide = 5; string icon = 6; string instance_type = 7; int32 daily_cost = 8; } // Parse consumes source-code from a directory to produce inputs. message Parse { message Request { string directory = 1; } message Complete { repeated ParameterSchema parameter_schemas = 2; } message Response { oneof type { Log log = 1; Complete complete = 2; } } } enum WorkspaceTransition { START = 0; STOP = 1; DESTROY = 2; } // Provision consumes source-code from a directory to produce resources. // Exactly one of Plan or Apply must be provided in a single session. message Provision { message Metadata { string coder_url = 1; WorkspaceTransition workspace_transition = 2; string workspace_name = 3; string workspace_owner = 4; string workspace_id = 5; string workspace_owner_id = 6; string workspace_owner_email = 7; } // Config represents execution configuration shared by both Plan and // Apply commands. message Config { string directory = 1; bytes state = 2; Metadata metadata = 3; } message Plan { Config config = 1; repeated ParameterValue parameter_values = 2; repeated RichParameterValue rich_parameter_values = 3; } message Apply { Config config = 1; bytes plan = 2; } message Cancel {} message Request { oneof type { Plan plan = 1; Apply apply = 2; Cancel cancel = 3; } } message Complete { bytes state = 1; string error = 2; repeated Resource resources = 3; repeated RichParameter parameters = 4; bytes plan = 5; } message Response { oneof type { Log log = 1; Complete complete = 2; } } } service Provisioner { rpc Parse(Parse.Request) returns (stream Parse.Response); rpc Provision(stream Provision.Request) returns (stream Provision.Response); }