Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d8c4401

Browse files
authored
feat: Remove organization and user scoped parameters (#2007)
* feat: Remove organization and user scoped parameters Signed-off-by: Spike Curtis <[email protected]> * Fixup dump.sql Signed-off-by: Spike Curtis <[email protected]> * Fix dump.sql again Signed-off-by: Spike Curtis <[email protected]> * Fix down migration Signed-off-by: Spike Curtis <[email protected]>
1 parent 582d636 commit d8c4401

11 files changed

+90
-112
lines changed

coderd/coderd_test.go

+14-14
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,6 @@ func TestAuthorizeAllEndpoints(t *testing.T) {
6161
organization, err := client.Organization(ctx, admin.OrganizationID)
6262
require.NoError(t, err, "fetch org")
6363

64-
organizationParam, err := client.CreateParameter(ctx, codersdk.ParameterOrganization, organization.ID, codersdk.CreateParameterRequest{
65-
Name: "test-param",
66-
SourceValue: "hello world",
67-
SourceScheme: codersdk.ParameterSourceSchemeData,
68-
DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable,
69-
})
70-
require.NoError(t, err, "create org param")
71-
7264
// Setup some data in the database.
7365
version := coderdtest.CreateTemplateVersion(t, client, admin.OrganizationID, &echo.Responses{
7466
Parse: echo.ParseComplete,
@@ -101,6 +93,14 @@ func TestAuthorizeAllEndpoints(t *testing.T) {
10193
})
10294
require.NoError(t, err, "template version dry-run")
10395

96+
templateParam, err := client.CreateParameter(ctx, codersdk.ParameterTemplate, template.ID, codersdk.CreateParameterRequest{
97+
Name: "test-param",
98+
SourceValue: "hello world",
99+
SourceScheme: codersdk.ParameterSourceSchemeData,
100+
DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable,
101+
})
102+
require.NoError(t, err, "create template param")
103+
104104
// Always fail auth from this point forward
105105
authorizer.AlwaysReturn = rbac.ForbiddenWithInternal(xerrors.New("fake implementation"), nil, nil)
106106

@@ -294,15 +294,15 @@ func TestAuthorizeAllEndpoints(t *testing.T) {
294294

295295
"POST:/api/v2/parameters/{scope}/{id}": {
296296
AssertAction: rbac.ActionUpdate,
297-
AssertObject: rbac.ResourceOrganization.WithID(organization.ID.String()),
297+
AssertObject: rbac.ResourceTemplate.WithID(template.ID.String()),
298298
},
299299
"GET:/api/v2/parameters/{scope}/{id}": {
300300
AssertAction: rbac.ActionRead,
301-
AssertObject: rbac.ResourceOrganization.WithID(organization.ID.String()),
301+
AssertObject: rbac.ResourceTemplate.WithID(template.ID.String()),
302302
},
303303
"DELETE:/api/v2/parameters/{scope}/{id}/{name}": {
304304
AssertAction: rbac.ActionUpdate,
305-
AssertObject: rbac.ResourceOrganization.WithID(organization.ID.String()),
305+
AssertObject: rbac.ResourceTemplate.WithID(template.ID.String()),
306306
},
307307
"GET:/api/v2/organizations/{organization}/templates/{templatename}": {
308308
AssertAction: rbac.ActionRead,
@@ -377,9 +377,9 @@ func TestAuthorizeAllEndpoints(t *testing.T) {
377377
route = strings.ReplaceAll(route, "{templateversion}", version.ID.String())
378378
route = strings.ReplaceAll(route, "{templateversiondryrun}", templateVersionDryRun.ID.String())
379379
route = strings.ReplaceAll(route, "{templatename}", template.Name)
380-
// Only checking org scoped params here
381-
route = strings.ReplaceAll(route, "{scope}", string(organizationParam.Scope))
382-
route = strings.ReplaceAll(route, "{id}", organizationParam.ScopeID.String())
380+
// Only checking template scoped params here
381+
route = strings.ReplaceAll(route, "{scope}", string(templateParam.Scope))
382+
route = strings.ReplaceAll(route, "{id}", templateParam.ScopeID.String())
383383

384384
resp, err := client.Request(context.Background(), method, route, nil)
385385
require.NoError(t, err, "do req")

coderd/database/dump.sql

-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
CREATE TYPE old_parameter_scope AS ENUM (
2+
'organization',
3+
'template',
4+
'import_job',
5+
'user',
6+
'workspace'
7+
);
8+
ALTER TABLE parameter_values ALTER COLUMN scope TYPE old_parameter_scope USING (scope::text::old_parameter_scope);
9+
DROP TYPE parameter_scope;
10+
ALTER TYPE old_parameter_scope RENAME TO parameter_scope;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
-- We no longer support org or user scoped values, so delete them
2+
DELETE FROM parameter_values WHERE scope IN ('organization', 'user');
3+
4+
CREATE TYPE new_parameter_scope AS ENUM (
5+
'template',
6+
'import_job',
7+
'workspace'
8+
);
9+
ALTER TABLE parameter_values ALTER COLUMN scope TYPE new_parameter_scope USING (scope::text::new_parameter_scope);
10+
DROP TYPE parameter_scope;
11+
ALTER TYPE new_parameter_scope RENAME TO parameter_scope;

coderd/database/models.go

+3-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/parameter/compute.go

+2-21
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,6 @@ func Compute(ctx context.Context, db database.Store, scope ComputeScope, options
6060
compute.parameterSchemasByName[parameterSchema.Name] = parameterSchema
6161
}
6262

63-
// Organization parameters come first!
64-
err = compute.injectScope(ctx, database.GetParameterValuesByScopeParams{
65-
Scope: database.ParameterScopeOrganization,
66-
ScopeID: scope.OrganizationID,
67-
})
68-
if err != nil {
69-
return nil, err
70-
}
71-
7263
// Job parameters come second!
7364
err = compute.injectScope(ctx, database.GetParameterValuesByScopeParams{
7465
Scope: database.ParameterScopeImportJob,
@@ -123,15 +114,6 @@ func Compute(ctx context.Context, db database.Store, scope ComputeScope, options
123114
}
124115
}
125116

126-
// User parameters come fourth!
127-
err = compute.injectScope(ctx, database.GetParameterValuesByScopeParams{
128-
Scope: database.ParameterScopeUser,
129-
ScopeID: scope.UserID,
130-
})
131-
if err != nil {
132-
return nil, err
133-
}
134-
135117
if scope.WorkspaceID.Valid {
136118
// Workspace parameters come last!
137119
err = compute.injectScope(ctx, database.GetParameterValuesByScopeParams{
@@ -194,9 +176,8 @@ func (c *compute) injectSingle(scopedParameter database.ParameterValue, defaultV
194176
_, hasParameterValue := c.computedParameterByName[scopedParameter.Name]
195177
if hasParameterValue {
196178
if !parameterSchema.AllowOverrideSource &&
197-
// Users and workspaces cannot override anything on a template!
198-
(scopedParameter.Scope == database.ParameterScopeUser ||
199-
scopedParameter.Scope == database.ParameterScopeWorkspace) {
179+
// Workspaces cannot override anything on a template!
180+
scopedParameter.Scope == database.ParameterScopeWorkspace {
200181
return nil
201182
}
202183
}

coderd/parameter/compute_test.go

-36
Original file line numberDiff line numberDiff line change
@@ -92,42 +92,6 @@ func TestCompute(t *testing.T) {
9292
require.Equal(t, computedValue.SourceValue, parameterSchema.DefaultSourceValue)
9393
})
9494

95-
t.Run("OverrideOrganizationWithImportJob", func(t *testing.T) {
96-
t.Parallel()
97-
db := databasefake.New()
98-
scope := generateScope()
99-
parameterSchema := generateParameter(t, db, parameterOptions{
100-
TemplateImportJobID: scope.TemplateImportJobID,
101-
})
102-
_, err := db.InsertParameterValue(context.Background(), database.InsertParameterValueParams{
103-
ID: uuid.New(),
104-
Name: parameterSchema.Name,
105-
Scope: database.ParameterScopeOrganization,
106-
ScopeID: scope.OrganizationID,
107-
SourceScheme: database.ParameterSourceSchemeData,
108-
SourceValue: "firstnop",
109-
DestinationScheme: database.ParameterDestinationSchemeEnvironmentVariable,
110-
})
111-
require.NoError(t, err)
112-
113-
value, err := db.InsertParameterValue(context.Background(), database.InsertParameterValueParams{
114-
ID: uuid.New(),
115-
Name: parameterSchema.Name,
116-
Scope: database.ParameterScopeImportJob,
117-
ScopeID: scope.TemplateImportJobID,
118-
SourceScheme: database.ParameterSourceSchemeData,
119-
SourceValue: "secondnop",
120-
DestinationScheme: database.ParameterDestinationSchemeEnvironmentVariable,
121-
})
122-
require.NoError(t, err)
123-
124-
computed, err := parameter.Compute(context.Background(), db, scope, nil)
125-
require.NoError(t, err)
126-
require.Len(t, computed, 1)
127-
require.Equal(t, false, computed[0].DefaultSourceValue)
128-
require.Equal(t, value.SourceValue, computed[0].SourceValue)
129-
})
130-
13195
t.Run("TemplateOverridesTemplateDefault", func(t *testing.T) {
13296
t.Parallel()
13397
db := databasefake.New()

coderd/parameters.go

-14
Original file line numberDiff line numberDiff line change
@@ -210,16 +210,6 @@ func (api *API) parameterRBACResource(rw http.ResponseWriter, r *http.Request, s
210210
resource, err = api.Database.GetWorkspaceByID(ctx, scopeID)
211211
case database.ParameterScopeTemplate:
212212
resource, err = api.Database.GetTemplateByID(ctx, scopeID)
213-
case database.ParameterScopeOrganization:
214-
resource, err = api.Database.GetOrganizationByID(ctx, scopeID)
215-
case database.ParameterScopeUser:
216-
user, userErr := api.Database.GetUserByID(ctx, scopeID)
217-
err = userErr
218-
if err != nil {
219-
// Use the userdata resource instead of the user. This way users
220-
// can add user scoped params.
221-
resource = rbac.ResourceUserData.WithID(user.ID.String()).WithOwner(user.ID.String())
222-
}
223213
case database.ParameterScopeImportJob:
224214
// This scope does not make sense from this api.
225215
// ImportJob params are created with the job, and the job id cannot
@@ -246,12 +236,8 @@ func (api *API) parameterRBACResource(rw http.ResponseWriter, r *http.Request, s
246236
func readScopeAndID(rw http.ResponseWriter, r *http.Request) (database.ParameterScope, uuid.UUID, bool) {
247237
var scope database.ParameterScope
248238
switch chi.URLParam(r, "scope") {
249-
case string(codersdk.ParameterOrganization):
250-
scope = database.ParameterScopeOrganization
251239
case string(codersdk.ParameterTemplate):
252240
scope = database.ParameterScopeTemplate
253-
case string(codersdk.ParameterUser):
254-
scope = database.ParameterScopeUser
255241
case string(codersdk.ParameterWorkspace):
256242
scope = database.ParameterScopeWorkspace
257243
default:

coderd/parameters_test.go

+41-9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package coderd_test
22

33
import (
44
"context"
5+
"github.com/coder/coder/provisioner/echo"
6+
"github.com/coder/coder/provisionersdk/proto"
57
"net/http"
68
"testing"
79

@@ -32,7 +34,8 @@ func TestPostParameter(t *testing.T) {
3234
t.Parallel()
3335
client := coderdtest.New(t, nil)
3436
user := coderdtest.CreateFirstUser(t, client)
35-
_, err := client.CreateParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, codersdk.CreateParameterRequest{
37+
template := createTemplate(t, client, user)
38+
_, err := client.CreateParameter(context.Background(), codersdk.ParameterTemplate, template.ID, codersdk.CreateParameterRequest{
3639
Name: "example",
3740
SourceValue: "tomato",
3841
SourceScheme: codersdk.ParameterSourceSchemeData,
@@ -45,15 +48,16 @@ func TestPostParameter(t *testing.T) {
4548
t.Parallel()
4649
client := coderdtest.New(t, nil)
4750
user := coderdtest.CreateFirstUser(t, client)
48-
_, err := client.CreateParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, codersdk.CreateParameterRequest{
51+
template := createTemplate(t, client, user)
52+
_, err := client.CreateParameter(context.Background(), codersdk.ParameterTemplate, template.ID, codersdk.CreateParameterRequest{
4953
Name: "example",
5054
SourceValue: "tomato",
5155
SourceScheme: codersdk.ParameterSourceSchemeData,
5256
DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable,
5357
})
5458
require.NoError(t, err)
5559

56-
_, err = client.CreateParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, codersdk.CreateParameterRequest{
60+
_, err = client.CreateParameter(context.Background(), codersdk.ParameterTemplate, template.ID, codersdk.CreateParameterRequest{
5761
Name: "example",
5862
SourceValue: "tomato",
5963
SourceScheme: codersdk.ParameterSourceSchemeData,
@@ -71,21 +75,23 @@ func TestParameters(t *testing.T) {
7175
t.Parallel()
7276
client := coderdtest.New(t, nil)
7377
user := coderdtest.CreateFirstUser(t, client)
74-
_, err := client.Parameters(context.Background(), codersdk.ParameterOrganization, user.OrganizationID)
78+
template := createTemplate(t, client, user)
79+
_, err := client.Parameters(context.Background(), codersdk.ParameterTemplate, template.ID)
7580
require.NoError(t, err)
7681
})
7782
t.Run("List", func(t *testing.T) {
7883
t.Parallel()
7984
client := coderdtest.New(t, nil)
8085
user := coderdtest.CreateFirstUser(t, client)
81-
_, err := client.CreateParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, codersdk.CreateParameterRequest{
86+
template := createTemplate(t, client, user)
87+
_, err := client.CreateParameter(context.Background(), codersdk.ParameterTemplate, template.ID, codersdk.CreateParameterRequest{
8288
Name: "example",
8389
SourceValue: "tomato",
8490
SourceScheme: codersdk.ParameterSourceSchemeData,
8591
DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable,
8692
})
8793
require.NoError(t, err)
88-
params, err := client.Parameters(context.Background(), codersdk.ParameterOrganization, user.OrganizationID)
94+
params, err := client.Parameters(context.Background(), codersdk.ParameterTemplate, template.ID)
8995
require.NoError(t, err)
9096
require.Len(t, params, 1)
9197
})
@@ -97,7 +103,8 @@ func TestDeleteParameter(t *testing.T) {
97103
t.Parallel()
98104
client := coderdtest.New(t, nil)
99105
user := coderdtest.CreateFirstUser(t, client)
100-
err := client.DeleteParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, "something")
106+
template := createTemplate(t, client, user)
107+
err := client.DeleteParameter(context.Background(), codersdk.ParameterTemplate, template.ID, "something")
101108
var apiErr *codersdk.Error
102109
require.ErrorAs(t, err, &apiErr)
103110
require.Equal(t, http.StatusNotFound, apiErr.StatusCode())
@@ -106,14 +113,39 @@ func TestDeleteParameter(t *testing.T) {
106113
t.Parallel()
107114
client := coderdtest.New(t, nil)
108115
user := coderdtest.CreateFirstUser(t, client)
109-
param, err := client.CreateParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, codersdk.CreateParameterRequest{
116+
template := createTemplate(t, client, user)
117+
param, err := client.CreateParameter(context.Background(), codersdk.ParameterTemplate, template.ID, codersdk.CreateParameterRequest{
110118
Name: "example",
111119
SourceValue: "tomato",
112120
SourceScheme: codersdk.ParameterSourceSchemeData,
113121
DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable,
114122
})
115123
require.NoError(t, err)
116-
err = client.DeleteParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, param.Name)
124+
err = client.DeleteParameter(context.Background(), codersdk.ParameterTemplate, template.ID, param.Name)
117125
require.NoError(t, err)
118126
})
119127
}
128+
129+
func createTemplate(t *testing.T, client *codersdk.Client, user codersdk.CreateFirstUserResponse) codersdk.Template {
130+
instanceID := "instanceidentifier"
131+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
132+
Parse: echo.ParseComplete,
133+
Provision: []*proto.Provision_Response{{
134+
Type: &proto.Provision_Response_Complete{
135+
Complete: &proto.Provision_Complete{
136+
Resources: []*proto.Resource{{
137+
Name: "somename",
138+
Type: "someinstance",
139+
Agents: []*proto.Agent{{
140+
Auth: &proto.Agent_InstanceId{
141+
InstanceId: instanceID,
142+
},
143+
}},
144+
}},
145+
},
146+
},
147+
}},
148+
})
149+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
150+
return template
151+
}

codersdk/parameters.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,8 @@ import (
1414
type ParameterScope string
1515

1616
const (
17-
ParameterOrganization ParameterScope = "organization"
18-
ParameterTemplate ParameterScope = "template"
19-
ParameterUser ParameterScope = "user"
20-
ParameterWorkspace ParameterScope = "workspace"
17+
ParameterTemplate ParameterScope = "template"
18+
ParameterWorkspace ParameterScope = "workspace"
2119
)
2220

2321
type ParameterSourceScheme string

0 commit comments

Comments
 (0)