Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package icingaweb2-module-director for
openSUSE:Factory checked in at 2026-03-26 21:12:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/icingaweb2-module-director (Old)
and /work/SRC/openSUSE:Factory/.icingaweb2-module-director.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "icingaweb2-module-director"
Thu Mar 26 21:12:01 2026 rev:28 rq:1342870 version:1.11.7
Changes:
--------
---
/work/SRC/openSUSE:Factory/icingaweb2-module-director/icingaweb2-module-director.changes
2026-02-21 21:04:21.454785116 +0100
+++
/work/SRC/openSUSE:Factory/.icingaweb2-module-director.new.8177/icingaweb2-module-director.changes
2026-03-27 06:41:37.694460320 +0100
@@ -1,0 +2,10 @@
+Thu Mar 26 14:32:44 UTC 2026 - ecsos <[email protected]> - 1.11.7
+
+- Update to 1.11.7
+ * Fixes
+ - Fix: Creating services named identical to template name prevented by
cyclic inheritance check (#3036)
+ - Fix: Choosing templates prevented for new templates prevented by cyclic
inheritance check (#3039)
+ - Fix: Inherited service not shown in service list of host (#3041)
+ - Fix: An Icinga 2 log-level below 'information' breaks Director's active
deployment indicator (#3044)
+
+-------------------------------------------------------------------
Old:
----
icingaweb2-module-director-1.11.6.tar.gz
New:
----
icingaweb2-module-director-1.11.7.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ icingaweb2-module-director.spec ++++++
--- /var/tmp/diff_new_pack.7aXkiS/_old 2026-03-27 06:41:38.178480318 +0100
+++ /var/tmp/diff_new_pack.7aXkiS/_new 2026-03-27 06:41:38.182480483 +0100
@@ -22,7 +22,7 @@
%define icingadirector_user icingadirector
Name: icingaweb2-module-director
-Version: 1.11.6
+Version: 1.11.7
Release: 0
Summary: Config module for Icinga Web 2
License: GPL-2.0-or-later
++++++ icingaweb2-module-director-1.11.6.tar.gz ->
icingaweb2-module-director-1.11.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/application/controllers/ConfigController.php
new/icingaweb2-module-director-1.11.7/application/controllers/ConfigController.php
---
old/icingaweb2-module-director-1.11.6/application/controllers/ConfigController.php
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/application/controllers/ConfigController.php
2026-03-26 11:08:18.000000000 +0100
@@ -196,7 +196,10 @@
->handleRequest());
}
- if ((new DeploymentDashlet($this->db()))->lastDeploymentPending())
{
+ if (
+ DirectorDeploymentLog::hasDeployments($this->db())
+ && (new
DeploymentDashlet($this->db()))->lastDeploymentPending()
+ ) {
$this->actions()->prependHtml(
Hint::warning($this->translate(
'There is an active deployment running, please wait
until it is finished'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/application/forms/IcingaServiceForm.php
new/icingaweb2-module-director-1.11.7/application/forms/IcingaServiceForm.php
---
old/icingaweb2-module-director-1.11.6/application/forms/IcingaServiceForm.php
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/application/forms/IcingaServiceForm.php
2026-03-26 11:08:18.000000000 +0100
@@ -40,6 +40,9 @@
/** @var bool|null */
private $blacklisted;
+ /** @var ?IcingaHost */
+ private $blacklistedAncestor;
+
public function setApplyGenerated(IcingaService $applyGenerated)
{
$this->applyGenerated = $applyGenerated;
@@ -140,9 +143,24 @@
);
$group = null;
if (! $isBranch) {
- $this->addDeleteButton($this->translate('Reactivate'));
+ $label = $this->translate('Reactivate');
+ $this->addDeleteButton($label);
+
+ if (! $this->isBlacklistedInCurrentHost()) {
+ $this->getElement($label)
+ ->setAttrib(
+ 'title',
+ sprintf(
+ $this->translate('This service is deactivated
on host template "%s"'),
+
$this->getBlacklistedAncestor()->getObjectName()
+ )
+ )
+ ->setAttrib('disabled', true);
+ }
+
$hasDeleteButton = true;
}
+
$this->setSubmitLabel(false);
} else {
$this->addOverrideHint();
@@ -216,6 +234,33 @@
return current($objects);
}
+ private function getBlacklistedAncestor(): ?IcingaHost
+ {
+ if ($this->hasBeenBlacklisted() === false) {
+ return null;
+ }
+
+ return $this->blacklistedAncestor;
+ }
+
+ private function isBlacklistedInCurrentHost(): bool
+ {
+ if ($this->hasBeenBlacklisted() === false) {
+ return false;
+ }
+
+ $db = $this->db->getDbAdapter();
+
+ return (int) $db->fetchOne(
+ $db->select()->from('icinga_host_service_blacklist', 'host_id')
+ ->where('host_id = ?', $this->host->get('id'))
+ ->where(
+ 'service_id = ?',
+ $this->getServiceToBeBlacklisted()->get('id')
+ )
+ );
+ }
+
/**
* @return bool
* @throws \Icinga\Exception\NotFoundError
@@ -229,7 +274,7 @@
if ($this->blacklisted === null) {
$host = $this->host;
// Safety check, branches
- $hostId = $host->get('id');
+ $hostId = (int) $host->get('id');
$service = $this->getServiceToBeBlacklisted();
$serviceId = $service->get('id');
if (! $hostId || ! $serviceId) {
@@ -237,11 +282,25 @@
}
$db = $this->db->getDbAdapter();
if ($this->providesOverrides()) {
- $this->blacklisted = 1 === (int)$db->fetchOne(
- $db->select()->from('icinga_host_service_blacklist',
'COUNT(*)')
- ->where('host_id = ?', $hostId)
- ->where('service_id = ?', $serviceId)
- );
+ $hostIds = $host->listAncestorIds();
+ $hostIds[] = $hostId;
+
+ foreach ($hostIds as $hostId) {
+ $host = IcingaHost::loadWithAutoIncId($hostId, $this->db);
+ $ancestorIds = $host->listAncestorIds();
+ $ancestorIds[] = $hostId;
+ $this->blacklisted = 1 === (int) $db->fetchOne(
+ $db->select()->from('icinga_host_service_blacklist',
'COUNT(*)')
+ ->where('host_id IN (?)', $ancestorIds)
+ ->where('service_id = ?', $serviceId)
+ );
+
+ if ($this->blacklisted) {
+ $this->blacklistedAncestor = $host;
+
+ break;
+ }
+ }
} else {
$this->blacklisted = false;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/doc/02-Installation.md.d/From-Source.md
new/icingaweb2-module-director-1.11.7/doc/02-Installation.md.d/From-Source.md
---
old/icingaweb2-module-director-1.11.6/doc/02-Installation.md.d/From-Source.md
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/doc/02-Installation.md.d/From-Source.md
2026-03-26 11:08:18.000000000 +0100
@@ -41,7 +41,7 @@
You might want to use a script as follows for this task:
```shell
-MODULE_VERSION="1.11.6"
+MODULE_VERSION="1.11.7"
ICINGAWEB_MODULEPATH="/usr/share/icingaweb2/modules"
REPO_URL="https://github.com/icinga/icingaweb2-module-director"
TARGET_DIR="${ICINGAWEB_MODULEPATH}/director"
@@ -60,7 +60,7 @@
You might want to use a script as follows for this task:
```shell
-MODULE_VERSION="1.11.6"
+MODULE_VERSION="1.11.7"
ICINGAWEB_MODULEPATH="/usr/share/icingaweb2/modules"
REPO_URL="https://github.com/icinga/icingaweb2-module-director"
TARGET_DIR="${ICINGAWEB_MODULEPATH}/director"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/doc/82-Changelog.md
new/icingaweb2-module-director-1.11.7/doc/82-Changelog.md
--- old/icingaweb2-module-director-1.11.6/doc/82-Changelog.md 2026-02-19
13:07:06.000000000 +0100
+++ new/icingaweb2-module-director-1.11.7/doc/82-Changelog.md 2026-03-26
11:08:18.000000000 +0100
@@ -4,6 +4,18 @@
Please make sure to always read our [Upgrading](05-Upgrading.md) documentation
before switching to a new version.
+v1.11.7
+-------
+
+### Fixes
+
+- Fix: Creating services named identical to template name prevented by cyclic
inheritance check (#3036)
+- Fix: Choosing templates prevented for new templates prevented by cyclic
inheritance check (#3039)
+- Fix: Inherited service not shown in service list of host (#3041)
+- Fix: An Icinga 2 log-level below 'information' breaks Director's active
deployment indicator (#3044)
+
+You can find issues and feature requests related to this release on our
[roadmap](https://github.com/Icinga/icingaweb2-module-director/milestone/42?closed=1)
+
v1.11.6
-------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/library/Director/Objects/DirectorDeploymentLog.php
new/icingaweb2-module-director-1.11.7/library/Director/Objects/DirectorDeploymentLog.php
---
old/icingaweb2-module-director-1.11.6/library/Director/Objects/DirectorDeploymentLog.php
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/library/Director/Objects/DirectorDeploymentLog.php
2026-03-26 11:08:18.000000000 +0100
@@ -64,7 +64,7 @@
public function isPending()
{
- return $this->dump_succeeded === 'y' && $this->startup_log === null;
+ return $this->stage_collected === null;
}
public function succeeded()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/library/Director/RestApi/IcingaObjectHandler.php
new/icingaweb2-module-director-1.11.7/library/Director/RestApi/IcingaObjectHandler.php
---
old/icingaweb2-module-director-1.11.6/library/Director/RestApi/IcingaObjectHandler.php
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/library/Director/RestApi/IcingaObjectHandler.php
2026-03-26 11:08:18.000000000 +0100
@@ -140,18 +140,21 @@
$object->replaceWith(IcingaObject::createByType($type,
$data, $db));
}
- if (in_array((int) $object->get('id'),
$object->listAncestorIds())) {
- throw new RuntimeException(
- 'Import loop detected for the object '
- . $object->getObjectName() . ' -> Imports: '
- . implode(', ', $object->getImports())
- );
- }
+ // Avoid cyclic imports for hosts and commands
+ if (in_array($object->getShortTableName(), ['host',
'command'], true)) {
+ if (in_array((int) $object->get('id'),
$object->listAncestorIds())) {
+ throw new RuntimeException(
+ 'Import loop detected for the object '
+ . $object->getObjectName() . ' -> Imports: '
+ . implode(', ', $object->getImports())
+ );
+ }
- if (isset($data['imports']) &&
in_array($object->get('object_name'), $data['imports'])) {
- throw new RuntimeException(
- 'You can not import the same object into itself: '
. $object->getObjectName()
- );
+ if (isset($data['imports']) &&
in_array($object->get('object_name'), $data['imports'])) {
+ throw new RuntimeException(
+ 'You can not import the same object into
itself: ' . $object->getObjectName()
+ );
+ }
}
$this->persistChanges($object);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/library/Director/StartupLogRenderer.php
new/icingaweb2-module-director-1.11.7/library/Director/StartupLogRenderer.php
---
old/icingaweb2-module-director-1.11.6/library/Director/StartupLogRenderer.php
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/library/Director/StartupLogRenderer.php
2026-03-26 11:08:18.000000000 +0100
@@ -20,7 +20,7 @@
public function render()
{
$deployment = $this->deployment;
- $log = Html::escape($deployment->get('startup_log'));
+ $log = Html::escape($deployment->get('startup_log') ?? '');
$lines = array();
$severity = 'information';
$sevPattern = '/^(debug|notice|information|warning|critical)\/(\w+)/';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/library/Director/Web/Controller/ObjectController.php
new/icingaweb2-module-director-1.11.7/library/Director/Web/Controller/ObjectController.php
---
old/icingaweb2-module-director-1.11.6/library/Director/Web/Controller/ObjectController.php
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/library/Director/Web/Controller/ObjectController.php
2026-03-26 11:08:18.000000000 +0100
@@ -19,6 +19,7 @@
use Icinga\Module\Director\Forms\DeploymentLinkForm;
use Icinga\Module\Director\Forms\IcingaCloneObjectForm;
use Icinga\Module\Director\Forms\IcingaObjectFieldForm;
+use Icinga\Module\Director\Objects\DirectorDeploymentLog;
use Icinga\Module\Director\Objects\IcingaCommand;
use Icinga\Module\Director\Objects\IcingaObject;
use Icinga\Module\Director\Objects\IcingaObjectGroup;
@@ -625,7 +626,10 @@
->handleRequest()
);
- if ((new
DeploymentDashlet($this->db()))->lastDeploymentPending()) {
+ if (
+ DirectorDeploymentLog::hasDeployments($this->db())
+ && (new
DeploymentDashlet($this->db()))->lastDeploymentPending()
+ ) {
$this->actions()->prependHtml(
Hint::warning($this->translate(
'There is an active deployment running, please
wait until it is finished'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/library/Director/Web/Form/DirectorObjectForm.php
new/icingaweb2-module-director-1.11.7/library/Director/Web/Form/DirectorObjectForm.php
---
old/icingaweb2-module-director-1.11.6/library/Director/Web/Form/DirectorObjectForm.php
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/library/Director/Web/Form/DirectorObjectForm.php
2026-03-26 11:08:18.000000000 +0100
@@ -1289,7 +1289,13 @@
'class' => 'autosubmit',
'validators' => [
new Zend_Validate_Callback(function ($value) {
- $templateTree = new
TemplateTree($this->object->getShortTableName(), $this->getDb());
+ $objectInstance = $this->object->getShortTableName();
+ // Avoid cyclic imports for hosts and commands
+ if ($objectInstance !== 'host' && $objectInstance !==
'command') {
+ return true;
+ }
+
+ $templateTree = new TemplateTree($objectInstance,
$this->getDb());
$importsElement = $this->getElement('imports');
$objectName = $this->object->getObjectName();
if (in_array($objectName, $value, true)) {
@@ -1301,8 +1307,12 @@
}
if ($this->object->isTemplate()) {
- $descendents =
$templateTree->getDescendantsFor($this->object);
- $loopedImports =
array_intersect($templateTree->getDescendantsFor($this->object), $value);
+ $descendents = [];
+ if (! $this->isNew()) {
+ $descendents =
$templateTree->getDescendantsFor($this->object);
+ }
+
+ $loopedImports = array_intersect($descendents, $value);
if (! empty($loopedImports)) {
$loopedImport = array_slice($loopedImports, 0, 1);
array_push($loopedImport, ...$descendents);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/library/Director/Web/Form/Element/Boolean.php
new/icingaweb2-module-director-1.11.7/library/Director/Web/Form/Element/Boolean.php
---
old/icingaweb2-module-director-1.11.6/library/Director/Web/Form/Element/Boolean.php
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/library/Director/Web/Form/Element/Boolean.php
2026-03-26 11:08:18.000000000 +0100
@@ -43,7 +43,7 @@
* @param string $key
* @codingStandardsIgnoreStart
*/
- protected function _filterValue(&$value, &$key)
+ protected function _filterValue(&$value, $key)
{
// @codingStandardsIgnoreEnd
if ($value === true) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/library/Director/Web/Form/Element/DataFilter.php
new/icingaweb2-module-director-1.11.7/library/Director/Web/Form/Element/DataFilter.php
---
old/icingaweb2-module-director-1.11.6/library/Director/Web/Form/Element/DataFilter.php
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/library/Director/Web/Form/Element/DataFilter.php
2026-03-26 11:08:18.000000000 +0100
@@ -56,7 +56,7 @@
* @inheritdoc
* @codingStandardsIgnoreStart
*/
- protected function _filterValue(&$value, &$key)
+ protected function _filterValue(&$value, $key)
{
// @codingStandardsIgnoreEnd
try {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/library/Director/Web/Form/Element/ExtensibleSet.php
new/icingaweb2-module-director-1.11.7/library/Director/Web/Form/Element/ExtensibleSet.php
---
old/icingaweb2-module-director-1.11.6/library/Director/Web/Form/Element/ExtensibleSet.php
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/library/Director/Web/Form/Element/ExtensibleSet.php
2026-03-26 11:08:18.000000000 +0100
@@ -54,7 +54,7 @@
/**
* @codingStandardsIgnoreStart
*/
- protected function _filterValue(&$value, &$key)
+ protected function _filterValue(&$value, $key)
{
// @codingStandardsIgnoreEnd
if (is_array($value)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.6/library/Director/Web/Table/ObjectsTableService.php
new/icingaweb2-module-director-1.11.7/library/Director/Web/Table/ObjectsTableService.php
---
old/icingaweb2-module-director-1.11.6/library/Director/Web/Table/ObjectsTableService.php
2026-02-19 13:07:06.000000000 +0100
+++
new/icingaweb2-module-director-1.11.7/library/Director/Web/Table/ObjectsTableService.php
2026-03-26 11:08:18.000000000 +0100
@@ -201,6 +201,9 @@
);
if ($this->inheritedBy) {
+ $ancestors = $this->inheritedBy->listAncestorIds();
+ $ancestors[] = $this->inheritedBy->get('id');
+
$subQuery->joinLeft(
['hi' => 'icinga_host_inheritance'],
'h.id = hi.parent_host_id',
@@ -211,20 +214,24 @@
[]
)->joinLeft(
['hsb' => 'icinga_host_service_blacklist'],
- 'hsb.service_id = o.id AND hsb.host_id = hc.id',
+ $this->db()->quoteInto('hsb.service_id = o.id AND
hsb.host_id IN (?)', $ancestors),
[]
- )->where('hc.id = ?', $this->inheritedBy->get('id'));
+ )->where('hc.id IN (?)', $ancestors);
+
+ $subQuery->where('o.service_set_id IS NULL')
+ ->group(['o.id', 'o.object_name'])
+ ->order('o.object_name')->order('h.object_name');
} else {
$subQuery->joinLeft(
['hsb' => 'icinga_host_service_blacklist'],
'hsb.service_id = o.id AND hsb.host_id = o.host_id',
[]
);
- }
- $subQuery->where('o.service_set_id IS NULL')
- ->group(['o.id', 'h.id', 'o.object_name', 'h.object_name',
'hsb.service_id', 'hsb.host_id'])
- ->order('o.object_name')->order('h.object_name');
+ $subQuery->where('o.service_set_id IS NULL')
+ ->group(['o.id', 'h.id', 'o.object_name', 'h.object_name',
'hsb.service_id', 'hsb.host_id'])
+ ->order('o.object_name')->order('h.object_name');
+ }
if ($this->branchUuid) {
$subQuery->where('bo.service_set IS NULL')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/icingaweb2-module-director-1.11.6/module.info
new/icingaweb2-module-director-1.11.7/module.info
--- old/icingaweb2-module-director-1.11.6/module.info 2026-02-19
13:07:06.000000000 +0100
+++ new/icingaweb2-module-director-1.11.7/module.info 2026-03-26
11:08:18.000000000 +0100
@@ -1,5 +1,5 @@
Name: Icinga Director
-Version: 1.11.6
+Version: 1.11.7
Depends: reactbundle (>=0.9.0), ipl (>=0.5.0), incubator (>=0.22.0)
Description: Director - Config tool for Icinga 2
Icinga Director is a configuration tool that has been designed to make