Merge branch 'fix/serviceset-uuid'

fixes #2417
fixes #2418
This commit is contained in:
Thomas Gelf 2021-12-01 23:47:38 +01:00
commit b7c0559212
7 changed files with 44 additions and 3 deletions

View File

@ -12,6 +12,7 @@ use Icinga\Module\Director\Web\Table\IcingaHostsMatchingFilterTable;
use Icinga\Module\Director\Web\Table\IcingaServiceSetHostTable; use Icinga\Module\Director\Web\Table\IcingaServiceSetHostTable;
use Icinga\Module\Director\Web\Table\IcingaServiceSetServiceTable; use Icinga\Module\Director\Web\Table\IcingaServiceSetServiceTable;
use gipfl\IcingaWeb2\Link; use gipfl\IcingaWeb2\Link;
use Ramsey\Uuid\Uuid;
class ServicesetController extends ObjectController class ServicesetController extends ObjectController
{ {
@ -102,11 +103,11 @@ class ServicesetController extends ObjectController
$name = $this->object->getObjectName(); $name = $this->object->getObjectName();
$tabs->add('services', [ $tabs->add('services', [
'url' => 'director/serviceset/services', 'url' => 'director/serviceset/services',
'urlParams' => ['name' => $name], 'urlParams' => ['uuid' => $this->object->getUniqueId()],
'label' => 'Services' 'label' => 'Services'
])->add('hosts', [ ])->add('hosts', [
'url' => 'director/serviceset/hosts', 'url' => 'director/serviceset/hosts',
'urlParams' => ['name' => $name], 'urlParams' => ['uuid' => $this->object->getUniqueId()],
'label' => 'Hosts' 'label' => 'Hosts'
]); ]);

View File

@ -19,6 +19,7 @@ class IcingaServiceSet extends IcingaObject implements ExportInterface
protected $defaultProperties = array( protected $defaultProperties = array(
'id' => null, 'id' => null,
'uuid' => null,
'host_id' => null, 'host_id' => null,
'object_name' => null, 'object_name' => null,
'object_type' => null, 'object_type' => null,
@ -26,6 +27,8 @@ class IcingaServiceSet extends IcingaObject implements ExportInterface
'assign_filter' => null, 'assign_filter' => null,
); );
protected $uuidColumn = 'uuid';
protected $keyName = array('host_id', 'object_name'); protected $keyName = array('host_id', 'object_name');
protected $supportsImports = true; protected $supportsImports = true;

View File

@ -8,6 +8,7 @@ use gipfl\IcingaWeb2\Link;
use gipfl\IcingaWeb2\Table\ZfQueryBasedTable; use gipfl\IcingaWeb2\Table\ZfQueryBasedTable;
use gipfl\IcingaWeb2\Url; use gipfl\IcingaWeb2\Url;
use Icinga\Module\Director\Restriction\FilterByNameRestriction; use Icinga\Module\Director\Restriction\FilterByNameRestriction;
use Ramsey\Uuid\Uuid;
class ObjectSetTable extends ZfQueryBasedTable class ObjectSetTable extends ZfQueryBasedTable
{ {
@ -47,7 +48,10 @@ class ObjectSetTable extends ZfQueryBasedTable
if ($row->object_type === 'apply') { if ($row->object_type === 'apply') {
$params['id'] = $row->id; $params['id'] = $row->id;
} else { } 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); $url = Url::fromPath("director/${type}set", $params);
@ -70,6 +74,7 @@ class ObjectSetTable extends ZfQueryBasedTable
$columns = [ $columns = [
'id' => 'os.id', 'id' => 'os.id',
'uuid' => 'os.uuid',
'object_name' => 'os.object_name', 'object_name' => 'os.object_name',
'object_type' => 'os.object_type', 'object_type' => 'os.object_type',
'assign_filter' => 'os.assign_filter', 'assign_filter' => 'os.assign_filter',

View File

@ -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());

View File

@ -656,12 +656,14 @@ ALTER TABLE icinga_host_template_choice
CREATE TABLE icinga_service_set ( CREATE TABLE icinga_service_set (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
uuid VARBINARY(16) NOT NULL,
object_name VARCHAR(128) NOT NULL, object_name VARCHAR(128) NOT NULL,
object_type ENUM('object', 'template', 'external_object') NOT NULL, object_type ENUM('object', 'template', 'external_object') NOT NULL,
host_id INT(10) UNSIGNED DEFAULT NULL, host_id INT(10) UNSIGNED DEFAULT NULL,
description TEXT DEFAULT NULL, description TEXT DEFAULT NULL,
assign_filter TEXT DEFAULT NULL, assign_filter TEXT DEFAULT NULL,
PRIMARY KEY (id), PRIMARY KEY (id),
UNIQUE INDEX uuid (uuid),
UNIQUE KEY object_key (object_name, host_id), UNIQUE KEY object_key (object_name, host_id),
CONSTRAINT icinga_service_set_host CONSTRAINT icinga_service_set_host
FOREIGN KEY host (host_id) FOREIGN KEY host (host_id)

View File

@ -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());

View File

@ -813,6 +813,7 @@ ALTER TABLE icinga_host_template_choice
CREATE TABLE icinga_service_set ( CREATE TABLE icinga_service_set (
id serial, id serial,
uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16),
host_id integer DEFAULT NULL, host_id integer DEFAULT NULL,
object_name character varying(128) NOT NULL, object_name character varying(128) NOT NULL,
object_type enum_object_type_all 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 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 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 ( CREATE TABLE icinga_service_template_choice (