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

Reply via email to