mirror of
https://github.com/coder/coder.git
synced 2025-07-13 21:36:50 +00:00
adds support for workspace presets to the coderd database. Support in the API and web frontend will be added in subsequent pull requests. This is the smallest meaningful contribution that I could get passing tests for.
* Add workspace preset tables to the database in a migration * Add queries to manipulate workspace presets to the database * Generate db related code for the newly added queries * Implement new methods to satisfy the Querier interface in dbauthz, dbmem, dbmock and querymetrics * Implement the required tests for dbauthz * Update the audit table to track changes to the new column in workspace builds
This commit is contained in:
@ -1930,6 +1930,30 @@ func (q *querier) GetParameterSchemasByJobID(ctx context.Context, jobID uuid.UUI
|
|||||||
return q.db.GetParameterSchemasByJobID(ctx, jobID)
|
return q.db.GetParameterSchemasByJobID(ctx, jobID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (q *querier) GetPresetByWorkspaceBuildID(ctx context.Context, workspaceID uuid.UUID) (database.GetPresetByWorkspaceBuildIDRow, error) {
|
||||||
|
// TODO (sasswart): Double check when to and not to call .InOrg?
|
||||||
|
// TODO (sasswart): it makes sense to me that a caller can read a preset if they can read the template, but double check this.
|
||||||
|
// TODO (sasswart): apply these todos to GetPresetParametersByPresetID and GetPresetsByTemplateVersionID.
|
||||||
|
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceTemplate); err != nil {
|
||||||
|
return database.GetPresetByWorkspaceBuildIDRow{}, err
|
||||||
|
}
|
||||||
|
return q.db.GetPresetByWorkspaceBuildID(ctx, workspaceID)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *querier) GetPresetParametersByPresetID(ctx context.Context, templateVersionPresetID uuid.UUID) ([]database.GetPresetParametersByPresetIDRow, error) {
|
||||||
|
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceTemplate); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return q.db.GetPresetParametersByPresetID(ctx, templateVersionPresetID)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *querier) GetPresetsByTemplateVersionID(ctx context.Context, templateVersionID uuid.UUID) ([]database.GetPresetsByTemplateVersionIDRow, error) {
|
||||||
|
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceTemplate); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return q.db.GetPresetsByTemplateVersionID(ctx, templateVersionID)
|
||||||
|
}
|
||||||
|
|
||||||
func (q *querier) GetPreviousTemplateVersion(ctx context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) {
|
func (q *querier) GetPreviousTemplateVersion(ctx context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) {
|
||||||
// An actor can read the previous template version if they can read the related template.
|
// An actor can read the previous template version if they can read the related template.
|
||||||
// If no linked template exists, we check if the actor can read *a* template.
|
// If no linked template exists, we check if the actor can read *a* template.
|
||||||
@ -3088,6 +3112,13 @@ func (q *querier) InsertOrganizationMember(ctx context.Context, arg database.Ins
|
|||||||
return insert(q.log, q.auth, obj, q.db.InsertOrganizationMember)(ctx, arg)
|
return insert(q.log, q.auth, obj, q.db.InsertOrganizationMember)(ctx, arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (q *querier) InsertPreset(ctx context.Context, arg database.InsertPresetParams) (database.TemplateVersionPreset, error) {
|
||||||
|
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceTemplate); err != nil {
|
||||||
|
return database.TemplateVersionPreset{}, err
|
||||||
|
}
|
||||||
|
return q.db.InsertPreset(ctx, arg)
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: We need to create a ProvisionerJob resource type
|
// TODO: We need to create a ProvisionerJob resource type
|
||||||
func (q *querier) InsertProvisionerJob(ctx context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {
|
func (q *querier) InsertProvisionerJob(ctx context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {
|
||||||
// if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
|
// if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
|
||||||
|
@ -859,6 +859,40 @@ func (s *MethodTestSuite) TestOrganization() {
|
|||||||
rbac.ResourceAssignOrgRole.InOrg(o.ID), policy.ActionAssign,
|
rbac.ResourceAssignOrgRole.InOrg(o.ID), policy.ActionAssign,
|
||||||
rbac.ResourceOrganizationMember.InOrg(o.ID).WithID(u.ID), policy.ActionCreate)
|
rbac.ResourceOrganizationMember.InOrg(o.ID).WithID(u.ID), policy.ActionCreate)
|
||||||
}))
|
}))
|
||||||
|
s.Run("InsertPreset", s.Subtest(func(db database.Store, check *expects) {
|
||||||
|
org := dbgen.Organization(s.T(), db, database.Organization{})
|
||||||
|
user := dbgen.User(s.T(), db, database.User{})
|
||||||
|
template := dbgen.Template(s.T(), db, database.Template{
|
||||||
|
CreatedBy: user.ID,
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
})
|
||||||
|
templateVersion := dbgen.TemplateVersion(s.T(), db, database.TemplateVersion{
|
||||||
|
TemplateID: uuid.NullUUID{UUID: template.ID, Valid: true},
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
CreatedBy: user.ID,
|
||||||
|
})
|
||||||
|
workspace := dbgen.Workspace(s.T(), db, database.WorkspaceTable{
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
OwnerID: user.ID,
|
||||||
|
TemplateID: template.ID,
|
||||||
|
})
|
||||||
|
job := dbgen.ProvisionerJob(s.T(), db, nil, database.ProvisionerJob{
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
})
|
||||||
|
workspaceBuild := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{
|
||||||
|
WorkspaceID: workspace.ID,
|
||||||
|
TemplateVersionID: templateVersion.ID,
|
||||||
|
InitiatorID: user.ID,
|
||||||
|
JobID: job.ID,
|
||||||
|
})
|
||||||
|
params := database.InsertPresetParams{
|
||||||
|
TemplateVersionID: workspaceBuild.TemplateVersionID,
|
||||||
|
Name: "test",
|
||||||
|
}
|
||||||
|
_, err := db.InsertPreset(context.Background(), params)
|
||||||
|
require.NoError(s.T(), err)
|
||||||
|
check.Args(params).Asserts(rbac.ResourceTemplate, policy.ActionCreate)
|
||||||
|
}))
|
||||||
s.Run("DeleteOrganizationMember", s.Subtest(func(db database.Store, check *expects) {
|
s.Run("DeleteOrganizationMember", s.Subtest(func(db database.Store, check *expects) {
|
||||||
o := dbgen.Organization(s.T(), db, database.Organization{})
|
o := dbgen.Organization(s.T(), db, database.Organization{})
|
||||||
u := dbgen.User(s.T(), db, database.User{})
|
u := dbgen.User(s.T(), db, database.User{})
|
||||||
@ -3695,6 +3729,118 @@ func (s *MethodTestSuite) TestSystemFunctions() {
|
|||||||
ErrorsWithInMemDB(sql.ErrNoRows).
|
ErrorsWithInMemDB(sql.ErrNoRows).
|
||||||
Returns([]database.ParameterSchema{})
|
Returns([]database.ParameterSchema{})
|
||||||
}))
|
}))
|
||||||
|
s.Run("GetPresetByWorkspaceBuildID", s.Subtest(func(db database.Store, check *expects) {
|
||||||
|
org := dbgen.Organization(s.T(), db, database.Organization{})
|
||||||
|
user := dbgen.User(s.T(), db, database.User{})
|
||||||
|
template := dbgen.Template(s.T(), db, database.Template{
|
||||||
|
CreatedBy: user.ID,
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
})
|
||||||
|
templateVersion := dbgen.TemplateVersion(s.T(), db, database.TemplateVersion{
|
||||||
|
TemplateID: uuid.NullUUID{UUID: template.ID, Valid: true},
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
CreatedBy: user.ID,
|
||||||
|
})
|
||||||
|
workspace := dbgen.Workspace(s.T(), db, database.WorkspaceTable{
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
OwnerID: user.ID,
|
||||||
|
TemplateID: template.ID,
|
||||||
|
})
|
||||||
|
job := dbgen.ProvisionerJob(s.T(), db, nil, database.ProvisionerJob{
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
})
|
||||||
|
workspaceBuild := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{
|
||||||
|
WorkspaceID: workspace.ID,
|
||||||
|
TemplateVersionID: templateVersion.ID,
|
||||||
|
InitiatorID: user.ID,
|
||||||
|
JobID: job.ID,
|
||||||
|
})
|
||||||
|
_, err := db.InsertPreset(context.Background(), database.InsertPresetParams{
|
||||||
|
TemplateVersionID: workspaceBuild.TemplateVersionID,
|
||||||
|
Name: "test",
|
||||||
|
})
|
||||||
|
require.NoError(s.T(), err)
|
||||||
|
db.GetPresetByWorkspaceBuildID(context.Background(), workspaceBuild.ID)
|
||||||
|
check.Args(workspaceBuild.ID).Asserts(rbac.ResourceTemplate, policy.ActionRead)
|
||||||
|
}))
|
||||||
|
s.Run("GetPresetParametersByPresetID", s.Subtest(func(db database.Store, check *expects) {
|
||||||
|
org := dbgen.Organization(s.T(), db, database.Organization{})
|
||||||
|
user := dbgen.User(s.T(), db, database.User{})
|
||||||
|
template := dbgen.Template(s.T(), db, database.Template{
|
||||||
|
CreatedBy: user.ID,
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
})
|
||||||
|
templateVersion := dbgen.TemplateVersion(s.T(), db, database.TemplateVersion{
|
||||||
|
TemplateID: uuid.NullUUID{UUID: template.ID, Valid: true},
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
CreatedBy: user.ID,
|
||||||
|
})
|
||||||
|
workspace := dbgen.Workspace(s.T(), db, database.WorkspaceTable{
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
OwnerID: user.ID,
|
||||||
|
TemplateID: template.ID,
|
||||||
|
})
|
||||||
|
job := dbgen.ProvisionerJob(s.T(), db, nil, database.ProvisionerJob{
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
})
|
||||||
|
workspaceBuild := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{
|
||||||
|
WorkspaceID: workspace.ID,
|
||||||
|
TemplateVersionID: templateVersion.ID,
|
||||||
|
InitiatorID: user.ID,
|
||||||
|
JobID: job.ID,
|
||||||
|
})
|
||||||
|
_, err := db.InsertPreset(context.Background(), database.InsertPresetParams{
|
||||||
|
TemplateVersionID: workspaceBuild.TemplateVersionID,
|
||||||
|
Name: "test",
|
||||||
|
})
|
||||||
|
require.NoError(s.T(), err)
|
||||||
|
preset, err := db.InsertPreset(context.Background(), database.InsertPresetParams{
|
||||||
|
TemplateVersionID: workspaceBuild.TemplateVersionID,
|
||||||
|
Name: "test",
|
||||||
|
})
|
||||||
|
require.NoError(s.T(), err)
|
||||||
|
db.GetPresetParametersByPresetID(context.Background(), preset.ID)
|
||||||
|
check.Args(preset.ID).Asserts(rbac.ResourceTemplate, policy.ActionRead)
|
||||||
|
}))
|
||||||
|
s.Run("GetPresetsByTemplateVersionID", s.Subtest(func(db database.Store, check *expects) {
|
||||||
|
org := dbgen.Organization(s.T(), db, database.Organization{})
|
||||||
|
user := dbgen.User(s.T(), db, database.User{})
|
||||||
|
template := dbgen.Template(s.T(), db, database.Template{
|
||||||
|
CreatedBy: user.ID,
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
})
|
||||||
|
templateVersion := dbgen.TemplateVersion(s.T(), db, database.TemplateVersion{
|
||||||
|
TemplateID: uuid.NullUUID{UUID: template.ID, Valid: true},
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
CreatedBy: user.ID,
|
||||||
|
})
|
||||||
|
workspace := dbgen.Workspace(s.T(), db, database.WorkspaceTable{
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
OwnerID: user.ID,
|
||||||
|
TemplateID: template.ID,
|
||||||
|
})
|
||||||
|
job := dbgen.ProvisionerJob(s.T(), db, nil, database.ProvisionerJob{
|
||||||
|
OrganizationID: org.ID,
|
||||||
|
})
|
||||||
|
workspaceBuild := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{
|
||||||
|
WorkspaceID: workspace.ID,
|
||||||
|
TemplateVersionID: templateVersion.ID,
|
||||||
|
InitiatorID: user.ID,
|
||||||
|
JobID: job.ID,
|
||||||
|
})
|
||||||
|
_, err := db.InsertPreset(context.Background(), database.InsertPresetParams{
|
||||||
|
TemplateVersionID: workspaceBuild.TemplateVersionID,
|
||||||
|
Name: "test",
|
||||||
|
})
|
||||||
|
require.NoError(s.T(), err)
|
||||||
|
_, err = db.InsertPreset(context.Background(), database.InsertPresetParams{
|
||||||
|
TemplateVersionID: workspaceBuild.TemplateVersionID,
|
||||||
|
Name: "test",
|
||||||
|
})
|
||||||
|
require.NoError(s.T(), err)
|
||||||
|
db.GetPresetsByTemplateVersionID(context.Background(), templateVersion.ID)
|
||||||
|
check.Args(templateVersion.ID).Asserts(rbac.ResourceTemplate, policy.ActionRead)
|
||||||
|
}))
|
||||||
s.Run("GetWorkspaceAppsByAgentIDs", s.Subtest(func(db database.Store, check *expects) {
|
s.Run("GetWorkspaceAppsByAgentIDs", s.Subtest(func(db database.Store, check *expects) {
|
||||||
dbtestutil.DisableForeignKeysAndTriggers(s.T(), db)
|
dbtestutil.DisableForeignKeysAndTriggers(s.T(), db)
|
||||||
aWs := dbgen.Workspace(s.T(), db, database.WorkspaceTable{})
|
aWs := dbgen.Workspace(s.T(), db, database.WorkspaceTable{})
|
||||||
|
@ -90,6 +90,8 @@ func New() database.Store {
|
|||||||
runtimeConfig: map[string]string{},
|
runtimeConfig: map[string]string{},
|
||||||
userStatusChanges: make([]database.UserStatusChange, 0),
|
userStatusChanges: make([]database.UserStatusChange, 0),
|
||||||
telemetryItems: make([]database.TelemetryItem, 0),
|
telemetryItems: make([]database.TelemetryItem, 0),
|
||||||
|
presets: make([]database.TemplateVersionPreset, 0),
|
||||||
|
presetParameters: make([]database.TemplateVersionPresetParameter, 0),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
// Always start with a default org. Matching migration 198.
|
// Always start with a default org. Matching migration 198.
|
||||||
@ -262,6 +264,8 @@ type data struct {
|
|||||||
defaultProxyIconURL string
|
defaultProxyIconURL string
|
||||||
userStatusChanges []database.UserStatusChange
|
userStatusChanges []database.UserStatusChange
|
||||||
telemetryItems []database.TelemetryItem
|
telemetryItems []database.TelemetryItem
|
||||||
|
presets []database.TemplateVersionPreset
|
||||||
|
presetParameters []database.TemplateVersionPresetParameter
|
||||||
}
|
}
|
||||||
|
|
||||||
func tryPercentile(fs []float64, p float64) float64 {
|
func tryPercentile(fs []float64, p float64) float64 {
|
||||||
@ -3776,6 +3780,45 @@ func (q *FakeQuerier) GetParameterSchemasByJobID(_ context.Context, jobID uuid.U
|
|||||||
return parameters, nil
|
return parameters, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (q *FakeQuerier) GetPresetByWorkspaceBuildID(ctx context.Context, workspaceBuildID uuid.UUID) (database.GetPresetByWorkspaceBuildIDRow, error) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *FakeQuerier) GetPresetParametersByPresetID(_ context.Context, templateVersionPresetID uuid.UUID) ([]database.GetPresetParametersByPresetIDRow, error) {
|
||||||
|
q.mutex.RLock()
|
||||||
|
defer q.mutex.RUnlock()
|
||||||
|
|
||||||
|
parameters := make([]database.GetPresetParametersByPresetIDRow, 0)
|
||||||
|
for _, parameter := range q.presetParameters {
|
||||||
|
if parameter.TemplateVersionPresetID == templateVersionPresetID {
|
||||||
|
parameters = append(parameters, database.GetPresetParametersByPresetIDRow{
|
||||||
|
ID: parameter.ID,
|
||||||
|
Name: parameter.Name,
|
||||||
|
Value: parameter.Value,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return parameters, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *FakeQuerier) GetPresetsByTemplateVersionID(ctx context.Context, templateVersionID uuid.UUID) ([]database.GetPresetsByTemplateVersionIDRow, error) {
|
||||||
|
q.mutex.RLock()
|
||||||
|
defer q.mutex.RUnlock()
|
||||||
|
|
||||||
|
presets := make([]database.GetPresetsByTemplateVersionIDRow, 0)
|
||||||
|
for _, preset := range q.presets {
|
||||||
|
if preset.TemplateVersionID == templateVersionID {
|
||||||
|
presets = append(presets, database.GetPresetsByTemplateVersionIDRow{
|
||||||
|
ID: preset.ID,
|
||||||
|
Name: preset.Name,
|
||||||
|
CreatedAt: preset.CreatedAt,
|
||||||
|
UpdatedAt: preset.UpdatedAt,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return presets, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (q *FakeQuerier) GetPreviousTemplateVersion(_ context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) {
|
func (q *FakeQuerier) GetPreviousTemplateVersion(_ context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) {
|
||||||
if err := validateDatabaseType(arg); err != nil {
|
if err := validateDatabaseType(arg); err != nil {
|
||||||
return database.TemplateVersion{}, err
|
return database.TemplateVersion{}, err
|
||||||
@ -8042,6 +8085,26 @@ func (q *FakeQuerier) InsertOrganizationMember(_ context.Context, arg database.I
|
|||||||
return organizationMember, nil
|
return organizationMember, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (q *FakeQuerier) InsertPreset(ctx context.Context, arg database.InsertPresetParams) (database.TemplateVersionPreset, error) {
|
||||||
|
err := validateDatabaseType(arg)
|
||||||
|
if err != nil {
|
||||||
|
return database.TemplateVersionPreset{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
q.mutex.Lock()
|
||||||
|
defer q.mutex.Unlock()
|
||||||
|
|
||||||
|
preset := database.TemplateVersionPreset{
|
||||||
|
// TODO (sasswart): double check how we generate these IDs in postgres.
|
||||||
|
// They should not be params here.
|
||||||
|
Name: arg.Name,
|
||||||
|
CreatedAt: arg.CreatedAt,
|
||||||
|
UpdatedAt: arg.UpdatedAt,
|
||||||
|
}
|
||||||
|
q.presets = append(q.presets, preset)
|
||||||
|
return preset, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (q *FakeQuerier) InsertProvisionerJob(_ context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {
|
func (q *FakeQuerier) InsertProvisionerJob(_ context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {
|
||||||
if err := validateDatabaseType(arg); err != nil {
|
if err := validateDatabaseType(arg); err != nil {
|
||||||
return database.ProvisionerJob{}, err
|
return database.ProvisionerJob{}, err
|
||||||
|
@ -980,6 +980,27 @@ func (m queryMetricsStore) GetParameterSchemasByJobID(ctx context.Context, jobID
|
|||||||
return schemas, err
|
return schemas, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m queryMetricsStore) GetPresetByWorkspaceBuildID(ctx context.Context, workspaceBuildID uuid.UUID) (database.GetPresetByWorkspaceBuildIDRow, error) {
|
||||||
|
start := time.Now()
|
||||||
|
r0, r1 := m.s.GetPresetByWorkspaceBuildID(ctx, workspaceBuildID)
|
||||||
|
m.queryLatencies.WithLabelValues("GetPresetByWorkspaceBuildID").Observe(time.Since(start).Seconds())
|
||||||
|
return r0, r1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m queryMetricsStore) GetPresetParametersByPresetID(ctx context.Context, templateVersionPresetID uuid.UUID) ([]database.GetPresetParametersByPresetIDRow, error) {
|
||||||
|
start := time.Now()
|
||||||
|
r0, r1 := m.s.GetPresetParametersByPresetID(ctx, templateVersionPresetID)
|
||||||
|
m.queryLatencies.WithLabelValues("GetPresetParametersByPresetID").Observe(time.Since(start).Seconds())
|
||||||
|
return r0, r1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m queryMetricsStore) GetPresetsByTemplateVersionID(ctx context.Context, templateVersionID uuid.UUID) ([]database.GetPresetsByTemplateVersionIDRow, error) {
|
||||||
|
start := time.Now()
|
||||||
|
r0, r1 := m.s.GetPresetsByTemplateVersionID(ctx, templateVersionID)
|
||||||
|
m.queryLatencies.WithLabelValues("GetPresetsByTemplateVersionID").Observe(time.Since(start).Seconds())
|
||||||
|
return r0, r1
|
||||||
|
}
|
||||||
|
|
||||||
func (m queryMetricsStore) GetPreviousTemplateVersion(ctx context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) {
|
func (m queryMetricsStore) GetPreviousTemplateVersion(ctx context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
version, err := m.s.GetPreviousTemplateVersion(ctx, arg)
|
version, err := m.s.GetPreviousTemplateVersion(ctx, arg)
|
||||||
@ -1911,6 +1932,13 @@ func (m queryMetricsStore) InsertOrganizationMember(ctx context.Context, arg dat
|
|||||||
return member, err
|
return member, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m queryMetricsStore) InsertPreset(ctx context.Context, arg database.InsertPresetParams) (database.TemplateVersionPreset, error) {
|
||||||
|
start := time.Now()
|
||||||
|
r0, r1 := m.s.InsertPreset(ctx, arg)
|
||||||
|
m.queryLatencies.WithLabelValues("InsertPreset").Observe(time.Since(start).Seconds())
|
||||||
|
return r0, r1
|
||||||
|
}
|
||||||
|
|
||||||
func (m queryMetricsStore) InsertProvisionerJob(ctx context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {
|
func (m queryMetricsStore) InsertProvisionerJob(ctx context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
job, err := m.s.InsertProvisionerJob(ctx, arg)
|
job, err := m.s.InsertProvisionerJob(ctx, arg)
|
||||||
|
@ -2016,6 +2016,51 @@ func (mr *MockStoreMockRecorder) GetParameterSchemasByJobID(ctx, jobID any) *gom
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetParameterSchemasByJobID", reflect.TypeOf((*MockStore)(nil).GetParameterSchemasByJobID), ctx, jobID)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetParameterSchemasByJobID", reflect.TypeOf((*MockStore)(nil).GetParameterSchemasByJobID), ctx, jobID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPresetByWorkspaceBuildID mocks base method.
|
||||||
|
func (m *MockStore) GetPresetByWorkspaceBuildID(arg0 context.Context, arg1 uuid.UUID) (database.GetPresetByWorkspaceBuildIDRow, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "GetPresetByWorkspaceBuildID", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(database.GetPresetByWorkspaceBuildIDRow)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPresetByWorkspaceBuildID indicates an expected call of GetPresetByWorkspaceBuildID.
|
||||||
|
func (mr *MockStoreMockRecorder) GetPresetByWorkspaceBuildID(arg0, arg1 any) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPresetByWorkspaceBuildID", reflect.TypeOf((*MockStore)(nil).GetPresetByWorkspaceBuildID), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPresetParametersByPresetID mocks base method.
|
||||||
|
func (m *MockStore) GetPresetParametersByPresetID(arg0 context.Context, arg1 uuid.UUID) ([]database.GetPresetParametersByPresetIDRow, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "GetPresetParametersByPresetID", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].([]database.GetPresetParametersByPresetIDRow)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPresetParametersByPresetID indicates an expected call of GetPresetParametersByPresetID.
|
||||||
|
func (mr *MockStoreMockRecorder) GetPresetParametersByPresetID(arg0, arg1 any) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPresetParametersByPresetID", reflect.TypeOf((*MockStore)(nil).GetPresetParametersByPresetID), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPresetsByTemplateVersionID mocks base method.
|
||||||
|
func (m *MockStore) GetPresetsByTemplateVersionID(arg0 context.Context, arg1 uuid.UUID) ([]database.GetPresetsByTemplateVersionIDRow, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "GetPresetsByTemplateVersionID", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].([]database.GetPresetsByTemplateVersionIDRow)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPresetsByTemplateVersionID indicates an expected call of GetPresetsByTemplateVersionID.
|
||||||
|
func (mr *MockStoreMockRecorder) GetPresetsByTemplateVersionID(arg0, arg1 any) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPresetsByTemplateVersionID", reflect.TypeOf((*MockStore)(nil).GetPresetsByTemplateVersionID), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// GetPreviousTemplateVersion mocks base method.
|
// GetPreviousTemplateVersion mocks base method.
|
||||||
func (m *MockStore) GetPreviousTemplateVersion(ctx context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) {
|
func (m *MockStore) GetPreviousTemplateVersion(ctx context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@ -4051,6 +4096,21 @@ func (mr *MockStoreMockRecorder) InsertOrganizationMember(ctx, arg any) *gomock.
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InsertOrganizationMember", reflect.TypeOf((*MockStore)(nil).InsertOrganizationMember), ctx, arg)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InsertOrganizationMember", reflect.TypeOf((*MockStore)(nil).InsertOrganizationMember), ctx, arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// InsertPreset mocks base method.
|
||||||
|
func (m *MockStore) InsertPreset(arg0 context.Context, arg1 database.InsertPresetParams) (database.TemplateVersionPreset, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "InsertPreset", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(database.TemplateVersionPreset)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertPreset indicates an expected call of InsertPreset.
|
||||||
|
func (mr *MockStoreMockRecorder) InsertPreset(arg0, arg1 any) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InsertPreset", reflect.TypeOf((*MockStore)(nil).InsertPreset), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// InsertProvisionerJob mocks base method.
|
// InsertProvisionerJob mocks base method.
|
||||||
func (m *MockStore) InsertProvisionerJob(ctx context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {
|
func (m *MockStore) InsertProvisionerJob(ctx context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
31
coderd/database/dump.sql
generated
31
coderd/database/dump.sql
generated
@ -1265,6 +1265,21 @@ COMMENT ON COLUMN template_version_parameters.display_order IS 'Specifies the or
|
|||||||
|
|
||||||
COMMENT ON COLUMN template_version_parameters.ephemeral IS 'The value of an ephemeral parameter will not be preserved between consecutive workspace builds.';
|
COMMENT ON COLUMN template_version_parameters.ephemeral IS 'The value of an ephemeral parameter will not be preserved between consecutive workspace builds.';
|
||||||
|
|
||||||
|
CREATE TABLE template_version_preset_parameters (
|
||||||
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
||||||
|
template_version_preset_id uuid NOT NULL,
|
||||||
|
name text NOT NULL,
|
||||||
|
value text NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE template_version_presets (
|
||||||
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
||||||
|
template_version_id uuid NOT NULL,
|
||||||
|
name text NOT NULL,
|
||||||
|
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
||||||
|
updated_at timestamp with time zone
|
||||||
|
);
|
||||||
|
|
||||||
CREATE TABLE template_version_variables (
|
CREATE TABLE template_version_variables (
|
||||||
template_version_id uuid NOT NULL,
|
template_version_id uuid NOT NULL,
|
||||||
name text NOT NULL,
|
name text NOT NULL,
|
||||||
@ -1729,7 +1744,8 @@ CREATE TABLE workspace_builds (
|
|||||||
deadline timestamp with time zone DEFAULT '0001-01-01 00:00:00+00'::timestamp with time zone NOT NULL,
|
deadline timestamp with time zone DEFAULT '0001-01-01 00:00:00+00'::timestamp with time zone NOT NULL,
|
||||||
reason build_reason DEFAULT 'initiator'::build_reason NOT NULL,
|
reason build_reason DEFAULT 'initiator'::build_reason NOT NULL,
|
||||||
daily_cost integer DEFAULT 0 NOT NULL,
|
daily_cost integer DEFAULT 0 NOT NULL,
|
||||||
max_deadline timestamp with time zone DEFAULT '0001-01-01 00:00:00+00'::timestamp with time zone NOT NULL
|
max_deadline timestamp with time zone DEFAULT '0001-01-01 00:00:00+00'::timestamp with time zone NOT NULL,
|
||||||
|
template_version_preset_id uuid
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE VIEW workspace_build_with_user AS
|
CREATE VIEW workspace_build_with_user AS
|
||||||
@ -1747,6 +1763,7 @@ CREATE VIEW workspace_build_with_user AS
|
|||||||
workspace_builds.reason,
|
workspace_builds.reason,
|
||||||
workspace_builds.daily_cost,
|
workspace_builds.daily_cost,
|
||||||
workspace_builds.max_deadline,
|
workspace_builds.max_deadline,
|
||||||
|
workspace_builds.template_version_preset_id,
|
||||||
COALESCE(visible_users.avatar_url, ''::text) AS initiator_by_avatar_url,
|
COALESCE(visible_users.avatar_url, ''::text) AS initiator_by_avatar_url,
|
||||||
COALESCE(visible_users.username, ''::text) AS initiator_by_username
|
COALESCE(visible_users.username, ''::text) AS initiator_by_username
|
||||||
FROM (workspace_builds
|
FROM (workspace_builds
|
||||||
@ -2057,6 +2074,12 @@ ALTER TABLE ONLY template_usage_stats
|
|||||||
ALTER TABLE ONLY template_version_parameters
|
ALTER TABLE ONLY template_version_parameters
|
||||||
ADD CONSTRAINT template_version_parameters_template_version_id_name_key UNIQUE (template_version_id, name);
|
ADD CONSTRAINT template_version_parameters_template_version_id_name_key UNIQUE (template_version_id, name);
|
||||||
|
|
||||||
|
ALTER TABLE ONLY template_version_preset_parameters
|
||||||
|
ADD CONSTRAINT template_version_preset_parameters_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
ALTER TABLE ONLY template_version_presets
|
||||||
|
ADD CONSTRAINT template_version_presets_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
ALTER TABLE ONLY template_version_variables
|
ALTER TABLE ONLY template_version_variables
|
||||||
ADD CONSTRAINT template_version_variables_template_version_id_name_key UNIQUE (template_version_id, name);
|
ADD CONSTRAINT template_version_variables_template_version_id_name_key UNIQUE (template_version_id, name);
|
||||||
|
|
||||||
@ -2447,6 +2470,12 @@ ALTER TABLE ONLY tailnet_tunnels
|
|||||||
ALTER TABLE ONLY template_version_parameters
|
ALTER TABLE ONLY template_version_parameters
|
||||||
ADD CONSTRAINT template_version_parameters_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
ADD CONSTRAINT template_version_parameters_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||||
|
|
||||||
|
ALTER TABLE ONLY template_version_preset_parameters
|
||||||
|
ADD CONSTRAINT template_version_preset_paramet_template_version_preset_id_fkey FOREIGN KEY (template_version_preset_id) REFERENCES template_version_presets(id) ON DELETE CASCADE;
|
||||||
|
|
||||||
|
ALTER TABLE ONLY template_version_presets
|
||||||
|
ADD CONSTRAINT template_version_presets_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||||
|
|
||||||
ALTER TABLE ONLY template_version_variables
|
ALTER TABLE ONLY template_version_variables
|
||||||
ADD CONSTRAINT template_version_variables_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
ADD CONSTRAINT template_version_variables_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||||
|
|
||||||
|
@ -6,73 +6,75 @@ type ForeignKeyConstraint string
|
|||||||
|
|
||||||
// ForeignKeyConstraint enums.
|
// ForeignKeyConstraint enums.
|
||||||
const (
|
const (
|
||||||
ForeignKeyAPIKeysUserIDUUID ForeignKeyConstraint = "api_keys_user_id_uuid_fkey" // ALTER TABLE ONLY api_keys ADD CONSTRAINT api_keys_user_id_uuid_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
ForeignKeyAPIKeysUserIDUUID ForeignKeyConstraint = "api_keys_user_id_uuid_fkey" // ALTER TABLE ONLY api_keys ADD CONSTRAINT api_keys_user_id_uuid_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
||||||
ForeignKeyCryptoKeysSecretKeyID ForeignKeyConstraint = "crypto_keys_secret_key_id_fkey" // ALTER TABLE ONLY crypto_keys ADD CONSTRAINT crypto_keys_secret_key_id_fkey FOREIGN KEY (secret_key_id) REFERENCES dbcrypt_keys(active_key_digest);
|
ForeignKeyCryptoKeysSecretKeyID ForeignKeyConstraint = "crypto_keys_secret_key_id_fkey" // ALTER TABLE ONLY crypto_keys ADD CONSTRAINT crypto_keys_secret_key_id_fkey FOREIGN KEY (secret_key_id) REFERENCES dbcrypt_keys(active_key_digest);
|
||||||
ForeignKeyGitAuthLinksOauthAccessTokenKeyID ForeignKeyConstraint = "git_auth_links_oauth_access_token_key_id_fkey" // ALTER TABLE ONLY external_auth_links ADD CONSTRAINT git_auth_links_oauth_access_token_key_id_fkey FOREIGN KEY (oauth_access_token_key_id) REFERENCES dbcrypt_keys(active_key_digest);
|
ForeignKeyGitAuthLinksOauthAccessTokenKeyID ForeignKeyConstraint = "git_auth_links_oauth_access_token_key_id_fkey" // ALTER TABLE ONLY external_auth_links ADD CONSTRAINT git_auth_links_oauth_access_token_key_id_fkey FOREIGN KEY (oauth_access_token_key_id) REFERENCES dbcrypt_keys(active_key_digest);
|
||||||
ForeignKeyGitAuthLinksOauthRefreshTokenKeyID ForeignKeyConstraint = "git_auth_links_oauth_refresh_token_key_id_fkey" // ALTER TABLE ONLY external_auth_links ADD CONSTRAINT git_auth_links_oauth_refresh_token_key_id_fkey FOREIGN KEY (oauth_refresh_token_key_id) REFERENCES dbcrypt_keys(active_key_digest);
|
ForeignKeyGitAuthLinksOauthRefreshTokenKeyID ForeignKeyConstraint = "git_auth_links_oauth_refresh_token_key_id_fkey" // ALTER TABLE ONLY external_auth_links ADD CONSTRAINT git_auth_links_oauth_refresh_token_key_id_fkey FOREIGN KEY (oauth_refresh_token_key_id) REFERENCES dbcrypt_keys(active_key_digest);
|
||||||
ForeignKeyGitSSHKeysUserID ForeignKeyConstraint = "gitsshkeys_user_id_fkey" // ALTER TABLE ONLY gitsshkeys ADD CONSTRAINT gitsshkeys_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id);
|
ForeignKeyGitSSHKeysUserID ForeignKeyConstraint = "gitsshkeys_user_id_fkey" // ALTER TABLE ONLY gitsshkeys ADD CONSTRAINT gitsshkeys_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id);
|
||||||
ForeignKeyGroupMembersGroupID ForeignKeyConstraint = "group_members_group_id_fkey" // ALTER TABLE ONLY group_members ADD CONSTRAINT group_members_group_id_fkey FOREIGN KEY (group_id) REFERENCES groups(id) ON DELETE CASCADE;
|
ForeignKeyGroupMembersGroupID ForeignKeyConstraint = "group_members_group_id_fkey" // ALTER TABLE ONLY group_members ADD CONSTRAINT group_members_group_id_fkey FOREIGN KEY (group_id) REFERENCES groups(id) ON DELETE CASCADE;
|
||||||
ForeignKeyGroupMembersUserID ForeignKeyConstraint = "group_members_user_id_fkey" // ALTER TABLE ONLY group_members ADD CONSTRAINT group_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
ForeignKeyGroupMembersUserID ForeignKeyConstraint = "group_members_user_id_fkey" // ALTER TABLE ONLY group_members ADD CONSTRAINT group_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
||||||
ForeignKeyGroupsOrganizationID ForeignKeyConstraint = "groups_organization_id_fkey" // ALTER TABLE ONLY groups ADD CONSTRAINT groups_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
ForeignKeyGroupsOrganizationID ForeignKeyConstraint = "groups_organization_id_fkey" // ALTER TABLE ONLY groups ADD CONSTRAINT groups_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
||||||
ForeignKeyJfrogXrayScansAgentID ForeignKeyConstraint = "jfrog_xray_scans_agent_id_fkey" // ALTER TABLE ONLY jfrog_xray_scans ADD CONSTRAINT jfrog_xray_scans_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
ForeignKeyJfrogXrayScansAgentID ForeignKeyConstraint = "jfrog_xray_scans_agent_id_fkey" // ALTER TABLE ONLY jfrog_xray_scans ADD CONSTRAINT jfrog_xray_scans_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
||||||
ForeignKeyJfrogXrayScansWorkspaceID ForeignKeyConstraint = "jfrog_xray_scans_workspace_id_fkey" // ALTER TABLE ONLY jfrog_xray_scans ADD CONSTRAINT jfrog_xray_scans_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE;
|
ForeignKeyJfrogXrayScansWorkspaceID ForeignKeyConstraint = "jfrog_xray_scans_workspace_id_fkey" // ALTER TABLE ONLY jfrog_xray_scans ADD CONSTRAINT jfrog_xray_scans_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE;
|
||||||
ForeignKeyNotificationMessagesNotificationTemplateID ForeignKeyConstraint = "notification_messages_notification_template_id_fkey" // ALTER TABLE ONLY notification_messages ADD CONSTRAINT notification_messages_notification_template_id_fkey FOREIGN KEY (notification_template_id) REFERENCES notification_templates(id) ON DELETE CASCADE;
|
ForeignKeyNotificationMessagesNotificationTemplateID ForeignKeyConstraint = "notification_messages_notification_template_id_fkey" // ALTER TABLE ONLY notification_messages ADD CONSTRAINT notification_messages_notification_template_id_fkey FOREIGN KEY (notification_template_id) REFERENCES notification_templates(id) ON DELETE CASCADE;
|
||||||
ForeignKeyNotificationMessagesUserID ForeignKeyConstraint = "notification_messages_user_id_fkey" // ALTER TABLE ONLY notification_messages ADD CONSTRAINT notification_messages_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
ForeignKeyNotificationMessagesUserID ForeignKeyConstraint = "notification_messages_user_id_fkey" // ALTER TABLE ONLY notification_messages ADD CONSTRAINT notification_messages_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
||||||
ForeignKeyNotificationPreferencesNotificationTemplateID ForeignKeyConstraint = "notification_preferences_notification_template_id_fkey" // ALTER TABLE ONLY notification_preferences ADD CONSTRAINT notification_preferences_notification_template_id_fkey FOREIGN KEY (notification_template_id) REFERENCES notification_templates(id) ON DELETE CASCADE;
|
ForeignKeyNotificationPreferencesNotificationTemplateID ForeignKeyConstraint = "notification_preferences_notification_template_id_fkey" // ALTER TABLE ONLY notification_preferences ADD CONSTRAINT notification_preferences_notification_template_id_fkey FOREIGN KEY (notification_template_id) REFERENCES notification_templates(id) ON DELETE CASCADE;
|
||||||
ForeignKeyNotificationPreferencesUserID ForeignKeyConstraint = "notification_preferences_user_id_fkey" // ALTER TABLE ONLY notification_preferences ADD CONSTRAINT notification_preferences_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
ForeignKeyNotificationPreferencesUserID ForeignKeyConstraint = "notification_preferences_user_id_fkey" // ALTER TABLE ONLY notification_preferences ADD CONSTRAINT notification_preferences_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
||||||
ForeignKeyOauth2ProviderAppCodesAppID ForeignKeyConstraint = "oauth2_provider_app_codes_app_id_fkey" // ALTER TABLE ONLY oauth2_provider_app_codes ADD CONSTRAINT oauth2_provider_app_codes_app_id_fkey FOREIGN KEY (app_id) REFERENCES oauth2_provider_apps(id) ON DELETE CASCADE;
|
ForeignKeyOauth2ProviderAppCodesAppID ForeignKeyConstraint = "oauth2_provider_app_codes_app_id_fkey" // ALTER TABLE ONLY oauth2_provider_app_codes ADD CONSTRAINT oauth2_provider_app_codes_app_id_fkey FOREIGN KEY (app_id) REFERENCES oauth2_provider_apps(id) ON DELETE CASCADE;
|
||||||
ForeignKeyOauth2ProviderAppCodesUserID ForeignKeyConstraint = "oauth2_provider_app_codes_user_id_fkey" // ALTER TABLE ONLY oauth2_provider_app_codes ADD CONSTRAINT oauth2_provider_app_codes_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
ForeignKeyOauth2ProviderAppCodesUserID ForeignKeyConstraint = "oauth2_provider_app_codes_user_id_fkey" // ALTER TABLE ONLY oauth2_provider_app_codes ADD CONSTRAINT oauth2_provider_app_codes_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
||||||
ForeignKeyOauth2ProviderAppSecretsAppID ForeignKeyConstraint = "oauth2_provider_app_secrets_app_id_fkey" // ALTER TABLE ONLY oauth2_provider_app_secrets ADD CONSTRAINT oauth2_provider_app_secrets_app_id_fkey FOREIGN KEY (app_id) REFERENCES oauth2_provider_apps(id) ON DELETE CASCADE;
|
ForeignKeyOauth2ProviderAppSecretsAppID ForeignKeyConstraint = "oauth2_provider_app_secrets_app_id_fkey" // ALTER TABLE ONLY oauth2_provider_app_secrets ADD CONSTRAINT oauth2_provider_app_secrets_app_id_fkey FOREIGN KEY (app_id) REFERENCES oauth2_provider_apps(id) ON DELETE CASCADE;
|
||||||
ForeignKeyOauth2ProviderAppTokensAPIKeyID ForeignKeyConstraint = "oauth2_provider_app_tokens_api_key_id_fkey" // ALTER TABLE ONLY oauth2_provider_app_tokens ADD CONSTRAINT oauth2_provider_app_tokens_api_key_id_fkey FOREIGN KEY (api_key_id) REFERENCES api_keys(id) ON DELETE CASCADE;
|
ForeignKeyOauth2ProviderAppTokensAPIKeyID ForeignKeyConstraint = "oauth2_provider_app_tokens_api_key_id_fkey" // ALTER TABLE ONLY oauth2_provider_app_tokens ADD CONSTRAINT oauth2_provider_app_tokens_api_key_id_fkey FOREIGN KEY (api_key_id) REFERENCES api_keys(id) ON DELETE CASCADE;
|
||||||
ForeignKeyOauth2ProviderAppTokensAppSecretID ForeignKeyConstraint = "oauth2_provider_app_tokens_app_secret_id_fkey" // ALTER TABLE ONLY oauth2_provider_app_tokens ADD CONSTRAINT oauth2_provider_app_tokens_app_secret_id_fkey FOREIGN KEY (app_secret_id) REFERENCES oauth2_provider_app_secrets(id) ON DELETE CASCADE;
|
ForeignKeyOauth2ProviderAppTokensAppSecretID ForeignKeyConstraint = "oauth2_provider_app_tokens_app_secret_id_fkey" // ALTER TABLE ONLY oauth2_provider_app_tokens ADD CONSTRAINT oauth2_provider_app_tokens_app_secret_id_fkey FOREIGN KEY (app_secret_id) REFERENCES oauth2_provider_app_secrets(id) ON DELETE CASCADE;
|
||||||
ForeignKeyOrganizationMembersOrganizationIDUUID ForeignKeyConstraint = "organization_members_organization_id_uuid_fkey" // ALTER TABLE ONLY organization_members ADD CONSTRAINT organization_members_organization_id_uuid_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
ForeignKeyOrganizationMembersOrganizationIDUUID ForeignKeyConstraint = "organization_members_organization_id_uuid_fkey" // ALTER TABLE ONLY organization_members ADD CONSTRAINT organization_members_organization_id_uuid_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
||||||
ForeignKeyOrganizationMembersUserIDUUID ForeignKeyConstraint = "organization_members_user_id_uuid_fkey" // ALTER TABLE ONLY organization_members ADD CONSTRAINT organization_members_user_id_uuid_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
ForeignKeyOrganizationMembersUserIDUUID ForeignKeyConstraint = "organization_members_user_id_uuid_fkey" // ALTER TABLE ONLY organization_members ADD CONSTRAINT organization_members_user_id_uuid_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
||||||
ForeignKeyParameterSchemasJobID ForeignKeyConstraint = "parameter_schemas_job_id_fkey" // ALTER TABLE ONLY parameter_schemas ADD CONSTRAINT parameter_schemas_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
ForeignKeyParameterSchemasJobID ForeignKeyConstraint = "parameter_schemas_job_id_fkey" // ALTER TABLE ONLY parameter_schemas ADD CONSTRAINT parameter_schemas_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
||||||
ForeignKeyProvisionerDaemonsKeyID ForeignKeyConstraint = "provisioner_daemons_key_id_fkey" // ALTER TABLE ONLY provisioner_daemons ADD CONSTRAINT provisioner_daemons_key_id_fkey FOREIGN KEY (key_id) REFERENCES provisioner_keys(id) ON DELETE CASCADE;
|
ForeignKeyProvisionerDaemonsKeyID ForeignKeyConstraint = "provisioner_daemons_key_id_fkey" // ALTER TABLE ONLY provisioner_daemons ADD CONSTRAINT provisioner_daemons_key_id_fkey FOREIGN KEY (key_id) REFERENCES provisioner_keys(id) ON DELETE CASCADE;
|
||||||
ForeignKeyProvisionerDaemonsOrganizationID ForeignKeyConstraint = "provisioner_daemons_organization_id_fkey" // ALTER TABLE ONLY provisioner_daemons ADD CONSTRAINT provisioner_daemons_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
ForeignKeyProvisionerDaemonsOrganizationID ForeignKeyConstraint = "provisioner_daemons_organization_id_fkey" // ALTER TABLE ONLY provisioner_daemons ADD CONSTRAINT provisioner_daemons_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
||||||
ForeignKeyProvisionerJobLogsJobID ForeignKeyConstraint = "provisioner_job_logs_job_id_fkey" // ALTER TABLE ONLY provisioner_job_logs ADD CONSTRAINT provisioner_job_logs_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
ForeignKeyProvisionerJobLogsJobID ForeignKeyConstraint = "provisioner_job_logs_job_id_fkey" // ALTER TABLE ONLY provisioner_job_logs ADD CONSTRAINT provisioner_job_logs_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
||||||
ForeignKeyProvisionerJobTimingsJobID ForeignKeyConstraint = "provisioner_job_timings_job_id_fkey" // ALTER TABLE ONLY provisioner_job_timings ADD CONSTRAINT provisioner_job_timings_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
ForeignKeyProvisionerJobTimingsJobID ForeignKeyConstraint = "provisioner_job_timings_job_id_fkey" // ALTER TABLE ONLY provisioner_job_timings ADD CONSTRAINT provisioner_job_timings_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
||||||
ForeignKeyProvisionerJobsOrganizationID ForeignKeyConstraint = "provisioner_jobs_organization_id_fkey" // ALTER TABLE ONLY provisioner_jobs ADD CONSTRAINT provisioner_jobs_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
ForeignKeyProvisionerJobsOrganizationID ForeignKeyConstraint = "provisioner_jobs_organization_id_fkey" // ALTER TABLE ONLY provisioner_jobs ADD CONSTRAINT provisioner_jobs_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
||||||
ForeignKeyProvisionerKeysOrganizationID ForeignKeyConstraint = "provisioner_keys_organization_id_fkey" // ALTER TABLE ONLY provisioner_keys ADD CONSTRAINT provisioner_keys_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
ForeignKeyProvisionerKeysOrganizationID ForeignKeyConstraint = "provisioner_keys_organization_id_fkey" // ALTER TABLE ONLY provisioner_keys ADD CONSTRAINT provisioner_keys_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTailnetAgentsCoordinatorID ForeignKeyConstraint = "tailnet_agents_coordinator_id_fkey" // ALTER TABLE ONLY tailnet_agents ADD CONSTRAINT tailnet_agents_coordinator_id_fkey FOREIGN KEY (coordinator_id) REFERENCES tailnet_coordinators(id) ON DELETE CASCADE;
|
ForeignKeyTailnetAgentsCoordinatorID ForeignKeyConstraint = "tailnet_agents_coordinator_id_fkey" // ALTER TABLE ONLY tailnet_agents ADD CONSTRAINT tailnet_agents_coordinator_id_fkey FOREIGN KEY (coordinator_id) REFERENCES tailnet_coordinators(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTailnetClientSubscriptionsCoordinatorID ForeignKeyConstraint = "tailnet_client_subscriptions_coordinator_id_fkey" // ALTER TABLE ONLY tailnet_client_subscriptions ADD CONSTRAINT tailnet_client_subscriptions_coordinator_id_fkey FOREIGN KEY (coordinator_id) REFERENCES tailnet_coordinators(id) ON DELETE CASCADE;
|
ForeignKeyTailnetClientSubscriptionsCoordinatorID ForeignKeyConstraint = "tailnet_client_subscriptions_coordinator_id_fkey" // ALTER TABLE ONLY tailnet_client_subscriptions ADD CONSTRAINT tailnet_client_subscriptions_coordinator_id_fkey FOREIGN KEY (coordinator_id) REFERENCES tailnet_coordinators(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTailnetClientsCoordinatorID ForeignKeyConstraint = "tailnet_clients_coordinator_id_fkey" // ALTER TABLE ONLY tailnet_clients ADD CONSTRAINT tailnet_clients_coordinator_id_fkey FOREIGN KEY (coordinator_id) REFERENCES tailnet_coordinators(id) ON DELETE CASCADE;
|
ForeignKeyTailnetClientsCoordinatorID ForeignKeyConstraint = "tailnet_clients_coordinator_id_fkey" // ALTER TABLE ONLY tailnet_clients ADD CONSTRAINT tailnet_clients_coordinator_id_fkey FOREIGN KEY (coordinator_id) REFERENCES tailnet_coordinators(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTailnetPeersCoordinatorID ForeignKeyConstraint = "tailnet_peers_coordinator_id_fkey" // ALTER TABLE ONLY tailnet_peers ADD CONSTRAINT tailnet_peers_coordinator_id_fkey FOREIGN KEY (coordinator_id) REFERENCES tailnet_coordinators(id) ON DELETE CASCADE;
|
ForeignKeyTailnetPeersCoordinatorID ForeignKeyConstraint = "tailnet_peers_coordinator_id_fkey" // ALTER TABLE ONLY tailnet_peers ADD CONSTRAINT tailnet_peers_coordinator_id_fkey FOREIGN KEY (coordinator_id) REFERENCES tailnet_coordinators(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTailnetTunnelsCoordinatorID ForeignKeyConstraint = "tailnet_tunnels_coordinator_id_fkey" // ALTER TABLE ONLY tailnet_tunnels ADD CONSTRAINT tailnet_tunnels_coordinator_id_fkey FOREIGN KEY (coordinator_id) REFERENCES tailnet_coordinators(id) ON DELETE CASCADE;
|
ForeignKeyTailnetTunnelsCoordinatorID ForeignKeyConstraint = "tailnet_tunnels_coordinator_id_fkey" // ALTER TABLE ONLY tailnet_tunnels ADD CONSTRAINT tailnet_tunnels_coordinator_id_fkey FOREIGN KEY (coordinator_id) REFERENCES tailnet_coordinators(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTemplateVersionParametersTemplateVersionID ForeignKeyConstraint = "template_version_parameters_template_version_id_fkey" // ALTER TABLE ONLY template_version_parameters ADD CONSTRAINT template_version_parameters_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
ForeignKeyTemplateVersionParametersTemplateVersionID ForeignKeyConstraint = "template_version_parameters_template_version_id_fkey" // ALTER TABLE ONLY template_version_parameters ADD CONSTRAINT template_version_parameters_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTemplateVersionVariablesTemplateVersionID ForeignKeyConstraint = "template_version_variables_template_version_id_fkey" // ALTER TABLE ONLY template_version_variables ADD CONSTRAINT template_version_variables_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
ForeignKeyTemplateVersionPresetParametTemplateVersionPresetID ForeignKeyConstraint = "template_version_preset_paramet_template_version_preset_id_fkey" // ALTER TABLE ONLY template_version_preset_parameters ADD CONSTRAINT template_version_preset_paramet_template_version_preset_id_fkey FOREIGN KEY (template_version_preset_id) REFERENCES template_version_presets(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTemplateVersionWorkspaceTagsTemplateVersionID ForeignKeyConstraint = "template_version_workspace_tags_template_version_id_fkey" // ALTER TABLE ONLY template_version_workspace_tags ADD CONSTRAINT template_version_workspace_tags_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
ForeignKeyTemplateVersionPresetsTemplateVersionID ForeignKeyConstraint = "template_version_presets_template_version_id_fkey" // ALTER TABLE ONLY template_version_presets ADD CONSTRAINT template_version_presets_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTemplateVersionsCreatedBy ForeignKeyConstraint = "template_versions_created_by_fkey" // ALTER TABLE ONLY template_versions ADD CONSTRAINT template_versions_created_by_fkey FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE RESTRICT;
|
ForeignKeyTemplateVersionVariablesTemplateVersionID ForeignKeyConstraint = "template_version_variables_template_version_id_fkey" // ALTER TABLE ONLY template_version_variables ADD CONSTRAINT template_version_variables_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTemplateVersionsOrganizationID ForeignKeyConstraint = "template_versions_organization_id_fkey" // ALTER TABLE ONLY template_versions ADD CONSTRAINT template_versions_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
ForeignKeyTemplateVersionWorkspaceTagsTemplateVersionID ForeignKeyConstraint = "template_version_workspace_tags_template_version_id_fkey" // ALTER TABLE ONLY template_version_workspace_tags ADD CONSTRAINT template_version_workspace_tags_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTemplateVersionsTemplateID ForeignKeyConstraint = "template_versions_template_id_fkey" // ALTER TABLE ONLY template_versions ADD CONSTRAINT template_versions_template_id_fkey FOREIGN KEY (template_id) REFERENCES templates(id) ON DELETE CASCADE;
|
ForeignKeyTemplateVersionsCreatedBy ForeignKeyConstraint = "template_versions_created_by_fkey" // ALTER TABLE ONLY template_versions ADD CONSTRAINT template_versions_created_by_fkey FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE RESTRICT;
|
||||||
ForeignKeyTemplatesCreatedBy ForeignKeyConstraint = "templates_created_by_fkey" // ALTER TABLE ONLY templates ADD CONSTRAINT templates_created_by_fkey FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE RESTRICT;
|
ForeignKeyTemplateVersionsOrganizationID ForeignKeyConstraint = "template_versions_organization_id_fkey" // ALTER TABLE ONLY template_versions ADD CONSTRAINT template_versions_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
||||||
ForeignKeyTemplatesOrganizationID ForeignKeyConstraint = "templates_organization_id_fkey" // ALTER TABLE ONLY templates ADD CONSTRAINT templates_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
ForeignKeyTemplateVersionsTemplateID ForeignKeyConstraint = "template_versions_template_id_fkey" // ALTER TABLE ONLY template_versions ADD CONSTRAINT template_versions_template_id_fkey FOREIGN KEY (template_id) REFERENCES templates(id) ON DELETE CASCADE;
|
||||||
ForeignKeyUserDeletedUserID ForeignKeyConstraint = "user_deleted_user_id_fkey" // ALTER TABLE ONLY user_deleted ADD CONSTRAINT user_deleted_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id);
|
ForeignKeyTemplatesCreatedBy ForeignKeyConstraint = "templates_created_by_fkey" // ALTER TABLE ONLY templates ADD CONSTRAINT templates_created_by_fkey FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE RESTRICT;
|
||||||
ForeignKeyUserLinksOauthAccessTokenKeyID ForeignKeyConstraint = "user_links_oauth_access_token_key_id_fkey" // ALTER TABLE ONLY user_links ADD CONSTRAINT user_links_oauth_access_token_key_id_fkey FOREIGN KEY (oauth_access_token_key_id) REFERENCES dbcrypt_keys(active_key_digest);
|
ForeignKeyTemplatesOrganizationID ForeignKeyConstraint = "templates_organization_id_fkey" // ALTER TABLE ONLY templates ADD CONSTRAINT templates_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE;
|
||||||
ForeignKeyUserLinksOauthRefreshTokenKeyID ForeignKeyConstraint = "user_links_oauth_refresh_token_key_id_fkey" // ALTER TABLE ONLY user_links ADD CONSTRAINT user_links_oauth_refresh_token_key_id_fkey FOREIGN KEY (oauth_refresh_token_key_id) REFERENCES dbcrypt_keys(active_key_digest);
|
ForeignKeyUserDeletedUserID ForeignKeyConstraint = "user_deleted_user_id_fkey" // ALTER TABLE ONLY user_deleted ADD CONSTRAINT user_deleted_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id);
|
||||||
ForeignKeyUserLinksUserID ForeignKeyConstraint = "user_links_user_id_fkey" // ALTER TABLE ONLY user_links ADD CONSTRAINT user_links_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
ForeignKeyUserLinksOauthAccessTokenKeyID ForeignKeyConstraint = "user_links_oauth_access_token_key_id_fkey" // ALTER TABLE ONLY user_links ADD CONSTRAINT user_links_oauth_access_token_key_id_fkey FOREIGN KEY (oauth_access_token_key_id) REFERENCES dbcrypt_keys(active_key_digest);
|
||||||
ForeignKeyUserStatusChangesUserID ForeignKeyConstraint = "user_status_changes_user_id_fkey" // ALTER TABLE ONLY user_status_changes ADD CONSTRAINT user_status_changes_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id);
|
ForeignKeyUserLinksOauthRefreshTokenKeyID ForeignKeyConstraint = "user_links_oauth_refresh_token_key_id_fkey" // ALTER TABLE ONLY user_links ADD CONSTRAINT user_links_oauth_refresh_token_key_id_fkey FOREIGN KEY (oauth_refresh_token_key_id) REFERENCES dbcrypt_keys(active_key_digest);
|
||||||
ForeignKeyWorkspaceAgentLogSourcesWorkspaceAgentID ForeignKeyConstraint = "workspace_agent_log_sources_workspace_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_log_sources ADD CONSTRAINT workspace_agent_log_sources_workspace_agent_id_fkey FOREIGN KEY (workspace_agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
ForeignKeyUserLinksUserID ForeignKeyConstraint = "user_links_user_id_fkey" // ALTER TABLE ONLY user_links ADD CONSTRAINT user_links_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceAgentMemoryResourceMonitorsAgentID ForeignKeyConstraint = "workspace_agent_memory_resource_monitors_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_memory_resource_monitors ADD CONSTRAINT workspace_agent_memory_resource_monitors_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
ForeignKeyUserStatusChangesUserID ForeignKeyConstraint = "user_status_changes_user_id_fkey" // ALTER TABLE ONLY user_status_changes ADD CONSTRAINT user_status_changes_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id);
|
||||||
ForeignKeyWorkspaceAgentMetadataWorkspaceAgentID ForeignKeyConstraint = "workspace_agent_metadata_workspace_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_metadata ADD CONSTRAINT workspace_agent_metadata_workspace_agent_id_fkey FOREIGN KEY (workspace_agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceAgentLogSourcesWorkspaceAgentID ForeignKeyConstraint = "workspace_agent_log_sources_workspace_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_log_sources ADD CONSTRAINT workspace_agent_log_sources_workspace_agent_id_fkey FOREIGN KEY (workspace_agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceAgentPortShareWorkspaceID ForeignKeyConstraint = "workspace_agent_port_share_workspace_id_fkey" // ALTER TABLE ONLY workspace_agent_port_share ADD CONSTRAINT workspace_agent_port_share_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceAgentMemoryResourceMonitorsAgentID ForeignKeyConstraint = "workspace_agent_memory_resource_monitors_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_memory_resource_monitors ADD CONSTRAINT workspace_agent_memory_resource_monitors_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceAgentScriptTimingsScriptID ForeignKeyConstraint = "workspace_agent_script_timings_script_id_fkey" // ALTER TABLE ONLY workspace_agent_script_timings ADD CONSTRAINT workspace_agent_script_timings_script_id_fkey FOREIGN KEY (script_id) REFERENCES workspace_agent_scripts(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceAgentMetadataWorkspaceAgentID ForeignKeyConstraint = "workspace_agent_metadata_workspace_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_metadata ADD CONSTRAINT workspace_agent_metadata_workspace_agent_id_fkey FOREIGN KEY (workspace_agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceAgentScriptsWorkspaceAgentID ForeignKeyConstraint = "workspace_agent_scripts_workspace_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_scripts ADD CONSTRAINT workspace_agent_scripts_workspace_agent_id_fkey FOREIGN KEY (workspace_agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceAgentPortShareWorkspaceID ForeignKeyConstraint = "workspace_agent_port_share_workspace_id_fkey" // ALTER TABLE ONLY workspace_agent_port_share ADD CONSTRAINT workspace_agent_port_share_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceAgentStartupLogsAgentID ForeignKeyConstraint = "workspace_agent_startup_logs_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_logs ADD CONSTRAINT workspace_agent_startup_logs_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceAgentScriptTimingsScriptID ForeignKeyConstraint = "workspace_agent_script_timings_script_id_fkey" // ALTER TABLE ONLY workspace_agent_script_timings ADD CONSTRAINT workspace_agent_script_timings_script_id_fkey FOREIGN KEY (script_id) REFERENCES workspace_agent_scripts(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceAgentVolumeResourceMonitorsAgentID ForeignKeyConstraint = "workspace_agent_volume_resource_monitors_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_volume_resource_monitors ADD CONSTRAINT workspace_agent_volume_resource_monitors_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceAgentScriptsWorkspaceAgentID ForeignKeyConstraint = "workspace_agent_scripts_workspace_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_scripts ADD CONSTRAINT workspace_agent_scripts_workspace_agent_id_fkey FOREIGN KEY (workspace_agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceAgentsResourceID ForeignKeyConstraint = "workspace_agents_resource_id_fkey" // ALTER TABLE ONLY workspace_agents ADD CONSTRAINT workspace_agents_resource_id_fkey FOREIGN KEY (resource_id) REFERENCES workspace_resources(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceAgentStartupLogsAgentID ForeignKeyConstraint = "workspace_agent_startup_logs_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_logs ADD CONSTRAINT workspace_agent_startup_logs_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceAppStatsAgentID ForeignKeyConstraint = "workspace_app_stats_agent_id_fkey" // ALTER TABLE ONLY workspace_app_stats ADD CONSTRAINT workspace_app_stats_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id);
|
ForeignKeyWorkspaceAgentVolumeResourceMonitorsAgentID ForeignKeyConstraint = "workspace_agent_volume_resource_monitors_agent_id_fkey" // ALTER TABLE ONLY workspace_agent_volume_resource_monitors ADD CONSTRAINT workspace_agent_volume_resource_monitors_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceAppStatsUserID ForeignKeyConstraint = "workspace_app_stats_user_id_fkey" // ALTER TABLE ONLY workspace_app_stats ADD CONSTRAINT workspace_app_stats_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id);
|
ForeignKeyWorkspaceAgentsResourceID ForeignKeyConstraint = "workspace_agents_resource_id_fkey" // ALTER TABLE ONLY workspace_agents ADD CONSTRAINT workspace_agents_resource_id_fkey FOREIGN KEY (resource_id) REFERENCES workspace_resources(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceAppStatsWorkspaceID ForeignKeyConstraint = "workspace_app_stats_workspace_id_fkey" // ALTER TABLE ONLY workspace_app_stats ADD CONSTRAINT workspace_app_stats_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES workspaces(id);
|
ForeignKeyWorkspaceAppStatsAgentID ForeignKeyConstraint = "workspace_app_stats_agent_id_fkey" // ALTER TABLE ONLY workspace_app_stats ADD CONSTRAINT workspace_app_stats_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id);
|
||||||
ForeignKeyWorkspaceAppsAgentID ForeignKeyConstraint = "workspace_apps_agent_id_fkey" // ALTER TABLE ONLY workspace_apps ADD CONSTRAINT workspace_apps_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceAppStatsUserID ForeignKeyConstraint = "workspace_app_stats_user_id_fkey" // ALTER TABLE ONLY workspace_app_stats ADD CONSTRAINT workspace_app_stats_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id);
|
||||||
ForeignKeyWorkspaceBuildParametersWorkspaceBuildID ForeignKeyConstraint = "workspace_build_parameters_workspace_build_id_fkey" // ALTER TABLE ONLY workspace_build_parameters ADD CONSTRAINT workspace_build_parameters_workspace_build_id_fkey FOREIGN KEY (workspace_build_id) REFERENCES workspace_builds(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceAppStatsWorkspaceID ForeignKeyConstraint = "workspace_app_stats_workspace_id_fkey" // ALTER TABLE ONLY workspace_app_stats ADD CONSTRAINT workspace_app_stats_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES workspaces(id);
|
||||||
ForeignKeyWorkspaceBuildsJobID ForeignKeyConstraint = "workspace_builds_job_id_fkey" // ALTER TABLE ONLY workspace_builds ADD CONSTRAINT workspace_builds_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceAppsAgentID ForeignKeyConstraint = "workspace_apps_agent_id_fkey" // ALTER TABLE ONLY workspace_apps ADD CONSTRAINT workspace_apps_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES workspace_agents(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceBuildsTemplateVersionID ForeignKeyConstraint = "workspace_builds_template_version_id_fkey" // ALTER TABLE ONLY workspace_builds ADD CONSTRAINT workspace_builds_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceBuildParametersWorkspaceBuildID ForeignKeyConstraint = "workspace_build_parameters_workspace_build_id_fkey" // ALTER TABLE ONLY workspace_build_parameters ADD CONSTRAINT workspace_build_parameters_workspace_build_id_fkey FOREIGN KEY (workspace_build_id) REFERENCES workspace_builds(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceBuildsWorkspaceID ForeignKeyConstraint = "workspace_builds_workspace_id_fkey" // ALTER TABLE ONLY workspace_builds ADD CONSTRAINT workspace_builds_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceBuildsJobID ForeignKeyConstraint = "workspace_builds_job_id_fkey" // ALTER TABLE ONLY workspace_builds ADD CONSTRAINT workspace_builds_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceModulesJobID ForeignKeyConstraint = "workspace_modules_job_id_fkey" // ALTER TABLE ONLY workspace_modules ADD CONSTRAINT workspace_modules_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceBuildsTemplateVersionID ForeignKeyConstraint = "workspace_builds_template_version_id_fkey" // ALTER TABLE ONLY workspace_builds ADD CONSTRAINT workspace_builds_template_version_id_fkey FOREIGN KEY (template_version_id) REFERENCES template_versions(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceResourceMetadataWorkspaceResourceID ForeignKeyConstraint = "workspace_resource_metadata_workspace_resource_id_fkey" // ALTER TABLE ONLY workspace_resource_metadata ADD CONSTRAINT workspace_resource_metadata_workspace_resource_id_fkey FOREIGN KEY (workspace_resource_id) REFERENCES workspace_resources(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceBuildsWorkspaceID ForeignKeyConstraint = "workspace_builds_workspace_id_fkey" // ALTER TABLE ONLY workspace_builds ADD CONSTRAINT workspace_builds_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspaceResourcesJobID ForeignKeyConstraint = "workspace_resources_job_id_fkey" // ALTER TABLE ONLY workspace_resources ADD CONSTRAINT workspace_resources_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
ForeignKeyWorkspaceModulesJobID ForeignKeyConstraint = "workspace_modules_job_id_fkey" // ALTER TABLE ONLY workspace_modules ADD CONSTRAINT workspace_modules_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspacesOrganizationID ForeignKeyConstraint = "workspaces_organization_id_fkey" // ALTER TABLE ONLY workspaces ADD CONSTRAINT workspaces_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE RESTRICT;
|
ForeignKeyWorkspaceResourceMetadataWorkspaceResourceID ForeignKeyConstraint = "workspace_resource_metadata_workspace_resource_id_fkey" // ALTER TABLE ONLY workspace_resource_metadata ADD CONSTRAINT workspace_resource_metadata_workspace_resource_id_fkey FOREIGN KEY (workspace_resource_id) REFERENCES workspace_resources(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspacesOwnerID ForeignKeyConstraint = "workspaces_owner_id_fkey" // ALTER TABLE ONLY workspaces ADD CONSTRAINT workspaces_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT;
|
ForeignKeyWorkspaceResourcesJobID ForeignKeyConstraint = "workspace_resources_job_id_fkey" // ALTER TABLE ONLY workspace_resources ADD CONSTRAINT workspace_resources_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_jobs(id) ON DELETE CASCADE;
|
||||||
ForeignKeyWorkspacesTemplateID ForeignKeyConstraint = "workspaces_template_id_fkey" // ALTER TABLE ONLY workspaces ADD CONSTRAINT workspaces_template_id_fkey FOREIGN KEY (template_id) REFERENCES templates(id) ON DELETE RESTRICT;
|
ForeignKeyWorkspacesOrganizationID ForeignKeyConstraint = "workspaces_organization_id_fkey" // ALTER TABLE ONLY workspaces ADD CONSTRAINT workspaces_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE RESTRICT;
|
||||||
|
ForeignKeyWorkspacesOwnerID ForeignKeyConstraint = "workspaces_owner_id_fkey" // ALTER TABLE ONLY workspaces ADD CONSTRAINT workspaces_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT;
|
||||||
|
ForeignKeyWorkspacesTemplateID ForeignKeyConstraint = "workspaces_template_id_fkey" // ALTER TABLE ONLY workspaces ADD CONSTRAINT workspaces_template_id_fkey FOREIGN KEY (template_id) REFERENCES templates(id) ON DELETE RESTRICT;
|
||||||
)
|
)
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
-- Recreate the view to exclude the new column.
|
||||||
|
DROP VIEW workspace_build_with_user;
|
||||||
|
|
||||||
|
ALTER TABLE workspace_builds
|
||||||
|
DROP COLUMN template_version_preset_id;
|
||||||
|
|
||||||
|
DROP TABLE template_version_preset_parameters;
|
||||||
|
|
||||||
|
DROP TABLE template_version_presets;
|
||||||
|
|
||||||
|
CREATE VIEW
|
||||||
|
workspace_build_with_user
|
||||||
|
AS
|
||||||
|
SELECT
|
||||||
|
workspace_builds.*,
|
||||||
|
coalesce(visible_users.avatar_url, '') AS initiator_by_avatar_url,
|
||||||
|
coalesce(visible_users.username, '') AS initiator_by_username
|
||||||
|
FROM
|
||||||
|
workspace_builds
|
||||||
|
LEFT JOIN
|
||||||
|
visible_users
|
||||||
|
ON
|
||||||
|
workspace_builds.initiator_id = visible_users.id;
|
||||||
|
|
||||||
|
COMMENT ON VIEW workspace_build_with_user IS 'Joins in the username + avatar url of the initiated by user.';
|
@ -0,0 +1,49 @@
|
|||||||
|
CREATE TABLE template_version_presets
|
||||||
|
(
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
template_version_id UUID NOT NULL,
|
||||||
|
-- TODO (sasswart): TEXT vs VARCHAR? Check with Mr Kopping.
|
||||||
|
-- TODO (sasswart): A comment on the presets RFC mentioned that we may need to
|
||||||
|
-- aggregate presets by name because we want statistics for related presets across
|
||||||
|
-- template versions. This makes me uncomfortable. It couples constraints to a user
|
||||||
|
-- facing field that could be avoided.
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
-- TODO (sasswart): What do we need updated_at for? Is it worth it to have a history table?
|
||||||
|
-- TODO (sasswart): Will auditing have any relevance to presets?
|
||||||
|
updated_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
FOREIGN KEY (template_version_id) REFERENCES template_versions (id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE template_version_preset_parameters
|
||||||
|
(
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
template_version_preset_id UUID NOT NULL,
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
-- TODO (sasswart): would it be beneficial to allow presets to still offer a choice for values?
|
||||||
|
-- This would allow an operator to avoid having to create many similar templates where only one or
|
||||||
|
-- a few values are different.
|
||||||
|
value TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (template_version_preset_id) REFERENCES template_version_presets (id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE workspace_builds
|
||||||
|
ADD COLUMN template_version_preset_id UUID NULL;
|
||||||
|
|
||||||
|
-- Recreate the view to include the new column.
|
||||||
|
DROP VIEW workspace_build_with_user;
|
||||||
|
CREATE VIEW
|
||||||
|
workspace_build_with_user
|
||||||
|
AS
|
||||||
|
SELECT
|
||||||
|
workspace_builds.*,
|
||||||
|
coalesce(visible_users.avatar_url, '') AS initiator_by_avatar_url,
|
||||||
|
coalesce(visible_users.username, '') AS initiator_by_username
|
||||||
|
FROM
|
||||||
|
workspace_builds
|
||||||
|
LEFT JOIN
|
||||||
|
visible_users
|
||||||
|
ON
|
||||||
|
workspace_builds.initiator_id = visible_users.id;
|
||||||
|
|
||||||
|
COMMENT ON VIEW workspace_build_with_user IS 'Joins in the username + avatar url of the initiated by user.';
|
33
coderd/database/migrations/testdata/fixtures/000288_workspace_parameter_presets.up.sql
vendored
Normal file
33
coderd/database/migrations/testdata/fixtures/000288_workspace_parameter_presets.up.sql
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
-- Organization
|
||||||
|
INSERT INTO organizations (id, name, description, display_name, created_at, updated_at)
|
||||||
|
VALUES ('d3fd38d2-ffc3-4ec2-8cfc-9c8dab6d9a74', 'Test Org', 'Test Organization', 'Test Org', now(), now());
|
||||||
|
|
||||||
|
-- User
|
||||||
|
INSERT INTO users (id, email, username, created_at, updated_at, status, rbac_roles, login_type, hashed_password)
|
||||||
|
VALUES ('1f573504-f7a0-4498-8b81-2e1939f3c4a2', 'test@coder.com', 'testuser', now(), now(), 'active', '{}', 'password', 'password');
|
||||||
|
|
||||||
|
-- Template
|
||||||
|
INSERT INTO templates (id, created_by, organization_id, created_at, updated_at, deleted, name, provisioner, active_version_id, description)
|
||||||
|
VALUES ('0bd0713b-176a-4864-a58b-546a1b021025', '1f573504-f7a0-4498-8b81-2e1939f3c4a2', 'd3fd38d2-ffc3-4ec2-8cfc-9c8dab6d9a74', now(), now(), false, 'test-template', 'terraform', null, 'Test template');
|
||||||
|
|
||||||
|
-- Template Version
|
||||||
|
INSERT INTO template_versions (id, template_id, organization_id, created_by, created_at, updated_at, name, job_id, readme, message)
|
||||||
|
VALUES ('f1276e15-01cd-406d-8ea5-64f113a79601', '0bd0713b-176a-4864-a58b-546a1b021025', 'd3fd38d2-ffc3-4ec2-8cfc-9c8dab6d9a74', '1f573504-f7a0-4498-8b81-2e1939f3c4a2', now(), now(), 'test-version', null, '', '');
|
||||||
|
|
||||||
|
-- Workspace
|
||||||
|
INSERT INTO workspaces (id, organization_id, owner_id, template_id, created_at, updated_at, name, deleted, automatic_updates)
|
||||||
|
VALUES ('8cb0b7c4-47b5-4bfc-ad92-88ccc61f3c12', 'd3fd38d2-ffc3-4ec2-8cfc-9c8dab6d9a74', '1f573504-f7a0-4498-8b81-2e1939f3c4a2', '0bd0713b-176a-4864-a58b-546a1b021025', now(), now(), 'test-workspace', false, 'never');
|
||||||
|
|
||||||
|
-- Provisioner Job
|
||||||
|
INSERT INTO provisioner_jobs (id, organization_id, created_at, updated_at, status, worker_id, error, started_at)
|
||||||
|
VALUES ('50ebe702-82e5-4053-859d-c24a3b742b57', 'd3fd38d2-ffc3-4ec2-8cfc-9c8dab6d9a74', now(), now(), 'pending', null, null, null);
|
||||||
|
|
||||||
|
-- Workspace Build
|
||||||
|
INSERT INTO workspace_builds (id, workspace_id, template_version_id, initiator_id, job_id, created_at, updated_at, transition, reason)
|
||||||
|
VALUES ('83b28647-743c-4649-b226-f2be697ca06c', '8cb0b7c4-47b5-4bfc-ad92-88ccc61f3c12', 'f1276e15-01cd-406d-8ea5-64f113a79601', '1f573504-f7a0-4498-8b81-2e1939f3c4a2', '50ebe702-82e5-4053-859d-c24a3b742b57', now(), now(), 'start', 'initiator');
|
||||||
|
|
||||||
|
-- Template Version Presets
|
||||||
|
INSERT INTO template_version_presets (id, template_version_id, name, created_at, updated_at, description)
|
||||||
|
VALUES
|
||||||
|
('575a0fbb-cc3e-4709-ae9f-d1a3f365909c', 'f1276e15-01cd-406d-8ea5-64f113a79601', 'test', now(), now(), 'Test preset'),
|
||||||
|
('2c76596d-436d-42eb-a38c-8d5a70497030', 'f1276e15-01cd-406d-8ea5-64f113a79601', 'test', now(), now(), 'Test preset');
|
@ -2954,6 +2954,21 @@ type TemplateVersionParameter struct {
|
|||||||
Ephemeral bool `db:"ephemeral" json:"ephemeral"`
|
Ephemeral bool `db:"ephemeral" json:"ephemeral"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TemplateVersionPreset struct {
|
||||||
|
ID uuid.UUID `db:"id" json:"id"`
|
||||||
|
TemplateVersionID uuid.UUID `db:"template_version_id" json:"template_version_id"`
|
||||||
|
Name string `db:"name" json:"name"`
|
||||||
|
CreatedAt time.Time `db:"created_at" json:"created_at"`
|
||||||
|
UpdatedAt sql.NullTime `db:"updated_at" json:"updated_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type TemplateVersionPresetParameter struct {
|
||||||
|
ID uuid.UUID `db:"id" json:"id"`
|
||||||
|
TemplateVersionPresetID uuid.UUID `db:"template_version_preset_id" json:"template_version_preset_id"`
|
||||||
|
Name string `db:"name" json:"name"`
|
||||||
|
Value string `db:"value" json:"value"`
|
||||||
|
}
|
||||||
|
|
||||||
type TemplateVersionTable struct {
|
type TemplateVersionTable struct {
|
||||||
ID uuid.UUID `db:"id" json:"id"`
|
ID uuid.UUID `db:"id" json:"id"`
|
||||||
TemplateID uuid.NullUUID `db:"template_id" json:"template_id"`
|
TemplateID uuid.NullUUID `db:"template_id" json:"template_id"`
|
||||||
@ -3283,22 +3298,23 @@ type WorkspaceAppStat struct {
|
|||||||
|
|
||||||
// Joins in the username + avatar url of the initiated by user.
|
// Joins in the username + avatar url of the initiated by user.
|
||||||
type WorkspaceBuild struct {
|
type WorkspaceBuild struct {
|
||||||
ID uuid.UUID `db:"id" json:"id"`
|
ID uuid.UUID `db:"id" json:"id"`
|
||||||
CreatedAt time.Time `db:"created_at" json:"created_at"`
|
CreatedAt time.Time `db:"created_at" json:"created_at"`
|
||||||
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
|
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
|
||||||
WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"`
|
WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"`
|
||||||
TemplateVersionID uuid.UUID `db:"template_version_id" json:"template_version_id"`
|
TemplateVersionID uuid.UUID `db:"template_version_id" json:"template_version_id"`
|
||||||
BuildNumber int32 `db:"build_number" json:"build_number"`
|
BuildNumber int32 `db:"build_number" json:"build_number"`
|
||||||
Transition WorkspaceTransition `db:"transition" json:"transition"`
|
Transition WorkspaceTransition `db:"transition" json:"transition"`
|
||||||
InitiatorID uuid.UUID `db:"initiator_id" json:"initiator_id"`
|
InitiatorID uuid.UUID `db:"initiator_id" json:"initiator_id"`
|
||||||
ProvisionerState []byte `db:"provisioner_state" json:"provisioner_state"`
|
ProvisionerState []byte `db:"provisioner_state" json:"provisioner_state"`
|
||||||
JobID uuid.UUID `db:"job_id" json:"job_id"`
|
JobID uuid.UUID `db:"job_id" json:"job_id"`
|
||||||
Deadline time.Time `db:"deadline" json:"deadline"`
|
Deadline time.Time `db:"deadline" json:"deadline"`
|
||||||
Reason BuildReason `db:"reason" json:"reason"`
|
Reason BuildReason `db:"reason" json:"reason"`
|
||||||
DailyCost int32 `db:"daily_cost" json:"daily_cost"`
|
DailyCost int32 `db:"daily_cost" json:"daily_cost"`
|
||||||
MaxDeadline time.Time `db:"max_deadline" json:"max_deadline"`
|
MaxDeadline time.Time `db:"max_deadline" json:"max_deadline"`
|
||||||
InitiatorByAvatarUrl string `db:"initiator_by_avatar_url" json:"initiator_by_avatar_url"`
|
TemplateVersionPresetID uuid.NullUUID `db:"template_version_preset_id" json:"template_version_preset_id"`
|
||||||
InitiatorByUsername string `db:"initiator_by_username" json:"initiator_by_username"`
|
InitiatorByAvatarUrl string `db:"initiator_by_avatar_url" json:"initiator_by_avatar_url"`
|
||||||
|
InitiatorByUsername string `db:"initiator_by_username" json:"initiator_by_username"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type WorkspaceBuildParameter struct {
|
type WorkspaceBuildParameter struct {
|
||||||
@ -3310,20 +3326,21 @@ type WorkspaceBuildParameter struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type WorkspaceBuildTable struct {
|
type WorkspaceBuildTable struct {
|
||||||
ID uuid.UUID `db:"id" json:"id"`
|
ID uuid.UUID `db:"id" json:"id"`
|
||||||
CreatedAt time.Time `db:"created_at" json:"created_at"`
|
CreatedAt time.Time `db:"created_at" json:"created_at"`
|
||||||
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
|
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
|
||||||
WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"`
|
WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"`
|
||||||
TemplateVersionID uuid.UUID `db:"template_version_id" json:"template_version_id"`
|
TemplateVersionID uuid.UUID `db:"template_version_id" json:"template_version_id"`
|
||||||
BuildNumber int32 `db:"build_number" json:"build_number"`
|
BuildNumber int32 `db:"build_number" json:"build_number"`
|
||||||
Transition WorkspaceTransition `db:"transition" json:"transition"`
|
Transition WorkspaceTransition `db:"transition" json:"transition"`
|
||||||
InitiatorID uuid.UUID `db:"initiator_id" json:"initiator_id"`
|
InitiatorID uuid.UUID `db:"initiator_id" json:"initiator_id"`
|
||||||
ProvisionerState []byte `db:"provisioner_state" json:"provisioner_state"`
|
ProvisionerState []byte `db:"provisioner_state" json:"provisioner_state"`
|
||||||
JobID uuid.UUID `db:"job_id" json:"job_id"`
|
JobID uuid.UUID `db:"job_id" json:"job_id"`
|
||||||
Deadline time.Time `db:"deadline" json:"deadline"`
|
Deadline time.Time `db:"deadline" json:"deadline"`
|
||||||
Reason BuildReason `db:"reason" json:"reason"`
|
Reason BuildReason `db:"reason" json:"reason"`
|
||||||
DailyCost int32 `db:"daily_cost" json:"daily_cost"`
|
DailyCost int32 `db:"daily_cost" json:"daily_cost"`
|
||||||
MaxDeadline time.Time `db:"max_deadline" json:"max_deadline"`
|
MaxDeadline time.Time `db:"max_deadline" json:"max_deadline"`
|
||||||
|
TemplateVersionPresetID uuid.NullUUID `db:"template_version_preset_id" json:"template_version_preset_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type WorkspaceModule struct {
|
type WorkspaceModule struct {
|
||||||
|
@ -202,6 +202,9 @@ type sqlcQuerier interface {
|
|||||||
GetOrganizations(ctx context.Context, arg GetOrganizationsParams) ([]Organization, error)
|
GetOrganizations(ctx context.Context, arg GetOrganizationsParams) ([]Organization, error)
|
||||||
GetOrganizationsByUserID(ctx context.Context, userID uuid.UUID) ([]Organization, error)
|
GetOrganizationsByUserID(ctx context.Context, userID uuid.UUID) ([]Organization, error)
|
||||||
GetParameterSchemasByJobID(ctx context.Context, jobID uuid.UUID) ([]ParameterSchema, error)
|
GetParameterSchemasByJobID(ctx context.Context, jobID uuid.UUID) ([]ParameterSchema, error)
|
||||||
|
GetPresetByWorkspaceBuildID(ctx context.Context, workspaceBuildID uuid.UUID) (GetPresetByWorkspaceBuildIDRow, error)
|
||||||
|
GetPresetParametersByPresetID(ctx context.Context, templateVersionPresetID uuid.UUID) ([]GetPresetParametersByPresetIDRow, error)
|
||||||
|
GetPresetsByTemplateVersionID(ctx context.Context, templateVersionID uuid.UUID) ([]GetPresetsByTemplateVersionIDRow, error)
|
||||||
GetPreviousTemplateVersion(ctx context.Context, arg GetPreviousTemplateVersionParams) (TemplateVersion, error)
|
GetPreviousTemplateVersion(ctx context.Context, arg GetPreviousTemplateVersionParams) (TemplateVersion, error)
|
||||||
GetProvisionerDaemons(ctx context.Context) ([]ProvisionerDaemon, error)
|
GetProvisionerDaemons(ctx context.Context) ([]ProvisionerDaemon, error)
|
||||||
GetProvisionerDaemonsByOrganization(ctx context.Context, arg GetProvisionerDaemonsByOrganizationParams) ([]ProvisionerDaemon, error)
|
GetProvisionerDaemonsByOrganization(ctx context.Context, arg GetProvisionerDaemonsByOrganizationParams) ([]ProvisionerDaemon, error)
|
||||||
@ -404,6 +407,7 @@ type sqlcQuerier interface {
|
|||||||
InsertOAuth2ProviderAppToken(ctx context.Context, arg InsertOAuth2ProviderAppTokenParams) (OAuth2ProviderAppToken, error)
|
InsertOAuth2ProviderAppToken(ctx context.Context, arg InsertOAuth2ProviderAppTokenParams) (OAuth2ProviderAppToken, error)
|
||||||
InsertOrganization(ctx context.Context, arg InsertOrganizationParams) (Organization, error)
|
InsertOrganization(ctx context.Context, arg InsertOrganizationParams) (Organization, error)
|
||||||
InsertOrganizationMember(ctx context.Context, arg InsertOrganizationMemberParams) (OrganizationMember, error)
|
InsertOrganizationMember(ctx context.Context, arg InsertOrganizationMemberParams) (OrganizationMember, error)
|
||||||
|
InsertPreset(ctx context.Context, arg InsertPresetParams) (TemplateVersionPreset, error)
|
||||||
InsertProvisionerJob(ctx context.Context, arg InsertProvisionerJobParams) (ProvisionerJob, error)
|
InsertProvisionerJob(ctx context.Context, arg InsertProvisionerJobParams) (ProvisionerJob, error)
|
||||||
InsertProvisionerJobLogs(ctx context.Context, arg InsertProvisionerJobLogsParams) ([]ProvisionerJobLog, error)
|
InsertProvisionerJobLogs(ctx context.Context, arg InsertProvisionerJobLogsParams) ([]ProvisionerJobLog, error)
|
||||||
InsertProvisionerJobTimings(ctx context.Context, arg InsertProvisionerJobTimingsParams) ([]ProvisionerJobTiming, error)
|
InsertProvisionerJobTimings(ctx context.Context, arg InsertProvisionerJobTimingsParams) ([]ProvisionerJobTiming, error)
|
||||||
|
@ -5395,6 +5395,157 @@ func (q *sqlQuerier) GetParameterSchemasByJobID(ctx context.Context, jobID uuid.
|
|||||||
return items, nil
|
return items, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getPresetByWorkspaceBuildID = `-- name: GetPresetByWorkspaceBuildID :one
|
||||||
|
SELECT
|
||||||
|
template_version_presets.id,
|
||||||
|
template_version_presets.name,
|
||||||
|
template_version_presets.created_at,
|
||||||
|
template_version_presets.updated_at
|
||||||
|
FROM
|
||||||
|
workspace_builds
|
||||||
|
LEFT JOIN template_version_presets ON workspace_builds.template_version_preset_id = template_version_presets.id
|
||||||
|
WHERE
|
||||||
|
workspace_builds.id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
type GetPresetByWorkspaceBuildIDRow struct {
|
||||||
|
ID uuid.NullUUID `db:"id" json:"id"`
|
||||||
|
Name sql.NullString `db:"name" json:"name"`
|
||||||
|
CreatedAt sql.NullTime `db:"created_at" json:"created_at"`
|
||||||
|
UpdatedAt sql.NullTime `db:"updated_at" json:"updated_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *sqlQuerier) GetPresetByWorkspaceBuildID(ctx context.Context, workspaceBuildID uuid.UUID) (GetPresetByWorkspaceBuildIDRow, error) {
|
||||||
|
row := q.db.QueryRowContext(ctx, getPresetByWorkspaceBuildID, workspaceBuildID)
|
||||||
|
var i GetPresetByWorkspaceBuildIDRow
|
||||||
|
err := row.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.Name,
|
||||||
|
&i.CreatedAt,
|
||||||
|
&i.UpdatedAt,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const getPresetParametersByPresetID = `-- name: GetPresetParametersByPresetID :many
|
||||||
|
SELECT
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
value
|
||||||
|
FROM
|
||||||
|
template_version_preset_parameters
|
||||||
|
WHERE
|
||||||
|
template_version_preset_id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
type GetPresetParametersByPresetIDRow struct {
|
||||||
|
ID uuid.UUID `db:"id" json:"id"`
|
||||||
|
Name string `db:"name" json:"name"`
|
||||||
|
Value string `db:"value" json:"value"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *sqlQuerier) GetPresetParametersByPresetID(ctx context.Context, templateVersionPresetID uuid.UUID) ([]GetPresetParametersByPresetIDRow, error) {
|
||||||
|
rows, err := q.db.QueryContext(ctx, getPresetParametersByPresetID, templateVersionPresetID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
var items []GetPresetParametersByPresetIDRow
|
||||||
|
for rows.Next() {
|
||||||
|
var i GetPresetParametersByPresetIDRow
|
||||||
|
if err := rows.Scan(&i.ID, &i.Name, &i.Value); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Close(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const getPresetsByTemplateVersionID = `-- name: GetPresetsByTemplateVersionID :many
|
||||||
|
SELECT
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
created_at,
|
||||||
|
updated_at
|
||||||
|
FROM
|
||||||
|
template_version_presets
|
||||||
|
WHERE
|
||||||
|
template_version_id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
type GetPresetsByTemplateVersionIDRow struct {
|
||||||
|
ID uuid.UUID `db:"id" json:"id"`
|
||||||
|
Name string `db:"name" json:"name"`
|
||||||
|
CreatedAt time.Time `db:"created_at" json:"created_at"`
|
||||||
|
UpdatedAt sql.NullTime `db:"updated_at" json:"updated_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *sqlQuerier) GetPresetsByTemplateVersionID(ctx context.Context, templateVersionID uuid.UUID) ([]GetPresetsByTemplateVersionIDRow, error) {
|
||||||
|
rows, err := q.db.QueryContext(ctx, getPresetsByTemplateVersionID, templateVersionID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
var items []GetPresetsByTemplateVersionIDRow
|
||||||
|
for rows.Next() {
|
||||||
|
var i GetPresetsByTemplateVersionIDRow
|
||||||
|
if err := rows.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.Name,
|
||||||
|
&i.CreatedAt,
|
||||||
|
&i.UpdatedAt,
|
||||||
|
); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Close(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const insertPreset = `-- name: InsertPreset :one
|
||||||
|
INSERT INTO
|
||||||
|
template_version_presets (template_version_id, name, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
($1, $2, $3, $4) RETURNING id, template_version_id, name, created_at, updated_at
|
||||||
|
`
|
||||||
|
|
||||||
|
type InsertPresetParams struct {
|
||||||
|
TemplateVersionID uuid.UUID `db:"template_version_id" json:"template_version_id"`
|
||||||
|
Name string `db:"name" json:"name"`
|
||||||
|
CreatedAt time.Time `db:"created_at" json:"created_at"`
|
||||||
|
UpdatedAt sql.NullTime `db:"updated_at" json:"updated_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *sqlQuerier) InsertPreset(ctx context.Context, arg InsertPresetParams) (TemplateVersionPreset, error) {
|
||||||
|
row := q.db.QueryRowContext(ctx, insertPreset,
|
||||||
|
arg.TemplateVersionID,
|
||||||
|
arg.Name,
|
||||||
|
arg.CreatedAt,
|
||||||
|
arg.UpdatedAt,
|
||||||
|
)
|
||||||
|
var i TemplateVersionPreset
|
||||||
|
err := row.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.TemplateVersionID,
|
||||||
|
&i.Name,
|
||||||
|
&i.CreatedAt,
|
||||||
|
&i.UpdatedAt,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
const deleteOldProvisionerDaemons = `-- name: DeleteOldProvisionerDaemons :exec
|
const deleteOldProvisionerDaemons = `-- name: DeleteOldProvisionerDaemons :exec
|
||||||
DELETE FROM provisioner_daemons WHERE (
|
DELETE FROM provisioner_daemons WHERE (
|
||||||
(created_at < (NOW() - INTERVAL '7 days') AND last_seen_at IS NULL) OR
|
(created_at < (NOW() - INTERVAL '7 days') AND last_seen_at IS NULL) OR
|
||||||
@ -11955,7 +12106,7 @@ const getWorkspaceAgentAndLatestBuildByAuthToken = `-- name: GetWorkspaceAgentAn
|
|||||||
SELECT
|
SELECT
|
||||||
workspaces.id, workspaces.created_at, workspaces.updated_at, workspaces.owner_id, workspaces.organization_id, workspaces.template_id, workspaces.deleted, workspaces.name, workspaces.autostart_schedule, workspaces.ttl, workspaces.last_used_at, workspaces.dormant_at, workspaces.deleting_at, workspaces.automatic_updates, workspaces.favorite, workspaces.next_start_at,
|
workspaces.id, workspaces.created_at, workspaces.updated_at, workspaces.owner_id, workspaces.organization_id, workspaces.template_id, workspaces.deleted, workspaces.name, workspaces.autostart_schedule, workspaces.ttl, workspaces.last_used_at, workspaces.dormant_at, workspaces.deleting_at, workspaces.automatic_updates, workspaces.favorite, workspaces.next_start_at,
|
||||||
workspace_agents.id, workspace_agents.created_at, workspace_agents.updated_at, workspace_agents.name, workspace_agents.first_connected_at, workspace_agents.last_connected_at, workspace_agents.disconnected_at, workspace_agents.resource_id, workspace_agents.auth_token, workspace_agents.auth_instance_id, workspace_agents.architecture, workspace_agents.environment_variables, workspace_agents.operating_system, workspace_agents.instance_metadata, workspace_agents.resource_metadata, workspace_agents.directory, workspace_agents.version, workspace_agents.last_connected_replica_id, workspace_agents.connection_timeout_seconds, workspace_agents.troubleshooting_url, workspace_agents.motd_file, workspace_agents.lifecycle_state, workspace_agents.expanded_directory, workspace_agents.logs_length, workspace_agents.logs_overflowed, workspace_agents.started_at, workspace_agents.ready_at, workspace_agents.subsystems, workspace_agents.display_apps, workspace_agents.api_version, workspace_agents.display_order,
|
workspace_agents.id, workspace_agents.created_at, workspace_agents.updated_at, workspace_agents.name, workspace_agents.first_connected_at, workspace_agents.last_connected_at, workspace_agents.disconnected_at, workspace_agents.resource_id, workspace_agents.auth_token, workspace_agents.auth_instance_id, workspace_agents.architecture, workspace_agents.environment_variables, workspace_agents.operating_system, workspace_agents.instance_metadata, workspace_agents.resource_metadata, workspace_agents.directory, workspace_agents.version, workspace_agents.last_connected_replica_id, workspace_agents.connection_timeout_seconds, workspace_agents.troubleshooting_url, workspace_agents.motd_file, workspace_agents.lifecycle_state, workspace_agents.expanded_directory, workspace_agents.logs_length, workspace_agents.logs_overflowed, workspace_agents.started_at, workspace_agents.ready_at, workspace_agents.subsystems, workspace_agents.display_apps, workspace_agents.api_version, workspace_agents.display_order,
|
||||||
workspace_build_with_user.id, workspace_build_with_user.created_at, workspace_build_with_user.updated_at, workspace_build_with_user.workspace_id, workspace_build_with_user.template_version_id, workspace_build_with_user.build_number, workspace_build_with_user.transition, workspace_build_with_user.initiator_id, workspace_build_with_user.provisioner_state, workspace_build_with_user.job_id, workspace_build_with_user.deadline, workspace_build_with_user.reason, workspace_build_with_user.daily_cost, workspace_build_with_user.max_deadline, workspace_build_with_user.initiator_by_avatar_url, workspace_build_with_user.initiator_by_username
|
workspace_build_with_user.id, workspace_build_with_user.created_at, workspace_build_with_user.updated_at, workspace_build_with_user.workspace_id, workspace_build_with_user.template_version_id, workspace_build_with_user.build_number, workspace_build_with_user.transition, workspace_build_with_user.initiator_id, workspace_build_with_user.provisioner_state, workspace_build_with_user.job_id, workspace_build_with_user.deadline, workspace_build_with_user.reason, workspace_build_with_user.daily_cost, workspace_build_with_user.max_deadline, workspace_build_with_user.template_version_preset_id, workspace_build_with_user.initiator_by_avatar_url, workspace_build_with_user.initiator_by_username
|
||||||
FROM
|
FROM
|
||||||
workspace_agents
|
workspace_agents
|
||||||
JOIN
|
JOIN
|
||||||
@ -12058,6 +12209,7 @@ func (q *sqlQuerier) GetWorkspaceAgentAndLatestBuildByAuthToken(ctx context.Cont
|
|||||||
&i.WorkspaceBuild.Reason,
|
&i.WorkspaceBuild.Reason,
|
||||||
&i.WorkspaceBuild.DailyCost,
|
&i.WorkspaceBuild.DailyCost,
|
||||||
&i.WorkspaceBuild.MaxDeadline,
|
&i.WorkspaceBuild.MaxDeadline,
|
||||||
|
&i.WorkspaceBuild.TemplateVersionPresetID,
|
||||||
&i.WorkspaceBuild.InitiatorByAvatarUrl,
|
&i.WorkspaceBuild.InitiatorByAvatarUrl,
|
||||||
&i.WorkspaceBuild.InitiatorByUsername,
|
&i.WorkspaceBuild.InitiatorByUsername,
|
||||||
)
|
)
|
||||||
@ -14261,7 +14413,7 @@ func (q *sqlQuerier) InsertWorkspaceBuildParameters(ctx context.Context, arg Ins
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getActiveWorkspaceBuildsByTemplateID = `-- name: GetActiveWorkspaceBuildsByTemplateID :many
|
const getActiveWorkspaceBuildsByTemplateID = `-- name: GetActiveWorkspaceBuildsByTemplateID :many
|
||||||
SELECT wb.id, wb.created_at, wb.updated_at, wb.workspace_id, wb.template_version_id, wb.build_number, wb.transition, wb.initiator_id, wb.provisioner_state, wb.job_id, wb.deadline, wb.reason, wb.daily_cost, wb.max_deadline, wb.initiator_by_avatar_url, wb.initiator_by_username
|
SELECT wb.id, wb.created_at, wb.updated_at, wb.workspace_id, wb.template_version_id, wb.build_number, wb.transition, wb.initiator_id, wb.provisioner_state, wb.job_id, wb.deadline, wb.reason, wb.daily_cost, wb.max_deadline, wb.template_version_preset_id, wb.initiator_by_avatar_url, wb.initiator_by_username
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
workspace_id, MAX(build_number) as max_build_number
|
workspace_id, MAX(build_number) as max_build_number
|
||||||
@ -14315,6 +14467,7 @@ func (q *sqlQuerier) GetActiveWorkspaceBuildsByTemplateID(ctx context.Context, t
|
|||||||
&i.Reason,
|
&i.Reason,
|
||||||
&i.DailyCost,
|
&i.DailyCost,
|
||||||
&i.MaxDeadline,
|
&i.MaxDeadline,
|
||||||
|
&i.TemplateVersionPresetID,
|
||||||
&i.InitiatorByAvatarUrl,
|
&i.InitiatorByAvatarUrl,
|
||||||
&i.InitiatorByUsername,
|
&i.InitiatorByUsername,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
@ -14410,7 +14563,7 @@ func (q *sqlQuerier) GetFailedWorkspaceBuildsByTemplateID(ctx context.Context, a
|
|||||||
|
|
||||||
const getLatestWorkspaceBuildByWorkspaceID = `-- name: GetLatestWorkspaceBuildByWorkspaceID :one
|
const getLatestWorkspaceBuildByWorkspaceID = `-- name: GetLatestWorkspaceBuildByWorkspaceID :one
|
||||||
SELECT
|
SELECT
|
||||||
id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, initiator_by_avatar_url, initiator_by_username
|
id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, template_version_preset_id, initiator_by_avatar_url, initiator_by_username
|
||||||
FROM
|
FROM
|
||||||
workspace_build_with_user AS workspace_builds
|
workspace_build_with_user AS workspace_builds
|
||||||
WHERE
|
WHERE
|
||||||
@ -14439,6 +14592,7 @@ func (q *sqlQuerier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, w
|
|||||||
&i.Reason,
|
&i.Reason,
|
||||||
&i.DailyCost,
|
&i.DailyCost,
|
||||||
&i.MaxDeadline,
|
&i.MaxDeadline,
|
||||||
|
&i.TemplateVersionPresetID,
|
||||||
&i.InitiatorByAvatarUrl,
|
&i.InitiatorByAvatarUrl,
|
||||||
&i.InitiatorByUsername,
|
&i.InitiatorByUsername,
|
||||||
)
|
)
|
||||||
@ -14446,7 +14600,7 @@ func (q *sqlQuerier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, w
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getLatestWorkspaceBuilds = `-- name: GetLatestWorkspaceBuilds :many
|
const getLatestWorkspaceBuilds = `-- name: GetLatestWorkspaceBuilds :many
|
||||||
SELECT wb.id, wb.created_at, wb.updated_at, wb.workspace_id, wb.template_version_id, wb.build_number, wb.transition, wb.initiator_id, wb.provisioner_state, wb.job_id, wb.deadline, wb.reason, wb.daily_cost, wb.max_deadline, wb.initiator_by_avatar_url, wb.initiator_by_username
|
SELECT wb.id, wb.created_at, wb.updated_at, wb.workspace_id, wb.template_version_id, wb.build_number, wb.transition, wb.initiator_id, wb.provisioner_state, wb.job_id, wb.deadline, wb.reason, wb.daily_cost, wb.max_deadline, wb.template_version_preset_id, wb.initiator_by_avatar_url, wb.initiator_by_username
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
workspace_id, MAX(build_number) as max_build_number
|
workspace_id, MAX(build_number) as max_build_number
|
||||||
@ -14484,6 +14638,7 @@ func (q *sqlQuerier) GetLatestWorkspaceBuilds(ctx context.Context) ([]WorkspaceB
|
|||||||
&i.Reason,
|
&i.Reason,
|
||||||
&i.DailyCost,
|
&i.DailyCost,
|
||||||
&i.MaxDeadline,
|
&i.MaxDeadline,
|
||||||
|
&i.TemplateVersionPresetID,
|
||||||
&i.InitiatorByAvatarUrl,
|
&i.InitiatorByAvatarUrl,
|
||||||
&i.InitiatorByUsername,
|
&i.InitiatorByUsername,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
@ -14501,7 +14656,7 @@ func (q *sqlQuerier) GetLatestWorkspaceBuilds(ctx context.Context) ([]WorkspaceB
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getLatestWorkspaceBuildsByWorkspaceIDs = `-- name: GetLatestWorkspaceBuildsByWorkspaceIDs :many
|
const getLatestWorkspaceBuildsByWorkspaceIDs = `-- name: GetLatestWorkspaceBuildsByWorkspaceIDs :many
|
||||||
SELECT wb.id, wb.created_at, wb.updated_at, wb.workspace_id, wb.template_version_id, wb.build_number, wb.transition, wb.initiator_id, wb.provisioner_state, wb.job_id, wb.deadline, wb.reason, wb.daily_cost, wb.max_deadline, wb.initiator_by_avatar_url, wb.initiator_by_username
|
SELECT wb.id, wb.created_at, wb.updated_at, wb.workspace_id, wb.template_version_id, wb.build_number, wb.transition, wb.initiator_id, wb.provisioner_state, wb.job_id, wb.deadline, wb.reason, wb.daily_cost, wb.max_deadline, wb.template_version_preset_id, wb.initiator_by_avatar_url, wb.initiator_by_username
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
workspace_id, MAX(build_number) as max_build_number
|
workspace_id, MAX(build_number) as max_build_number
|
||||||
@ -14541,6 +14696,7 @@ func (q *sqlQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Context,
|
|||||||
&i.Reason,
|
&i.Reason,
|
||||||
&i.DailyCost,
|
&i.DailyCost,
|
||||||
&i.MaxDeadline,
|
&i.MaxDeadline,
|
||||||
|
&i.TemplateVersionPresetID,
|
||||||
&i.InitiatorByAvatarUrl,
|
&i.InitiatorByAvatarUrl,
|
||||||
&i.InitiatorByUsername,
|
&i.InitiatorByUsername,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
@ -14559,7 +14715,7 @@ func (q *sqlQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Context,
|
|||||||
|
|
||||||
const getWorkspaceBuildByID = `-- name: GetWorkspaceBuildByID :one
|
const getWorkspaceBuildByID = `-- name: GetWorkspaceBuildByID :one
|
||||||
SELECT
|
SELECT
|
||||||
id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, initiator_by_avatar_url, initiator_by_username
|
id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, template_version_preset_id, initiator_by_avatar_url, initiator_by_username
|
||||||
FROM
|
FROM
|
||||||
workspace_build_with_user AS workspace_builds
|
workspace_build_with_user AS workspace_builds
|
||||||
WHERE
|
WHERE
|
||||||
@ -14586,6 +14742,7 @@ func (q *sqlQuerier) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (W
|
|||||||
&i.Reason,
|
&i.Reason,
|
||||||
&i.DailyCost,
|
&i.DailyCost,
|
||||||
&i.MaxDeadline,
|
&i.MaxDeadline,
|
||||||
|
&i.TemplateVersionPresetID,
|
||||||
&i.InitiatorByAvatarUrl,
|
&i.InitiatorByAvatarUrl,
|
||||||
&i.InitiatorByUsername,
|
&i.InitiatorByUsername,
|
||||||
)
|
)
|
||||||
@ -14594,7 +14751,7 @@ func (q *sqlQuerier) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (W
|
|||||||
|
|
||||||
const getWorkspaceBuildByJobID = `-- name: GetWorkspaceBuildByJobID :one
|
const getWorkspaceBuildByJobID = `-- name: GetWorkspaceBuildByJobID :one
|
||||||
SELECT
|
SELECT
|
||||||
id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, initiator_by_avatar_url, initiator_by_username
|
id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, template_version_preset_id, initiator_by_avatar_url, initiator_by_username
|
||||||
FROM
|
FROM
|
||||||
workspace_build_with_user AS workspace_builds
|
workspace_build_with_user AS workspace_builds
|
||||||
WHERE
|
WHERE
|
||||||
@ -14621,6 +14778,7 @@ func (q *sqlQuerier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UU
|
|||||||
&i.Reason,
|
&i.Reason,
|
||||||
&i.DailyCost,
|
&i.DailyCost,
|
||||||
&i.MaxDeadline,
|
&i.MaxDeadline,
|
||||||
|
&i.TemplateVersionPresetID,
|
||||||
&i.InitiatorByAvatarUrl,
|
&i.InitiatorByAvatarUrl,
|
||||||
&i.InitiatorByUsername,
|
&i.InitiatorByUsername,
|
||||||
)
|
)
|
||||||
@ -14629,7 +14787,7 @@ func (q *sqlQuerier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UU
|
|||||||
|
|
||||||
const getWorkspaceBuildByWorkspaceIDAndBuildNumber = `-- name: GetWorkspaceBuildByWorkspaceIDAndBuildNumber :one
|
const getWorkspaceBuildByWorkspaceIDAndBuildNumber = `-- name: GetWorkspaceBuildByWorkspaceIDAndBuildNumber :one
|
||||||
SELECT
|
SELECT
|
||||||
id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, initiator_by_avatar_url, initiator_by_username
|
id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, template_version_preset_id, initiator_by_avatar_url, initiator_by_username
|
||||||
FROM
|
FROM
|
||||||
workspace_build_with_user AS workspace_builds
|
workspace_build_with_user AS workspace_builds
|
||||||
WHERE
|
WHERE
|
||||||
@ -14660,6 +14818,7 @@ func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Co
|
|||||||
&i.Reason,
|
&i.Reason,
|
||||||
&i.DailyCost,
|
&i.DailyCost,
|
||||||
&i.MaxDeadline,
|
&i.MaxDeadline,
|
||||||
|
&i.TemplateVersionPresetID,
|
||||||
&i.InitiatorByAvatarUrl,
|
&i.InitiatorByAvatarUrl,
|
||||||
&i.InitiatorByUsername,
|
&i.InitiatorByUsername,
|
||||||
)
|
)
|
||||||
@ -14735,7 +14894,7 @@ func (q *sqlQuerier) GetWorkspaceBuildStatsByTemplates(ctx context.Context, sinc
|
|||||||
|
|
||||||
const getWorkspaceBuildsByWorkspaceID = `-- name: GetWorkspaceBuildsByWorkspaceID :many
|
const getWorkspaceBuildsByWorkspaceID = `-- name: GetWorkspaceBuildsByWorkspaceID :many
|
||||||
SELECT
|
SELECT
|
||||||
id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, initiator_by_avatar_url, initiator_by_username
|
id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, template_version_preset_id, initiator_by_avatar_url, initiator_by_username
|
||||||
FROM
|
FROM
|
||||||
workspace_build_with_user AS workspace_builds
|
workspace_build_with_user AS workspace_builds
|
||||||
WHERE
|
WHERE
|
||||||
@ -14805,6 +14964,7 @@ func (q *sqlQuerier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg Ge
|
|||||||
&i.Reason,
|
&i.Reason,
|
||||||
&i.DailyCost,
|
&i.DailyCost,
|
||||||
&i.MaxDeadline,
|
&i.MaxDeadline,
|
||||||
|
&i.TemplateVersionPresetID,
|
||||||
&i.InitiatorByAvatarUrl,
|
&i.InitiatorByAvatarUrl,
|
||||||
&i.InitiatorByUsername,
|
&i.InitiatorByUsername,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
@ -14822,7 +14982,7 @@ func (q *sqlQuerier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg Ge
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getWorkspaceBuildsCreatedAfter = `-- name: GetWorkspaceBuildsCreatedAfter :many
|
const getWorkspaceBuildsCreatedAfter = `-- name: GetWorkspaceBuildsCreatedAfter :many
|
||||||
SELECT id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, initiator_by_avatar_url, initiator_by_username FROM workspace_build_with_user WHERE created_at > $1
|
SELECT id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason, daily_cost, max_deadline, template_version_preset_id, initiator_by_avatar_url, initiator_by_username FROM workspace_build_with_user WHERE created_at > $1
|
||||||
`
|
`
|
||||||
|
|
||||||
func (q *sqlQuerier) GetWorkspaceBuildsCreatedAfter(ctx context.Context, createdAt time.Time) ([]WorkspaceBuild, error) {
|
func (q *sqlQuerier) GetWorkspaceBuildsCreatedAfter(ctx context.Context, createdAt time.Time) ([]WorkspaceBuild, error) {
|
||||||
@ -14849,6 +15009,7 @@ func (q *sqlQuerier) GetWorkspaceBuildsCreatedAfter(ctx context.Context, created
|
|||||||
&i.Reason,
|
&i.Reason,
|
||||||
&i.DailyCost,
|
&i.DailyCost,
|
||||||
&i.MaxDeadline,
|
&i.MaxDeadline,
|
||||||
|
&i.TemplateVersionPresetID,
|
||||||
&i.InitiatorByAvatarUrl,
|
&i.InitiatorByAvatarUrl,
|
||||||
&i.InitiatorByUsername,
|
&i.InitiatorByUsername,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
|
44
coderd/database/queries/presets.sql
Normal file
44
coderd/database/queries/presets.sql
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
-- name: InsertPreset :one
|
||||||
|
INSERT INTO
|
||||||
|
template_version_presets (template_version_id, name, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
(@template_version_id, @name, @created_at, @updated_at) RETURNING *;
|
||||||
|
|
||||||
|
-- InsertPresetParameter :one
|
||||||
|
INSERT INTO
|
||||||
|
template_version_preset_parameters (template_version_preset_id, name, value)
|
||||||
|
VALUES
|
||||||
|
(@template_version_preset_id, @name, @value) RETURNING *;
|
||||||
|
|
||||||
|
-- name: GetPresetsByTemplateVersionID :many
|
||||||
|
SELECT
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
created_at,
|
||||||
|
updated_at
|
||||||
|
FROM
|
||||||
|
template_version_presets
|
||||||
|
WHERE
|
||||||
|
template_version_id = @template_version_id;
|
||||||
|
|
||||||
|
-- name: GetPresetByWorkspaceBuildID :one
|
||||||
|
SELECT
|
||||||
|
template_version_presets.id,
|
||||||
|
template_version_presets.name,
|
||||||
|
template_version_presets.created_at,
|
||||||
|
template_version_presets.updated_at
|
||||||
|
FROM
|
||||||
|
workspace_builds
|
||||||
|
LEFT JOIN template_version_presets ON workspace_builds.template_version_preset_id = template_version_presets.id
|
||||||
|
WHERE
|
||||||
|
workspace_builds.id = @workspace_build_id;
|
||||||
|
|
||||||
|
-- name: GetPresetParametersByPresetID :many
|
||||||
|
SELECT
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
value
|
||||||
|
FROM
|
||||||
|
template_version_preset_parameters
|
||||||
|
WHERE
|
||||||
|
template_version_preset_id = @template_version_preset_id;
|
@ -58,6 +58,8 @@ const (
|
|||||||
UniqueTelemetryItemsPkey UniqueConstraint = "telemetry_items_pkey" // ALTER TABLE ONLY telemetry_items ADD CONSTRAINT telemetry_items_pkey PRIMARY KEY (key);
|
UniqueTelemetryItemsPkey UniqueConstraint = "telemetry_items_pkey" // ALTER TABLE ONLY telemetry_items ADD CONSTRAINT telemetry_items_pkey PRIMARY KEY (key);
|
||||||
UniqueTemplateUsageStatsPkey UniqueConstraint = "template_usage_stats_pkey" // ALTER TABLE ONLY template_usage_stats ADD CONSTRAINT template_usage_stats_pkey PRIMARY KEY (start_time, template_id, user_id);
|
UniqueTemplateUsageStatsPkey UniqueConstraint = "template_usage_stats_pkey" // ALTER TABLE ONLY template_usage_stats ADD CONSTRAINT template_usage_stats_pkey PRIMARY KEY (start_time, template_id, user_id);
|
||||||
UniqueTemplateVersionParametersTemplateVersionIDNameKey UniqueConstraint = "template_version_parameters_template_version_id_name_key" // ALTER TABLE ONLY template_version_parameters ADD CONSTRAINT template_version_parameters_template_version_id_name_key UNIQUE (template_version_id, name);
|
UniqueTemplateVersionParametersTemplateVersionIDNameKey UniqueConstraint = "template_version_parameters_template_version_id_name_key" // ALTER TABLE ONLY template_version_parameters ADD CONSTRAINT template_version_parameters_template_version_id_name_key UNIQUE (template_version_id, name);
|
||||||
|
UniqueTemplateVersionPresetParametersPkey UniqueConstraint = "template_version_preset_parameters_pkey" // ALTER TABLE ONLY template_version_preset_parameters ADD CONSTRAINT template_version_preset_parameters_pkey PRIMARY KEY (id);
|
||||||
|
UniqueTemplateVersionPresetsPkey UniqueConstraint = "template_version_presets_pkey" // ALTER TABLE ONLY template_version_presets ADD CONSTRAINT template_version_presets_pkey PRIMARY KEY (id);
|
||||||
UniqueTemplateVersionVariablesTemplateVersionIDNameKey UniqueConstraint = "template_version_variables_template_version_id_name_key" // ALTER TABLE ONLY template_version_variables ADD CONSTRAINT template_version_variables_template_version_id_name_key UNIQUE (template_version_id, name);
|
UniqueTemplateVersionVariablesTemplateVersionIDNameKey UniqueConstraint = "template_version_variables_template_version_id_name_key" // ALTER TABLE ONLY template_version_variables ADD CONSTRAINT template_version_variables_template_version_id_name_key UNIQUE (template_version_id, name);
|
||||||
UniqueTemplateVersionWorkspaceTagsTemplateVersionIDKeyKey UniqueConstraint = "template_version_workspace_tags_template_version_id_key_key" // ALTER TABLE ONLY template_version_workspace_tags ADD CONSTRAINT template_version_workspace_tags_template_version_id_key_key UNIQUE (template_version_id, key);
|
UniqueTemplateVersionWorkspaceTagsTemplateVersionIDKeyKey UniqueConstraint = "template_version_workspace_tags_template_version_id_key_key" // ALTER TABLE ONLY template_version_workspace_tags ADD CONSTRAINT template_version_workspace_tags_template_version_id_key_key UNIQUE (template_version_id, key);
|
||||||
UniqueTemplateVersionsPkey UniqueConstraint = "template_versions_pkey" // ALTER TABLE ONLY template_versions ADD CONSTRAINT template_versions_pkey PRIMARY KEY (id);
|
UniqueTemplateVersionsPkey UniqueConstraint = "template_versions_pkey" // ALTER TABLE ONLY template_versions ADD CONSTRAINT template_versions_pkey PRIMARY KEY (id);
|
||||||
|
@ -31,7 +31,7 @@ We track the following resources:
|
|||||||
| User<br><i>create, write, delete</i> | <table><thead><tr><th>Field</th><th>Tracked</th></tr></thead><tbody> | <tr><td>avatar_url</td><td>false</td></tr><tr><td>created_at</td><td>false</td></tr><tr><td>deleted</td><td>true</td></tr><tr><td>email</td><td>true</td></tr><tr><td>github_com_user_id</td><td>false</td></tr><tr><td>hashed_one_time_passcode</td><td>false</td></tr><tr><td>hashed_password</td><td>true</td></tr><tr><td>id</td><td>true</td></tr><tr><td>last_seen_at</td><td>false</td></tr><tr><td>login_type</td><td>true</td></tr><tr><td>name</td><td>true</td></tr><tr><td>one_time_passcode_expires_at</td><td>true</td></tr><tr><td>quiet_hours_schedule</td><td>true</td></tr><tr><td>rbac_roles</td><td>true</td></tr><tr><td>status</td><td>true</td></tr><tr><td>theme_preference</td><td>false</td></tr><tr><td>updated_at</td><td>false</td></tr><tr><td>username</td><td>true</td></tr></tbody></table> |
|
| User<br><i>create, write, delete</i> | <table><thead><tr><th>Field</th><th>Tracked</th></tr></thead><tbody> | <tr><td>avatar_url</td><td>false</td></tr><tr><td>created_at</td><td>false</td></tr><tr><td>deleted</td><td>true</td></tr><tr><td>email</td><td>true</td></tr><tr><td>github_com_user_id</td><td>false</td></tr><tr><td>hashed_one_time_passcode</td><td>false</td></tr><tr><td>hashed_password</td><td>true</td></tr><tr><td>id</td><td>true</td></tr><tr><td>last_seen_at</td><td>false</td></tr><tr><td>login_type</td><td>true</td></tr><tr><td>name</td><td>true</td></tr><tr><td>one_time_passcode_expires_at</td><td>true</td></tr><tr><td>quiet_hours_schedule</td><td>true</td></tr><tr><td>rbac_roles</td><td>true</td></tr><tr><td>status</td><td>true</td></tr><tr><td>theme_preference</td><td>false</td></tr><tr><td>updated_at</td><td>false</td></tr><tr><td>username</td><td>true</td></tr></tbody></table> |
|
||||||
| WorkspaceBuild<br><i>start, stop</i> | <table><thead><tr><th>Field</th><th>Tracked</th></tr></thead><tbody> | <tr><td>build_number</td><td>false</td></tr><tr><td>created_at</td><td>false</td></tr><tr><td>daily_cost</td><td>false</td></tr><tr><td>deadline</td><td>false</td></tr><tr><td>id</td><td>false</td></tr><tr><td>initiator_by_avatar_url</td><td>false</td></tr><tr><td>initiator_by_username</td><td>false</td></tr><tr><td>initiator_id</td><td>false</td></tr><tr><td>job_id</td><td>false</td></tr><tr><td>max_deadline</td><td>false</td></tr><tr><td>provisioner_state</td><td>false</td></tr><tr><td>reason</td><td>false</td></tr><tr><td>template_version_id</td><td>true</td></tr><tr><td>transition</td><td>false</td></tr><tr><td>updated_at</td><td>false</td></tr><tr><td>workspace_id</td><td>false</td></tr></tbody></table> |
|
| WorkspaceBuild<br><i>start, stop</i> | <table><thead><tr><th>Field</th><th>Tracked</th></tr></thead><tbody> | <tr><td>build_number</td><td>false</td></tr><tr><td>created_at</td><td>false</td></tr><tr><td>daily_cost</td><td>false</td></tr><tr><td>deadline</td><td>false</td></tr><tr><td>id</td><td>false</td></tr><tr><td>initiator_by_avatar_url</td><td>false</td></tr><tr><td>initiator_by_username</td><td>false</td></tr><tr><td>initiator_id</td><td>false</td></tr><tr><td>job_id</td><td>false</td></tr><tr><td>max_deadline</td><td>false</td></tr><tr><td>provisioner_state</td><td>false</td></tr><tr><td>reason</td><td>false</td></tr><tr><td>template_version_id</td><td>true</td></tr><tr><td>transition</td><td>false</td></tr><tr><td>updated_at</td><td>false</td></tr><tr><td>workspace_id</td><td>false</td></tr></tbody></table> |
|
||||||
| WorkspaceProxy<br><i></i> | <table><thead><tr><th>Field</th><th>Tracked</th></tr></thead><tbody> | <tr><td>created_at</td><td>true</td></tr><tr><td>deleted</td><td>false</td></tr><tr><td>derp_enabled</td><td>true</td></tr><tr><td>derp_only</td><td>true</td></tr><tr><td>display_name</td><td>true</td></tr><tr><td>icon</td><td>true</td></tr><tr><td>id</td><td>true</td></tr><tr><td>name</td><td>true</td></tr><tr><td>region_id</td><td>true</td></tr><tr><td>token_hashed_secret</td><td>true</td></tr><tr><td>updated_at</td><td>false</td></tr><tr><td>url</td><td>true</td></tr><tr><td>version</td><td>true</td></tr><tr><td>wildcard_hostname</td><td>true</td></tr></tbody></table> |
|
| WorkspaceProxy<br><i></i> | <table><thead><tr><th>Field</th><th>Tracked</th></tr></thead><tbody> | <tr><td>created_at</td><td>true</td></tr><tr><td>deleted</td><td>false</td></tr><tr><td>derp_enabled</td><td>true</td></tr><tr><td>derp_only</td><td>true</td></tr><tr><td>display_name</td><td>true</td></tr><tr><td>icon</td><td>true</td></tr><tr><td>id</td><td>true</td></tr><tr><td>name</td><td>true</td></tr><tr><td>region_id</td><td>true</td></tr><tr><td>token_hashed_secret</td><td>true</td></tr><tr><td>updated_at</td><td>false</td></tr><tr><td>url</td><td>true</td></tr><tr><td>version</td><td>true</td></tr><tr><td>wildcard_hostname</td><td>true</td></tr></tbody></table> |
|
||||||
| WorkspaceTable<br><i></i> | <table><thead><tr><th>Field</th><th>Tracked</th></tr></thead><tbody> | <tr><td>automatic_updates</td><td>true</td></tr><tr><td>autostart_schedule</td><td>true</td></tr><tr><td>created_at</td><td>false</td></tr><tr><td>deleted</td><td>false</td></tr><tr><td>deleting_at</td><td>true</td></tr><tr><td>dormant_at</td><td>true</td></tr><tr><td>favorite</td><td>true</td></tr><tr><td>id</td><td>true</td></tr><tr><td>last_used_at</td><td>false</td></tr><tr><td>name</td><td>true</td></tr><tr><td>next_start_at</td><td>true</td></tr><tr><td>organization_id</td><td>false</td></tr><tr><td>owner_id</td><td>true</td></tr><tr><td>template_id</td><td>true</td></tr><tr><td>ttl</td><td>true</td></tr><tr><td>updated_at</td><td>false</td></tr></tbody></table> |
|
| WorkspaceTable<br><i></i> | <table><thead><tr><th>Field</th><th>Tracked</th></tr></thead><tbody> | <tr><td>automatic_updates</td><td>true</td></tr><tr><td>autostart_schedule</td><td>true</td></tr><tr><td>created_at</td><td>false</td></tr><tr><td>deleted</td><td>false</td></tr><tr><td>deleting_at</td><td>true</td></tr><tr><td>dormant_at</td><td>true</td></tr><tr><td>favorite</td><td>true</td></tr><tr><td>id</td><td>true</td></tr><tr><td>last_used_at</td><td>false</td></tr><tr><td>name</td><td>true</td></tr><tr><td>next_start_at</td><td>true</td></tr><tr><td>organization_id</td><td>false</td></tr><tr><td>owner_id</td><td>true</td></tr><tr><td>template_id</td><td>true</td></tr><tr><td>template_version_preset_id</td><td>false</td></tr><tr><td>ttl</td><td>true</td></tr><tr><td>updated_at</td><td>false</td></tr></tbody></table> |
|
||||||
|
|
||||||
<!-- End generated by 'make docs/admin/security/audit-logs.md'. -->
|
<!-- End generated by 'make docs/admin/security/audit-logs.md'. -->
|
||||||
|
|
||||||
|
@ -170,22 +170,23 @@ var auditableResourcesTypes = map[any]map[string]Action{
|
|||||||
"next_start_at": ActionTrack,
|
"next_start_at": ActionTrack,
|
||||||
},
|
},
|
||||||
&database.WorkspaceBuild{}: {
|
&database.WorkspaceBuild{}: {
|
||||||
"id": ActionIgnore,
|
"id": ActionIgnore,
|
||||||
"created_at": ActionIgnore,
|
"created_at": ActionIgnore,
|
||||||
"updated_at": ActionIgnore,
|
"updated_at": ActionIgnore,
|
||||||
"workspace_id": ActionIgnore,
|
"workspace_id": ActionIgnore,
|
||||||
"template_version_id": ActionTrack,
|
"template_version_id": ActionTrack,
|
||||||
"build_number": ActionIgnore,
|
"build_number": ActionIgnore,
|
||||||
"transition": ActionIgnore,
|
"transition": ActionIgnore,
|
||||||
"initiator_id": ActionIgnore,
|
"initiator_id": ActionIgnore,
|
||||||
"provisioner_state": ActionIgnore,
|
"provisioner_state": ActionIgnore,
|
||||||
"job_id": ActionIgnore,
|
"job_id": ActionIgnore,
|
||||||
"deadline": ActionIgnore,
|
"deadline": ActionIgnore,
|
||||||
"reason": ActionIgnore,
|
"reason": ActionIgnore,
|
||||||
"daily_cost": ActionIgnore,
|
"daily_cost": ActionIgnore,
|
||||||
"max_deadline": ActionIgnore,
|
"max_deadline": ActionIgnore,
|
||||||
"initiator_by_avatar_url": ActionIgnore,
|
"initiator_by_avatar_url": ActionIgnore,
|
||||||
"initiator_by_username": ActionIgnore,
|
"initiator_by_username": ActionIgnore,
|
||||||
|
"template_version_preset_id": ActionIgnore, // Never changes.
|
||||||
},
|
},
|
||||||
&database.AuditableGroup{}: {
|
&database.AuditableGroup{}: {
|
||||||
"id": ActionTrack,
|
"id": ActionTrack,
|
||||||
|
Reference in New Issue
Block a user