From 388c79e430cb1106d9ee28bb224fc7c3b959ff8c Mon Sep 17 00:00:00 2001 From: Ravi Kumar Kempapura Srinivasa Date: Thu, 28 Oct 2021 16:33:38 +0200 Subject: [PATCH 1/2] Add uuid to service sets. --- application/controllers/ServicesetController.php | 5 +++-- library/Director/Objects/IcingaServiceSet.php | 3 +++ library/Director/Web/Table/ObjectSetTable.php | 7 ++++++- schema/mysql.sql | 2 ++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/application/controllers/ServicesetController.php b/application/controllers/ServicesetController.php index 93792745..bacdd206 100644 --- a/application/controllers/ServicesetController.php +++ b/application/controllers/ServicesetController.php @@ -12,6 +12,7 @@ use Icinga\Module\Director\Web\Table\IcingaHostsMatchingFilterTable; use Icinga\Module\Director\Web\Table\IcingaServiceSetHostTable; use Icinga\Module\Director\Web\Table\IcingaServiceSetServiceTable; use gipfl\IcingaWeb2\Link; +use Ramsey\Uuid\Uuid; class ServicesetController extends ObjectController { @@ -102,11 +103,11 @@ class ServicesetController extends ObjectController $name = $this->object->getObjectName(); $tabs->add('services', [ 'url' => 'director/serviceset/services', - 'urlParams' => ['name' => $name], + 'urlParams' => ['uuid' => $this->object->getUniqueId()], 'label' => 'Services' ])->add('hosts', [ 'url' => 'director/serviceset/hosts', - 'urlParams' => ['name' => $name], + 'urlParams' => ['uuid' => $this->object->getUniqueId()], 'label' => 'Hosts' ]); diff --git a/library/Director/Objects/IcingaServiceSet.php b/library/Director/Objects/IcingaServiceSet.php index 032d87d0..284548cd 100644 --- a/library/Director/Objects/IcingaServiceSet.php +++ b/library/Director/Objects/IcingaServiceSet.php @@ -19,6 +19,7 @@ class IcingaServiceSet extends IcingaObject implements ExportInterface protected $defaultProperties = array( 'id' => null, + 'uuid' => null, 'host_id' => null, 'object_name' => null, 'object_type' => null, @@ -26,6 +27,8 @@ class IcingaServiceSet extends IcingaObject implements ExportInterface 'assign_filter' => null, ); + protected $uuidColumn = 'uuid'; + protected $keyName = array('host_id', 'object_name'); protected $supportsImports = true; diff --git a/library/Director/Web/Table/ObjectSetTable.php b/library/Director/Web/Table/ObjectSetTable.php index 4a209cc8..c3ca4557 100644 --- a/library/Director/Web/Table/ObjectSetTable.php +++ b/library/Director/Web/Table/ObjectSetTable.php @@ -8,6 +8,7 @@ use gipfl\IcingaWeb2\Link; use gipfl\IcingaWeb2\Table\ZfQueryBasedTable; use gipfl\IcingaWeb2\Url; use Icinga\Module\Director\Restriction\FilterByNameRestriction; +use Ramsey\Uuid\Uuid; class ObjectSetTable extends ZfQueryBasedTable { @@ -47,7 +48,10 @@ class ObjectSetTable extends ZfQueryBasedTable if ($row->object_type === 'apply') { $params['id'] = $row->id; } else { - $params = array('name' => $row->object_name); + $params = [ + 'uuid' => Uuid::fromBytes($row->uuid)->toString(), + 'name' => $row->object_name + ]; } $url = Url::fromPath("director/${type}set", $params); @@ -70,6 +74,7 @@ class ObjectSetTable extends ZfQueryBasedTable $columns = [ 'id' => 'os.id', + 'uuid' => 'os.uuid', 'object_name' => 'os.object_name', 'object_type' => 'os.object_type', 'assign_filter' => 'os.assign_filter', diff --git a/schema/mysql.sql b/schema/mysql.sql index 08d1df52..12c4a6b3 100644 --- a/schema/mysql.sql +++ b/schema/mysql.sql @@ -656,12 +656,14 @@ ALTER TABLE icinga_host_template_choice CREATE TABLE icinga_service_set ( id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + uuid VARBINARY(16) NOT NULL, object_name VARCHAR(128) NOT NULL, object_type ENUM('object', 'template', 'external_object') NOT NULL, host_id INT(10) UNSIGNED DEFAULT NULL, description TEXT DEFAULT NULL, assign_filter TEXT DEFAULT NULL, PRIMARY KEY (id), + UNIQUE INDEX uuid (uuid), UNIQUE KEY object_key (object_name, host_id), CONSTRAINT icinga_service_set_host FOREIGN KEY host (host_id) From e23e804421b84e7ca76bf3823eac92bfc6361800 Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Tue, 30 Nov 2021 13:48:05 +0100 Subject: [PATCH 2/2] schema: complete migrations for icinga_service_set --- schema/mysql-migrations/upgrade_177.sql | 20 ++++++++++++++++++++ schema/pgsql-migrations/upgrade_177.sql | 8 ++++++++ schema/pgsql.sql | 2 ++ 3 files changed, 30 insertions(+) create mode 100644 schema/mysql-migrations/upgrade_177.sql create mode 100644 schema/pgsql-migrations/upgrade_177.sql diff --git a/schema/mysql-migrations/upgrade_177.sql b/schema/mysql-migrations/upgrade_177.sql new file mode 100644 index 00000000..edceab04 --- /dev/null +++ b/schema/mysql-migrations/upgrade_177.sql @@ -0,0 +1,20 @@ +ALTER TABLE icinga_service_set ADD COLUMN uuid VARBINARY(16) DEFAULT NULL AFTER id; +SET @tmp_uuid = LOWER(CONCAT( + LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0'), + LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0'), '-', + LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0'), '-', + '4', + LPAD(HEX(FLOOR(RAND() * 0x0fff)), 3, '0'), '-', + HEX(FLOOR(RAND() * 4 + 8)), + LPAD(HEX(FLOOR(RAND() * 0x0fff)), 3, '0'), '-', + LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0'), + LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0'), + LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0') +)); +UPDATE icinga_service_set SET uuid = UNHEX(LPAD(LPAD(HEX(id), 8, '0'), 32, REPLACE(@tmp_uuid, '-', ''))) WHERE uuid IS NULL; +ALTER TABLE icinga_service_set MODIFY COLUMN uuid VARBINARY(16) NOT NULL, ADD UNIQUE INDEX uuid (uuid); + + +INSERT INTO director_schema_migration + (schema_version, migration_time) + VALUES ('177', NOW()); diff --git a/schema/pgsql-migrations/upgrade_177.sql b/schema/pgsql-migrations/upgrade_177.sql new file mode 100644 index 00000000..09784b1a --- /dev/null +++ b/schema/pgsql-migrations/upgrade_177.sql @@ -0,0 +1,8 @@ +ALTER TABLE icinga_service_set ADD COLUMN uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16); +UPDATE icinga_service_set SET uuid = decode(replace(gen_random_uuid()::text, '-', ''), 'hex') WHERE uuid IS NULL; +ALTER TABLE icinga_service_set ALTER COLUMN uuid SET NOT NULL; +CREATE UNIQUE INDEX service_set_uuid ON icinga_service_set (uuid); + +INSERT INTO director_schema_migration +(schema_version, migration_time) +VALUES (177, NOW()); diff --git a/schema/pgsql.sql b/schema/pgsql.sql index 44970d39..b73d84da 100644 --- a/schema/pgsql.sql +++ b/schema/pgsql.sql @@ -813,6 +813,7 @@ ALTER TABLE icinga_host_template_choice CREATE TABLE icinga_service_set ( id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), host_id integer DEFAULT NULL, object_name character varying(128) NOT NULL, object_type enum_object_type_all NOT NULL, @@ -828,6 +829,7 @@ CREATE TABLE icinga_service_set ( CREATE UNIQUE INDEX service_set_name ON icinga_service_set (object_name, host_id); CREATE INDEX service_set_host ON icinga_service_set (host_id); +CREATE UNIQUE INDEX service_set_uuid ON icinga_service_set (uuid); CREATE TABLE icinga_service_template_choice (