Skip to content

Commit 04d45f3

Browse files
bpmctdeansheather
andauthored
fix!: remove AUTO_IMPORT_TEMPLATE for Kubernetes installs (#5401)
* fix!: remove AUTO_IMPORT_TEMPLATE * chore: remove template auto importing Co-authored-by: Dean Sheather <dean@deansheather.com>
1 parent 2459233 commit 04d45f3

File tree

15 files changed

+0
-355
lines changed

15 files changed

+0
-355
lines changed

cli/deployment/config.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -362,12 +362,6 @@ func newConfig() *codersdk.DeploymentConfig {
362362
Flag: "ssh-keygen-algorithm",
363363
Default: "ed25519",
364364
},
365-
AutoImportTemplates: &codersdk.DeploymentConfigField[[]string]{
366-
Name: "Auto Import Templates",
367-
Usage: "Templates to auto-import. Available auto-importable templates are: kubernetes",
368-
Flag: "auto-import-template",
369-
Hidden: true,
370-
},
371365
MetricsCacheRefreshInterval: &codersdk.DeploymentConfigField[time.Duration]{
372366
Name: "Metrics Cache Refresh Interval",
373367
Usage: "How frequently metrics are refreshed",

cli/server.go

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -371,27 +371,6 @@ func Server(vip *viper.Viper, newAPI func(context.Context, *coderd.Options) (*co
371371
return xerrors.Errorf("parse ssh keygen algorithm %s: %w", cfg.SSHKeygenAlgorithm.Value, err)
372372
}
373373

374-
// Validate provided auto-import templates.
375-
var (
376-
validatedAutoImportTemplates = make([]coderd.AutoImportTemplate, len(cfg.AutoImportTemplates.Value))
377-
seenValidatedAutoImportTemplates = make(map[coderd.AutoImportTemplate]struct{}, len(cfg.AutoImportTemplates.Value))
378-
)
379-
for i, autoImportTemplate := range cfg.AutoImportTemplates.Value {
380-
var v coderd.AutoImportTemplate
381-
switch autoImportTemplate {
382-
case "kubernetes":
383-
v = coderd.AutoImportTemplateKubernetes
384-
default:
385-
return xerrors.Errorf("auto import template %q is not supported", autoImportTemplate)
386-
}
387-
388-
if _, ok := seenValidatedAutoImportTemplates[v]; ok {
389-
return xerrors.Errorf("auto import template %q is specified more than once", v)
390-
}
391-
seenValidatedAutoImportTemplates[v] = struct{}{}
392-
validatedAutoImportTemplates[i] = v
393-
}
394-
395374
defaultRegion := &tailcfg.DERPRegion{
396375
EmbeddedRelay: true,
397376
RegionID: cfg.DERP.Server.RegionID.Value,
@@ -449,7 +428,6 @@ func Server(vip *viper.Viper, newAPI func(context.Context, *coderd.Options) (*co
449428
SSHKeygenAlgorithm: sshKeygenAlgorithm,
450429
TracerProvider: tracerProvider,
451430
Telemetry: telemetry.NewNoop(),
452-
AutoImportTemplates: validatedAutoImportTemplates,
453431
MetricsCacheRefreshInterval: cfg.MetricsCacheRefreshInterval.Value,
454432
AgentStatsRefreshInterval: cfg.AgentStatRefreshInterval.Value,
455433
DeploymentConfig: cfg,

coderd/apidoc/docs.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1573,9 +1573,6 @@ const docTemplate = `{
15731573
"audit_logging": {
15741574
"$ref": "#/definitions/codersdk.DeploymentConfigField-bool"
15751575
},
1576-
"auto_import_templates": {
1577-
"$ref": "#/definitions/codersdk.DeploymentConfigField-array_string"
1578-
},
15791576
"autobuild_poll_interval": {
15801577
"$ref": "#/definitions/codersdk.DeploymentConfigField-time_Duration"
15811578
},

coderd/apidoc/swagger.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,9 +1393,6 @@
13931393
"audit_logging": {
13941394
"$ref": "#/definitions/codersdk.DeploymentConfigField-bool"
13951395
},
1396-
"auto_import_templates": {
1397-
"$ref": "#/definitions/codersdk.DeploymentConfigField-array_string"
1398-
},
13991396
"autobuild_poll_interval": {
14001397
"$ref": "#/definitions/codersdk.DeploymentConfigField-time_Duration"
14011398
},

coderd/coderd.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ type Options struct {
9797
SSHKeygenAlgorithm gitsshkey.Algorithm
9898
Telemetry telemetry.Reporter
9999
TracerProvider trace.TracerProvider
100-
AutoImportTemplates []AutoImportTemplate
101100
GitAuthConfigs []*gitauth.Config
102101
RealIPConfig *httpmw.RealIPConfig
103102
TrialGenerator func(ctx context.Context, email string) error

coderd/coderdtest/coderdtest.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ type Options struct {
9393
GoogleTokenValidator *idtoken.Validator
9494
SSHKeygenAlgorithm gitsshkey.Algorithm
9595
APIRateLimit int
96-
AutoImportTemplates []coderd.AutoImportTemplate
9796
AutobuildTicker <-chan time.Time
9897
AutobuildStats chan<- executor.Stats
9998
Auditor audit.Auditor
@@ -294,7 +293,6 @@ func NewOptions(t *testing.T, options *Options) (func(http.Handler), context.Can
294293
},
295294
},
296295
},
297-
AutoImportTemplates: options.AutoImportTemplates,
298296
MetricsCacheRefreshInterval: options.MetricsCacheRefreshInterval,
299297
AgentStatsRefreshInterval: options.AgentStatsRefreshInterval,
300298
DeploymentConfig: options.DeploymentConfig,

coderd/templates.go

Lines changed: 0 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package coderd
22

33
import (
44
"context"
5-
"crypto/sha256"
65
"database/sql"
7-
"encoding/hex"
86
"errors"
97
"fmt"
108
"net/http"
@@ -13,7 +11,6 @@ import (
1311

1412
"github.com/go-chi/chi/v5"
1513
"github.com/google/uuid"
16-
"github.com/moby/moby/pkg/namesgenerator"
1714
"golang.org/x/xerrors"
1815

1916
"github.com/coder/coder/coderd/audit"
@@ -26,14 +23,6 @@ import (
2623
"github.com/coder/coder/examples"
2724
)
2825

29-
// Auto-importable templates. These can be auto-imported after the first user
30-
// has been created.
31-
type AutoImportTemplate string
32-
33-
const (
34-
AutoImportTemplateKubernetes AutoImportTemplate = "kubernetes"
35-
)
36-
3726
// @Summary Get template metadata by ID
3827
// @ID get-template-metadata-by-id
3928
// @Security CoderSessionToken
@@ -640,147 +629,6 @@ func (api *API) templateExamples(rw http.ResponseWriter, r *http.Request) {
640629
httpapi.Write(ctx, rw, http.StatusOK, ex)
641630
}
642631

643-
type autoImportTemplateOpts struct {
644-
name string
645-
archive []byte
646-
params map[string]string
647-
userID uuid.UUID
648-
orgID uuid.UUID
649-
}
650-
651-
func (api *API) autoImportTemplate(ctx context.Context, opts autoImportTemplateOpts) (database.Template, error) {
652-
var template database.Template
653-
err := api.Database.InTx(func(tx database.Store) error {
654-
// Insert the archive into the files table.
655-
var (
656-
hash = sha256.Sum256(opts.archive)
657-
now = database.Now()
658-
)
659-
file, err := tx.InsertFile(ctx, database.InsertFileParams{
660-
ID: uuid.New(),
661-
Hash: hex.EncodeToString(hash[:]),
662-
CreatedAt: now,
663-
CreatedBy: opts.userID,
664-
Mimetype: "application/x-tar",
665-
Data: opts.archive,
666-
})
667-
if err != nil {
668-
return xerrors.Errorf("insert auto-imported template archive into files table: %w", err)
669-
}
670-
671-
jobID := uuid.New()
672-
673-
// Insert parameters
674-
for key, value := range opts.params {
675-
_, err = tx.InsertParameterValue(ctx, database.InsertParameterValueParams{
676-
ID: uuid.New(),
677-
Name: key,
678-
CreatedAt: now,
679-
UpdatedAt: now,
680-
Scope: database.ParameterScopeImportJob,
681-
ScopeID: jobID,
682-
SourceScheme: database.ParameterSourceSchemeData,
683-
SourceValue: value,
684-
DestinationScheme: database.ParameterDestinationSchemeProvisionerVariable,
685-
})
686-
if err != nil {
687-
return xerrors.Errorf("insert job-scoped parameter %q with value %q: %w", key, value, err)
688-
}
689-
}
690-
691-
// Create provisioner job
692-
job, err := tx.InsertProvisionerJob(ctx, database.InsertProvisionerJobParams{
693-
ID: jobID,
694-
CreatedAt: now,
695-
UpdatedAt: now,
696-
OrganizationID: opts.orgID,
697-
InitiatorID: opts.userID,
698-
Provisioner: database.ProvisionerTypeTerraform,
699-
StorageMethod: database.ProvisionerStorageMethodFile,
700-
FileID: file.ID,
701-
Type: database.ProvisionerJobTypeTemplateVersionImport,
702-
Input: []byte{'{', '}'},
703-
})
704-
if err != nil {
705-
return xerrors.Errorf("insert provisioner job: %w", err)
706-
}
707-
708-
// Create template version
709-
templateVersion, err := tx.InsertTemplateVersion(ctx, database.InsertTemplateVersionParams{
710-
ID: uuid.New(),
711-
TemplateID: uuid.NullUUID{
712-
UUID: uuid.Nil,
713-
Valid: false,
714-
},
715-
OrganizationID: opts.orgID,
716-
CreatedAt: now,
717-
UpdatedAt: now,
718-
Name: namesgenerator.GetRandomName(1),
719-
Readme: "",
720-
JobID: job.ID,
721-
CreatedBy: opts.userID,
722-
})
723-
if err != nil {
724-
return xerrors.Errorf("insert template version: %w", err)
725-
}
726-
727-
// Create template
728-
template, err = tx.InsertTemplate(ctx, database.InsertTemplateParams{
729-
ID: uuid.New(),
730-
CreatedAt: now,
731-
UpdatedAt: now,
732-
OrganizationID: opts.orgID,
733-
Name: opts.name,
734-
Provisioner: job.Provisioner,
735-
ActiveVersionID: templateVersion.ID,
736-
Description: "This template was auto-imported by Coder.",
737-
DefaultTTL: 0,
738-
CreatedBy: opts.userID,
739-
UserACL: database.TemplateACL{},
740-
GroupACL: database.TemplateACL{
741-
opts.orgID.String(): []rbac.Action{rbac.ActionRead},
742-
},
743-
})
744-
if err != nil {
745-
return xerrors.Errorf("insert template: %w", err)
746-
}
747-
748-
// Update template version with template ID
749-
err = tx.UpdateTemplateVersionByID(ctx, database.UpdateTemplateVersionByIDParams{
750-
ID: templateVersion.ID,
751-
TemplateID: uuid.NullUUID{
752-
UUID: template.ID,
753-
Valid: true,
754-
},
755-
})
756-
if err != nil {
757-
return xerrors.Errorf("update template version to set template ID: %s", err)
758-
}
759-
760-
// Insert parameters at the template scope
761-
for key, value := range opts.params {
762-
_, err = tx.InsertParameterValue(ctx, database.InsertParameterValueParams{
763-
ID: uuid.New(),
764-
Name: key,
765-
CreatedAt: now,
766-
UpdatedAt: now,
767-
Scope: database.ParameterScopeTemplate,
768-
ScopeID: template.ID,
769-
SourceScheme: database.ParameterSourceSchemeData,
770-
SourceValue: value,
771-
DestinationScheme: database.ParameterDestinationSchemeProvisionerVariable,
772-
})
773-
if err != nil {
774-
return xerrors.Errorf("insert template-scoped parameter %q with value %q: %w", key, value, err)
775-
}
776-
}
777-
778-
return nil
779-
}, nil)
780-
781-
return template, err
782-
}
783-
784632
func getCreatedByNamesByTemplateIDs(ctx context.Context, db database.Store, templates []database.Template) (map[string]string, error) {
785633
creators := make(map[string]string, len(templates))
786634
for _, template := range templates {

coderd/users.go

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package coderd
22

33
import (
4-
"bytes"
54
"context"
65
"database/sql"
76
"errors"
87
"fmt"
98
"net/http"
109
"net/url"
11-
"os"
1210
"strings"
1311

1412
"github.com/go-chi/chi/v5"
@@ -27,7 +25,6 @@ import (
2725
"github.com/coder/coder/coderd/userpassword"
2826
"github.com/coder/coder/coderd/util/slice"
2927
"github.com/coder/coder/codersdk"
30-
"github.com/coder/coder/examples"
3128
)
3229

3330
// Returns whether the initial user has been created or not.
@@ -132,60 +129,6 @@ func (api *API) postFirstUser(rw http.ResponseWriter, r *http.Request) {
132129
return
133130
}
134131

135-
// Auto-import any designated templates into the new organization.
136-
for _, template := range api.AutoImportTemplates {
137-
archive, err := examples.Archive(string(template))
138-
if err != nil {
139-
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
140-
Message: "Internal error importing template.",
141-
Detail: xerrors.Errorf("load template archive for %q: %w", template, err).Error(),
142-
})
143-
return
144-
}
145-
146-
// Determine which parameter values to use.
147-
parameters := map[string]string{}
148-
switch template {
149-
case AutoImportTemplateKubernetes:
150-
151-
// Determine the current namespace we're in.
152-
const namespaceFile = "/var/run/secrets/kubernetes.io/serviceaccount/namespace"
153-
namespace, err := os.ReadFile(namespaceFile)
154-
if err != nil {
155-
parameters["use_kubeconfig"] = "true" // use ~/.config/kubeconfig
156-
parameters["namespace"] = "coder-workspaces"
157-
} else {
158-
parameters["use_kubeconfig"] = "false" // use SA auth
159-
parameters["namespace"] = string(bytes.TrimSpace(namespace))
160-
}
161-
162-
default:
163-
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
164-
Message: "Internal error importing template.",
165-
Detail: fmt.Sprintf("cannot auto-import %q template", template),
166-
})
167-
return
168-
}
169-
170-
tpl, err := api.autoImportTemplate(ctx, autoImportTemplateOpts{
171-
name: string(template),
172-
archive: archive,
173-
params: parameters,
174-
userID: user.ID,
175-
orgID: organizationID,
176-
})
177-
if err != nil {
178-
api.Logger.Warn(ctx, "failed to auto-import template", slog.F("template", template), slog.F("parameters", parameters), slog.Error(err))
179-
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
180-
Message: "Internal error importing template.",
181-
Detail: xerrors.Errorf("failed to import template %q: %w", template, err).Error(),
182-
})
183-
return
184-
}
185-
186-
api.Logger.Info(ctx, "auto-imported template", slog.F("id", tpl.ID), slog.F("template", template), slog.F("parameters", parameters))
187-
}
188-
189132
httpapi.Write(ctx, rw, http.StatusCreated, codersdk.CreateFirstUserResponse{
190133
UserID: user.ID,
191134
OrganizationID: organizationID,

0 commit comments

Comments
 (0)