chore: Invert `delay_login_until_ready`, now `login_before_ready` (#5893)

This commit is contained in:
Mathias Fredriksson 2023-01-27 22:07:47 +02:00 committed by GitHub
parent 8a5760a2fe
commit 981cac5e28
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 392 additions and 337 deletions

View File

@ -494,10 +494,10 @@ docs/admin/prometheus.md: scripts/metricsdocgen/main.go scripts/metricsdocgen/me
cd site cd site
yarn run format:write:only ../docs/admin/prometheus.md yarn run format:write:only ../docs/admin/prometheus.md
docs/cli/coder.md: scripts/clidocgen/main.go $(shell find ./cli/ -type f) docs/cli/coder.md: scripts/clidocgen/main.go $(GO_SRC_FILES) docs/manifest.json
BASE_PATH="." go run scripts/clidocgen/main.go BASE_PATH="." go run scripts/clidocgen/main.go
cd site cd site
yarn run format:write:only ../docs/cli/**.md yarn run format:write:only ../docs/cli/*.md ../docs/manifest.json
docs/admin/audit-logs.md: scripts/auditdocgen/main.go enterprise/audit/table.go docs/admin/audit-logs.md: scripts/auditdocgen/main.go enterprise/audit/table.go
go run scripts/auditdocgen/main.go go run scripts/auditdocgen/main.go

View File

@ -45,7 +45,7 @@ func Agent(ctx context.Context, writer io.Writer, opts AgentOptions) error {
// We don't take the fast path for opts.NoWait yet because we want to // We don't take the fast path for opts.NoWait yet because we want to
// show the message. // show the message.
if agent.Status == codersdk.WorkspaceAgentConnected && if agent.Status == codersdk.WorkspaceAgentConnected &&
(!agent.DelayLoginUntilReady || agent.LifecycleState == codersdk.WorkspaceAgentLifecycleReady) { (agent.LoginBeforeReady || agent.LifecycleState == codersdk.WorkspaceAgentLifecycleReady) {
return nil return nil
} }
@ -93,7 +93,7 @@ func Agent(ctx context.Context, writer io.Writer, opts AgentOptions) error {
// we do this just before starting the spinner to avoid needless // we do this just before starting the spinner to avoid needless
// spinning. // spinning.
if agent.Status == codersdk.WorkspaceAgentConnected && if agent.Status == codersdk.WorkspaceAgentConnected &&
agent.DelayLoginUntilReady && opts.NoWait { !agent.LoginBeforeReady && opts.NoWait {
showMessage() showMessage()
return nil return nil
} }
@ -137,7 +137,7 @@ func Agent(ctx context.Context, writer io.Writer, opts AgentOptions) error {
// NOTE(mafredri): Once we have access to the workspace agent's // NOTE(mafredri): Once we have access to the workspace agent's
// startup script logs, we can show them here. // startup script logs, we can show them here.
// https://github.com/coder/coder/issues/2957 // https://github.com/coder/coder/issues/2957
if agent.DelayLoginUntilReady && !opts.NoWait { if !agent.LoginBeforeReady && !opts.NoWait {
switch agent.LifecycleState { switch agent.LifecycleState {
case codersdk.WorkspaceAgentLifecycleReady: case codersdk.WorkspaceAgentLifecycleReady:
return nil return nil
@ -176,7 +176,7 @@ func waitingMessage(agent codersdk.WorkspaceAgent, opts AgentOptions) (m *messag
Prompt: "Don't panic, your workspace is booting up!", Prompt: "Don't panic, your workspace is booting up!",
} }
defer func() { defer func() {
if opts.NoWait { if agent.Status == codersdk.WorkspaceAgentConnected && opts.NoWait {
m.Spin = "" m.Spin = ""
} }
if m.Spin != "" { if m.Spin != "" {

View File

@ -30,7 +30,8 @@ func TestAgent(t *testing.T) {
WorkspaceName: "example", WorkspaceName: "example",
Fetch: func(_ context.Context) (codersdk.WorkspaceAgent, error) { Fetch: func(_ context.Context) (codersdk.WorkspaceAgent, error) {
agent := codersdk.WorkspaceAgent{ agent := codersdk.WorkspaceAgent{
Status: codersdk.WorkspaceAgentDisconnected, Status: codersdk.WorkspaceAgentDisconnected,
LoginBeforeReady: true,
} }
if disconnected.Load() { if disconnected.Load() {
agent.Status = codersdk.WorkspaceAgentConnected agent.Status = codersdk.WorkspaceAgentConnected
@ -73,6 +74,7 @@ func TestAgent_TimeoutWithTroubleshootingURL(t *testing.T) {
agent := codersdk.WorkspaceAgent{ agent := codersdk.WorkspaceAgent{
Status: codersdk.WorkspaceAgentConnecting, Status: codersdk.WorkspaceAgentConnecting,
TroubleshootingURL: wantURL, TroubleshootingURL: wantURL,
LoginBeforeReady: true,
} }
switch { switch {
case !connected.Load() && timeout.Load(): case !connected.Load() && timeout.Load():
@ -119,10 +121,10 @@ func TestAgent_StartupTimeout(t *testing.T) {
WorkspaceName: "example", WorkspaceName: "example",
Fetch: func(_ context.Context) (codersdk.WorkspaceAgent, error) { Fetch: func(_ context.Context) (codersdk.WorkspaceAgent, error) {
agent := codersdk.WorkspaceAgent{ agent := codersdk.WorkspaceAgent{
Status: codersdk.WorkspaceAgentConnecting, Status: codersdk.WorkspaceAgentConnecting,
DelayLoginUntilReady: true, LoginBeforeReady: false,
LifecycleState: codersdk.WorkspaceAgentLifecycleCreated, LifecycleState: codersdk.WorkspaceAgentLifecycleCreated,
TroubleshootingURL: wantURL, TroubleshootingURL: wantURL,
} }
if s := status.Load(); s != "" { if s := status.Load(); s != "" {
@ -177,10 +179,10 @@ func TestAgent_StartErrorExit(t *testing.T) {
WorkspaceName: "example", WorkspaceName: "example",
Fetch: func(_ context.Context) (codersdk.WorkspaceAgent, error) { Fetch: func(_ context.Context) (codersdk.WorkspaceAgent, error) {
agent := codersdk.WorkspaceAgent{ agent := codersdk.WorkspaceAgent{
Status: codersdk.WorkspaceAgentConnecting, Status: codersdk.WorkspaceAgentConnecting,
DelayLoginUntilReady: true, LoginBeforeReady: false,
LifecycleState: codersdk.WorkspaceAgentLifecycleCreated, LifecycleState: codersdk.WorkspaceAgentLifecycleCreated,
TroubleshootingURL: wantURL, TroubleshootingURL: wantURL,
} }
if s := status.Load(); s != "" { if s := status.Load(); s != "" {
@ -232,10 +234,10 @@ func TestAgent_NoWait(t *testing.T) {
WorkspaceName: "example", WorkspaceName: "example",
Fetch: func(_ context.Context) (codersdk.WorkspaceAgent, error) { Fetch: func(_ context.Context) (codersdk.WorkspaceAgent, error) {
agent := codersdk.WorkspaceAgent{ agent := codersdk.WorkspaceAgent{
Status: codersdk.WorkspaceAgentConnecting, Status: codersdk.WorkspaceAgentConnecting,
DelayLoginUntilReady: true, LoginBeforeReady: false,
LifecycleState: codersdk.WorkspaceAgentLifecycleCreated, LifecycleState: codersdk.WorkspaceAgentLifecycleCreated,
TroubleshootingURL: wantURL, TroubleshootingURL: wantURL,
} }
if s := status.Load(); s != "" { if s := status.Load(); s != "" {
@ -284,7 +286,7 @@ func TestAgent_NoWait(t *testing.T) {
require.NoError(t, <-done, "ready - should exit early") require.NoError(t, <-done, "ready - should exit early")
} }
func TestAgent_DelayLoginUntilReadyDisabled(t *testing.T) { func TestAgent_LoginBeforeReadyEnabled(t *testing.T) {
t.Parallel() t.Parallel()
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort) ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
@ -301,10 +303,10 @@ func TestAgent_DelayLoginUntilReadyDisabled(t *testing.T) {
WorkspaceName: "example", WorkspaceName: "example",
Fetch: func(_ context.Context) (codersdk.WorkspaceAgent, error) { Fetch: func(_ context.Context) (codersdk.WorkspaceAgent, error) {
agent := codersdk.WorkspaceAgent{ agent := codersdk.WorkspaceAgent{
Status: codersdk.WorkspaceAgentConnecting, Status: codersdk.WorkspaceAgentConnecting,
DelayLoginUntilReady: false, LoginBeforeReady: true,
LifecycleState: codersdk.WorkspaceAgentLifecycleCreated, LifecycleState: codersdk.WorkspaceAgentLifecycleCreated,
TroubleshootingURL: wantURL, TroubleshootingURL: wantURL,
} }
if s := status.Load(); s != "" { if s := status.Load(); s != "" {

View File

@ -26,6 +26,7 @@ func TestWorkspaceResources(t *testing.T) {
Agents: []codersdk.WorkspaceAgent{{ Agents: []codersdk.WorkspaceAgent{{
Name: "dev", Name: "dev",
Status: codersdk.WorkspaceAgentConnected, Status: codersdk.WorkspaceAgentConnected,
LifecycleState: codersdk.WorkspaceAgentLifecycleCreated,
Architecture: "amd64", Architecture: "amd64",
OperatingSystem: "linux", OperatingSystem: "linux",
}}, }},
@ -60,6 +61,7 @@ func TestWorkspaceResources(t *testing.T) {
Agents: []codersdk.WorkspaceAgent{{ Agents: []codersdk.WorkspaceAgent{{
CreatedAt: database.Now().Add(-10 * time.Second), CreatedAt: database.Now().Add(-10 * time.Second),
Status: codersdk.WorkspaceAgentConnecting, Status: codersdk.WorkspaceAgentConnecting,
LifecycleState: codersdk.WorkspaceAgentLifecycleCreated,
Name: "dev", Name: "dev",
OperatingSystem: "linux", OperatingSystem: "linux",
Architecture: "amd64", Architecture: "amd64",
@ -70,12 +72,14 @@ func TestWorkspaceResources(t *testing.T) {
Name: "dev", Name: "dev",
Agents: []codersdk.WorkspaceAgent{{ Agents: []codersdk.WorkspaceAgent{{
Status: codersdk.WorkspaceAgentConnected, Status: codersdk.WorkspaceAgentConnected,
LifecycleState: codersdk.WorkspaceAgentLifecycleReady,
Name: "go", Name: "go",
Architecture: "amd64", Architecture: "amd64",
OperatingSystem: "linux", OperatingSystem: "linux",
}, { }, {
DisconnectedAt: &disconnected, DisconnectedAt: &disconnected,
Status: codersdk.WorkspaceAgentDisconnected, Status: codersdk.WorkspaceAgentDisconnected,
LifecycleState: codersdk.WorkspaceAgentLifecycleReady,
Name: "postgres", Name: "postgres",
Architecture: "amd64", Architecture: "amd64",
OperatingSystem: "linux", OperatingSystem: "linux",

View File

@ -250,7 +250,7 @@ func ssh() *cobra.Command {
cliflag.BoolVarP(cmd.Flags(), &forwardGPG, "forward-gpg", "G", "CODER_SSH_FORWARD_GPG", false, "Specifies whether to forward the GPG agent. Unsupported on Windows workspaces, but supports all clients. Requires gnupg (gpg, gpgconf) on both the client and workspace. The GPG agent must already be running locally and will not be started for you. If a GPG agent is already running in the workspace, it will be attempted to be killed.") cliflag.BoolVarP(cmd.Flags(), &forwardGPG, "forward-gpg", "G", "CODER_SSH_FORWARD_GPG", false, "Specifies whether to forward the GPG agent. Unsupported on Windows workspaces, but supports all clients. Requires gnupg (gpg, gpgconf) on both the client and workspace. The GPG agent must already be running locally and will not be started for you. If a GPG agent is already running in the workspace, it will be attempted to be killed.")
cliflag.StringVarP(cmd.Flags(), &identityAgent, "identity-agent", "", "CODER_SSH_IDENTITY_AGENT", "", "Specifies which identity agent to use (overrides $SSH_AUTH_SOCK), forward agent must also be enabled") cliflag.StringVarP(cmd.Flags(), &identityAgent, "identity-agent", "", "CODER_SSH_IDENTITY_AGENT", "", "Specifies which identity agent to use (overrides $SSH_AUTH_SOCK), forward agent must also be enabled")
cliflag.DurationVarP(cmd.Flags(), &wsPollInterval, "workspace-poll-interval", "", "CODER_WORKSPACE_POLL_INTERVAL", workspacePollInterval, "Specifies how often to poll for workspace automated shutdown.") cliflag.DurationVarP(cmd.Flags(), &wsPollInterval, "workspace-poll-interval", "", "CODER_WORKSPACE_POLL_INTERVAL", workspacePollInterval, "Specifies how often to poll for workspace automated shutdown.")
cliflag.BoolVarP(cmd.Flags(), &noWait, "no-wait", "", "CODER_SSH_NO_WAIT", false, "Specifies whether to wait for a workspace to become ready before logging in (only applicable when the delay login until ready option is enabled). Note that the workspace agent may still be in the process of executing the startup script and the workspace may be in an incomplete state.") cliflag.BoolVarP(cmd.Flags(), &noWait, "no-wait", "", "CODER_SSH_NO_WAIT", false, "Specifies whether to wait for a workspace to become ready before logging in (only applicable when the login before ready option has not been enabled). Note that the workspace agent may still be in the process of executing the startup script and the workspace may be in an incomplete state.")
return cmd return cmd
} }

View File

@ -22,8 +22,8 @@ Flags:
Consumes $CODER_SSH_IDENTITY_AGENT Consumes $CODER_SSH_IDENTITY_AGENT
--no-wait Specifies whether to wait for a workspace to become --no-wait Specifies whether to wait for a workspace to become
ready before logging in (only applicable when the ready before logging in (only applicable when the
delay login until ready option is enabled). Note login before ready option has not been enabled).
that the workspace agent may still be in the Note that the workspace agent may still be in the
process of executing the startup script and the process of executing the startup script and the
workspace may be in an incomplete state. workspace may be in an incomplete state.
Consumes $CODER_SSH_NO_WAIT Consumes $CODER_SSH_NO_WAIT

View File

@ -163,7 +163,8 @@ func main() {
Use: "agent", Use: "agent",
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
agent := codersdk.WorkspaceAgent{ agent := codersdk.WorkspaceAgent{
Status: codersdk.WorkspaceAgentDisconnected, Status: codersdk.WorkspaceAgentDisconnected,
LifecycleState: codersdk.WorkspaceAgentLifecycleReady,
} }
go func() { go func() {
time.Sleep(3 * time.Second) time.Sleep(3 * time.Second)
@ -203,6 +204,7 @@ func main() {
Agents: []codersdk.WorkspaceAgent{{ Agents: []codersdk.WorkspaceAgent{{
CreatedAt: database.Now().Add(-10 * time.Second), CreatedAt: database.Now().Add(-10 * time.Second),
Status: codersdk.WorkspaceAgentConnecting, Status: codersdk.WorkspaceAgentConnecting,
LifecycleState: codersdk.WorkspaceAgentLifecycleCreated,
Name: "dev", Name: "dev",
OperatingSystem: "linux", OperatingSystem: "linux",
Architecture: "amd64", Architecture: "amd64",
@ -213,12 +215,14 @@ func main() {
Name: "dev", Name: "dev",
Agents: []codersdk.WorkspaceAgent{{ Agents: []codersdk.WorkspaceAgent{{
Status: codersdk.WorkspaceAgentConnected, Status: codersdk.WorkspaceAgentConnected,
LifecycleState: codersdk.WorkspaceAgentLifecycleReady,
Name: "go", Name: "go",
Architecture: "amd64", Architecture: "amd64",
OperatingSystem: "linux", OperatingSystem: "linux",
}, { }, {
DisconnectedAt: &disconnected, DisconnectedAt: &disconnected,
Status: codersdk.WorkspaceAgentDisconnected, Status: codersdk.WorkspaceAgentDisconnected,
LifecycleState: codersdk.WorkspaceAgentLifecycleReady,
Name: "postgres", Name: "postgres",
Architecture: "amd64", Architecture: "amd64",
OperatingSystem: "linux", OperatingSystem: "linux",

8
coderd/apidoc/docs.go generated
View File

@ -7770,10 +7770,6 @@ const docTemplate = `{
"type": "string", "type": "string",
"format": "date-time" "format": "date-time"
}, },
"delay_login_until_ready": {
"description": "DelayLoginUntilReady if true, the agent will delay logins until it is ready (e.g. executing startup script has ended).",
"type": "boolean"
},
"directory": { "directory": {
"type": "string" "type": "string"
}, },
@ -7812,6 +7808,10 @@ const docTemplate = `{
"lifecycle_state": { "lifecycle_state": {
"$ref": "#/definitions/codersdk.WorkspaceAgentLifecycle" "$ref": "#/definitions/codersdk.WorkspaceAgentLifecycle"
}, },
"login_before_ready": {
"description": "LoginBeforeReady if true, the agent will delay logins until it is ready (e.g. executing startup script has ended).",
"type": "boolean"
},
"name": { "name": {
"type": "string" "type": "string"
}, },

View File

@ -6985,10 +6985,6 @@
"type": "string", "type": "string",
"format": "date-time" "format": "date-time"
}, },
"delay_login_until_ready": {
"description": "DelayLoginUntilReady if true, the agent will delay logins until it is ready (e.g. executing startup script has ended).",
"type": "boolean"
},
"directory": { "directory": {
"type": "string" "type": "string"
}, },
@ -7027,6 +7023,10 @@
"lifecycle_state": { "lifecycle_state": {
"$ref": "#/definitions/codersdk.WorkspaceAgentLifecycle" "$ref": "#/definitions/codersdk.WorkspaceAgentLifecycle"
}, },
"login_before_ready": {
"description": "LoginBeforeReady if true, the agent will delay logins until it is ready (e.g. executing startup script has ended).",
"type": "boolean"
},
"name": { "name": {
"type": "string" "type": "string"
}, },

View File

@ -461,7 +461,7 @@ CREATE TABLE workspace_agents (
troubleshooting_url text DEFAULT ''::text NOT NULL, troubleshooting_url text DEFAULT ''::text NOT NULL,
motd_file text DEFAULT ''::text NOT NULL, motd_file text DEFAULT ''::text NOT NULL,
lifecycle_state workspace_agent_lifecycle_state DEFAULT 'created'::workspace_agent_lifecycle_state NOT NULL, lifecycle_state workspace_agent_lifecycle_state DEFAULT 'created'::workspace_agent_lifecycle_state NOT NULL,
delay_login_until_ready boolean DEFAULT false NOT NULL, login_before_ready boolean DEFAULT true NOT NULL,
startup_script_timeout_seconds integer DEFAULT 0 NOT NULL startup_script_timeout_seconds integer DEFAULT 0 NOT NULL
); );
@ -475,7 +475,7 @@ COMMENT ON COLUMN workspace_agents.motd_file IS 'Path to file inside workspace c
COMMENT ON COLUMN workspace_agents.lifecycle_state IS 'The current lifecycle state reported by the workspace agent.'; COMMENT ON COLUMN workspace_agents.lifecycle_state IS 'The current lifecycle state reported by the workspace agent.';
COMMENT ON COLUMN workspace_agents.delay_login_until_ready IS 'If true, the agent will delay logins until it is ready (e.g. executing startup script has ended).'; COMMENT ON COLUMN workspace_agents.login_before_ready IS 'If true, the agent will not prevent login before it is ready (e.g. startup script is still executing).';
COMMENT ON COLUMN workspace_agents.startup_script_timeout_seconds IS 'The number of seconds to wait for the startup script to complete. If the script does not complete within this time, the agent lifecycle will be marked as start_timeout.'; COMMENT ON COLUMN workspace_agents.startup_script_timeout_seconds IS 'The number of seconds to wait for the startup script to complete. If the script does not complete within this time, the agent lifecycle will be marked as start_timeout.';

View File

@ -0,0 +1,8 @@
BEGIN;
ALTER TABLE workspace_agents RENAME COLUMN login_before_ready TO delay_login_until_ready;
ALTER TABLE workspace_agents ALTER COLUMN delay_login_until_ready SET DEFAULT false;
UPDATE workspace_agents SET delay_login_until_ready = NOT delay_login_until_ready;
COMMENT ON COLUMN workspace_agents.delay_login_until_ready IS 'If true, the agent will delay logins until it is ready (e.g. executing startup script has ended).';
COMMIT;

View File

@ -0,0 +1,8 @@
BEGIN;
ALTER TABLE workspace_agents RENAME COLUMN delay_login_until_ready TO login_before_ready;
ALTER TABLE workspace_agents ALTER COLUMN login_before_ready SET DEFAULT true;
UPDATE workspace_agents SET login_before_ready = NOT login_before_ready;
COMMENT ON COLUMN workspace_agents.login_before_ready IS 'If true, the agent will not prevent login before it is ready (e.g. startup script is still executing).';
COMMIT;

View File

@ -1519,8 +1519,8 @@ type WorkspaceAgent struct {
MOTDFile string `db:"motd_file" json:"motd_file"` MOTDFile string `db:"motd_file" json:"motd_file"`
// The current lifecycle state reported by the workspace agent. // The current lifecycle state reported by the workspace agent.
LifecycleState WorkspaceAgentLifecycleState `db:"lifecycle_state" json:"lifecycle_state"` LifecycleState WorkspaceAgentLifecycleState `db:"lifecycle_state" json:"lifecycle_state"`
// If true, the agent will delay logins until it is ready (e.g. executing startup script has ended). // If true, the agent will not prevent login before it is ready (e.g. startup script is still executing).
DelayLoginUntilReady bool `db:"delay_login_until_ready" json:"delay_login_until_ready"` LoginBeforeReady bool `db:"login_before_ready" json:"login_before_ready"`
// The number of seconds to wait for the startup script to complete. If the script does not complete within this time, the agent lifecycle will be marked as start_timeout. // The number of seconds to wait for the startup script to complete. If the script does not complete within this time, the agent lifecycle will be marked as start_timeout.
StartupScriptTimeoutSeconds int32 `db:"startup_script_timeout_seconds" json:"startup_script_timeout_seconds"` StartupScriptTimeoutSeconds int32 `db:"startup_script_timeout_seconds" json:"startup_script_timeout_seconds"`
} }

View File

@ -4840,7 +4840,7 @@ func (q *sqlQuerier) UpdateUserStatus(ctx context.Context, arg UpdateUserStatusP
const getWorkspaceAgentByAuthToken = `-- name: GetWorkspaceAgentByAuthToken :one const getWorkspaceAgentByAuthToken = `-- name: GetWorkspaceAgentByAuthToken :one
SELECT SELECT
id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, delay_login_until_ready, startup_script_timeout_seconds id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, login_before_ready, startup_script_timeout_seconds
FROM FROM
workspace_agents workspace_agents
WHERE WHERE
@ -4876,7 +4876,7 @@ func (q *sqlQuerier) GetWorkspaceAgentByAuthToken(ctx context.Context, authToken
&i.TroubleshootingURL, &i.TroubleshootingURL,
&i.MOTDFile, &i.MOTDFile,
&i.LifecycleState, &i.LifecycleState,
&i.DelayLoginUntilReady, &i.LoginBeforeReady,
&i.StartupScriptTimeoutSeconds, &i.StartupScriptTimeoutSeconds,
) )
return i, err return i, err
@ -4884,7 +4884,7 @@ func (q *sqlQuerier) GetWorkspaceAgentByAuthToken(ctx context.Context, authToken
const getWorkspaceAgentByID = `-- name: GetWorkspaceAgentByID :one const getWorkspaceAgentByID = `-- name: GetWorkspaceAgentByID :one
SELECT SELECT
id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, delay_login_until_ready, startup_script_timeout_seconds id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, login_before_ready, startup_script_timeout_seconds
FROM FROM
workspace_agents workspace_agents
WHERE WHERE
@ -4918,7 +4918,7 @@ func (q *sqlQuerier) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (W
&i.TroubleshootingURL, &i.TroubleshootingURL,
&i.MOTDFile, &i.MOTDFile,
&i.LifecycleState, &i.LifecycleState,
&i.DelayLoginUntilReady, &i.LoginBeforeReady,
&i.StartupScriptTimeoutSeconds, &i.StartupScriptTimeoutSeconds,
) )
return i, err return i, err
@ -4926,7 +4926,7 @@ func (q *sqlQuerier) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (W
const getWorkspaceAgentByInstanceID = `-- name: GetWorkspaceAgentByInstanceID :one const getWorkspaceAgentByInstanceID = `-- name: GetWorkspaceAgentByInstanceID :one
SELECT SELECT
id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, delay_login_until_ready, startup_script_timeout_seconds id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, login_before_ready, startup_script_timeout_seconds
FROM FROM
workspace_agents workspace_agents
WHERE WHERE
@ -4962,7 +4962,7 @@ func (q *sqlQuerier) GetWorkspaceAgentByInstanceID(ctx context.Context, authInst
&i.TroubleshootingURL, &i.TroubleshootingURL,
&i.MOTDFile, &i.MOTDFile,
&i.LifecycleState, &i.LifecycleState,
&i.DelayLoginUntilReady, &i.LoginBeforeReady,
&i.StartupScriptTimeoutSeconds, &i.StartupScriptTimeoutSeconds,
) )
return i, err return i, err
@ -4970,7 +4970,7 @@ func (q *sqlQuerier) GetWorkspaceAgentByInstanceID(ctx context.Context, authInst
const getWorkspaceAgentsByResourceIDs = `-- name: GetWorkspaceAgentsByResourceIDs :many const getWorkspaceAgentsByResourceIDs = `-- name: GetWorkspaceAgentsByResourceIDs :many
SELECT SELECT
id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, delay_login_until_ready, startup_script_timeout_seconds id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, login_before_ready, startup_script_timeout_seconds
FROM FROM
workspace_agents workspace_agents
WHERE WHERE
@ -5010,7 +5010,7 @@ func (q *sqlQuerier) GetWorkspaceAgentsByResourceIDs(ctx context.Context, ids []
&i.TroubleshootingURL, &i.TroubleshootingURL,
&i.MOTDFile, &i.MOTDFile,
&i.LifecycleState, &i.LifecycleState,
&i.DelayLoginUntilReady, &i.LoginBeforeReady,
&i.StartupScriptTimeoutSeconds, &i.StartupScriptTimeoutSeconds,
); err != nil { ); err != nil {
return nil, err return nil, err
@ -5027,7 +5027,7 @@ func (q *sqlQuerier) GetWorkspaceAgentsByResourceIDs(ctx context.Context, ids []
} }
const getWorkspaceAgentsCreatedAfter = `-- name: GetWorkspaceAgentsCreatedAfter :many const getWorkspaceAgentsCreatedAfter = `-- name: GetWorkspaceAgentsCreatedAfter :many
SELECT id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, delay_login_until_ready, startup_script_timeout_seconds FROM workspace_agents WHERE created_at > $1 SELECT id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, login_before_ready, startup_script_timeout_seconds FROM workspace_agents WHERE created_at > $1
` `
func (q *sqlQuerier) GetWorkspaceAgentsCreatedAfter(ctx context.Context, createdAt time.Time) ([]WorkspaceAgent, error) { func (q *sqlQuerier) GetWorkspaceAgentsCreatedAfter(ctx context.Context, createdAt time.Time) ([]WorkspaceAgent, error) {
@ -5063,7 +5063,7 @@ func (q *sqlQuerier) GetWorkspaceAgentsCreatedAfter(ctx context.Context, created
&i.TroubleshootingURL, &i.TroubleshootingURL,
&i.MOTDFile, &i.MOTDFile,
&i.LifecycleState, &i.LifecycleState,
&i.DelayLoginUntilReady, &i.LoginBeforeReady,
&i.StartupScriptTimeoutSeconds, &i.StartupScriptTimeoutSeconds,
); err != nil { ); err != nil {
return nil, err return nil, err
@ -5099,11 +5099,11 @@ INSERT INTO
connection_timeout_seconds, connection_timeout_seconds,
troubleshooting_url, troubleshooting_url,
motd_file, motd_file,
delay_login_until_ready, login_before_ready,
startup_script_timeout_seconds startup_script_timeout_seconds
) )
VALUES VALUES
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19) RETURNING id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, delay_login_until_ready, startup_script_timeout_seconds ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19) RETURNING id, created_at, updated_at, name, first_connected_at, last_connected_at, disconnected_at, resource_id, auth_token, auth_instance_id, architecture, environment_variables, operating_system, startup_script, instance_metadata, resource_metadata, directory, version, last_connected_replica_id, connection_timeout_seconds, troubleshooting_url, motd_file, lifecycle_state, login_before_ready, startup_script_timeout_seconds
` `
type InsertWorkspaceAgentParams struct { type InsertWorkspaceAgentParams struct {
@ -5124,7 +5124,7 @@ type InsertWorkspaceAgentParams struct {
ConnectionTimeoutSeconds int32 `db:"connection_timeout_seconds" json:"connection_timeout_seconds"` ConnectionTimeoutSeconds int32 `db:"connection_timeout_seconds" json:"connection_timeout_seconds"`
TroubleshootingURL string `db:"troubleshooting_url" json:"troubleshooting_url"` TroubleshootingURL string `db:"troubleshooting_url" json:"troubleshooting_url"`
MOTDFile string `db:"motd_file" json:"motd_file"` MOTDFile string `db:"motd_file" json:"motd_file"`
DelayLoginUntilReady bool `db:"delay_login_until_ready" json:"delay_login_until_ready"` LoginBeforeReady bool `db:"login_before_ready" json:"login_before_ready"`
StartupScriptTimeoutSeconds int32 `db:"startup_script_timeout_seconds" json:"startup_script_timeout_seconds"` StartupScriptTimeoutSeconds int32 `db:"startup_script_timeout_seconds" json:"startup_script_timeout_seconds"`
} }
@ -5147,7 +5147,7 @@ func (q *sqlQuerier) InsertWorkspaceAgent(ctx context.Context, arg InsertWorkspa
arg.ConnectionTimeoutSeconds, arg.ConnectionTimeoutSeconds,
arg.TroubleshootingURL, arg.TroubleshootingURL,
arg.MOTDFile, arg.MOTDFile,
arg.DelayLoginUntilReady, arg.LoginBeforeReady,
arg.StartupScriptTimeoutSeconds, arg.StartupScriptTimeoutSeconds,
) )
var i WorkspaceAgent var i WorkspaceAgent
@ -5175,7 +5175,7 @@ func (q *sqlQuerier) InsertWorkspaceAgent(ctx context.Context, arg InsertWorkspa
&i.TroubleshootingURL, &i.TroubleshootingURL,
&i.MOTDFile, &i.MOTDFile,
&i.LifecycleState, &i.LifecycleState,
&i.DelayLoginUntilReady, &i.LoginBeforeReady,
&i.StartupScriptTimeoutSeconds, &i.StartupScriptTimeoutSeconds,
) )
return i, err return i, err

View File

@ -57,7 +57,7 @@ INSERT INTO
connection_timeout_seconds, connection_timeout_seconds,
troubleshooting_url, troubleshooting_url,
motd_file, motd_file,
delay_login_until_ready, login_before_ready,
startup_script_timeout_seconds startup_script_timeout_seconds
) )
VALUES VALUES

View File

@ -972,7 +972,7 @@ func InsertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
ConnectionTimeoutSeconds: prAgent.GetConnectionTimeoutSeconds(), ConnectionTimeoutSeconds: prAgent.GetConnectionTimeoutSeconds(),
TroubleshootingURL: prAgent.GetTroubleshootingUrl(), TroubleshootingURL: prAgent.GetTroubleshootingUrl(),
MOTDFile: prAgent.GetMotdFile(), MOTDFile: prAgent.GetMotdFile(),
DelayLoginUntilReady: prAgent.GetDelayLoginUntilReady(), LoginBeforeReady: prAgent.GetLoginBeforeReady(),
StartupScriptTimeoutSeconds: prAgent.GetStartupScriptTimeoutSeconds(), StartupScriptTimeoutSeconds: prAgent.GetStartupScriptTimeoutSeconds(),
}) })
if err != nil { if err != nil {

View File

@ -785,7 +785,7 @@ func convertWorkspaceAgent(derpMap *tailcfg.DERPMap, coordinator tailnet.Coordin
ConnectionTimeoutSeconds: dbAgent.ConnectionTimeoutSeconds, ConnectionTimeoutSeconds: dbAgent.ConnectionTimeoutSeconds,
TroubleshootingURL: troubleshootingURL, TroubleshootingURL: troubleshootingURL,
LifecycleState: codersdk.WorkspaceAgentLifecycle(dbAgent.LifecycleState), LifecycleState: codersdk.WorkspaceAgentLifecycle(dbAgent.LifecycleState),
DelayLoginUntilReady: dbAgent.DelayLoginUntilReady, LoginBeforeReady: dbAgent.LoginBeforeReady,
StartupScriptTimeoutSeconds: dbAgent.StartupScriptTimeoutSeconds, StartupScriptTimeoutSeconds: dbAgent.StartupScriptTimeoutSeconds,
} }
node := coordinator.Node(dbAgent.ID) node := coordinator.Node(dbAgent.ID)

View File

@ -77,8 +77,8 @@ type WorkspaceAgent struct {
DERPLatency map[string]DERPRegion `json:"latency,omitempty"` DERPLatency map[string]DERPRegion `json:"latency,omitempty"`
ConnectionTimeoutSeconds int32 `json:"connection_timeout_seconds"` ConnectionTimeoutSeconds int32 `json:"connection_timeout_seconds"`
TroubleshootingURL string `json:"troubleshooting_url"` TroubleshootingURL string `json:"troubleshooting_url"`
// DelayLoginUntilReady if true, the agent will delay logins until it is ready (e.g. executing startup script has ended). // LoginBeforeReady if true, the agent will delay logins until it is ready (e.g. executing startup script has ended).
DelayLoginUntilReady bool `db:"delay_login_until_ready" json:"delay_login_until_ready"` LoginBeforeReady bool `db:"login_before_ready" json:"login_before_ready"`
// StartupScriptTimeoutSeconds is the number of seconds to wait for the startup script to complete. If the script does not complete within this time, the agent lifecycle will be marked as start_timeout. // StartupScriptTimeoutSeconds is the number of seconds to wait for the startup script to complete. If the script does not complete within this time, the agent lifecycle will be marked as start_timeout.
StartupScriptTimeoutSeconds int32 `db:"startup_script_timeout_seconds" json:"startup_script_timeout_seconds"` StartupScriptTimeoutSeconds int32 `db:"startup_script_timeout_seconds" json:"startup_script_timeout_seconds"`
} }

View File

@ -484,7 +484,6 @@ curl -X GET http://coder-server:8080/api/v2/workspaceagents/{workspaceagent} \
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -506,6 +505,7 @@ curl -X GET http://coder-server:8080/api/v2/workspaceagents/{workspaceagent} \
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",

View File

@ -76,7 +76,6 @@ curl -X GET http://coder-server:8080/api/v2/users/{user}/workspace/{workspacenam
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -98,6 +97,7 @@ curl -X GET http://coder-server:8080/api/v2/users/{user}/workspace/{workspacenam
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -221,7 +221,6 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild} \
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -243,6 +242,7 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild} \
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -509,7 +509,6 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild}/res
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -531,6 +530,7 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild}/res
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -594,7 +594,6 @@ Status Code **200**
| `»» architecture` | string | false | | | | `»» architecture` | string | false | | |
| `»» connection_timeout_seconds` | integer | false | | | | `»» connection_timeout_seconds` | integer | false | | |
| `»» created_at` | string(date-time) | false | | | | `»» created_at` | string(date-time) | false | | |
| `»» delay_login_until_ready` | boolean | false | | »delay login until ready if true, the agent will delay logins until it is ready (e.g. executing startup script has ended). |
| `»» directory` | string | false | | | | `»» directory` | string | false | | |
| `»» disconnected_at` | string(date-time) | false | | | | `»» disconnected_at` | string(date-time) | false | | |
| `»» environment_variables` | object | false | | | | `»» environment_variables` | object | false | | |
@ -608,6 +607,7 @@ Status Code **200**
| `»»»» latency_ms` | number | false | | | | `»»»» latency_ms` | number | false | | |
| `»»»» preferred` | boolean | false | | | | `»»»» preferred` | boolean | false | | |
| `»» lifecycle_state` | [codersdk.WorkspaceAgentLifecycle](schemas.md#codersdkworkspaceagentlifecycle) | false | | | | `»» lifecycle_state` | [codersdk.WorkspaceAgentLifecycle](schemas.md#codersdkworkspaceagentlifecycle) | false | | |
| `»» login_before_ready` | boolean | false | | »login before ready if true, the agent will delay logins until it is ready (e.g. executing startup script has ended). |
| `»» name` | string | false | | | | `»» name` | string | false | | |
| `»» operating_system` | string | false | | | | `»» operating_system` | string | false | | |
| `»» resource_id` | string(uuid) | false | | | | `»» resource_id` | string(uuid) | false | | |
@ -731,7 +731,6 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild}/sta
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -753,6 +752,7 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild}/sta
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -881,7 +881,6 @@ curl -X GET http://coder-server:8080/api/v2/workspaces/{workspace}/builds \
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -903,6 +902,7 @@ curl -X GET http://coder-server:8080/api/v2/workspaces/{workspace}/builds \
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -998,7 +998,6 @@ Status Code **200**
| `»»» architecture` | string | false | | | | `»»» architecture` | string | false | | |
| `»»» connection_timeout_seconds` | integer | false | | | | `»»» connection_timeout_seconds` | integer | false | | |
| `»»» created_at` | string(date-time) | false | | | | `»»» created_at` | string(date-time) | false | | |
| `»»» delay_login_until_ready` | boolean | false | | »»delay login until ready if true, the agent will delay logins until it is ready (e.g. executing startup script has ended). |
| `»»» directory` | string | false | | | | `»»» directory` | string | false | | |
| `»»» disconnected_at` | string(date-time) | false | | | | `»»» disconnected_at` | string(date-time) | false | | |
| `»»» environment_variables` | object | false | | | | `»»» environment_variables` | object | false | | |
@ -1012,6 +1011,7 @@ Status Code **200**
| `»»»»» latency_ms` | number | false | | | | `»»»»» latency_ms` | number | false | | |
| `»»»»» preferred` | boolean | false | | | | `»»»»» preferred` | boolean | false | | |
| `»»» lifecycle_state` | [codersdk.WorkspaceAgentLifecycle](schemas.md#codersdkworkspaceagentlifecycle) | false | | | | `»»» lifecycle_state` | [codersdk.WorkspaceAgentLifecycle](schemas.md#codersdkworkspaceagentlifecycle) | false | | |
| `»»» login_before_ready` | boolean | false | | »»login before ready if true, the agent will delay logins until it is ready (e.g. executing startup script has ended). |
| `»»» name` | string | false | | | | `»»» name` | string | false | | |
| `»»» operating_system` | string | false | | | | `»»» operating_system` | string | false | | |
| `»»» resource_id` | string(uuid) | false | | | | `»»» resource_id` | string(uuid) | false | | |
@ -1195,7 +1195,6 @@ curl -X POST http://coder-server:8080/api/v2/workspaces/{workspace}/builds \
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -1217,6 +1216,7 @@ curl -X POST http://coder-server:8080/api/v2/workspaces/{workspace}/builds \
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",

View File

@ -4615,7 +4615,6 @@ Parameter represents a set value for the scope.
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -4637,6 +4636,7 @@ Parameter represents a set value for the scope.
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -4737,7 +4737,6 @@ Parameter represents a set value for the scope.
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -4759,6 +4758,7 @@ Parameter represents a set value for the scope.
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -4779,7 +4779,6 @@ Parameter represents a set value for the scope.
| `architecture` | string | false | | | | `architecture` | string | false | | |
| `connection_timeout_seconds` | integer | false | | | | `connection_timeout_seconds` | integer | false | | |
| `created_at` | string | false | | | | `created_at` | string | false | | |
| `delay_login_until_ready` | boolean | false | | Delay login until ready if true, the agent will delay logins until it is ready (e.g. executing startup script has ended). |
| `directory` | string | false | | | | `directory` | string | false | | |
| `disconnected_at` | string | false | | | | `disconnected_at` | string | false | | |
| `environment_variables` | object | false | | | | `environment_variables` | object | false | | |
@ -4791,6 +4790,7 @@ Parameter represents a set value for the scope.
| `latency` | object | false | | Latency is mapped by region name (e.g. "New York City", "Seattle"). | | `latency` | object | false | | Latency is mapped by region name (e.g. "New York City", "Seattle"). |
| » `[any property]` | [codersdk.DERPRegion](#codersdkderpregion) | false | | | | » `[any property]` | [codersdk.DERPRegion](#codersdkderpregion) | false | | |
| `lifecycle_state` | [codersdk.WorkspaceAgentLifecycle](#codersdkworkspaceagentlifecycle) | false | | | | `lifecycle_state` | [codersdk.WorkspaceAgentLifecycle](#codersdkworkspaceagentlifecycle) | false | | |
| `login_before_ready` | boolean | false | | Login before ready if true, the agent will delay logins until it is ready (e.g. executing startup script has ended). |
| `name` | string | false | | | | `name` | string | false | | |
| `operating_system` | string | false | | | | `operating_system` | string | false | | |
| `resource_id` | string | false | | | | `resource_id` | string | false | | |
@ -5166,7 +5166,6 @@ Parameter represents a set value for the scope.
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -5188,6 +5187,7 @@ Parameter represents a set value for the scope.
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -5334,7 +5334,6 @@ Parameter represents a set value for the scope.
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -5356,6 +5355,7 @@ Parameter represents a set value for the scope.
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -5524,7 +5524,6 @@ Parameter represents a set value for the scope.
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -5546,6 +5545,7 @@ Parameter represents a set value for the scope.
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",

View File

@ -1564,7 +1564,6 @@ curl -X GET http://coder-server:8080/api/v2/templateversions/{templateversion}/d
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -1586,6 +1585,7 @@ curl -X GET http://coder-server:8080/api/v2/templateversions/{templateversion}/d
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -1649,7 +1649,6 @@ Status Code **200**
| `»» architecture` | string | false | | | | `»» architecture` | string | false | | |
| `»» connection_timeout_seconds` | integer | false | | | | `»» connection_timeout_seconds` | integer | false | | |
| `»» created_at` | string(date-time) | false | | | | `»» created_at` | string(date-time) | false | | |
| `»» delay_login_until_ready` | boolean | false | | »delay login until ready if true, the agent will delay logins until it is ready (e.g. executing startup script has ended). |
| `»» directory` | string | false | | | | `»» directory` | string | false | | |
| `»» disconnected_at` | string(date-time) | false | | | | `»» disconnected_at` | string(date-time) | false | | |
| `»» environment_variables` | object | false | | | | `»» environment_variables` | object | false | | |
@ -1663,6 +1662,7 @@ Status Code **200**
| `»»»» latency_ms` | number | false | | | | `»»»» latency_ms` | number | false | | |
| `»»»» preferred` | boolean | false | | | | `»»»» preferred` | boolean | false | | |
| `»» lifecycle_state` | [codersdk.WorkspaceAgentLifecycle](schemas.md#codersdkworkspaceagentlifecycle) | false | | | | `»» lifecycle_state` | [codersdk.WorkspaceAgentLifecycle](schemas.md#codersdkworkspaceagentlifecycle) | false | | |
| `»» login_before_ready` | boolean | false | | »login before ready if true, the agent will delay logins until it is ready (e.g. executing startup script has ended). |
| `»» name` | string | false | | | | `»» name` | string | false | | |
| `»» operating_system` | string | false | | | | `»» operating_system` | string | false | | |
| `»» resource_id` | string(uuid) | false | | | | `»» resource_id` | string(uuid) | false | | |
@ -1916,7 +1916,6 @@ curl -X GET http://coder-server:8080/api/v2/templateversions/{templateversion}/r
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -1938,6 +1937,7 @@ curl -X GET http://coder-server:8080/api/v2/templateversions/{templateversion}/r
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -2001,7 +2001,6 @@ Status Code **200**
| `»» architecture` | string | false | | | | `»» architecture` | string | false | | |
| `»» connection_timeout_seconds` | integer | false | | | | `»» connection_timeout_seconds` | integer | false | | |
| `»» created_at` | string(date-time) | false | | | | `»» created_at` | string(date-time) | false | | |
| `»» delay_login_until_ready` | boolean | false | | »delay login until ready if true, the agent will delay logins until it is ready (e.g. executing startup script has ended). |
| `»» directory` | string | false | | | | `»» directory` | string | false | | |
| `»» disconnected_at` | string(date-time) | false | | | | `»» disconnected_at` | string(date-time) | false | | |
| `»» environment_variables` | object | false | | | | `»» environment_variables` | object | false | | |
@ -2015,6 +2014,7 @@ Status Code **200**
| `»»»» latency_ms` | number | false | | | | `»»»» latency_ms` | number | false | | |
| `»»»» preferred` | boolean | false | | | | `»»»» preferred` | boolean | false | | |
| `»» lifecycle_state` | [codersdk.WorkspaceAgentLifecycle](schemas.md#codersdkworkspaceagentlifecycle) | false | | | | `»» lifecycle_state` | [codersdk.WorkspaceAgentLifecycle](schemas.md#codersdkworkspaceagentlifecycle) | false | | |
| `»» login_before_ready` | boolean | false | | »login before ready if true, the agent will delay logins until it is ready (e.g. executing startup script has ended). |
| `»» name` | string | false | | | | `»» name` | string | false | | |
| `»» operating_system` | string | false | | | | `»» operating_system` | string | false | | |
| `»» resource_id` | string(uuid) | false | | | | `»» resource_id` | string(uuid) | false | | |

View File

@ -80,7 +80,6 @@ curl -X POST http://coder-server:8080/api/v2/organizations/{organization}/member
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -102,6 +101,7 @@ curl -X POST http://coder-server:8080/api/v2/organizations/{organization}/member
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -244,7 +244,6 @@ curl -X GET http://coder-server:8080/api/v2/users/{user}/workspace/{workspacenam
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -266,6 +265,7 @@ curl -X GET http://coder-server:8080/api/v2/users/{user}/workspace/{workspacenam
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -427,7 +427,6 @@ curl -X GET http://coder-server:8080/api/v2/workspaces \
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -449,6 +448,7 @@ curl -X GET http://coder-server:8080/api/v2/workspaces \
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
@ -592,7 +592,6 @@ curl -X GET http://coder-server:8080/api/v2/workspaces/{workspace} \
"architecture": "string", "architecture": "string",
"connection_timeout_seconds": 0, "connection_timeout_seconds": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"delay_login_until_ready": true,
"directory": "string", "directory": "string",
"disconnected_at": "2019-08-24T14:15:22Z", "disconnected_at": "2019-08-24T14:15:22Z",
"environment_variables": { "environment_variables": {
@ -614,6 +613,7 @@ curl -X GET http://coder-server:8080/api/v2/workspaces/{workspace} \
} }
}, },
"lifecycle_state": "created", "lifecycle_state": "created",
"login_before_ready": true,
"name": "string", "name": "string",
"operating_system": "string", "operating_system": "string",
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f", "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",

View File

@ -16,7 +16,7 @@ coder ssh <workspace> [flags]
-h, --help help for ssh -h, --help help for ssh
--identity-agent string Specifies which identity agent to use (overrides $SSH_AUTH_SOCK), forward agent must also be enabled. --identity-agent string Specifies which identity agent to use (overrides $SSH_AUTH_SOCK), forward agent must also be enabled.
Consumes $CODER_SSH_IDENTITY_AGENT Consumes $CODER_SSH_IDENTITY_AGENT
--no-wait Specifies whether to wait for a workspace to become ready before logging in (only applicable when the delay login until ready option is enabled). Note that the workspace agent may still be in the process of executing the startup script and the workspace may be in an incomplete state. --no-wait Specifies whether to wait for a workspace to become ready before logging in (only applicable when the login before ready option has not been enabled). Note that the workspace agent may still be in the process of executing the startup script and the workspace may be in an incomplete state.
Consumes $CODER_SSH_NO_WAIT Consumes $CODER_SSH_NO_WAIT
--stdio Specifies whether to emit SSH output over stdin/stdout. --stdio Specifies whether to emit SSH output over stdin/stdout.
Consumes $CODER_SSH_STDIO Consumes $CODER_SSH_STDIO

View File

@ -27,7 +27,7 @@ type agentAttributes struct {
ConnectionTimeoutSeconds int32 `mapstructure:"connection_timeout"` ConnectionTimeoutSeconds int32 `mapstructure:"connection_timeout"`
TroubleshootingURL string `mapstructure:"troubleshooting_url"` TroubleshootingURL string `mapstructure:"troubleshooting_url"`
MOTDFile string `mapstructure:"motd_file"` MOTDFile string `mapstructure:"motd_file"`
DelayLoginUntilReady bool `mapstructure:"delay_login_until_ready"` LoginBeforeReady bool `mapstructure:"login_before_ready"`
StartupScriptTimeoutSeconds int32 `mapstructure:"startup_script_timeout"` StartupScriptTimeoutSeconds int32 `mapstructure:"startup_script_timeout"`
} }
@ -123,6 +123,12 @@ func ConvertResourcesAndParameters(modules []*tfjson.StateModule, rawGraph strin
} }
agentNames[tfResource.Name] = struct{}{} agentNames[tfResource.Name] = struct{}{}
// Handling for provider pre-v0.6.10.
loginBeforeReady := true
if _, ok := tfResource.AttributeValues["login_before_ready"]; ok {
loginBeforeReady = attrs.LoginBeforeReady
}
agent := &proto.Agent{ agent := &proto.Agent{
Name: tfResource.Name, Name: tfResource.Name,
Id: attrs.ID, Id: attrs.ID,
@ -134,7 +140,7 @@ func ConvertResourcesAndParameters(modules []*tfjson.StateModule, rawGraph strin
ConnectionTimeoutSeconds: attrs.ConnectionTimeoutSeconds, ConnectionTimeoutSeconds: attrs.ConnectionTimeoutSeconds,
TroubleshootingUrl: attrs.TroubleshootingURL, TroubleshootingUrl: attrs.TroubleshootingURL,
MotdFile: attrs.MOTDFile, MotdFile: attrs.MOTDFile,
DelayLoginUntilReady: attrs.DelayLoginUntilReady, LoginBeforeReady: loginBeforeReady,
StartupScriptTimeoutSeconds: attrs.StartupScriptTimeoutSeconds, StartupScriptTimeoutSeconds: attrs.StartupScriptTimeoutSeconds,
} }
switch attrs.Auth { switch attrs.Auth {

View File

@ -41,6 +41,7 @@ func TestConvertResources(t *testing.T) {
OperatingSystem: "linux", OperatingSystem: "linux",
Architecture: "amd64", Architecture: "amd64",
Auth: &proto.Agent_Token{}, Auth: &proto.Agent_Token{},
LoginBeforeReady: true,
ConnectionTimeoutSeconds: 120, ConnectionTimeoutSeconds: 120,
}}, }},
}}, }},
@ -57,6 +58,7 @@ func TestConvertResources(t *testing.T) {
OperatingSystem: "linux", OperatingSystem: "linux",
Architecture: "amd64", Architecture: "amd64",
Auth: &proto.Agent_Token{}, Auth: &proto.Agent_Token{},
LoginBeforeReady: true,
ConnectionTimeoutSeconds: 120, ConnectionTimeoutSeconds: 120,
}}, }},
}, { }, {
@ -74,6 +76,7 @@ func TestConvertResources(t *testing.T) {
OperatingSystem: "linux", OperatingSystem: "linux",
Architecture: "amd64", Architecture: "amd64",
Auth: &proto.Agent_InstanceId{}, Auth: &proto.Agent_InstanceId{},
LoginBeforeReady: true,
ConnectionTimeoutSeconds: 120, ConnectionTimeoutSeconds: 120,
}}, }},
}}, }},
@ -89,6 +92,7 @@ func TestConvertResources(t *testing.T) {
OperatingSystem: "linux", OperatingSystem: "linux",
Architecture: "amd64", Architecture: "amd64",
Auth: &proto.Agent_Token{}, Auth: &proto.Agent_Token{},
LoginBeforeReady: true,
ConnectionTimeoutSeconds: 120, ConnectionTimeoutSeconds: 120,
}}, }},
}}, }},
@ -105,7 +109,7 @@ func TestConvertResources(t *testing.T) {
Architecture: "amd64", Architecture: "amd64",
Auth: &proto.Agent_Token{}, Auth: &proto.Agent_Token{},
ConnectionTimeoutSeconds: 120, ConnectionTimeoutSeconds: 120,
DelayLoginUntilReady: false, LoginBeforeReady: true,
StartupScriptTimeoutSeconds: 300, StartupScriptTimeoutSeconds: 300,
}, { }, {
Name: "dev2", Name: "dev2",
@ -114,7 +118,7 @@ func TestConvertResources(t *testing.T) {
Auth: &proto.Agent_Token{}, Auth: &proto.Agent_Token{},
ConnectionTimeoutSeconds: 1, ConnectionTimeoutSeconds: 1,
MotdFile: "/etc/motd", MotdFile: "/etc/motd",
DelayLoginUntilReady: false, LoginBeforeReady: true,
StartupScriptTimeoutSeconds: 30, StartupScriptTimeoutSeconds: 30,
}, { }, {
Name: "dev3", Name: "dev3",
@ -123,7 +127,7 @@ func TestConvertResources(t *testing.T) {
Auth: &proto.Agent_Token{}, Auth: &proto.Agent_Token{},
ConnectionTimeoutSeconds: 120, ConnectionTimeoutSeconds: 120,
TroubleshootingUrl: "https://coder.com/troubleshoot", TroubleshootingUrl: "https://coder.com/troubleshoot",
DelayLoginUntilReady: true, LoginBeforeReady: false,
StartupScriptTimeoutSeconds: 300, StartupScriptTimeoutSeconds: 300,
}}, }},
}}, }},
@ -161,6 +165,7 @@ func TestConvertResources(t *testing.T) {
}, },
}, },
Auth: &proto.Agent_Token{}, Auth: &proto.Agent_Token{},
LoginBeforeReady: true,
ConnectionTimeoutSeconds: 120, ConnectionTimeoutSeconds: 120,
}}, }},
}}, }},
@ -234,6 +239,7 @@ func TestConvertResources(t *testing.T) {
}, },
}, },
Auth: &proto.Agent_Token{}, Auth: &proto.Agent_Token{},
LoginBeforeReady: true,
ConnectionTimeoutSeconds: 120, ConnectionTimeoutSeconds: 120,
}}, }},
}, },
@ -248,6 +254,7 @@ func TestConvertResources(t *testing.T) {
OperatingSystem: "windows", OperatingSystem: "windows",
Architecture: "arm64", Architecture: "arm64",
Auth: &proto.Agent_Token{}, Auth: &proto.Agent_Token{},
LoginBeforeReady: true,
ConnectionTimeoutSeconds: 120, ConnectionTimeoutSeconds: 120,
}}, }},
}}, }},

View File

@ -2,7 +2,7 @@ terraform {
required_providers { required_providers {
coder = { coder = {
source = "coder/coder" source = "coder/coder"
version = "0.6.7" version = "0.6.10"
} }
} }
} }
@ -13,19 +13,19 @@ resource "coder_agent" "dev1" {
} }
resource "coder_agent" "dev2" { resource "coder_agent" "dev2" {
os = "darwin" os = "darwin"
arch = "amd64" arch = "amd64"
connection_timeout = 1 connection_timeout = 1
motd_file = "/etc/motd" motd_file = "/etc/motd"
startup_script_timeout = 30 startup_script_timeout = 30
delay_login_until_ready = false login_before_ready = true
} }
resource "coder_agent" "dev3" { resource "coder_agent" "dev3" {
os = "windows" os = "windows"
arch = "arm64" arch = "arm64"
troubleshooting_url = "https://coder.com/troubleshoot" troubleshooting_url = "https://coder.com/troubleshoot"
delay_login_until_ready = true login_before_ready = false
} }
resource "null_resource" "dev" { resource "null_resource" "dev" {

View File

@ -15,9 +15,9 @@
"arch": "amd64", "arch": "amd64",
"auth": "token", "auth": "token",
"connection_timeout": 120, "connection_timeout": 120,
"delay_login_until_ready": false,
"dir": null, "dir": null,
"env": null, "env": null,
"login_before_ready": true,
"motd_file": null, "motd_file": null,
"os": "linux", "os": "linux",
"shutdown_script": null, "shutdown_script": null,
@ -38,9 +38,9 @@
"arch": "amd64", "arch": "amd64",
"auth": "token", "auth": "token",
"connection_timeout": 1, "connection_timeout": 1,
"delay_login_until_ready": false,
"dir": null, "dir": null,
"env": null, "env": null,
"login_before_ready": true,
"motd_file": "/etc/motd", "motd_file": "/etc/motd",
"os": "darwin", "os": "darwin",
"shutdown_script": null, "shutdown_script": null,
@ -61,9 +61,9 @@
"arch": "arm64", "arch": "arm64",
"auth": "token", "auth": "token",
"connection_timeout": 120, "connection_timeout": 120,
"delay_login_until_ready": true,
"dir": null, "dir": null,
"env": null, "env": null,
"login_before_ready": false,
"motd_file": null, "motd_file": null,
"os": "windows", "os": "windows",
"shutdown_script": null, "shutdown_script": null,
@ -104,9 +104,9 @@
"arch": "amd64", "arch": "amd64",
"auth": "token", "auth": "token",
"connection_timeout": 120, "connection_timeout": 120,
"delay_login_until_ready": false,
"dir": null, "dir": null,
"env": null, "env": null,
"login_before_ready": true,
"motd_file": null, "motd_file": null,
"os": "linux", "os": "linux",
"shutdown_script": null, "shutdown_script": null,
@ -140,9 +140,9 @@
"arch": "amd64", "arch": "amd64",
"auth": "token", "auth": "token",
"connection_timeout": 1, "connection_timeout": 1,
"delay_login_until_ready": false,
"dir": null, "dir": null,
"env": null, "env": null,
"login_before_ready": true,
"motd_file": "/etc/motd", "motd_file": "/etc/motd",
"os": "darwin", "os": "darwin",
"shutdown_script": null, "shutdown_script": null,
@ -176,9 +176,9 @@
"arch": "arm64", "arch": "arm64",
"auth": "token", "auth": "token",
"connection_timeout": 120, "connection_timeout": 120,
"delay_login_until_ready": true,
"dir": null, "dir": null,
"env": null, "env": null,
"login_before_ready": false,
"motd_file": null, "motd_file": null,
"os": "windows", "os": "windows",
"shutdown_script": null, "shutdown_script": null,
@ -224,7 +224,7 @@
"coder": { "coder": {
"name": "coder", "name": "coder",
"full_name": "registry.terraform.io/coder/coder", "full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.6.7" "version_constraint": "0.6.10"
}, },
"null": { "null": {
"name": "null", "name": "null",
@ -262,8 +262,8 @@
"connection_timeout": { "connection_timeout": {
"constant_value": 1 "constant_value": 1
}, },
"delay_login_until_ready": { "login_before_ready": {
"constant_value": false "constant_value": true
}, },
"motd_file": { "motd_file": {
"constant_value": "/etc/motd" "constant_value": "/etc/motd"
@ -287,8 +287,8 @@
"arch": { "arch": {
"constant_value": "arm64" "constant_value": "arm64"
}, },
"delay_login_until_ready": { "login_before_ready": {
"constant_value": true "constant_value": false
}, },
"os": { "os": {
"constant_value": "windows" "constant_value": "windows"

View File

@ -15,17 +15,17 @@
"arch": "amd64", "arch": "amd64",
"auth": "token", "auth": "token",
"connection_timeout": 120, "connection_timeout": 120,
"delay_login_until_ready": false,
"dir": null, "dir": null,
"env": null, "env": null,
"id": "8ba856b4-4aa9-4fbe-aa04-9af53dc93f08", "id": "6b912abe-50d4-48b2-be7c-1464ca69b5b9",
"init_script": "", "init_script": "",
"login_before_ready": true,
"motd_file": null, "motd_file": null,
"os": "linux", "os": "linux",
"shutdown_script": null, "shutdown_script": null,
"startup_script": null, "startup_script": null,
"startup_script_timeout": 300, "startup_script_timeout": 300,
"token": "c7f72bfa-c84c-4b52-898c-1c056a42141e", "token": "d296a9cd-6f7c-4c6b-b2f3-7a647512efe8",
"troubleshooting_url": null "troubleshooting_url": null
}, },
"sensitive_values": {} "sensitive_values": {}
@ -41,17 +41,17 @@
"arch": "amd64", "arch": "amd64",
"auth": "token", "auth": "token",
"connection_timeout": 1, "connection_timeout": 1,
"delay_login_until_ready": false,
"dir": null, "dir": null,
"env": null, "env": null,
"id": "3e79acd5-88f4-4de6-8145-a8e0e2b1129b", "id": "8a2956f7-d37b-441e-bf62-bd9a45316f6a",
"init_script": "", "init_script": "",
"login_before_ready": true,
"motd_file": "/etc/motd", "motd_file": "/etc/motd",
"os": "darwin", "os": "darwin",
"shutdown_script": null, "shutdown_script": null,
"startup_script": null, "startup_script": null,
"startup_script_timeout": 30, "startup_script_timeout": 30,
"token": "0e2fa4e7-df44-41c4-a6e4-9e46c6f5e441", "token": "b1e0fba4-5bba-439f-b3ea-3f6a8ba4d301",
"troubleshooting_url": null "troubleshooting_url": null
}, },
"sensitive_values": {} "sensitive_values": {}
@ -67,17 +67,17 @@
"arch": "arm64", "arch": "arm64",
"auth": "token", "auth": "token",
"connection_timeout": 120, "connection_timeout": 120,
"delay_login_until_ready": true,
"dir": null, "dir": null,
"env": null, "env": null,
"id": "c9df6531-41f4-4005-b1a7-b4c4712b117f", "id": "819b1b19-a709-463e-9aeb-5e1321b7af23",
"init_script": "", "init_script": "",
"login_before_ready": false,
"motd_file": null, "motd_file": null,
"os": "windows", "os": "windows",
"shutdown_script": null, "shutdown_script": null,
"startup_script": null, "startup_script": null,
"startup_script_timeout": 300, "startup_script_timeout": 300,
"token": "68f0e144-22ce-455f-be00-edef913f34a6", "token": "238ff017-12ae-403f-b3f8-4dea4dc87a7d",
"troubleshooting_url": "https://coder.com/troubleshoot" "troubleshooting_url": "https://coder.com/troubleshoot"
}, },
"sensitive_values": {} "sensitive_values": {}
@ -90,7 +90,7 @@
"provider_name": "registry.terraform.io/hashicorp/null", "provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0, "schema_version": 0,
"values": { "values": {
"id": "5895060021397476995", "id": "5288433022262248914",
"triggers": null "triggers": null
}, },
"sensitive_values": {}, "sensitive_values": {},

View File

@ -1025,7 +1025,7 @@ type Agent struct {
ConnectionTimeoutSeconds int32 `protobuf:"varint,11,opt,name=connection_timeout_seconds,json=connectionTimeoutSeconds,proto3" json:"connection_timeout_seconds,omitempty"` ConnectionTimeoutSeconds int32 `protobuf:"varint,11,opt,name=connection_timeout_seconds,json=connectionTimeoutSeconds,proto3" json:"connection_timeout_seconds,omitempty"`
TroubleshootingUrl string `protobuf:"bytes,12,opt,name=troubleshooting_url,json=troubleshootingUrl,proto3" json:"troubleshooting_url,omitempty"` TroubleshootingUrl string `protobuf:"bytes,12,opt,name=troubleshooting_url,json=troubleshootingUrl,proto3" json:"troubleshooting_url,omitempty"`
MotdFile string `protobuf:"bytes,13,opt,name=motd_file,json=motdFile,proto3" json:"motd_file,omitempty"` MotdFile string `protobuf:"bytes,13,opt,name=motd_file,json=motdFile,proto3" json:"motd_file,omitempty"`
DelayLoginUntilReady bool `protobuf:"varint,14,opt,name=delay_login_until_ready,json=delayLoginUntilReady,proto3" json:"delay_login_until_ready,omitempty"` LoginBeforeReady bool `protobuf:"varint,14,opt,name=login_before_ready,json=loginBeforeReady,proto3" json:"login_before_ready,omitempty"`
StartupScriptTimeoutSeconds int32 `protobuf:"varint,15,opt,name=startup_script_timeout_seconds,json=startupScriptTimeoutSeconds,proto3" json:"startup_script_timeout_seconds,omitempty"` StartupScriptTimeoutSeconds int32 `protobuf:"varint,15,opt,name=startup_script_timeout_seconds,json=startupScriptTimeoutSeconds,proto3" json:"startup_script_timeout_seconds,omitempty"`
} }
@ -1159,9 +1159,9 @@ func (x *Agent) GetMotdFile() string {
return "" return ""
} }
func (x *Agent) GetDelayLoginUntilReady() bool { func (x *Agent) GetLoginBeforeReady() bool {
if x != nil { if x != nil {
return x.DelayLoginUntilReady return x.LoginBeforeReady
} }
return false return false
} }
@ -2486,7 +2486,7 @@ var file_provisionersdk_proto_provisioner_proto_rawDesc = []byte{
0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x75, 0x74, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x75, 0x74,
0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
0x49, 0x64, 0x22, 0x97, 0x05, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x22, 0x8e, 0x05, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04,
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x12, 0x2d, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x12, 0x2d, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
@ -2516,188 +2516,188 @@ var file_provisionersdk_proto_provisioner_proto_rawDesc = []byte{
0x12, 0x74, 0x72, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x73, 0x68, 0x6f, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x74, 0x72, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x73, 0x68, 0x6f, 0x6f, 0x74, 0x69, 0x6e, 0x67,
0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x6f, 0x74, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x6f, 0x74, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65,
0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6f, 0x74, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6f, 0x74, 0x64, 0x46, 0x69, 0x6c, 0x65,
0x12, 0x35, 0x0a, 0x17, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65,
0x75, 0x6e, 0x74, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, 0x6f,
0x08, 0x52, 0x14, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x6e, 0x74, 0x67, 0x69, 0x6e, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x43,
0x69, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x43, 0x0a, 0x1e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x0a, 0x1e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
0x75, 0x70, 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73,
0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x53,
0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x54, 0x69, 0x63, 0x72, 0x69, 0x70, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f,
0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x1a, 0x36, 0x0a, 0x08, 0x6e, 0x64, 0x73, 0x1a, 0x36, 0x0a, 0x08, 0x45, 0x6e, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
0x45, 0x6e, 0x76, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x61,
0x3a, 0x02, 0x38, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x22, 0xb5, 0x02, 0x0a, 0x75, 0x74, 0x68, 0x22, 0xb5, 0x02, 0x0a, 0x03, 0x41, 0x70, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73,
0x03, 0x41, 0x70, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x18, 0x01, 0x20, 0x01, 0x6c, 0x75, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x12,
0x28, 0x09, 0x52, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61,
0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20,
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03,
0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12,
0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63,
0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18,
0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
0x73, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x3a, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x12, 0x3a, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18,
0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6e, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x52,
0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x41, 0x0a, 0x0d,
0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x41, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x08, 0x20,
0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65,
0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x68, 0x72, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x76, 0x65,
0x61, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x6c, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12,
0x69, 0x6e, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28,
0x72, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x08, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x22, 0x59, 0x0a, 0x0b, 0x48,
0x72, 0x6e, 0x61, 0x6c, 0x22, 0x59, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72,
0x65, 0x63, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08,
0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08,
0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65,
0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x68, 0x72,
0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0xf1, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75,
0xf1, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18,
0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x61,
0x74, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52,
0x65, 0x72, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
0x12, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x76,
0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
0x68, 0x69, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x68, 0x69, 0x64, 0x65, 0x08, 0x52, 0x04, 0x68, 0x69, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18,
0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x69,
0x69, 0x63, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01,
0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65,
0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x69, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x08,
0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x64, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x73, 0x74, 0x1a,
0x61, 0x69, 0x6c, 0x79, 0x43, 0x6f, 0x73, 0x74, 0x1a, 0x69, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x69, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6b,
0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65,
0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76,
0x09, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01,
0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4e, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x22, 0xfc, 0x01, 0x0a, 0x05, 0x50,
0x75, 0x6c, 0x6c, 0x22, 0xfc, 0x01, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x73, 0x65, 0x1a, 0x27, 0x0a, 0x61, 0x72, 0x73, 0x65, 0x1a, 0x27, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01,
0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x1a, 0x55, 0x0a,
0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x1a, 0x55, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x08, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x49, 0x0a, 0x11, 0x70, 0x61, 0x72,
0x74, 0x65, 0x12, 0x49, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x02,
0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65,
0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x10, 0x70, 0x61, 0x72, 0x6d, 0x61, 0x52, 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x63, 0x68,
0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x1a, 0x73, 0x0a, 0x65, 0x6d, 0x61, 0x73, 0x1a, 0x73, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x24, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x67, 0x48,
0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x67, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x00, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x39, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
0x39, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69,
0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6d,
0x50, 0x61, 0x72, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x00, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x82, 0x0a, 0x0a, 0x09, 0x50, 0x72,
0x70, 0x65, 0x22, 0x82, 0x0a, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xd1, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61,
0x1a, 0xd1, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72,
0x09, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x55, 0x72,
0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x53, 0x0a, 0x14, 0x77, 0x6f, 0x6c, 0x12, 0x53, 0x0a, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x74,
0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x57, 0x6f,
0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f,
0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x77, 0x6f, 0x72, 0x6b, 0x6e, 0x52, 0x13, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e,
0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70,
0x25, 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a,
0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72,
0x61, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70,
0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f,
0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x77, 0x6f, 0x72,
0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65,
0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x77, 0x6f, 0x72, 0x6b, 0x73,
0x12, 0x32, 0x0a, 0x15, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c,
0x6e, 0x65, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
0x13, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x45, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x1a, 0x79, 0x0a, 0x06, 0x43,
0x6d, 0x61, 0x69, 0x6c, 0x1a, 0x79, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f,
0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74,
0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01,
0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, 0x61, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74,
0x74, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73,
0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65,
0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xda, 0x01, 0x0a, 0x04, 0x50, 0x6c, 0x61, 0x6e, 0x12,
0xda, 0x01, 0x0a, 0x04, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x35, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69,
0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
0x46, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x76,
0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x15, 0x72, 0x69, 0x63, 0x68, 0x5f,
0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69,
0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x69, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x69, 0x63, 0x68, 0x50, 0x61, 0x72,
0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x52, 0x0a, 0x05,
0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04,
0x70, 0x6c, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e,
0x1a, 0x08, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x1a, 0xb3, 0x01, 0x0a, 0x07, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6c, 0x61,
0x6e, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x12, 0x34, 0x0a, 0x05, 0x61, 0x70, 0x70,
0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69,
0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x48, 0x00, 0x52, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x12,
0x37, 0x0a, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72,
0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x48, 0x00, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06,
0x52, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x46, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
0x1a, 0xbb, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x74, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50,
0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x70,
0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x53,
0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x0a, 0x15, 0x72, 0x69, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e,
0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x69, 0x63, 0x68,
0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13,
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x72, 0x69, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c,
0x2e, 0x52, 0x69, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x75, 0x65, 0x73, 0x1a, 0x52, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x35, 0x0a, 0x06,
0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70,
0x61, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x1a, 0x77, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69,
0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x03, 0x6c, 0x6f, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e,
0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x67, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x0c, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x1a, 0x08, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65,
0x12, 0x3d, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x6c, 0x1a, 0xb3, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a,
0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72,
0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73,
0x65, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e,
0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x3f, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x00, 0x12, 0x09, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72,
0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x48, 0x00, 0x52,
0x4f, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c,
0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x2a, 0x3b, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x53, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69,
0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43,
0x57, 0x4e, 0x45, 0x52, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x42,
0x54, 0x49, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xbb, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x70,
0x4c, 0x49, 0x43, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x13, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20,
0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72,
0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x10, 0x02, 0x32, 0xa3, 0x12, 0x33, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20,
0x01, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x12, 0x42, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65,
0x0a, 0x05, 0x50, 0x61, 0x72, 0x73, 0x65, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f,
0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x76,
0x72, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x69, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61,
0x30, 0x01, 0x12, 0x50, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52,
0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x1a, 0x77, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x67,
0x28, 0x01, 0x30, 0x01, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c,
0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2f, 0x70, 0x65, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x76,
0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x6e, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f,
0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x3f,
0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52,
0x41, 0x43, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x01,
0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41,
0x52, 0x4e, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x2a,
0x3b, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x53, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x76,
0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x10, 0x00, 0x12, 0x11, 0x0a,
0x0d, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01,
0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x13,
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74,
0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x00, 0x12, 0x08,
0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x53, 0x54,
0x52, 0x4f, 0x59, 0x10, 0x02, 0x32, 0xa3, 0x01, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73,
0x69, 0x6f, 0x6e, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x73, 0x65, 0x12, 0x1a,
0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x72,
0x73, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f,
0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x2e, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x50, 0x0a, 0x09, 0x50, 0x72, 0x6f,
0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69,
0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69,
0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x2d, 0x5a, 0x2b, 0x67,
0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2f,
0x63, 0x6f, 0x64, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65,
0x72, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x33,
} }
var ( var (

View File

@ -117,7 +117,7 @@ message Agent {
int32 connection_timeout_seconds = 11; int32 connection_timeout_seconds = 11;
string troubleshooting_url = 12; string troubleshooting_url = 12;
string motd_file = 13; string motd_file = 13;
bool delay_login_until_ready = 14; bool login_before_ready = 14;
int32 startup_script_timeout_seconds = 15; int32 startup_script_timeout_seconds = 15;
} }

View File

@ -4,6 +4,7 @@ import (
"encoding/json" "encoding/json"
"log" "log"
"os" "os"
"os/user"
"path" "path"
"regexp" "regexp"
"strings" "strings"
@ -29,14 +30,26 @@ type manifest struct {
} }
func main() { func main() {
// Set default configs for the docs for _, env := range os.Environ() {
err := os.Setenv("CODER_CONFIG_DIR", "~/.config/coderv2") if strings.HasPrefix(env, "CODER_") {
if err != nil { split := strings.SplitN(env, "=", 2)
log.Fatal("Unable to set default value for CODER_CONFIG_DIR: ", err) if err := os.Unsetenv(split[0]); err != nil {
log.Fatal("Unable to unset ", split[0], ": ", err)
}
}
} }
err = os.Setenv("CODER_CACHE_DIRECTORY", "~/.cache/coder") for k, v := range map[string]string{
"CODER_CONFIG_DIR": "~/.config/coderv2",
"CODER_CACHE_DIRECTORY": "~/.cache/coder",
} {
if err := os.Setenv(k, v); err != nil {
log.Fatal("Unable to set default value for ", k, ": ", err)
}
}
u, err := user.Current()
if err != nil { if err != nil {
log.Fatal("Unable to set default value for CODER_CACHE_DIRECTORY: ", err) log.Fatal("Error on getting the current user: ", err)
} }
// Get the cmd CLI // Get the cmd CLI
@ -97,7 +110,10 @@ func main() {
} }
content = strings.ReplaceAll(content, dir, "<current-directory>") content = strings.ReplaceAll(content, dir, "<current-directory>")
err = os.WriteFile(filepath, []byte(content), 0644) // #nosec // Remove all absolute home paths.
content = strings.ReplaceAll(content, u.HomeDir, "~")
err = os.WriteFile(filepath, []byte(content), 0o644) // #nosec
if err != nil { if err != nil {
log.Fatal("Error on save file at ", filepath, ": ", err) log.Fatal("Error on save file at ", filepath, ": ", err)
} }
@ -127,7 +143,7 @@ func main() {
if err != nil { if err != nil {
log.Fatal("Error on marshal manifest.json: ", err) log.Fatal("Error on marshal manifest.json: ", err)
} }
err = os.WriteFile(manifestFilepath, manifestFile, 0644) // #nosec err = os.WriteFile(manifestFilepath, manifestFile, 0o644) // #nosec
if err != nil { if err != nil {
log.Fatal("Error on write update on manifest.json: ", err) log.Fatal("Error on write update on manifest.json: ", err)
} }

View File

@ -939,7 +939,7 @@ export interface WorkspaceAgent {
readonly latency?: Record<string, DERPRegion> readonly latency?: Record<string, DERPRegion>
readonly connection_timeout_seconds: number readonly connection_timeout_seconds: number
readonly troubleshooting_url: string readonly troubleshooting_url: string
readonly delay_login_until_ready: boolean readonly login_before_ready: boolean
readonly startup_script_timeout_seconds: number readonly startup_script_timeout_seconds: number
} }

View File

@ -136,31 +136,31 @@ const ConnectedStatus: React.FC<{
agent: WorkspaceAgent agent: WorkspaceAgent
}> = ({ agent }) => { }> = ({ agent }) => {
// NOTE(mafredri): Keep this behind feature flag for the time-being, // NOTE(mafredri): Keep this behind feature flag for the time-being,
// if delay_login_until_ready is true, the user has updated to // if login_before_ready is false, the user has updated to
// terraform-provider-coder v0.6.7 and opted in to the functionality. // terraform-provider-coder v0.6.10 and opted in to the functionality.
// //
// Remove check once documentation is in place and we do a breaking // Remove check once documentation is in place and we do a breaking
// release indicating startup script behavior has changed. // release indicating startup script behavior has changed.
// https://github.com/coder/coder/issues/5749 // https://github.com/coder/coder/issues/5749
if (agent.delay_login_until_ready) { if (agent.login_before_ready) {
return ( return <ReadyLifeCycle />
<ChooseOne>
<Cond condition={agent.lifecycle_state === "ready"}>
<ReadyLifeCycle />
</Cond>
<Cond condition={agent.lifecycle_state === "start_timeout"}>
<StartTimeoutLifecycle agent={agent} />
</Cond>
<Cond condition={agent.lifecycle_state === "start_error"}>
<StartErrorLifecycle agent={agent} />
</Cond>
<Cond>
<StartingLifecycle />
</Cond>
</ChooseOne>
)
} }
return <ReadyLifeCycle /> return (
<ChooseOne>
<Cond condition={agent.lifecycle_state === "ready"}>
<ReadyLifeCycle />
</Cond>
<Cond condition={agent.lifecycle_state === "start_timeout"}>
<StartTimeoutLifecycle agent={agent} />
</Cond>
<Cond condition={agent.lifecycle_state === "start_error"}>
<StartErrorLifecycle agent={agent} />
</Cond>
<Cond>
<StartingLifecycle />
</Cond>
</ChooseOne>
)
} }
const DisconnectedStatus: React.FC = () => { const DisconnectedStatus: React.FC = () => {

View File

@ -309,7 +309,7 @@ export const MockWorkspaceAgent: TypesGen.WorkspaceAgent = {
connection_timeout_seconds: 120, connection_timeout_seconds: 120,
troubleshooting_url: "https://coder.com/troubleshoot", troubleshooting_url: "https://coder.com/troubleshoot",
lifecycle_state: "starting", lifecycle_state: "starting",
delay_login_until_ready: true, login_before_ready: false,
startup_script_timeout_seconds: 120, startup_script_timeout_seconds: 120,
} }