syntax = "proto3"; package hashicorp.vagrant; option go_package = "github.com/hashicorp/vagrant/internal/server/proto/ruby_vagrant"; import "google/protobuf/empty.proto"; import "google/protobuf/any.proto"; // The service that is implemented for the server backend. service RubyVagrant { // Gets available ruby plugins rpc GetPlugins(google.protobuf.Empty) returns (GetPluginsResponse); rpc ParseVagrantfile(ParseVagrantfileRequest) returns (ParseVagrantfileResponse); } /******************************************************************** * Plugins ********************************************************************/ message GetPluginsResponse { repeated Plugin plugins = 1; } message Plugin { // name of the plugin string name = 1; // type of the plugin Type type = 2; // Supported plugin types, the values here MUST match the enum values // in the Go sdk/component package exactly. A test in internal/server // validates this. enum Type { COMMAND = 0; COMMUNICATOR = 1; GUEST = 2; HOST = 3; PROVIDER = 4; PROVISIONER = 5; SYNCED_FOLDER = 6; } } /******************************************************************** * Vagrantfile ********************************************************************/ message ParseVagrantfileRequest { // Path to the Vagrantfile string path = 1; // TODO: might be good to add an option for passing cmd line args } message ParseVagrantfileResponse { // Vagrantfile representation VagrantfileComponents.Vagrantfile vagrantfile = 1; } message VagrantfileComponents { message ConfigVM { bool allow_fstab_modification = 1; bool allow_hosts_modificaion = 2; string box = 3; repeated Provisioner provisioners = 4; // TODO } message ConfigSSH { bool compresssion = 1; int64 connect_timeout = 2; // TODO } message ConfigWinRM { string username = 1; string password = 2; // TODO } message ConfigWinssh { bool forward_agent = 1; repeated string forward_env = 2; // TODO } message ConfigVagrant { string host = 1; repeated string plugins = 2; // TODO } // TODO: Review what needs to be sent here message MachineConfig { string name = 1; ConfigVM config_vm = 2; ConfigSSH config_ssh = 3; ConfigWinRM config_winrm = 4; ConfigWinssh config_winssh = 5; ConfigVagrant config_vagrant = 6; } message Provisioner { string name = 1; string type = 2; string before = 3; string after = 4; bool communicator_required = 5; // A Provisioner plugin defines it's own configuration, // that gets added in here google.protobuf.Any config = 6; } // TODO: Review what needs to be sent here message Vagrantfile { string path = 1; string raw = 2; string current_version = 3; repeated MachineConfig machine_configs = 4; } }