Compare commits

...

22 Commits

Author SHA1 Message Date
Stephen Kirby 0cbe23bedf fixed script ref (#13647)
(cherry picked from commit 3d6c9799e3)
2024-06-24 16:27:25 +00:00
Steven Masley d6ca712713 chore: external auth validate response "Forbidden" should return invalid, not an error (#13446)
* chore: add unit test to delete workspace from suspended user
* chore: account for forbidden as well as unauthorized response codes

(cherry picked from commit 27f26910b6)
2024-06-24 16:20:30 +00:00
Kyle Carberry fefb4e655d fix: write server config to telemetry (#13590)
* fix: add external auth configs to telemetry

* Refactor telemetry to send the entire config

* gen

* Fix linting

(cherry picked from commit 3a1fa04590)
2024-06-21 19:03:35 +00:00
Kyle Carberry 62fdea0aa0 fix: display trial errors in the dashboard (#13601)
* fix: display trial errors in the dashboard

The error was essentially being ignored before!

* Remove day mention in product of trial

* fmt

(cherry picked from commit 7049d7a881)
2024-06-21 19:03:15 +00:00
Kyle Carberry 350c71b221 feat: add cross-origin reporting for telemetry in the dashboard (#13612)
* feat: add cross-origin reporting for telemetry in the dashboard

* Respect the telemetry flag

* Fix embedded metadata

* Fix compilation error

* Fix linting

(cherry picked from commit 0793a4b35b)
2024-06-21 19:03:10 +00:00
Kyle Carberry 203a182934 fix: track login page correctly (#13618)
(cherry picked from commit 495eea452f)
2024-06-21 19:03:04 +00:00
Kyle Carberry bfb4a8df11 fix: remove connected button (#13625)
It didn't make a lot of sense in current form. It will when we improve autostop.

(cherry picked from commit 3ef12ac284)
2024-06-21 19:02:58 +00:00
Mathias Fredriksson 9424fce5a5 chore(scripts): fix release promote stable to set latest tag (#13471)
(cherry picked from commit 9a757f8e74)
2024-06-21 19:02:30 +00:00
Mathias Fredriksson 9151f53591 chore(scripts): fix dry run for autoversion in release.sh (#13470)
(cherry picked from commit 3b7f9534fb)
2024-06-21 19:02:24 +00:00
Mathias Fredriksson 94c3dd8392 chore(scripts): fix unbound variable in tag_version.sh (#13428)
(cherry picked from commit a51076a4cd)
2024-06-21 19:02:18 +00:00
Mathias Fredriksson b8b2ed07b6 chore(scripts): fix expression interpreted as exit code on some Bash versions (#13417)
(cherry picked from commit 4758952ebc)
2024-06-21 19:02:12 +00:00
Mathias Fredriksson 360ff1c137 chore(scripts): add safety check for difference between dry run release notes (#13398)
(cherry picked from commit 9eb797eb5a)
2024-06-21 19:02:06 +00:00
Mathias Fredriksson 19b1390a3a chore(scripts): push version bump pr branch in release script (#13397)
(cherry picked from commit 9ae825ebae)
2024-06-21 19:01:57 +00:00
Mathias Fredriksson 4281e43090 chore(scripts): add custom gh auth to release script (#13396)
(cherry picked from commit 5fb231774c)
2024-06-21 19:01:38 +00:00
Mathias Fredriksson 66de7dd387 chore(scripts): handle renamed cherry-pick commits in release script (#13395)
(cherry picked from commit 374f0a0fd1)
2024-06-21 19:01:08 +00:00
Mathias Fredriksson c3221cec81 chore(scripts): fix stable release promote script (#13204)
(cherry picked from commit f66d0445da)
2024-06-21 19:00:56 +00:00
Colin Adler d53c94b32a fix: prevent stdlib logging from messing up ssh (#13161)
Fixes https://github.com/coder/coder/issues/13144

(cherry picked from commit 13dd526f11)
2024-05-22 18:12:23 +00:00
Mathias Fredriksson d31e07d605 chore(scripts): fix a few release script changelog issues (#13200)
(cherry picked from commit 0998cedb5c)
2024-05-22 18:10:18 +00:00
Kyle Carberry 9c5fc3bbbb fix: properly detect agent resouces in terraform (#13343)
Terraform changed the default output of the `terraform graph` command.
You must put `-type=plan` to keep the prior behavior.

(cherry picked from commit 3364abecdd)

Co-authored-by: Colin Adler <colin1adler@gmail.com>
2024-05-22 18:04:28 +00:00
Colin Adler d56514492b security: update git -> 2.43.4 and terraform -> 1.7.5 (#13299)
This fixes an RCE in git and gets us one minor version closer to fixing
a critical Terraform vulnerability. In the next release we'll bump to
1.8.x.

(cherry picked from commit 80538c079d)
2024-05-16 19:18:05 +00:00
Mathias Fredriksson 8979bfe059 ci: disable make test-migrations in release.yaml (#13201) 2024-05-07 17:30:19 +00:00
Colin Adler ebacced232 fix(enterprise): mark nodes from unhealthy coordinators as lost (#13123)
Instead of removing the mappings of unhealthy coordinators entirely,
mark them as lost instead. This prevents peers from disappearing from
other peers if a coordinator misses a heartbeat.
2024-05-06 19:47:44 +00:00
134 changed files with 1487 additions and 589 deletions
+1 -1
View File
@@ -7,5 +7,5 @@ runs:
- name: Install Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.5.7
terraform_version: 1.7.5
terraform_wrapper: false
+3
View File
@@ -183,6 +183,9 @@ jobs:
- name: Setup sqlc
uses: ./.github/actions/setup-sqlc
- name: Setup Terraform
uses: ./.github/actions/setup-tf
- name: go install tools
run: |
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.30
+3 -3
View File
@@ -178,9 +178,9 @@ jobs:
env:
EV_SIGNING_CERT: ${{ secrets.EV_SIGNING_CERT }}
- name: Test migrations from current ref to main
run: |
make test-migrations
# - name: Test migrations from current ref to main
# run: |
# make test-migrations
# Setup GCloud for signing Windows binaries.
- name: Authenticate to Google Cloud
+7
View File
@@ -489,6 +489,7 @@ gen: \
coderd/apidoc/swagger.json \
.prettierignore.include \
.prettierignore \
provisioner/terraform/testdata/version \
site/.prettierrc.yaml \
site/.prettierignore \
site/.eslintignore \
@@ -674,6 +675,12 @@ provisioner/terraform/testdata/.gen-golden: $(wildcard provisioner/terraform/tes
go test ./provisioner/terraform -run="Test.*Golden$$" -update
touch "$@"
provisioner/terraform/testdata/version:
if [[ "$(shell cat provisioner/terraform/testdata/version.txt)" != "$(shell terraform version -json | jq -r '.terraform_version')" ]]; then
./provisioner/terraform/testdata/generate.sh
fi
.PHONY: provisioner/terraform/testdata/version
scripts/ci-report/testdata/.gen-golden: $(wildcard scripts/ci-report/testdata/*) $(wildcard scripts/ci-report/*.go)
go test ./scripts/ci-report -run=TestOutputMatchesGoldenFile -update
touch "$@"
+1 -1
View File
@@ -239,7 +239,7 @@ func (r *RootCmd) login() *serpent.Command {
if !inv.ParsedFlags().Changed("first-user-trial") && os.Getenv(firstUserTrialEnv) == "" {
v, _ := cliui.Prompt(inv, cliui.PromptOptions{
Text: "Start a 30-day trial of Enterprise?",
Text: "Start a trial of Enterprise?",
IsConfirm: true,
Default: "yes",
})
+11 -24
View File
@@ -796,31 +796,18 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd.
cliui.Infof(inv.Stdout, "\n==> Logs will stream in below (press ctrl+c to gracefully exit):")
if vals.Telemetry.Enable {
gitAuth := make([]telemetry.GitAuth, 0)
// TODO:
var gitAuthConfigs []codersdk.ExternalAuthConfig
for _, cfg := range gitAuthConfigs {
gitAuth = append(gitAuth, telemetry.GitAuth{
Type: cfg.Type,
})
vals, err := vals.WithoutSecrets()
if err != nil {
return xerrors.Errorf("remove secrets from deployment values: %w", err)
}
options.Telemetry, err = telemetry.New(telemetry.Options{
BuiltinPostgres: builtinPostgres,
DeploymentID: deploymentID,
Database: options.Database,
Logger: logger.Named("telemetry"),
URL: vals.Telemetry.URL.Value(),
Wildcard: vals.WildcardAccessURL.String() != "",
DERPServerRelayURL: vals.DERP.Server.RelayURL.String(),
GitAuth: gitAuth,
GitHubOAuth: vals.OAuth2.Github.ClientID != "",
OIDCAuth: vals.OIDC.ClientID != "",
OIDCIssuerURL: vals.OIDC.IssuerURL.String(),
Prometheus: vals.Prometheus.Enable.Value(),
STUN: len(vals.DERP.Server.STUNAddresses) != 0,
Tunnel: tunnel != nil,
Experiments: vals.Experiments.Value(),
BuiltinPostgres: builtinPostgres,
DeploymentID: deploymentID,
Database: options.Database,
Logger: logger.Named("telemetry"),
URL: vals.Telemetry.URL.Value(),
Tunnel: tunnel != nil,
DeploymentConfig: vals,
ParseLicenseJWT: func(lic *telemetry.License) error {
// This will be nil when running in AGPL-only mode.
if options.ParseLicenseClaims == nil {
@@ -1441,7 +1428,7 @@ func newProvisionerDaemon(
connector[string(database.ProvisionerTypeTerraform)] = sdkproto.NewDRPCProvisionerClient(terraformClient)
default:
return nil, fmt.Errorf("unknown provisioner type %q", provisionerType)
return nil, xerrors.Errorf("unknown provisioner type %q", provisionerType)
}
}
+5
View File
@@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"io"
"log"
"net/http"
"net/url"
"os"
@@ -79,6 +80,10 @@ func (r *RootCmd) ssh() *serpent.Command {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
// Prevent unnecessary logs from the stdlib from messing up the TTY.
// See: https://github.com/coder/coder/issues/13144
log.SetOutput(io.Discard)
logger := inv.Logger
defer func() {
if retErr != nil {
+4 -6
View File
@@ -8549,6 +8549,10 @@ const docTemplate = `{
"description": "ExternalURL references the current Coder version.\nFor production builds, this will link directly to a release. For development builds, this will link to a commit.",
"type": "string"
},
"telemetry": {
"description": "Telemetry is a boolean that indicates whether telemetry is enabled.",
"type": "boolean"
},
"upgrade_message": {
"description": "UpgradeMessage is the message displayed to users when an outdated client\nis detected.",
"type": "string"
@@ -9608,12 +9612,6 @@ const docTemplate = `{
"description": "DisplayName is shown in the UI to identify the auth config.",
"type": "string"
},
"extra_token_keys": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"description": "ID is a unique identifier for the auth config.\nIt defaults to ` + "`" + `type` + "`" + ` when not provided.",
"type": "string"
+4 -6
View File
@@ -7607,6 +7607,10 @@
"description": "ExternalURL references the current Coder version.\nFor production builds, this will link directly to a release. For development builds, this will link to a commit.",
"type": "string"
},
"telemetry": {
"description": "Telemetry is a boolean that indicates whether telemetry is enabled.",
"type": "boolean"
},
"upgrade_message": {
"description": "UpgradeMessage is the message displayed to users when an outdated client\nis detected.",
"type": "string"
@@ -8603,12 +8607,6 @@
"description": "DisplayName is shown in the UI to identify the auth config.",
"type": "string"
},
"extra_token_keys": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"description": "ID is a unique identifier for the auth config.\nIt defaults to `type` when not provided.",
"type": "string"
+1
View File
@@ -444,6 +444,7 @@ func New(options *Options) *API {
WorkspaceProxy: false,
UpgradeMessage: api.DeploymentValues.CLIUpgradeMessage.String(),
DeploymentID: api.DeploymentID,
Telemetry: api.Telemetry.Enabled(),
}
api.SiteHandler = site.New(&site.Options{
BinFS: binFS,
+17 -2
View File
@@ -1255,7 +1255,9 @@ type ExternalAuthConfigOptions struct {
// ValidatePayload is the payload that is used when the user calls the
// equivalent of "userinfo" for oauth2. This is not standardized, so is
// different for each provider type.
ValidatePayload func(email string) interface{}
//
// The int,error payload can control the response if set.
ValidatePayload func(email string) (interface{}, int, error)
// routes is more advanced usage. This allows the caller to
// completely customize the response. It captures all routes under the /external-auth-validate/*
@@ -1292,7 +1294,20 @@ func (f *FakeIDP) ExternalAuthConfig(t testing.TB, id string, custom *ExternalAu
case "/user", "/", "":
var payload interface{} = "OK"
if custom.ValidatePayload != nil {
payload = custom.ValidatePayload(email)
var err error
var code int
payload, code, err = custom.ValidatePayload(email)
if code == 0 && err == nil {
code = http.StatusOK
}
if code == 0 && err != nil {
code = http.StatusUnauthorized
}
if err != nil {
http.Error(rw, fmt.Sprintf("failed validation via custom method: %s", err.Error()), code)
return
}
rw.WriteHeader(code)
}
_ = json.NewEncoder(rw).Encode(payload)
default:
+1 -1
View File
@@ -202,7 +202,7 @@ func (c *Config) ValidateToken(ctx context.Context, link *oauth2.Token) (bool, *
return false, nil, err
}
defer res.Body.Close()
if res.StatusCode == http.StatusUnauthorized {
if res.StatusCode == http.StatusUnauthorized || res.StatusCode == http.StatusForbidden {
// The token is no longer valid!
return false, nil, nil
}
+6 -6
View File
@@ -79,11 +79,11 @@ func TestExternalAuthByID(t *testing.T) {
client := coderdtest.New(t, &coderdtest.Options{
ExternalAuthConfigs: []*externalauth.Config{
fake.ExternalAuthConfig(t, providerID, &oidctest.ExternalAuthConfigOptions{
ValidatePayload: func(_ string) interface{} {
ValidatePayload: func(_ string) (interface{}, int, error) {
return github.User{
Login: github.String("kyle"),
AvatarURL: github.String("https://avatars.githubusercontent.com/u/12345678?v=4"),
}
}, 0, nil
},
}, func(cfg *externalauth.Config) {
cfg.Type = codersdk.EnhancedExternalAuthProviderGitHub.String()
@@ -108,11 +108,11 @@ func TestExternalAuthByID(t *testing.T) {
// routes includes a route for /install that returns a list of installations
routes := (&oidctest.ExternalAuthConfigOptions{
ValidatePayload: func(_ string) interface{} {
ValidatePayload: func(_ string) (interface{}, int, error) {
return github.User{
Login: github.String("kyle"),
AvatarURL: github.String("https://avatars.githubusercontent.com/u/12345678?v=4"),
}
}, 0, nil
},
}).AddRoute("/installs", func(_ string, rw http.ResponseWriter, r *http.Request) {
httpapi.Write(r.Context(), rw, http.StatusOK, struct {
@@ -556,7 +556,7 @@ func TestExternalAuthCallback(t *testing.T) {
// If the validation URL gives a non-OK status code, this
// should be treated as an internal server error.
srv.Config.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusForbidden)
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("Something went wrong!"))
})
_, err = agentClient.ExternalAuth(ctx, agentsdk.ExternalAuthRequest{
@@ -565,7 +565,7 @@ func TestExternalAuthCallback(t *testing.T) {
var apiError *codersdk.Error
require.ErrorAs(t, err, &apiError)
require.Equal(t, http.StatusInternalServerError, apiError.StatusCode())
require.Equal(t, "validate external auth token: status 403: body: Something went wrong!", apiError.Detail)
require.Equal(t, "validate external auth token: status 400: body: Something went wrong!", apiError.Detail)
})
t.Run("ExpiredNoRefresh", func(t *testing.T) {
+49 -87
View File
@@ -41,20 +41,13 @@ type Options struct {
// URL is an endpoint to direct telemetry towards!
URL *url.URL
BuiltinPostgres bool
DeploymentID string
GitHubOAuth bool
OIDCAuth bool
OIDCIssuerURL string
Wildcard bool
DERPServerRelayURL string
GitAuth []GitAuth
Prometheus bool
STUN bool
SnapshotFrequency time.Duration
Tunnel bool
ParseLicenseJWT func(lic *License) error
Experiments []string
DeploymentID string
DeploymentConfig *codersdk.DeploymentValues
BuiltinPostgres bool
Tunnel bool
SnapshotFrequency time.Duration
ParseLicenseJWT func(lic *License) error
}
// New constructs a reporter for telemetry data.
@@ -100,6 +93,7 @@ type Reporter interface {
// database. For example, if a new user is added, a snapshot can
// contain just that user entry.
Report(snapshot *Snapshot)
Enabled() bool
Close()
}
@@ -116,6 +110,10 @@ type remoteReporter struct {
shutdownAt *time.Time
}
func (*remoteReporter) Enabled() bool {
return true
}
func (r *remoteReporter) Report(snapshot *Snapshot) {
go r.reportSync(snapshot)
}
@@ -242,31 +240,24 @@ func (r *remoteReporter) deployment() error {
}
data, err := json.Marshal(&Deployment{
ID: r.options.DeploymentID,
Architecture: sysInfo.Architecture,
BuiltinPostgres: r.options.BuiltinPostgres,
Containerized: containerized,
Wildcard: r.options.Wildcard,
DERPServerRelayURL: r.options.DERPServerRelayURL,
GitAuth: r.options.GitAuth,
Kubernetes: os.Getenv("KUBERNETES_SERVICE_HOST") != "",
GitHubOAuth: r.options.GitHubOAuth,
OIDCAuth: r.options.OIDCAuth,
OIDCIssuerURL: r.options.OIDCIssuerURL,
Prometheus: r.options.Prometheus,
InstallSource: installSource,
STUN: r.options.STUN,
Tunnel: r.options.Tunnel,
OSType: sysInfo.OS.Type,
OSFamily: sysInfo.OS.Family,
OSPlatform: sysInfo.OS.Platform,
OSName: sysInfo.OS.Name,
OSVersion: sysInfo.OS.Version,
CPUCores: runtime.NumCPU(),
MemoryTotal: mem.Total,
MachineID: sysInfo.UniqueID,
StartedAt: r.startedAt,
ShutdownAt: r.shutdownAt,
ID: r.options.DeploymentID,
Architecture: sysInfo.Architecture,
BuiltinPostgres: r.options.BuiltinPostgres,
Containerized: containerized,
Config: r.options.DeploymentConfig,
Kubernetes: os.Getenv("KUBERNETES_SERVICE_HOST") != "",
InstallSource: installSource,
Tunnel: r.options.Tunnel,
OSType: sysInfo.OS.Type,
OSFamily: sysInfo.OS.Family,
OSPlatform: sysInfo.OS.Platform,
OSName: sysInfo.OS.Name,
OSVersion: sysInfo.OS.Version,
CPUCores: runtime.NumCPU(),
MemoryTotal: mem.Total,
MachineID: sysInfo.UniqueID,
StartedAt: r.startedAt,
ShutdownAt: r.shutdownAt,
})
if err != nil {
return xerrors.Errorf("marshal deployment: %w", err)
@@ -481,10 +472,6 @@ func (r *remoteReporter) createSnapshot() (*Snapshot, error) {
}
return nil
})
eg.Go(func() error {
snapshot.Experiments = ConvertExperiments(r.options.Experiments)
return nil
})
err := eg.Wait()
if err != nil {
@@ -745,16 +732,6 @@ func ConvertExternalProvisioner(id uuid.UUID, tags map[string]string, provisione
}
}
func ConvertExperiments(experiments []string) []Experiment {
var out []Experiment
for _, exp := range experiments {
out = append(out, Experiment{Name: exp})
}
return out
}
// Snapshot represents a point-in-time anonymized database dump.
// Data is aggregated by latest on the server-side, so partial data
// can be sent without issue.
@@ -777,40 +754,28 @@ type Snapshot struct {
WorkspaceResourceMetadata []WorkspaceResourceMetadata `json:"workspace_resource_metadata"`
WorkspaceResources []WorkspaceResource `json:"workspace_resources"`
Workspaces []Workspace `json:"workspaces"`
Experiments []Experiment `json:"experiments"`
}
// Deployment contains information about the host running Coder.
type Deployment struct {
ID string `json:"id"`
Architecture string `json:"architecture"`
BuiltinPostgres bool `json:"builtin_postgres"`
Containerized bool `json:"containerized"`
Kubernetes bool `json:"kubernetes"`
Tunnel bool `json:"tunnel"`
Wildcard bool `json:"wildcard"`
DERPServerRelayURL string `json:"derp_server_relay_url"`
GitAuth []GitAuth `json:"git_auth"`
GitHubOAuth bool `json:"github_oauth"`
OIDCAuth bool `json:"oidc_auth"`
OIDCIssuerURL string `json:"oidc_issuer_url"`
Prometheus bool `json:"prometheus"`
InstallSource string `json:"install_source"`
STUN bool `json:"stun"`
OSType string `json:"os_type"`
OSFamily string `json:"os_family"`
OSPlatform string `json:"os_platform"`
OSName string `json:"os_name"`
OSVersion string `json:"os_version"`
CPUCores int `json:"cpu_cores"`
MemoryTotal uint64 `json:"memory_total"`
MachineID string `json:"machine_id"`
StartedAt time.Time `json:"started_at"`
ShutdownAt *time.Time `json:"shutdown_at"`
}
type GitAuth struct {
Type string `json:"type"`
ID string `json:"id"`
Architecture string `json:"architecture"`
BuiltinPostgres bool `json:"builtin_postgres"`
Containerized bool `json:"containerized"`
Kubernetes bool `json:"kubernetes"`
Config *codersdk.DeploymentValues `json:"config"`
Tunnel bool `json:"tunnel"`
InstallSource string `json:"install_source"`
OSType string `json:"os_type"`
OSFamily string `json:"os_family"`
OSPlatform string `json:"os_platform"`
OSName string `json:"os_name"`
OSVersion string `json:"os_version"`
CPUCores int `json:"cpu_cores"`
MemoryTotal uint64 `json:"memory_total"`
MachineID string `json:"machine_id"`
StartedAt time.Time `json:"started_at"`
ShutdownAt *time.Time `json:"shutdown_at"`
}
type APIKey struct {
@@ -985,11 +950,8 @@ type ExternalProvisioner struct {
ShutdownAt *time.Time `json:"shutdown_at"`
}
type Experiment struct {
Name string `json:"name"`
}
type noopReporter struct{}
func (*noopReporter) Report(_ *Snapshot) {}
func (*noopReporter) Enabled() bool { return false }
func (*noopReporter) Close() {}
-11
View File
@@ -114,17 +114,6 @@ func TestTelemetry(t *testing.T) {
require.Len(t, snapshot.Users, 1)
require.Equal(t, snapshot.Users[0].EmailHashed, "bb44bf07cf9a2db0554bba63a03d822c927deae77df101874496df5a6a3e896d@coder.com")
})
t.Run("Experiments", func(t *testing.T) {
t.Parallel()
const expName = "my-experiment"
exps := []string{expName}
_, snapshot := collectSnapshot(t, dbmem.New(), func(opts telemetry.Options) telemetry.Options {
opts.Experiments = exps
return opts
})
require.Equal(t, []telemetry.Experiment{{Name: expName}}, snapshot.Experiments)
})
}
// nolint:paralleltest
+74
View File
@@ -20,9 +20,11 @@ import (
"cdr.dev/slog/sloggers/slogtest"
"github.com/coder/coder/v2/coderd/audit"
"github.com/coder/coder/v2/coderd/coderdtest"
"github.com/coder/coder/v2/coderd/coderdtest/oidctest"
"github.com/coder/coder/v2/coderd/database"
"github.com/coder/coder/v2/coderd/database/dbauthz"
"github.com/coder/coder/v2/coderd/database/dbtime"
"github.com/coder/coder/v2/coderd/externalauth"
"github.com/coder/coder/v2/coderd/rbac"
"github.com/coder/coder/v2/codersdk"
"github.com/coder/coder/v2/provisioner/echo"
@@ -711,6 +713,78 @@ func TestWorkspaceBuildStatus(t *testing.T) {
require.EqualValues(t, codersdk.WorkspaceStatusDeleted, workspace.LatestBuild.Status)
}
func TestWorkspaceDeleteSuspendedUser(t *testing.T) {
t.Parallel()
const providerID = "fake-github"
fake := oidctest.NewFakeIDP(t, oidctest.WithServing())
validateCalls := 0
userSuspended := false
owner := coderdtest.New(t, &coderdtest.Options{
IncludeProvisionerDaemon: true,
ExternalAuthConfigs: []*externalauth.Config{
fake.ExternalAuthConfig(t, providerID, &oidctest.ExternalAuthConfigOptions{
ValidatePayload: func(email string) (interface{}, int, error) {
validateCalls++
if userSuspended {
// Simulate the user being suspended from the IDP too.
return "", http.StatusForbidden, fmt.Errorf("user is suspended")
}
return "OK", 0, nil
},
}),
},
})
first := coderdtest.CreateFirstUser(t, owner)
// New user that we will suspend when we try to delete the workspace.
client, user := coderdtest.CreateAnotherUser(t, owner, first.OrganizationID, rbac.RoleTemplateAdmin())
fake.ExternalLogin(t, client)
version := coderdtest.CreateTemplateVersion(t, client, first.OrganizationID, &echo.Responses{
Parse: echo.ParseComplete,
ProvisionApply: echo.ApplyComplete,
ProvisionPlan: []*proto.Response{{
Type: &proto.Response_Plan{
Plan: &proto.PlanComplete{
Error: "",
Resources: nil,
Parameters: nil,
ExternalAuthProviders: []*proto.ExternalAuthProviderResource{
{
Id: providerID,
Optional: false,
},
},
},
},
}},
})
validateCalls = 0 // Reset
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
template := coderdtest.CreateTemplate(t, client, first.OrganizationID, version.ID)
workspace := coderdtest.CreateWorkspace(t, client, first.OrganizationID, template.ID)
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
require.Equal(t, 1, validateCalls) // Ensure the external link is working
// Suspend the user
ctx := testutil.Context(t, testutil.WaitLong)
_, err := owner.UpdateUserStatus(ctx, user.ID.String(), codersdk.UserStatusSuspended)
require.NoError(t, err, "suspend user")
// Now delete the workspace build
userSuspended = true
build, err := owner.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
Transition: codersdk.WorkspaceTransitionDelete,
})
require.NoError(t, err)
build = coderdtest.AwaitWorkspaceBuildJobCompleted(t, owner, build.ID)
require.Equal(t, 2, validateCalls)
require.Equal(t, codersdk.WorkspaceStatusDeleted, build.Status)
}
func TestWorkspaceBuildDebugMode(t *testing.T) {
t.Parallel()
+3 -2
View File
@@ -389,7 +389,7 @@ type ExternalAuthConfig struct {
AppInstallationsURL string `json:"app_installations_url" yaml:"app_installations_url"`
NoRefresh bool `json:"no_refresh" yaml:"no_refresh"`
Scopes []string `json:"scopes" yaml:"scopes"`
ExtraTokenKeys []string `json:"extra_token_keys" yaml:"extra_token_keys"`
ExtraTokenKeys []string `json:"-" yaml:"extra_token_keys"`
DeviceFlow bool `json:"device_flow" yaml:"device_flow"`
DeviceCodeURL string `json:"device_code_url" yaml:"device_code_url"`
// Regex allows API requesters to match an auth config by
@@ -2152,11 +2152,12 @@ type BuildInfoResponse struct {
ExternalURL string `json:"external_url"`
// Version returns the semantic version of the build.
Version string `json:"version"`
// DashboardURL is the URL to hit the deployment's dashboard.
// For external workspace proxies, this is the coderd they are connected
// to.
DashboardURL string `json:"dashboard_url"`
// Telemetry is a boolean that indicates whether telemetry is enabled.
Telemetry bool `json:"telemetry"`
WorkspaceProxy bool `json:"workspace_proxy"`
+1 -1
View File
@@ -57,6 +57,7 @@ curl -X GET http://coder-server:8080/api/v2/buildinfo \
"dashboard_url": "string",
"deployment_id": "string",
"external_url": "string",
"telemetry": true,
"upgrade_message": "string",
"version": "string",
"workspace_proxy": true
@@ -227,7 +228,6 @@ curl -X GET http://coder-server:8080/api/v2/deployment/config \
"device_flow": true,
"display_icon": "string",
"display_name": "string",
"extra_token_keys": ["string"],
"id": "string",
"no_refresh": true,
"regex": "string",
+2 -5
View File
@@ -1180,6 +1180,7 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in
"dashboard_url": "string",
"deployment_id": "string",
"external_url": "string",
"telemetry": true,
"upgrade_message": "string",
"version": "string",
"workspace_proxy": true
@@ -1194,6 +1195,7 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in
| `dashboard_url` | string | false | | Dashboard URL is the URL to hit the deployment's dashboard. For external workspace proxies, this is the coderd they are connected to. |
| `deployment_id` | string | false | | Deployment ID is the unique identifier for this deployment. |
| `external_url` | string | false | | External URL references the current Coder version. For production builds, this will link directly to a release. For development builds, this will link to a commit. |
| `telemetry` | boolean | false | | Telemetry is a boolean that indicates whether telemetry is enabled. |
| `upgrade_message` | string | false | | Upgrade message is the message displayed to users when an outdated client is detected. |
| `version` | string | false | | Version returns the semantic version of the build. |
| `workspace_proxy` | boolean | false | | |
@@ -1955,7 +1957,6 @@ CreateWorkspaceRequest provides options for creating a new workspace. Only one o
"device_flow": true,
"display_icon": "string",
"display_name": "string",
"extra_token_keys": ["string"],
"id": "string",
"no_refresh": true,
"regex": "string",
@@ -2328,7 +2329,6 @@ CreateWorkspaceRequest provides options for creating a new workspace. Only one o
"device_flow": true,
"display_icon": "string",
"display_name": "string",
"extra_token_keys": ["string"],
"id": "string",
"no_refresh": true,
"regex": "string",
@@ -2745,7 +2745,6 @@ CreateWorkspaceRequest provides options for creating a new workspace. Only one o
"device_flow": true,
"display_icon": "string",
"display_name": "string",
"extra_token_keys": ["string"],
"id": "string",
"no_refresh": true,
"regex": "string",
@@ -2768,7 +2767,6 @@ CreateWorkspaceRequest provides options for creating a new workspace. Only one o
| `device_flow` | boolean | false | | |
| `display_icon` | string | false | | Display icon is a URL to an icon to display in the UI. |
| `display_name` | string | false | | Display name is shown in the UI to identify the auth config. |
| `extra_token_keys` | array of string | false | | |
| `id` | string | false | | ID is a unique identifier for the auth config. It defaults to `type` when not provided. |
| `no_refresh` | boolean | false | | |
| `regex` | string | false | | Regex allows API requesters to match an auth config by a string (e.g. coder.com) instead of by it's type. |
@@ -8693,7 +8691,6 @@ _None_
"device_flow": true,
"display_icon": "string",
"display_name": "string",
"extra_token_keys": ["string"],
"id": "string",
"no_refresh": true,
"regex": "string",
+1 -1
View File
@@ -54,7 +54,7 @@ RUN mkdir -p /opt/terraform
# The below step is optional if you wish to keep the existing version.
# See https://github.com/coder/coder/blob/main/provisioner/terraform/install.go#L23-L24
# for supported Terraform versions.
ARG TERRAFORM_VERSION=1.5.6
ARG TERRAFORM_VERSION=1.7.5
RUN apk update && \
apk del terraform && \
curl -LOs https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip \
+2 -2
View File
@@ -169,9 +169,9 @@ RUN apt-get update --quiet && apt-get install --yes \
# Configure FIPS-compliant policies
update-crypto-policies --set FIPS
# NOTE: In scripts/Dockerfile.base we specifically install Terraform version 1.6.6.
# NOTE: In scripts/Dockerfile.base we specifically install Terraform version 1.7.5.
# Installing the same version here to match.
RUN wget -O /tmp/terraform.zip "https://releases.hashicorp.com/terraform/1.6.6/terraform_1.6.6_linux_amd64.zip" && \
RUN wget -O /tmp/terraform.zip "https://releases.hashicorp.com/terraform/1.7.5/terraform_1.7.5_linux_amd64.zip" && \
unzip /tmp/terraform.zip -d /usr/local/bin && \
rm -f /tmp/terraform.zip && \
chmod +x /usr/local/bin/terraform && \
+10 -3
View File
@@ -1485,10 +1485,17 @@ func (h *heartbeats) filter(mappings []mapping) []mapping {
ok := m.coordinator == h.self
if !ok {
_, ok = h.coordinators[m.coordinator]
if !ok {
// If a mapping exists to a coordinator lost to heartbeats,
// still add the mapping as LOST. If a coordinator misses
// heartbeats but a client is still connected to it, this may be
// the only mapping available for it. Newer mappings will take
// precedence.
m.kind = proto.CoordinateResponse_PeerUpdate_LOST
}
}
if ok {
out = append(out, m)
}
out = append(out, m)
}
return out
}
+38 -2
View File
@@ -11,6 +11,7 @@ import (
"time"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uber.org/mock/gomock"
"golang.org/x/xerrors"
@@ -33,9 +34,9 @@ import (
// make update-golden-files
var UpdateGoldenFiles = flag.Bool("update", false, "update .golden files")
// TestHeartbeat_Cleanup is internal so that we can overwrite the cleanup period and not wait an hour for the timed
// TestHeartbeats_Cleanup is internal so that we can overwrite the cleanup period and not wait an hour for the timed
// cleanup.
func TestHeartbeat_Cleanup(t *testing.T) {
func TestHeartbeats_Cleanup(t *testing.T) {
t.Parallel()
ctrl := gomock.NewController(t)
@@ -78,6 +79,41 @@ func TestHeartbeat_Cleanup(t *testing.T) {
close(waitForCleanup)
}
func TestHeartbeats_LostCoordinator_MarkLost(t *testing.T) {
t.Parallel()
ctrl := gomock.NewController(t)
mStore := dbmock.NewMockStore(ctrl)
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
defer cancel()
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
uut := &heartbeats{
ctx: ctx,
logger: logger,
store: mStore,
cleanupPeriod: time.Millisecond,
coordinators: map[uuid.UUID]time.Time{
uuid.New(): time.Now(),
},
}
mpngs := []mapping{{
peer: uuid.New(),
coordinator: uuid.New(),
updatedAt: time.Now(),
node: &proto.Node{},
kind: proto.CoordinateResponse_PeerUpdate_NODE,
}}
// Filter should still return the mapping without a coordinator, but marked
// as LOST.
got := uut.filter(mpngs)
require.Len(t, got, 1)
assert.Equal(t, proto.CoordinateResponse_PeerUpdate_LOST, got[0].kind)
}
// TestLostPeerCleanupQueries tests that our SQL queries to clean up lost peers do what we expect,
// that is, clean up peers and associated tunnels that have been lost for over 24 hours.
func TestLostPeerCleanupQueries(t *testing.T) {
+56 -10
View File
@@ -415,6 +415,52 @@ func TestPGCoordinatorSingle_MissedHeartbeats(t *testing.T) {
assertEventuallyLost(ctx, t, store, client.id)
}
func TestPGCoordinatorSingle_MissedHeartbeats_NoDrop(t *testing.T) {
t.Parallel()
if !dbtestutil.WillUsePostgres() {
t.Skip("test only with postgres")
}
store, ps := dbtestutil.NewDB(t)
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitSuperLong)
defer cancel()
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
coordinator, err := tailnet.NewPGCoord(ctx, logger, ps, store)
require.NoError(t, err)
defer coordinator.Close()
agentID := uuid.New()
client := agpltest.NewPeer(ctx, t, coordinator, "client")
defer client.Close(ctx)
client.AddTunnel(agentID)
client.UpdateDERP(11)
// simulate a second coordinator via DB calls only --- our goal is to test
// broken heart-beating, so we can't use a real coordinator
fCoord2 := &fakeCoordinator{
ctx: ctx,
t: t,
store: store,
id: uuid.New(),
}
// simulate a single heartbeat, the coordinator is healthy
fCoord2.heartbeat()
fCoord2.agentNode(agentID, &agpl.Node{PreferredDERP: 12})
// since it's healthy the client should get the new node.
client.AssertEventuallyHasDERP(agentID, 12)
// the heartbeat should then timeout and we'll get sent a LOST update, NOT a
// disconnect.
client.AssertEventuallyLost(agentID)
client.Close(ctx)
assertEventuallyLost(ctx, t, store, client.ID)
}
func TestPGCoordinatorSingle_SendsHeartbeats(t *testing.T) {
t.Parallel()
if !dbtestutil.WillUsePostgres() {
@@ -857,6 +903,16 @@ func newTestAgent(t *testing.T, coord agpl.CoordinatorV1, name string, id ...uui
return a
}
func newTestClient(t *testing.T, coord agpl.CoordinatorV1, agentID uuid.UUID, id ...uuid.UUID) *testConn {
c := newTestConn(id)
go func() {
err := coord.ServeClient(c.serverWS, c.id, agentID)
assert.NoError(t, err)
close(c.closeChan)
}()
return c
}
func (c *testConn) close() error {
return c.ws.Close()
}
@@ -902,16 +958,6 @@ func (c *testConn) waitForClose(ctx context.Context, t *testing.T) {
}
}
func newTestClient(t *testing.T, coord agpl.CoordinatorV1, agentID uuid.UUID, id ...uuid.UUID) *testConn {
c := newTestConn(id)
go func() {
err := coord.ServeClient(c.serverWS, c.id, agentID)
assert.NoError(t, err)
close(c.closeChan)
}()
return c
}
func assertEventuallyHasDERPs(ctx context.Context, t *testing.T, c *testConn, expected ...int) {
t.Helper()
for {
+16
View File
@@ -39,6 +39,22 @@ func New(db database.Store, url string, keys map[string]ed25519.PublicKey) func(
return xerrors.Errorf("perform license request: %w", err)
}
defer res.Body.Close()
if res.StatusCode > 300 {
body, err := io.ReadAll(res.Body)
if err != nil {
return xerrors.Errorf("read license response: %w", err)
}
// This is the format of the error response from
// the license server.
var msg struct {
Error string `json:"error"`
}
err = json.Unmarshal(body, &msg)
if err != nil {
return xerrors.Errorf("unmarshal error: %w", err)
}
return xerrors.New(msg.Error)
}
raw, err := io.ReadAll(res.Body)
if err != nil {
return xerrors.Errorf("read license: %w", err)
@@ -216,7 +216,7 @@ func TestDialCoordinator(t *testing.T) {
Node: &proto.Node{
Id: 55,
AsOf: timestamppb.New(time.Unix(1689653252, 0)),
Key: peerNodeKey[:],
Key: peerNodeKey,
Disco: string(peerDiscoKey),
PreferredDerp: 0,
DerpLatency: map[string]float64{
+1 -1
View File
@@ -250,7 +250,7 @@ EOF
main() {
MAINLINE=1
STABLE=0
TERRAFORM_VERSION="1.6.6"
TERRAFORM_VERSION="1.7.5"
if [ "${TRACE-}" ]; then
set -x
+12 -2
View File
@@ -24,6 +24,8 @@ import (
"github.com/coder/coder/v2/provisionersdk/proto"
)
var version170 = version.Must(version.NewVersion("1.7.0"))
type executor struct {
logger slog.Logger
server *server
@@ -346,8 +348,16 @@ func (e *executor) graph(ctx, killCtx context.Context) (string, error) {
return "", ctx.Err()
}
ver, err := e.version(ctx)
if err != nil {
return "", err
}
args := []string{"graph"}
if ver.GreaterThanOrEqual(version170) {
args = append(args, "-type=plan")
}
var out strings.Builder
cmd := exec.CommandContext(killCtx, e.binaryPath, "graph") // #nosec
cmd := exec.CommandContext(killCtx, e.binaryPath, args...) // #nosec
cmd.Stdout = &out
cmd.Dir = e.workdir
cmd.Env = e.basicEnv()
@@ -356,7 +366,7 @@ func (e *executor) graph(ctx, killCtx context.Context) (string, error) {
slog.F("binary_path", e.binaryPath),
slog.F("args", "graph"),
)
err := cmd.Start()
err = cmd.Start()
if err != nil {
return "", err
}
+2 -2
View File
@@ -20,10 +20,10 @@ var (
// when Terraform is not available on the system.
// NOTE: Keep this in sync with the version in scripts/Dockerfile.base.
// NOTE: Keep this in sync with the version in install.sh.
TerraformVersion = version.Must(version.NewVersion("1.6.6"))
TerraformVersion = version.Must(version.NewVersion("1.7.5"))
minTerraformVersion = version.Must(version.NewVersion("1.1.0"))
maxTerraformVersion = version.Must(version.NewVersion("1.6.9")) // use .9 to automatically allow patch releases
maxTerraformVersion = version.Must(version.NewVersion("1.7.9")) // use .9 to automatically allow patch releases
terraformMinorVersionMismatch = xerrors.New("Terraform binary minor version mismatch.")
)
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.6.1"
version = "0.22.0"
}
}
}
@@ -21,4 +21,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+28 -4
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -17,11 +17,22 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"sensitive_values": {}
"sensitive_values": {
"display_apps": [],
"metadata": []
}
}
],
"child_modules": [
@@ -78,17 +89,29 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
"token": true
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
}
@@ -153,7 +176,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.6.1"
"version_constraint": "0.22.0"
},
"module.module:null": {
"name": "null",
@@ -236,5 +259,6 @@
]
}
],
"timestamp": "2023-08-30T19:24:59Z"
"timestamp": "2024-05-22T17:02:40Z",
"errored": false
}
@@ -21,4 +21,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+26 -5
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -16,15 +16,36 @@
"auth": "token",
"connection_timeout": 120,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "c6fd4a45-dc64-4830-8ff1-9a6c8074fca8",
"id": "f26b1d53-799e-4fbb-9fd3-71e60b37eacd",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"token": "2559767b-afc6-4293-92cf-d57d98bda13a",
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "ce663074-ebea-44cb-b6d1-321f590f7982",
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [],
"token": true
}
}
@@ -48,7 +69,7 @@
"outputs": {
"script": ""
},
"random": "5659889568915200015"
"random": "8031375470547649400"
},
"sensitive_values": {
"inputs": {},
@@ -63,7 +84,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "4052095409343470524",
"id": "3370916843136140681",
"triggers": null
},
"sensitive_values": {},
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.6.1"
version = "0.22.0"
}
}
}
@@ -17,4 +17,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -17,11 +17,22 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"sensitive_values": {}
"sensitive_values": {
"display_apps": [],
"metadata": []
}
},
{
"address": "null_resource.a",
@@ -68,17 +79,29 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
"token": true
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
}
@@ -131,7 +154,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.6.1"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -181,5 +204,6 @@
]
}
},
"timestamp": "2023-08-30T19:25:02Z"
"timestamp": "2024-05-22T17:02:43Z",
"errored": false
}
@@ -17,4 +17,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -16,15 +16,36 @@
"auth": "token",
"connection_timeout": 120,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "9fb263ae-2d96-414f-abfa-7874e73695d2",
"id": "9d869fc3-c185-4278-a5d2-873f809a4449",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"token": "4f391c60-20f9-4d57-906e-92e2f3e1e3c1",
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "418bb1d6-49d8-4340-ac84-ed6991457ff9",
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [],
"token": true
}
},
@@ -36,7 +57,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "2616597461049838347",
"id": "3681188688307687011",
"triggers": null
},
"sensitive_values": {},
@@ -53,7 +74,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "6759504907417146954",
"id": "6055360096088266226",
"triggers": null
},
"sensitive_values": {},
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.6.1"
version = "0.22.0"
}
}
}
@@ -19,4 +19,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -17,11 +17,22 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"sensitive_values": {}
"sensitive_values": {
"display_apps": [],
"metadata": []
}
},
{
"address": "null_resource.first",
@@ -68,17 +79,29 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
"token": true
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
}
@@ -131,7 +154,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.6.1"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -181,5 +204,6 @@
]
}
},
"timestamp": "2023-08-30T19:25:04Z"
"timestamp": "2024-05-22T17:02:45Z",
"errored": false
}
@@ -19,4 +19,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -16,15 +16,36 @@
"auth": "token",
"connection_timeout": 120,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "56d6f6e2-a7f8-4594-9bc3-044a4fd3b021",
"id": "d9c497fe-1dc4-4551-b46d-282f775e9509",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"token": "715216d1-fca1-4652-9032-d5367072706f",
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "6fa01f69-de93-4610-b942-b787118146f8",
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [],
"token": true
}
},
@@ -36,7 +57,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "7470209964325643389",
"id": "2012753940926517215",
"triggers": null
},
"sensitive_values": {},
@@ -52,7 +73,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "251158623761758523",
"id": "2163283012438694669",
"triggers": null
},
"sensitive_values": {},
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.11.2"
version = "0.22.0"
}
}
}
@@ -15,4 +15,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -29,6 +29,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -89,6 +90,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -143,7 +145,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.11.2"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -201,5 +203,6 @@
]
}
},
"timestamp": "2023-08-30T19:25:10Z"
"timestamp": "2024-05-22T17:02:50Z",
"errored": false
}
@@ -15,4 +15,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -26,18 +26,19 @@
}
],
"env": null,
"id": "ba0faeb0-5a14-4908-946e-360329a8c852",
"id": "c55cfcad-5422-46e5-a144-e933660bacd3",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "010c13b9-95aa-4b66-a2ad-5937e467134a",
"token": "e170615d-a3a2-4dc4-a65e-4990ceeb79e5",
"troubleshooting_url": null
},
"sensitive_values": {
@@ -56,7 +57,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "7220106781059326067",
"id": "3512108359019802900",
"triggers": null
},
"sensitive_values": {},
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.11.2"
version = "0.22.0"
}
}
}
-1
View File
@@ -15,4 +15,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+6 -3
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -29,6 +29,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -89,6 +90,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -143,7 +145,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.11.2"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -201,5 +203,6 @@
]
}
},
"timestamp": "2023-08-30T19:25:07Z"
"timestamp": "2024-05-22T17:02:48Z",
"errored": false
}
-1
View File
@@ -15,4 +15,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+5 -4
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -26,18 +26,19 @@
}
],
"env": null,
"id": "a7b8ff17-66ba-47b4-a4b4-51da1ad835fc",
"id": "3fb63a4e-bb0e-4380-9ed9-8b1581943b1f",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "75fc044a-b120-4e86-be94-056cec981bd9",
"token": "eb5720a7-91fd-4e37-8085-af3c8205702c",
"troubleshooting_url": null
},
"sensitive_values": {
@@ -56,7 +57,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "4184951391452107661",
"id": "2929624824161973000",
"triggers": null
},
"sensitive_values": {},
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.16.0"
version = "0.22.0"
}
}
}
@@ -21,4 +21,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.6.6",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -20,6 +20,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -69,6 +70,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -116,7 +118,7 @@
],
"prior_state": {
"format_version": "1.0",
"terraform_version": "1.6.6",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -157,7 +159,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.16.0"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -225,6 +227,6 @@
]
}
},
"timestamp": "2024-02-12T23:11:52Z",
"timestamp": "2024-05-22T17:02:52Z",
"errored": false
}
@@ -21,4 +21,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.6.6",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -54,18 +54,19 @@
}
],
"env": null,
"id": "d1f23602-ef8e-4ecf-aa5a-df8aa476344e",
"id": "923df4d0-cf96-4cf8-aaff-426e58927a81",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "90440015-11c8-442b-adba-9f2bd279b5c7",
"token": "f5328221-90c7-4056-83b4-7b76d6f46580",
"troubleshooting_url": null
},
"sensitive_values": {
@@ -84,7 +85,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "8183284779544326910",
"id": "4621387386750422041",
"triggers": null
},
"sensitive_values": {},
+4 -2
View File
@@ -22,11 +22,13 @@ for d in */; do
terraform init -upgrade
terraform plan -out terraform.tfplan
terraform show -json ./terraform.tfplan | jq >"$name".tfplan.json
terraform graph >"$name".tfplan.dot
terraform graph -type=plan >"$name".tfplan.dot
rm terraform.tfplan
terraform apply -auto-approve
terraform show -json ./terraform.tfstate | jq >"$name".tfstate.json
rm terraform.tfstate
terraform graph >"$name".tfstate.dot
terraform graph -type=plan >"$name".tfstate.dot
popd
done
terraform version -json | jq -r '.terraform_version' >version.txt
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.6.13"
version = "0.22.0"
}
}
}
@@ -21,4 +21,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -18,15 +18,21 @@
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"sensitive_values": {}
"sensitive_values": {
"display_apps": [],
"metadata": []
}
},
{
"address": "null_resource.dev",
@@ -62,21 +68,28 @@
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
"token": true
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
}
@@ -105,7 +118,7 @@
],
"prior_state": {
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -144,7 +157,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.6.13"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -209,5 +222,6 @@
]
}
},
"timestamp": "2023-08-30T19:25:13Z"
"timestamp": "2024-05-22T17:02:55Z",
"errored": false
}
@@ -21,4 +21,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -42,20 +42,36 @@
"auth": "token",
"connection_timeout": 120,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "a8139f31-219b-4ee5-9e64-60d8dd94be27",
"id": "48a24332-1a90-48d9-9e03-b4e9f09c6eab",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "20cdf0ee-2da9-432e-a3ad-674b900ed3c1",
"token": "6a2ae93f-3f25-423d-aa97-b2f1c5d9c20b",
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [],
"token": true
}
},
@@ -67,7 +83,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "8246789295692160686",
"id": "8095584601893320918",
"triggers": null
},
"sensitive_values": {},
+1 -1
View File
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.6.1"
version = "0.22.0"
}
}
}
-1
View File
@@ -17,4 +17,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+28 -4
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -17,11 +17,22 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"sensitive_values": {}
"sensitive_values": {
"display_apps": [],
"metadata": []
}
},
{
"address": "coder_agent_instance.main",
@@ -68,17 +79,29 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
"token": true
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
}
@@ -132,7 +155,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.6.1"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -201,5 +224,6 @@
]
}
],
"timestamp": "2023-08-30T19:25:15Z"
"timestamp": "2024-05-22T17:02:57Z",
"errored": false
}
-1
View File
@@ -17,4 +17,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+27 -6
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -16,15 +16,36 @@
"auth": "google-instance-identity",
"connection_timeout": 120,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "07c39e97-3461-4912-87c6-aab06714fb79",
"id": "3bc8e20f-2024-4014-ac11-806e7e1a1e24",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"token": "4d389c4e-479b-4004-8ad1-b10da989bbdb",
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "6ef0492b-8dbe-4c61-8eb8-a37acb671278",
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [],
"token": true
}
},
@@ -36,8 +57,8 @@
"provider_name": "registry.terraform.io/coder/coder",
"schema_version": 0,
"values": {
"agent_id": "07c39e97-3461-4912-87c6-aab06714fb79",
"id": "13ac93bd-54bf-4e93-b2a1-35534139e255",
"agent_id": "3bc8e20f-2024-4014-ac11-806e7e1a1e24",
"id": "7ba714fa-f2b8-4d33-8987-f67466505033",
"instance_id": "example"
},
"sensitive_values": {},
@@ -53,7 +74,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "8984327635720248545",
"id": "4065206823139127011",
"triggers": null
},
"sensitive_values": {},
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.6.5"
version = "0.22.0"
}
kubernetes = {
source = "hashicorp/kubernetes"
+1 -1
View File
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.6.1"
version = "0.22.0"
}
}
}
-1
View File
@@ -18,4 +18,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+36 -4
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -17,11 +17,22 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"sensitive_values": {}
"sensitive_values": {
"display_apps": [],
"metadata": []
}
},
{
"address": "coder_app.apps[\"app1\"]",
@@ -34,9 +45,11 @@
"values": {
"command": null,
"display_name": "app1",
"external": false,
"healthcheck": [],
"icon": null,
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app1",
@@ -58,9 +71,11 @@
"values": {
"command": null,
"display_name": "app2",
"external": false,
"healthcheck": [],
"icon": null,
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app2",
@@ -104,17 +119,29 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
"token": true
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
}
@@ -134,9 +161,11 @@
"after": {
"command": null,
"display_name": "app1",
"external": false,
"healthcheck": [],
"icon": null,
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app1",
@@ -169,9 +198,11 @@
"after": {
"command": null,
"display_name": "app2",
"external": false,
"healthcheck": [],
"icon": null,
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app2",
@@ -216,7 +247,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.6.1"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -295,5 +326,6 @@
]
}
],
"timestamp": "2023-08-30T19:25:17Z"
"timestamp": "2024-05-22T17:02:59Z",
"errored": false
}
-1
View File
@@ -18,4 +18,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+33 -8
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -16,15 +16,36 @@
"auth": "token",
"connection_timeout": 120,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "9a8356cf-b5ef-4da0-9b4e-cfeaca1fbfcf",
"id": "d8d2ed23-193d-4784-9ce5-7bc0d879bb14",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"token": "7116ebd2-5205-4427-8cdb-5f86ec819911",
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "0555adfc-e969-4fd2-8cfd-47560bd1b5a3",
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [],
"token": true
}
},
@@ -37,13 +58,15 @@
"provider_name": "registry.terraform.io/coder/coder",
"schema_version": 0,
"values": {
"agent_id": "9a8356cf-b5ef-4da0-9b4e-cfeaca1fbfcf",
"agent_id": "d8d2ed23-193d-4784-9ce5-7bc0d879bb14",
"command": null,
"display_name": "app1",
"external": false,
"healthcheck": [],
"icon": null,
"id": "8ad9b3c3-0951-4612-adea-5c89ac12642a",
"id": "11fa3ff2-d6ba-41ca-b1df-6c98d395c0b8",
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app1",
@@ -66,13 +89,15 @@
"provider_name": "registry.terraform.io/coder/coder",
"schema_version": 0,
"values": {
"agent_id": "9a8356cf-b5ef-4da0-9b4e-cfeaca1fbfcf",
"agent_id": "d8d2ed23-193d-4784-9ce5-7bc0d879bb14",
"command": null,
"display_name": "app2",
"external": false,
"healthcheck": [],
"icon": null,
"id": "b3cbb3eb-62d8-485f-8378-2d2ed751aa38",
"id": "cd1a2e37-adbc-49f0-bd99-033c62a1533e",
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app2",
@@ -94,7 +119,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "5757307222275435634",
"id": "4490911212417021152",
"triggers": null
},
"sensitive_values": {},
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.8.3"
version = "0.22.0"
}
}
}
@@ -27,4 +27,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+24 -3
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -20,6 +20,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -29,6 +30,7 @@
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [],
"metadata": []
}
},
@@ -48,6 +50,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": "/etc/motd",
"order": null,
"os": "darwin",
"shutdown_script": "echo bye bye",
"shutdown_script_timeout": 30,
@@ -57,6 +60,7 @@
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [],
"metadata": []
}
},
@@ -76,6 +80,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "windows",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -85,6 +90,7 @@
"troubleshooting_url": "https://coder.com/troubleshoot"
},
"sensitive_values": {
"display_apps": [],
"metadata": []
}
},
@@ -104,6 +110,7 @@
"login_before_ready": false,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -113,6 +120,7 @@
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [],
"metadata": []
}
},
@@ -152,6 +160,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -161,6 +170,7 @@
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
@@ -168,6 +178,7 @@
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
@@ -193,6 +204,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": "/etc/motd",
"order": null,
"os": "darwin",
"shutdown_script": "echo bye bye",
"shutdown_script_timeout": 30,
@@ -202,6 +214,7 @@
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
@@ -209,6 +222,7 @@
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
@@ -234,6 +248,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "windows",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -243,6 +258,7 @@
"troubleshooting_url": "https://coder.com/troubleshoot"
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
@@ -250,6 +266,7 @@
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
@@ -275,6 +292,7 @@
"login_before_ready": false,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -284,6 +302,7 @@
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
@@ -291,6 +310,7 @@
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
@@ -323,7 +343,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.8.3"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -440,5 +460,6 @@
]
}
},
"timestamp": "2023-08-30T19:25:20Z"
"timestamp": "2024-05-22T17:03:01Z",
"errored": false
}
@@ -27,4 +27,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+62 -10
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -16,22 +16,35 @@
"auth": "token",
"connection_timeout": 120,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "094d300c-f07a-4357-870f-6ca1fc9154a2",
"id": "0ffc6582-b017-404e-b83f-48e4a5ab38bc",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "27bd44bc-0126-4c8d-9b98-8f27619e3656",
"token": "b7f0a913-ecb1-4c80-8559-fbcb435d53d0",
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [],
"token": true
}
@@ -48,22 +61,35 @@
"auth": "token",
"connection_timeout": 1,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "bb844516-2cdd-419c-87e1-d0d3ea69fe78",
"id": "1780ae95-844c-4d5c-94fb-6ccfe4a7656d",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": "/etc/motd",
"order": null,
"os": "darwin",
"shutdown_script": "echo bye bye",
"shutdown_script_timeout": 30,
"startup_script": null,
"startup_script_behavior": "non-blocking",
"startup_script_timeout": 30,
"token": "8a31b688-d3d2-4c22-b37e-c9810b9b329a",
"token": "695f8765-3d3d-4da0-9a5a-bb7b1f568bde",
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [],
"token": true
}
@@ -80,22 +106,35 @@
"auth": "token",
"connection_timeout": 120,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "c6123c01-0543-4102-bdcf-f0ee2a9c1269",
"id": "333b7856-24ac-46be-9ae3-e4981b25481d",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "windows",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": "blocking",
"startup_script_timeout": 300,
"token": "64185462-292f-4b75-b350-625326ba596e",
"token": "50ddfb93-264f-4f64-8c8d-db7d8d37c0a1",
"troubleshooting_url": "https://coder.com/troubleshoot"
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [],
"token": true
}
@@ -112,22 +151,35 @@
"auth": "token",
"connection_timeout": 120,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "85d0614c-3e44-4f20-b4bf-a015c8dfcaac",
"id": "90736626-71c9-4b76-bdfc-f6ce9b3dda05",
"init_script": "",
"login_before_ready": false,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "021b1139-fa63-42ba-be1a-85f8456f3c28",
"token": "8c4ae7b9-12b7-4a9c-a55a-a98cfb049103",
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [],
"token": true
}
@@ -140,7 +192,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "6753149467284740901",
"id": "6980014108785645805",
"triggers": null
},
"sensitive_values": {},
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.6.1"
version = "0.22.0"
}
}
}
@@ -23,4 +23,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+40 -4
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -17,11 +17,22 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"sensitive_values": {}
"sensitive_values": {
"display_apps": [],
"metadata": []
}
},
{
"address": "coder_app.app1",
@@ -33,9 +44,11 @@
"values": {
"command": null,
"display_name": null,
"external": false,
"healthcheck": [],
"icon": null,
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app1",
@@ -56,6 +69,7 @@
"values": {
"command": null,
"display_name": null,
"external": false,
"healthcheck": [
{
"interval": 5,
@@ -65,6 +79,7 @@
],
"icon": null,
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app2",
@@ -87,9 +102,11 @@
"values": {
"command": null,
"display_name": null,
"external": false,
"healthcheck": [],
"icon": null,
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app3",
@@ -133,17 +150,29 @@
"connection_timeout": 120,
"dir": null,
"env": null,
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
"token": true
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
}
@@ -162,9 +191,11 @@
"after": {
"command": null,
"display_name": null,
"external": false,
"healthcheck": [],
"icon": null,
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app1",
@@ -196,6 +227,7 @@
"after": {
"command": null,
"display_name": null,
"external": false,
"healthcheck": [
{
"interval": 5,
@@ -205,6 +237,7 @@
],
"icon": null,
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app2",
@@ -240,9 +273,11 @@
"after": {
"command": null,
"display_name": null,
"external": false,
"healthcheck": [],
"icon": null,
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app3",
@@ -287,7 +322,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.6.1"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -410,5 +445,6 @@
]
}
],
"timestamp": "2023-08-30T19:25:22Z"
"timestamp": "2024-05-22T17:03:03Z",
"errored": false
}
@@ -23,4 +23,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
+37 -10
View File
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -16,15 +16,36 @@
"auth": "token",
"connection_timeout": 120,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "c8dab94d-651c-4d9b-a19a-1c067a2976ea",
"id": "c950352c-7c4a-41cc-9049-ad07ded85c47",
"init_script": "",
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"token": "96745539-f607-45f5-aa71-4f70f593ca6a",
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "143c3974-49f5-4898-815b-c4044283ebc8",
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [],
"token": true
}
},
@@ -36,13 +57,15 @@
"provider_name": "registry.terraform.io/coder/coder",
"schema_version": 0,
"values": {
"agent_id": "c8dab94d-651c-4d9b-a19a-1c067a2976ea",
"agent_id": "c950352c-7c4a-41cc-9049-ad07ded85c47",
"command": null,
"display_name": null,
"external": false,
"healthcheck": [],
"icon": null,
"id": "de5959cb-248c-44a0-bd04-9d5f28dfb415",
"id": "23135384-0e9f-4efc-b74c-d3e5e878ed67",
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app1",
@@ -64,9 +87,10 @@
"provider_name": "registry.terraform.io/coder/coder",
"schema_version": 0,
"values": {
"agent_id": "c8dab94d-651c-4d9b-a19a-1c067a2976ea",
"agent_id": "c950352c-7c4a-41cc-9049-ad07ded85c47",
"command": null,
"display_name": null,
"external": false,
"healthcheck": [
{
"interval": 5,
@@ -75,8 +99,9 @@
}
],
"icon": null,
"id": "60aaa860-01d1-4d42-804b-2dc689676307",
"id": "01e73639-0fd1-4bcb-bd88-d22eb8244627",
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app2",
@@ -100,13 +125,15 @@
"provider_name": "registry.terraform.io/coder/coder",
"schema_version": 0,
"values": {
"agent_id": "c8dab94d-651c-4d9b-a19a-1c067a2976ea",
"agent_id": "c950352c-7c4a-41cc-9049-ad07ded85c47",
"command": null,
"display_name": null,
"external": false,
"healthcheck": [],
"icon": null,
"id": "3455e899-9bf9-4c0e-ac5b-6f861d5541a0",
"id": "058c9054-9714-4a5f-9fde-8a451ab58620",
"name": null,
"order": null,
"relative_path": null,
"share": "owner",
"slug": "app3",
@@ -128,7 +155,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "7562947701260361048",
"id": "9051436019409847411",
"triggers": null
},
"sensitive_values": {},
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.9.0"
version = "0.22.0"
}
}
}
@@ -20,4 +20,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -23,11 +23,13 @@
"display_name": "Process Count",
"interval": 5,
"key": "process_count",
"order": null,
"script": "ps -ef | wc -l",
"timeout": 1
}
],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -37,6 +39,7 @@
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [],
"metadata": [
{}
]
@@ -137,11 +140,13 @@
"display_name": "Process Count",
"interval": 5,
"key": "process_count",
"order": null,
"script": "ps -ef | wc -l",
"timeout": 1
}
],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -151,6 +156,7 @@
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [
@@ -160,6 +166,7 @@
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [
{}
],
@@ -283,7 +290,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.9.0"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -424,5 +431,6 @@
]
}
],
"timestamp": "2023-08-30T19:25:27Z"
"timestamp": "2024-05-22T17:03:06Z",
"errored": false
}
@@ -20,4 +20,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -16,8 +16,17 @@
"auth": "token",
"connection_timeout": 120,
"dir": null,
"display_apps": [
{
"port_forwarding_helper": true,
"ssh_helper": true,
"vscode": true,
"vscode_insiders": false,
"web_terminal": true
}
],
"env": null,
"id": "4d2791c5-e623-4c79-9c3a-81d70fde0f1d",
"id": "8352a117-1250-44ef-bba2-0abdb2a77665",
"init_script": "",
"login_before_ready": true,
"metadata": [
@@ -25,21 +34,26 @@
"display_name": "Process Count",
"interval": 5,
"key": "process_count",
"order": 0,
"script": "ps -ef | wc -l",
"timeout": 1
}
],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "b068b430-4ecb-4116-a103-de3aaa1abd3e",
"token": "b46fd197-3be4-42f8-9c47-5a9e71a76ef6",
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [
{}
],
"metadata": [
{}
],
@@ -57,7 +71,7 @@
"daily_cost": 29,
"hide": true,
"icon": "/icon/server.svg",
"id": "0a46d060-c676-4324-a016-8dcdc7581d36",
"id": "1f7911d4-5b64-4e20-af9b-b6ee2aff602b",
"item": [
{
"is_null": false,
@@ -72,7 +86,7 @@
"value": ""
}
],
"resource_id": "6477445272839759515"
"resource_id": "7229373774865666851"
},
"sensitive_values": {
"item": [
@@ -96,7 +110,7 @@
"daily_cost": 20,
"hide": true,
"icon": "/icon/server.svg",
"id": "77a107bc-073e-4180-9f7f-0e60fc42b6c2",
"id": "34fe7a46-2a2f-4628-8946-ef80a7ffdb5e",
"item": [
{
"is_null": false,
@@ -105,7 +119,7 @@
"value": "world"
}
],
"resource_id": "6477445272839759515"
"resource_id": "7229373774865666851"
},
"sensitive_values": {
"item": [
@@ -125,7 +139,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "6477445272839759515",
"id": "7229373774865666851",
"triggers": null
},
"sensitive_values": {},
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.14.1"
version = "0.22.0"
}
}
}
@@ -1,9 +1,19 @@
digraph G {
rankdir = "RL";
node [shape = rect, fontname = "sans-serif"];
"coder_agent.main" [label="coder_agent.main"];
"coder_metadata.about_info" [label="coder_metadata.about_info"];
"null_resource.about" [label="null_resource.about"];
"coder_metadata.about_info" -> "null_resource.about";
"null_resource.about" -> "coder_agent.main";
digraph {
compound = "true"
newrank = "true"
subgraph "root" {
"[root] coder_agent.main (expand)" [label = "coder_agent.main", shape = "box"]
"[root] coder_metadata.about_info (expand)" [label = "coder_metadata.about_info", shape = "box"]
"[root] null_resource.about (expand)" [label = "null_resource.about", shape = "box"]
"[root] provider[\"registry.terraform.io/coder/coder\"]" [label = "provider[\"registry.terraform.io/coder/coder\"]", shape = "diamond"]
"[root] provider[\"registry.terraform.io/hashicorp/null\"]" [label = "provider[\"registry.terraform.io/hashicorp/null\"]", shape = "diamond"]
"[root] coder_agent.main (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
"[root] coder_metadata.about_info (expand)" -> "[root] null_resource.about (expand)"
"[root] null_resource.about (expand)" -> "[root] coder_agent.main (expand)"
"[root] null_resource.about (expand)" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"]"
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_metadata.about_info (expand)"
"[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)" -> "[root] null_resource.about (expand)"
"[root] root" -> "[root] provider[\"registry.terraform.io/coder/coder\"] (close)"
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.7.1-dev",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -29,6 +29,7 @@
}
],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -132,6 +133,7 @@
}
],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -253,7 +255,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.14.1"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -381,6 +383,6 @@
]
}
],
"timestamp": "2024-02-08T11:45:52Z",
"timestamp": "2024-05-22T17:03:05Z",
"errored": false
}
@@ -1,9 +1,19 @@
digraph G {
rankdir = "RL";
node [shape = rect, fontname = "sans-serif"];
"coder_agent.main" [label="coder_agent.main"];
"coder_metadata.about_info" [label="coder_metadata.about_info"];
"null_resource.about" [label="null_resource.about"];
"coder_metadata.about_info" -> "null_resource.about";
"null_resource.about" -> "coder_agent.main";
digraph {
compound = "true"
newrank = "true"
subgraph "root" {
"[root] coder_agent.main (expand)" [label = "coder_agent.main", shape = "box"]
"[root] coder_metadata.about_info (expand)" [label = "coder_metadata.about_info", shape = "box"]
"[root] null_resource.about (expand)" [label = "null_resource.about", shape = "box"]
"[root] provider[\"registry.terraform.io/coder/coder\"]" [label = "provider[\"registry.terraform.io/coder/coder\"]", shape = "diamond"]
"[root] provider[\"registry.terraform.io/hashicorp/null\"]" [label = "provider[\"registry.terraform.io/hashicorp/null\"]", shape = "diamond"]
"[root] coder_agent.main (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
"[root] coder_metadata.about_info (expand)" -> "[root] null_resource.about (expand)"
"[root] null_resource.about (expand)" -> "[root] coder_agent.main (expand)"
"[root] null_resource.about (expand)" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"]"
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_metadata.about_info (expand)"
"[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)" -> "[root] null_resource.about (expand)"
"[root] root" -> "[root] provider[\"registry.terraform.io/coder/coder\"] (close)"
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.0",
"terraform_version": "1.7.1",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -26,7 +26,7 @@
}
],
"env": null,
"id": "90e2f3da-90d8-4cfd-8cfd-6e9c9da29a37",
"id": "847150eb-c3b6-497d-9dad-8e62d478cfff",
"init_script": "",
"login_before_ready": true,
"metadata": [
@@ -40,13 +40,14 @@
}
],
"motd_file": null,
"order": null,
"os": "linux",
"shutdown_script": null,
"shutdown_script_timeout": 300,
"startup_script": null,
"startup_script_behavior": null,
"startup_script_timeout": 300,
"token": "f6f9a6c5-d352-4029-b476-67edfe802806",
"token": "a0c4f2f5-cc40-4731-9028-636033229c9c",
"troubleshooting_url": null
},
"sensitive_values": {
@@ -70,7 +71,7 @@
"daily_cost": 29,
"hide": true,
"icon": "/icon/server.svg",
"id": "a485c7b2-2b6c-42ab-b6d5-f51b681a5a41",
"id": "3feec3a3-6f9e-4cfb-b122-2273e345def0",
"item": [
{
"is_null": false,
@@ -97,7 +98,7 @@
"value": "squirrel"
}
],
"resource_id": "5837178340504502573"
"resource_id": "160324296641913729"
},
"sensitive_values": {
"item": [
@@ -120,7 +121,7 @@
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "5837178340504502573",
"id": "160324296641913729",
"triggers": null
},
"sensitive_values": {},
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.9.0"
version = "0.22.0"
}
}
}
@@ -21,4 +21,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -1,6 +1,6 @@
{
"format_version": "1.2",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"planned_values": {
"root_module": {
"resources": [
@@ -20,6 +20,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "windows",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -29,6 +30,7 @@
"troubleshooting_url": null
},
"sensitive_values": {
"display_apps": [],
"metadata": []
}
},
@@ -68,6 +70,7 @@
"login_before_ready": true,
"metadata": [],
"motd_file": null,
"order": null,
"os": "windows",
"shutdown_script": null,
"shutdown_script_timeout": 300,
@@ -77,6 +80,7 @@
"troubleshooting_url": null
},
"after_unknown": {
"display_apps": true,
"id": true,
"init_script": true,
"metadata": [],
@@ -84,6 +88,7 @@
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"token": true
}
@@ -113,7 +118,7 @@
],
"prior_state": {
"format_version": "1.0",
"terraform_version": "1.5.5",
"terraform_version": "1.7.5",
"values": {
"root_module": {
"resources": [
@@ -128,10 +133,9 @@
"default": null,
"description": null,
"display_name": null,
"ephemeral": false,
"icon": null,
"id": "245304bd-d7c0-4dc0-b4b2-90a036245af0",
"legacy_variable": null,
"legacy_variable_name": null,
"id": "7fb346d2-b8c2-4f2a-99d1-a8fd54cc479e",
"mutable": false,
"name": "Example",
"option": null,
@@ -156,10 +160,9 @@
"default": "ok",
"description": "blah blah",
"display_name": null,
"ephemeral": false,
"icon": null,
"id": "bccaddc6-97f1-48aa-a1c0-3438cc96139d",
"legacy_variable": null,
"legacy_variable_name": null,
"id": "0581cc2a-9e6d-4f04-93a6-88fcbd0757f0",
"mutable": false,
"name": "Sample",
"option": null,
@@ -182,7 +185,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.9.0"
"version_constraint": "0.22.0"
},
"null": {
"name": "null",
@@ -265,5 +268,6 @@
]
}
},
"timestamp": "2023-08-30T19:25:32Z"
"timestamp": "2024-05-22T17:03:11Z",
"errored": false
}
@@ -21,4 +21,3 @@ digraph {
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}

Some files were not shown because too many files have changed in this diff Show More