Skip to content

Commit 5093495

Browse files
apiVersion + kind => $schema
1 parent 793c301 commit 5093495

177 files changed

Lines changed: 2200 additions & 2857 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/internal/resources-framework.md

Lines changed: 87 additions & 78 deletions
Large diffs are not rendered by default.

migrations/postgres/20260323155948_resources.sql

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
CREATE TABLE resources (
44
resource_id UUID PRIMARY KEY,
55
account_id VARCHAR(100) NOT NULL,
6-
resource_kind VARCHAR(100) NOT NULL,
7-
api_version VARCHAR(100) NOT NULL,
6+
resource_schema TEXT NOT NULL,
87
resource_name VARCHAR(200) NOT NULL,
98
description TEXT NULL,
109
labels JSONB NOT NULL,
@@ -21,20 +20,19 @@ CREATE TABLE resources (
2120
last_reconciled_at TIMESTAMPTZ NULL,
2221
last_event_id BIGINT NULL,
2322

24-
UNIQUE (account_id, resource_kind, resource_name)
23+
UNIQUE (account_id, resource_schema, resource_name)
2524
);
2625

27-
CREATE INDEX idx_resources_account_kind_name
28-
ON resources (account_id, resource_kind, resource_name);
26+
CREATE INDEX idx_resources_account_schema_name
27+
ON resources (account_id, resource_schema, resource_name);
2928

30-
CREATE INDEX idx_resources_account_kind_updated_at
31-
ON resources (account_id, resource_kind, updated_at DESC);
29+
CREATE INDEX idx_resources_account_schema_updated_at
30+
ON resources (account_id, resource_schema, updated_at DESC);
3231

3332
CREATE INDEX idx_resources_summary_projection
3433
ON resources (
3534
account_id,
36-
resource_kind,
37-
api_version,
35+
resource_schema,
3836
((status ->> 'phase'))
3937
)
4038
WHERE deleted_at IS NULL;
@@ -46,7 +44,7 @@ CREATE SEQUENCE resource_event_id_seq AS BIGINT;
4644
CREATE TABLE resource_events (
4745
event_id BIGINT PRIMARY KEY DEFAULT nextval('resource_event_id_seq'),
4846
resource_id UUID NOT NULL,
49-
resource_kind VARCHAR(100) NOT NULL,
47+
resource_schema TEXT NOT NULL,
5048

5149
event_time TIMESTAMPTZ NOT NULL,
5250
event_type VARCHAR(100) NOT NULL,
@@ -59,7 +57,7 @@ CREATE TABLE resource_events (
5957
CREATE INDEX idx_resource_events_resource_id_event_id
6058
ON resource_events (resource_id, event_id);
6159

62-
CREATE INDEX idx_resource_events_kind_event_id
63-
ON resource_events (resource_kind, event_id);
60+
CREATE INDEX idx_resource_events_schema_event_id
61+
ON resource_events (resource_schema, event_id);
6462

6563
/* ------------------------------ */

migrations/postgres/20260513120000_backfill_env_var_resources.sql

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@
1919
INSERT INTO resources (
2020
resource_id,
2121
account_id,
22-
resource_kind,
23-
api_version,
22+
resource_schema,
2423
resource_name,
2524
description,
2625
labels,
@@ -37,8 +36,7 @@ INSERT INTO resources (
3736
SELECT
3837
gen_random_uuid() AS resource_id,
3938
de.owner_id AS account_id,
40-
'VariableSet' AS resource_kind,
41-
'kamu.dev/v1alpha1' AS api_version,
39+
'https://opendatafabric.org/schemas/config/v1alpha1/VariableSet' AS resource_schema,
4240
'legacy-vars-' || substring(dev.dataset_id, 9) AS resource_name,
4341
NULL AS description,
4442
'{}'::jsonb AS labels,
@@ -70,7 +68,7 @@ FROM dataset_env_vars dev
7068
JOIN dataset_entries de ON de.dataset_id = dev.dataset_id
7169
WHERE dev.secret_nonce IS NULL
7270
GROUP BY dev.dataset_id, de.owner_id
73-
ON CONFLICT (account_id, resource_kind, resource_name) DO NOTHING;
71+
ON CONFLICT (account_id, resource_schema, resource_name) DO NOTHING;
7472

7573
/* ------------------------------ */
7674

@@ -97,7 +95,7 @@ FROM dataset_env_vars dev
9795
JOIN dataset_entries de ON de.dataset_id = dev.dataset_id
9896
JOIN resources r
9997
ON r.account_id = de.owner_id
100-
AND r.resource_kind = 'VariableSet'
98+
AND r.resource_schema = 'https://opendatafabric.org/schemas/config/v1alpha1/VariableSet'
10199
AND r.resource_name = 'legacy-vars-' || substring(dev.dataset_id, 9)
102100
WHERE dev.secret_nonce IS NULL
103101
ON CONFLICT (resource_id, resource_generation, variable_key) DO NOTHING;
@@ -117,7 +115,7 @@ FROM dataset_env_vars dev
117115
JOIN dataset_entries de ON de.dataset_id = dev.dataset_id
118116
JOIN resources r
119117
ON r.account_id = de.owner_id
120-
AND r.resource_kind = 'VariableSet'
118+
AND r.resource_schema = 'https://opendatafabric.org/schemas/config/v1alpha1/VariableSet'
121119
AND r.resource_name = 'legacy-vars-' || substring(dev.dataset_id, 9)
122120
WHERE dev.secret_nonce IS NULL
123121
ON CONFLICT DO NOTHING;
@@ -129,8 +127,7 @@ ON CONFLICT DO NOTHING;
129127
INSERT INTO resources (
130128
resource_id,
131129
account_id,
132-
resource_kind,
133-
api_version,
130+
resource_schema,
134131
resource_name,
135132
description,
136133
labels,
@@ -147,8 +144,7 @@ INSERT INTO resources (
147144
SELECT
148145
gen_random_uuid() AS resource_id,
149146
de.owner_id AS account_id,
150-
'SecretSet' AS resource_kind,
151-
'kamu.dev/v1alpha1' AS api_version,
147+
'https://opendatafabric.org/schemas/config/v1alpha1/SecretSet' AS resource_schema,
152148
'legacy-secrets-' || substring(dev.dataset_id, 9) AS resource_name,
153149
NULL AS description,
154150
'{}'::jsonb AS labels,
@@ -180,7 +176,7 @@ FROM dataset_env_vars dev
180176
JOIN dataset_entries de ON de.dataset_id = dev.dataset_id
181177
WHERE dev.secret_nonce IS NOT NULL
182178
GROUP BY dev.dataset_id, de.owner_id
183-
ON CONFLICT (account_id, resource_kind, resource_name) DO NOTHING;
179+
ON CONFLICT (account_id, resource_schema, resource_name) DO NOTHING;
184180

185181
/* ------------------------------ */
186182

@@ -209,7 +205,7 @@ FROM dataset_env_vars dev
209205
JOIN dataset_entries de ON de.dataset_id = dev.dataset_id
210206
JOIN resources r
211207
ON r.account_id = de.owner_id
212-
AND r.resource_kind = 'SecretSet'
208+
AND r.resource_schema = 'https://opendatafabric.org/schemas/config/v1alpha1/SecretSet'
213209
AND r.resource_name = 'legacy-secrets-' || substring(dev.dataset_id, 9)
214210
WHERE dev.secret_nonce IS NOT NULL
215211
ON CONFLICT (resource_id, resource_generation, secret_key) DO NOTHING;
@@ -229,7 +225,7 @@ FROM dataset_env_vars dev
229225
JOIN dataset_entries de ON de.dataset_id = dev.dataset_id
230226
JOIN resources r
231227
ON r.account_id = de.owner_id
232-
AND r.resource_kind = 'SecretSet'
228+
AND r.resource_schema = 'https://opendatafabric.org/schemas/config/v1alpha1/SecretSet'
233229
AND r.resource_name = 'legacy-secrets-' || substring(dev.dataset_id, 9)
234230
WHERE dev.secret_nonce IS NOT NULL
235231
ON CONFLICT DO NOTHING;
@@ -240,17 +236,17 @@ ON CONFLICT DO NOTHING;
240236

241237
WITH
242238
var_resources AS (
243-
SELECT resource_id, account_id, resource_name, created_at, spec, status
239+
SELECT resource_id, resource_schema, account_id, resource_name, created_at, spec, status
244240
FROM resources
245-
WHERE resource_kind = 'VariableSet'
241+
WHERE resource_schema = 'https://opendatafabric.org/schemas/config/v1alpha1/VariableSet'
246242
AND resource_name LIKE 'legacy-vars-%'
247243
AND last_event_id IS NULL
248244
),
249245
ins_created AS (
250-
INSERT INTO resource_events (resource_id, resource_kind, event_time, event_type, event_payload)
246+
INSERT INTO resource_events (resource_id, resource_schema, event_time, event_type, event_payload)
251247
SELECT
252248
r.resource_id,
253-
'VariableSet',
249+
r.resource_schema,
254250
r.created_at,
255251
'Created',
256252
jsonb_build_object('Created', jsonb_build_object(
@@ -269,10 +265,10 @@ ins_created AS (
269265
RETURNING resource_id, event_id
270266
),
271267
ins_started AS (
272-
INSERT INTO resource_events (resource_id, resource_kind, event_time, event_type, event_payload)
268+
INSERT INTO resource_events (resource_id, resource_schema, event_time, event_type, event_payload)
273269
SELECT
274270
r.resource_id,
275-
'VariableSet',
271+
r.resource_schema,
276272
r.created_at,
277273
'ReconciliationStarted',
278274
jsonb_build_object('ReconciliationStarted', jsonb_build_object(
@@ -284,10 +280,10 @@ ins_started AS (
284280
RETURNING resource_id, event_id
285281
),
286282
ins_succeeded AS (
287-
INSERT INTO resource_events (resource_id, resource_kind, event_time, event_type, event_payload)
283+
INSERT INTO resource_events (resource_id, resource_schema, event_time, event_type, event_payload)
288284
SELECT
289285
r.resource_id,
290-
'VariableSet',
286+
r.resource_schema,
291287
r.created_at,
292288
'ReconciliationSucceeded',
293289
jsonb_build_object('ReconciliationSucceeded', jsonb_build_object(
@@ -310,17 +306,17 @@ WHERE resources.resource_id = ins_succeeded.resource_id;
310306

311307
WITH
312308
secret_resources AS (
313-
SELECT resource_id, account_id, resource_name, created_at, spec, status
309+
SELECT resource_id, resource_schema, account_id, resource_name, created_at, spec, status
314310
FROM resources
315-
WHERE resource_kind = 'SecretSet'
311+
WHERE resource_schema = 'https://opendatafabric.org/schemas/config/v1alpha1/SecretSet'
316312
AND resource_name LIKE 'legacy-secrets-%'
317313
AND last_event_id IS NULL
318314
),
319315
ins_created AS (
320-
INSERT INTO resource_events (resource_id, resource_kind, event_time, event_type, event_payload)
316+
INSERT INTO resource_events (resource_id, resource_schema, event_time, event_type, event_payload)
321317
SELECT
322318
r.resource_id,
323-
'SecretSet',
319+
r.resource_schema,
324320
r.created_at,
325321
'Created',
326322
jsonb_build_object('Created', jsonb_build_object(
@@ -339,10 +335,10 @@ ins_created AS (
339335
RETURNING resource_id, event_id
340336
),
341337
ins_started AS (
342-
INSERT INTO resource_events (resource_id, resource_kind, event_time, event_type, event_payload)
338+
INSERT INTO resource_events (resource_id, resource_schema, event_time, event_type, event_payload)
343339
SELECT
344340
r.resource_id,
345-
'SecretSet',
341+
r.resource_schema,
346342
r.created_at,
347343
'ReconciliationStarted',
348344
jsonb_build_object('ReconciliationStarted', jsonb_build_object(
@@ -354,10 +350,10 @@ ins_started AS (
354350
RETURNING resource_id, event_id
355351
),
356352
ins_succeeded AS (
357-
INSERT INTO resource_events (resource_id, resource_kind, event_time, event_type, event_payload)
353+
INSERT INTO resource_events (resource_id, resource_schema, event_time, event_type, event_payload)
358354
SELECT
359355
r.resource_id,
360-
'SecretSet',
356+
r.resource_schema,
361357
r.created_at,
362358
'ReconciliationSucceeded',
363359
jsonb_build_object('ReconciliationSucceeded', jsonb_build_object(

migrations/sqlite/20260323155948_resources.sql

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
CREATE TABLE resources (
44
resource_id CHAR(36) PRIMARY KEY NOT NULL,
55
account_id VARCHAR(100) NOT NULL,
6-
resource_kind VARCHAR(100) NOT NULL,
7-
api_version VARCHAR(100) NOT NULL,
6+
resource_schema TEXT NOT NULL,
87
resource_name VARCHAR(200) NOT NULL,
98
description TEXT NULL,
109
labels JSONB NOT NULL,
@@ -21,20 +20,19 @@ CREATE TABLE resources (
2120
last_reconciled_at TIMESTAMPTZ NULL,
2221
last_event_id BIGINT NULL,
2322

24-
UNIQUE (account_id, resource_kind, resource_name)
23+
UNIQUE (account_id, resource_schema, resource_name)
2524
);
2625

27-
CREATE INDEX idx_resources_account_kind_name
28-
ON resources (account_id, resource_kind, resource_name);
26+
CREATE INDEX idx_resources_account_schema_name
27+
ON resources (account_id, resource_schema, resource_name);
2928

30-
CREATE INDEX idx_resources_account_kind_updated_at
31-
ON resources (account_id, resource_kind, updated_at DESC);
29+
CREATE INDEX idx_resources_account_schema_updated_at
30+
ON resources (account_id, resource_schema, updated_at DESC);
3231

3332
CREATE INDEX idx_resources_summary_projection
3433
ON resources (
3534
account_id,
36-
resource_kind,
37-
api_version,
35+
resource_schema,
3836
json_extract(status, '$.phase')
3937
)
4038
WHERE deleted_at IS NULL;
@@ -44,7 +42,7 @@ CREATE INDEX idx_resources_summary_projection
4442
CREATE TABLE resource_events (
4543
event_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
4644
resource_id CHAR(36) NOT NULL,
47-
resource_kind VARCHAR(100) NOT NULL,
45+
resource_schema TEXT NOT NULL,
4846

4947
event_time TIMESTAMPTZ NOT NULL,
5048
event_type VARCHAR(100) NOT NULL,
@@ -57,7 +55,7 @@ CREATE TABLE resource_events (
5755
CREATE INDEX idx_resource_events_resource_id_event_id
5856
ON resource_events (resource_id, event_id);
5957

60-
CREATE INDEX idx_resource_events_kind_event_id
61-
ON resource_events (resource_kind, event_id);
58+
CREATE INDEX idx_resource_events_schema_event_id
59+
ON resource_events (resource_schema, event_id);
6260

6361
/* ------------------------------ */

0 commit comments

Comments
 (0)