From 64d93e4e0b38806128f11450abe7ed5fd40e2f3d Mon Sep 17 00:00:00 2001 From: Michael Mraka Date: Fri, 31 May 2024 15:36:25 +0200 Subject: [PATCH 1/2] RHINENG-10439: store environment id for template --- base/models/models.go | 9 +++++---- base/mqueue/template_event.go | 15 ++++++++------- .../migrations/126_template_environment.down.sql | 1 + .../migrations/126_template_environment.up.sql | 5 +++++ database_admin/schema/create_schema.sql | 3 ++- listener/templates.go | 9 +++++---- 6 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 database_admin/migrations/126_template_environment.down.sql create mode 100644 database_admin/migrations/126_template_environment.up.sql diff --git a/base/models/models.go b/base/models/models.go index 429577659..88f53d75d 100644 --- a/base/models/models.go +++ b/base/models/models.go @@ -41,10 +41,11 @@ func (Baseline) TableName() string { } type Template struct { - ID int64 `gorm:"primaryKey"` - RhAccountID int `gorm:"primaryKey"` - UUID string - Name string + ID int64 `gorm:"primaryKey"` + RhAccountID int `gorm:"primaryKey"` + UUID string + EnvironmentID string + Name string // Config pgtype.JSONB // currently unused Description *string Creator *string // pointer for compatibility with previous API versions diff --git a/base/mqueue/template_event.go b/base/mqueue/template_event.go index 634b5209c..e7cf5b3ae 100644 --- a/base/mqueue/template_event.go +++ b/base/mqueue/template_event.go @@ -10,13 +10,14 @@ import ( // adds too many dependencies and some are incompatible type TemplateResponse struct { UUID string `json:"uuid" readonly:"true"` - Name string `json:"name"` // Name of the template - OrgID string `json:"org_id"` // Organization ID of the owner - Description *string `json:"description"` // Description of the template - Arch string `json:"arch"` // Architecture of the template - Version string `json:"version"` // Version of the template - Date time.Time `json:"date"` // Latest date to include snapshots for - RepositoryUUIDS []string `json:"repository_uuids"` // Repositories added to the template + Name string `json:"name"` // Name of the template + OrgID string `json:"org_id"` // Organization ID of the owner + Description *string `json:"description"` // Description of the template + Arch string `json:"arch"` // Architecture of the template + Version string `json:"version"` // Version of the template + Date time.Time `json:"date"` // Latest date to include snapshots for + RepositoryUUIDS []string `json:"repository_uuids"` // Repositories added to the template + EnvironmentID string `json:"client_environment_id"` // Environment ID used by subscription-manager & candlepin } type TemplateEvent struct { diff --git a/database_admin/migrations/126_template_environment.down.sql b/database_admin/migrations/126_template_environment.down.sql new file mode 100644 index 000000000..e8446bba8 --- /dev/null +++ b/database_admin/migrations/126_template_environment.down.sql @@ -0,0 +1 @@ +ALTER TABLE template DROP COLUMN IF EXISTS environment_id; diff --git a/database_admin/migrations/126_template_environment.up.sql b/database_admin/migrations/126_template_environment.up.sql new file mode 100644 index 000000000..873a524b0 --- /dev/null +++ b/database_admin/migrations/126_template_environment.up.sql @@ -0,0 +1,5 @@ +ALTER TABLE template ADD COLUMN IF NOT EXISTS environment_id TEXT CHECK (NOT empty(environment_id)); + +UPDATE template set environment_id = REPLACE(uuid::text, '-', ''); + +ALTER TABLE template ALTER COLUMN environment_id SET NOT NULL; diff --git a/database_admin/schema/create_schema.sql b/database_admin/schema/create_schema.sql index 6e86f9259..5616553ee 100644 --- a/database_admin/schema/create_schema.sql +++ b/database_admin/schema/create_schema.sql @@ -7,7 +7,7 @@ CREATE TABLE IF NOT EXISTS schema_migrations INSERT INTO schema_migrations -VALUES (125, false); +VALUES (126, false); -- --------------------------------------------------------------------------- -- Functions @@ -692,6 +692,7 @@ CREATE TABLE IF NOT EXISTS template creator TEXT CHECK (NOT empty(creator)), published TIMESTAMP WITH TIME ZONE, last_edited TIMESTAMP WITH TIME ZONE, + environment_id TEXT NOT NULL CHECK (not empty(environment_id)), PRIMARY KEY (rh_account_id, id), UNIQUE(rh_account_id, uuid) ) PARTITION BY HASH (rh_account_id); diff --git a/listener/templates.go b/listener/templates.go index 966ca6a72..6c30f61df 100644 --- a/listener/templates.go +++ b/listener/templates.go @@ -89,9 +89,10 @@ func TemplateUpdate(template mqueue.TemplateResponse) error { } row := models.Template{ - RhAccountID: accountID, - UUID: template.UUID, - Name: template.Name, + RhAccountID: accountID, + UUID: template.UUID, + EnvironmentID: template.EnvironmentID, + Name: template.Name, //Config: nil, Description: template.Description, Creator: nil, @@ -99,7 +100,7 @@ func TemplateUpdate(template mqueue.TemplateResponse) error { } err = database.OnConflictUpdateMulti(database.DB, []string{"rh_account_id", "uuid"}, - "name", "description", "creator", "published").Save(&row).Error + "name", "environment_id", "description", "creator", "published").Save(&row).Error if err != nil { return errors.Wrap(err, "creating template from message") } From beec26e8ab1cfe08cedc4382a01cbcd2edfda45a Mon Sep 17 00:00:00 2001 From: Michael Mraka Date: Fri, 31 May 2024 15:34:33 +0200 Subject: [PATCH 2/2] RHINENG-10439: update template test for environment id --- base/database/testing.go | 3 ++- dev/test_data.sql | 10 +++++----- listener/template_test.go | 13 ++++++++----- platform/platform.go | 2 ++ 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/base/database/testing.go b/base/database/testing.go index dcab49007..cfeefc3a4 100644 --- a/base/database/testing.go +++ b/base/database/testing.go @@ -6,6 +6,7 @@ import ( "app/base/utils" "fmt" "strconv" + "strings" "testing" "time" @@ -493,7 +494,7 @@ func DeleteSystem(t *testing.T, inventoryID string) { func CreateTemplate(t *testing.T, account int, uuid string, inventoryIDs []string) { template := &models.Template{ - RhAccountID: account, UUID: uuid, Name: uuid, + RhAccountID: account, UUID: uuid, Name: uuid, EnvironmentID: strings.ReplaceAll(uuid, "-", ""), } tx := DB.Begin() diff --git a/dev/test_data.sql b/dev/test_data.sql index 23a7b2752..f525dcc05 100644 --- a/dev/test_data.sql +++ b/dev/test_data.sql @@ -25,11 +25,11 @@ INSERT INTO baseline (id, rh_account_id, name, config, description) VALUES (3, 1, 'baseline_1-3', '{"to_time": "2000-01-01T00:00:00+00:00"}', NULL), (4, 3, 'baseline_3-4', '{"to_time": "2000-01-01T00:00:00+00:00"}', NULL); -INSERT INTO template (id, rh_account_id, uuid, name, description, config, creator) VALUES -(1, 1, '99900000-0000-0000-0000-000000000001', 'temp1-1', 'desc1', '{"to_time": "2010-09-22T00:00:00+00:00"}', 'user1'), -(2, 1, '99900000-0000-0000-0000-000000000002', 'temp2-1', 'desc2', '{"to_time": "2021-01-01T00:00:00+00:00"}', 'user2'), -(3, 1, '99900000-0000-0000-0000-000000000003', 'temp3-1', NULL, '{"to_time": "2000-01-01T00:00:00+00:00"}', 'user3'), -(4, 3, '99900000-0000-0000-0000-000000000004', 'temp4-3', 'desc4', '{"to_time": "2000-01-01T00:00:00+00:00"}', 'user4'); +INSERT INTO template (id, rh_account_id, uuid, environment_id, name, description, config, creator) VALUES +(1, 1, '99900000-0000-0000-0000-000000000001', '99900000000000000000000000000001', 'temp1-1', 'desc1', '{"to_time": "2010-09-22T00:00:00+00:00"}', 'user1'), +(2, 1, '99900000-0000-0000-0000-000000000002', '99900000000000000000000000000002', 'temp2-1', 'desc2', '{"to_time": "2021-01-01T00:00:00+00:00"}', 'user2'), +(3, 1, '99900000-0000-0000-0000-000000000003', '99900000000000000000000000000003', 'temp3-1', NULL, '{"to_time": "2000-01-01T00:00:00+00:00"}', 'user3'), +(4, 3, '99900000-0000-0000-0000-000000000004', '99900000000000000000000000000004', 'temp4-3', 'desc4', '{"to_time": "2000-01-01T00:00:00+00:00"}', 'user4'); INSERT INTO system_platform (id, inventory_id, display_name, rh_account_id, reporter_id, vmaas_json, json_checksum, last_evaluation, last_upload, packages_installed, packages_installable, packages_applicable, third_party, baseline_id, baseline_uptodate, template_id) VALUES (1, '00000000-0000-0000-0000-000000000001','00000000-0000-0000-0000-000000000001', 1, 1, '{ "package_list": [ "kernel-2.6.32-696.20.1.el6.x86_64" ], "repository_list": [ "rhel-6-server-rpms" ] }', '1', '2018-09-22 12:00:00-04', '2020-09-22 12:00:00-04',0,0,0, true, 1, true, 1), diff --git a/listener/template_test.go b/listener/template_test.go index ec8f87378..d21c2c949 100644 --- a/listener/template_test.go +++ b/listener/template_test.go @@ -9,6 +9,7 @@ import ( "encoding/json" "errors" "fmt" + "strings" "testing" "time" @@ -24,12 +25,14 @@ func createTempateMsg(t *testing.T, eventName, orgID string, nTemplates int) mqu templates := make([]mqueue.TemplateResponse, nTemplates) for i := 0; i < nTemplates; i++ { description := fmt.Sprintf("Template%d description", i) + uuid := fmt.Sprintf("77777777-0000-0000-0000-00000000000%1d", i) templates[i] = mqueue.TemplateResponse{ - UUID: fmt.Sprintf("77777777-0000-0000-0000-00000000000%1d", i), - Name: fmt.Sprintf("Template%d", i), - OrgID: orgID, - Description: &description, - Date: time.Now(), + UUID: uuid, + EnvironmentID: strings.ReplaceAll(uuid, "-", ""), + Name: fmt.Sprintf("Template%d", i), + OrgID: orgID, + Description: &description, + Date: time.Now(), } } diff --git a/platform/platform.go b/platform/platform.go index 51e41a32b..97fb61244 100644 --- a/platform/platform.go +++ b/platform/platform.go @@ -164,6 +164,7 @@ var templates = []mqueue.TemplateResponse{ Version: "1", Date: time.Now(), RepositoryUUIDS: []string{"20000000-0000-0000-0000-000000000001"}, + EnvironmentID: "10000000000000000000000000000001", }, { UUID: "10000000-0000-0000-0000-000000000002", @@ -174,6 +175,7 @@ var templates = []mqueue.TemplateResponse{ Version: "1", Date: time.Now(), RepositoryUUIDS: []string{"20000000-0000-0000-0000-000000000001", "20000000-0000-0000-0000-000000000002"}, + EnvironmentID: "10000000000000000000000000000002", }, }