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-02-21 21:02:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/icingaweb2-module-director (Old)
and /work/SRC/openSUSE:Factory/.icingaweb2-module-director.new.1977 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "icingaweb2-module-director"
Sat Feb 21 21:02:25 2026 rev:27 rq:1334230 version:1.11.6
Changes:
--------
---
/work/SRC/openSUSE:Factory/icingaweb2-module-director/icingaweb2-module-director.changes
2025-04-30 19:05:20.100708864 +0200
+++
/work/SRC/openSUSE:Factory/.icingaweb2-module-director.new.1977/icingaweb2-module-director.changes
2026-02-21 21:04:21.454785116 +0100
@@ -1,0 +2,36 @@
+Fri Feb 20 16:07:22 UTC 2026 - ecsos <[email protected]>
+
+- Update to 1.11.6
+ * Database Schema
+ - Fix: Update columns storing large strings to MEDIUMTEXT in MYSQL (no
issue)
+ * UI
+ - Fix: Icinga Host Form shows applied groups that are not in restriction
(#3001)
+ - Fix: Host Choices shows the partially wrong template at Associated
Template (#2982)
+ - Fix: inherited "disabled" services not crossed out (#2983)
+ - Fix: Hidden datafields should forbid autocompletion (#2347)
+ - Fix: Cyclic inheritance causes UI to crash (#2853)
+ - Fix: Clicking Groups repeatedly (x2) leads to "Page not found" (#2538)
+ - Fix: Users with Director restrictions unable to create hosts unless you
manually
+ specify the host group (#2876)
+ - Feature: Add support for 'Dependency Redundancy Groups' (no issue)
+ - Feature: Show an indicator if there is an active deployment is running
(#2917)
+ * Kickstart
+ - Fix: Kickstart fails to remove a zone and endpoint correctly (#2459)
+ * CLI
+ - Feature: Added an option to check a single import source or sync rule or
director job by name (no issue)
+ - Feature: Add command to delete sync rule and import source by Icingacli
(#2706)
+ * REST API
+ - Fix: Possible timing attack in Self Service API (no issue)
+ - Fix: Set a default agent version to the latest for Self Service API
(#2968)
+ * Integration
+ - Fix: Don't require permissions for custom var rendering hooks (no issue)
+ - Fix: Service modification still allowed in Monitoring View despite
restricted permissions in Director (#3017)
+ * Internals
+ - Fix: indexing of the stripped filter chain (no issue)
+ - Fix: Director creates wrong url for scheduled downtime in activity log
(#2456)
+ - Fix: Basket restore of Host Template and Host Template Choice fails
(#2996)
+ - Feature: Add wildcard support for 'contains' and render with match (no
issue)
+ * Fixed Issues
+ - You can find issues related to this release on our roadmap
+
+-------------------------------------------------------------------
Old:
----
icingaweb2-module-director-1.11.5.tar.gz
New:
----
icingaweb2-module-director-1.11.6.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ icingaweb2-module-director.spec ++++++
--- /var/tmp/diff_new_pack.OEShJy/_old 2026-02-21 21:04:22.158813973 +0100
+++ /var/tmp/diff_new_pack.OEShJy/_new 2026-02-21 21:04:22.170814465 +0100
@@ -1,7 +1,7 @@
#
# spec file for package icingaweb2-module-director
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -22,7 +22,7 @@
%define icingadirector_user icingadirector
Name: icingaweb2-module-director
-Version: 1.11.5
+Version: 1.11.6
Release: 0
Summary: Config module for Icinga Web 2
License: GPL-2.0-or-later
++++++ icingaweb2-module-director-1.11.5.tar.gz ->
icingaweb2-module-director-1.11.6.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/.github/ISSUE_TEMPLATE/bug_report.md
new/icingaweb2-module-director-1.11.6/.github/ISSUE_TEMPLATE/bug_report.md
--- old/icingaweb2-module-director-1.11.5/.github/ISSUE_TEMPLATE/bug_report.md
1970-01-01 01:00:00.000000000 +0100
+++ new/icingaweb2-module-director-1.11.6/.github/ISSUE_TEMPLATE/bug_report.md
2026-02-19 13:07:06.000000000 +0100
@@ -0,0 +1,44 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+## Describe the bug
+
+A clear and concise description of what the bug is.
+Please tell us what happens instead of the expected behavior.
+
+## To Reproduce
+
+Provide a link to a live example, or an unambiguous set of steps to reproduce
this bug. Include configuration, logs, etc. to reproduce, if relevant.
+
+1.
+2.
+3.
+4.
+
+## Expected behavior
+
+A clear and concise description of what you expected to happen.
+
+## Screenshots
+
+If applicable, add screenshots to help explain your problem.
+
+## Your Environment
+
+Include as many relevant details about the environment you experienced the
problem in
+
+* Director version (System - About):
+* Icinga Web 2 version and modules (System - About):
+* Icinga 2 version (`icinga2 --version`):
+* Operating System and version:
+* Webserver, PHP versions:
+
+## Additional context
+
+Add any other context about the problem here.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/.github/ISSUE_TEMPLATE/config.yml
new/icingaweb2-module-director-1.11.6/.github/ISSUE_TEMPLATE/config.yml
--- old/icingaweb2-module-director-1.11.5/.github/ISSUE_TEMPLATE/config.yml
1970-01-01 01:00:00.000000000 +0100
+++ new/icingaweb2-module-director-1.11.6/.github/ISSUE_TEMPLATE/config.yml
2026-02-19 13:07:06.000000000 +0100
@@ -0,0 +1,5 @@
+ blank_issues_enabled: true
+contact_links:
+ - name: Ask a question
+ url: https://community.icinga.com/c/icinga-director/8
+ about: Ask a question in our community forum
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/.github/ISSUE_TEMPLATE/feature_request.md
new/icingaweb2-module-director-1.11.6/.github/ISSUE_TEMPLATE/feature_request.md
---
old/icingaweb2-module-director-1.11.5/.github/ISSUE_TEMPLATE/feature_request.md
1970-01-01 01:00:00.000000000 +0100
+++
new/icingaweb2-module-director-1.11.6/.github/ISSUE_TEMPLATE/feature_request.md
2026-02-19 13:07:06.000000000 +0100
@@ -0,0 +1,35 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+
+
+## Is your feature request related to a problem? Please describe.
+
+A clear and concise description of what the problem is. Ex. I'm always using
this feature but am missing [...]
+
+## Describe the solution you'd like
+
+A clear and concise description of what you want to happen.
+
+## Describe alternatives you've considered
+
+A clear and concise description of any alternative solutions or features
you've considered.
+
+## Additional context
+
+Add any other context or screenshots about the feature request here.
+
+## Your Environment
+<!--- Include as many relevant details about your environment -->
+* Director version (System - About):
+* Icinga Web 2 version and modules (System - About):
+* Icinga 2 version (`icinga2 --version`):
+* Operating System and version:
+* Webserver, PHP versions:
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/.github/ISSUE_TEMPLATE.md
new/icingaweb2-module-director-1.11.6/.github/ISSUE_TEMPLATE.md
--- old/icingaweb2-module-director-1.11.5/.github/ISSUE_TEMPLATE.md
2025-04-29 12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/.github/ISSUE_TEMPLATE.md
1970-01-01 01:00:00.000000000 +0100
@@ -1,24 +0,0 @@
-## Expected Behavior
-<!--- If you're describing a bug, tell us what should happen -->
-<!--- If you're suggesting a change/improvement, tell us how it should work -->
-
-## Current Behavior
-<!--- If describing a bug, tell us what happens instead of the expected
behavior -->
-<!--- If suggesting a change/improvement, explain the difference from current
behavior -->
-
-## Possible Solution
-<!--- Not obligatory, but suggest a fix/reason for the bug, -->
-<!--- or ideas how to implement: the addition or change -->
-
-## Steps to Reproduce (for bugs)
-<!--- Provide a link to a live example, or an unambiguous set of steps to -->
-<!--- reproduce this bug. Include configuration, logs, etc. to reproduce, if
relevant -->
-
-## Your Environment
-<!--- Include as many relevant details about the environment you experienced
the problem in -->
-* Director version (System - About):
-* Icinga Web 2 version and modules (System - About):
-* Icinga 2 version (`icinga2 --version`):
-* Operating System and version:
-* Webserver, PHP versions:
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/.github/workflows/L10n-update.yml
new/icingaweb2-module-director-1.11.6/.github/workflows/L10n-update.yml
--- old/icingaweb2-module-director-1.11.5/.github/workflows/L10n-update.yml
2025-04-29 12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/.github/workflows/L10n-update.yml
2026-02-19 13:07:06.000000000 +0100
@@ -6,15 +6,6 @@
- master
jobs:
- trigger-update:
- name: L10n Update Trigger
- runs-on: ubuntu-latest
-
- steps:
- - name: Repository dispatch
- uses: peter-evans/repository-dispatch@v3
- with:
- token: ${{ secrets.ICINGABOT_TOKEN }}
- repository: Icinga/L10n
- event-type: update
- client-payload: '{"origin": "${{ github.repository }}", "commit":
"${{ github.sha }}"}'
+ update:
+ uses: icinga/github-actions/.github/workflows/L10n-update.yml@main
+ secrets: inherit
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/.github/workflows/php.yml
new/icingaweb2-module-director-1.11.6/.github/workflows/php.yml
--- old/icingaweb2-module-director-1.11.5/.github/workflows/php.yml
2025-04-29 12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/.github/workflows/php.yml
2026-02-19 13:07:06.000000000 +0100
@@ -28,7 +28,7 @@
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
- tools: phpcs
+ tools: phpcs:3
- name: Setup dependencies
run: composer require -n --no-progress overtrue/phplint phpunit/phpunit
@@ -45,17 +45,11 @@
name: Unit tests with php ${{ matrix.php }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
- env:
- phpunit-version: 9.5
-
strategy:
fail-fast: false
matrix:
- php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
+ php: ['8.2', '8.3']
os: ['ubuntu-latest']
- include:
- - php: '7.2'
- phpunit-version: 8.5
services:
mysql:
@@ -95,7 +89,7 @@
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
- tools: phpunit:${{ matrix.phpunit-version || env.phpunit-version }}
+ tools: phpunit:9.5
extensions: mysql, pgsql
- name: Setup Icinga Web
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/clicommands/HealthCommand.php
new/icingaweb2-module-director-1.11.6/application/clicommands/HealthCommand.php
---
old/icingaweb2-module-director-1.11.5/application/clicommands/HealthCommand.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/application/clicommands/HealthCommand.php
2026-02-19 13:07:06.000000000 +0100
@@ -27,6 +27,7 @@
*
* --check <name> Run only a specific set of checks
* valid names: config, sync, import, jobs, deployment
+ * --name <name> Name of a single Import Source or Sync Rule
* --db <name> Use a specific Icinga Web DB resource
* --watch <seconds> Refresh every <second>. For interactive use only
*/
@@ -38,9 +39,8 @@
}
if ($name = $this->params->get('check')) {
- $check = $health->getCheck($name);
+ $check = $health->getCheck($name, $this->params->get('name'));
echo PluginOutputBeautifier::beautify($check->getOutput(),
$this->screen);
-
exit($check->getState()->getNumeric());
} else {
$state = new PluginState('OK');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/clicommands/ImportsourceCommand.php
new/icingaweb2-module-director-1.11.6/application/clicommands/ImportsourceCommand.php
---
old/icingaweb2-module-director-1.11.5/application/clicommands/ImportsourceCommand.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/application/clicommands/ImportsourceCommand.php
2026-02-19 13:07:06.000000000 +0100
@@ -68,6 +68,25 @@
}
/**
+ * This command deletes the given Import Source.
+ *
+ * USAGE
+ *
+ * icingacli director importsource delete --id <id>
+ *
+ * OPTIONS
+ *
+ * --id <id> An Import Source ID. Use the list command to figure out
+ */
+ public function deleteAction()
+ {
+ $source = $this->getImportSource();
+ if ($source->delete()) {
+ echo sprintf("Import Source '%s' has been deleted\n",
$source->get('source_name'));
+ }
+ }
+
+ /**
* Fetch current data from a given Import Source
*
* This command fetches data from the given Import Source and outputs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/clicommands/SyncruleCommand.php
new/icingaweb2-module-director-1.11.6/application/clicommands/SyncruleCommand.php
---
old/icingaweb2-module-director-1.11.5/application/clicommands/SyncruleCommand.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/application/clicommands/SyncruleCommand.php
2026-02-19 13:07:06.000000000 +0100
@@ -77,6 +77,25 @@
exit($this->getSyncStateExitCode($rule));
}
+ /**
+ * This command deletes a Sync Rule.
+ *
+ * USAGE
+ *
+ * icingacli director syncrule delete --id <id>
+ *
+ * OPTIONS
+ *
+ * --id <id> A Sync Rule ID. Use the list command to figure out
+ */
+ public function deleteAction()
+ {
+ $rule = $this->getSyncRule();
+ if ($rule->delete()) {
+ echo sprintf("Sync rule '%s' has been deleted\n",
$rule->get('rule_name'));
+ }
+ }
+
protected function getExpectedModificationCounts(SyncRule $rule)
{
$modifications = $rule->getExpectedModifications();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/controllers/ConfigController.php
new/icingaweb2-module-director-1.11.6/application/controllers/ConfigController.php
---
old/icingaweb2-module-director-1.11.5/application/controllers/ConfigController.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/application/controllers/ConfigController.php
2026-02-19 13:07:06.000000000 +0100
@@ -9,6 +9,7 @@
use Icinga\Exception\IcingaException;
use Icinga\Exception\NotFoundError;
use Icinga\Module\Director\Auth\Permission;
+use Icinga\Module\Director\Dashboard\Dashlet\DeploymentDashlet;
use Icinga\Module\Director\Db\Branch\Branch;
use Icinga\Module\Director\Deployment\DeploymentStatus;
use Icinga\Module\Director\Forms\DeployConfigForm;
@@ -194,6 +195,15 @@
->setApi($this->api())
->handleRequest());
}
+
+ if ((new DeploymentDashlet($this->db()))->lastDeploymentPending())
{
+ $this->actions()->prependHtml(
+ Hint::warning($this->translate(
+ 'There is an active deployment running, please wait
until it is finished'
+ . ' before creating a new deployment.'
+ ))
+ );
+ }
}
$table->renderTo($this);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/controllers/HostController.php
new/icingaweb2-module-director-1.11.6/application/controllers/HostController.php
---
old/icingaweb2-module-director-1.11.5/application/controllers/HostController.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/application/controllers/HostController.php
2026-02-19 13:07:06.000000000 +0100
@@ -146,12 +146,12 @@
$info = ServiceFinder::find($host, $serviceName);
$backend = $this->backend();
- if ($info && $auth->hasPermission(Permission::HOSTS)) {
+ if ($info && $auth->hasPermission(Permission::SERVICES)) {
$redirectUrl = $info->getUrl();
} elseif (
$info
- && (($backend instanceof Monitoring &&
$auth->hasPermission(Permission::MONITORING_HOSTS))
- || ($backend instanceof IcingadbBackend &&
$auth->hasPermission(Permission::ICINGADB_HOSTS))
+ && (($backend instanceof Monitoring &&
$auth->hasPermission(Permission::MONITORING_SERVICES))
+ || ($backend instanceof IcingadbBackend &&
$auth->hasPermission(Permission::ICINGADB_SERVICES))
)
&& $backend->canModifyService($hostName, $serviceName)
) {
@@ -215,6 +215,14 @@
*/
public function servicesAction()
{
+ if (! $this->hasPermission(Permission::SERVICES)) {
+ if ($this->isServicesReadOnlyAction() &&
$this->hasPermission($this->getServicesReadOnlyPermission())) {
+ $this->servicesroAction();
+ }
+
+ return;
+ }
+
$this->addServicesHeader();
$host = $this->getHostObject();
$this->addTitle($this->translate('Services: %s'),
$host->getObjectName());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/controllers/ServiceController.php
new/icingaweb2-module-director-1.11.6/application/controllers/ServiceController.php
---
old/icingaweb2-module-director-1.11.5/application/controllers/ServiceController.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/application/controllers/ServiceController.php
2026-02-19 13:07:06.000000000 +0100
@@ -37,7 +37,7 @@
return;
}
- $this->assertPermission(Permission::HOSTS);
+ $this->assertPermission(Permission::SERVICES);
}
public function init()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/controllers/SuggestController.php
new/icingaweb2-module-director-1.11.6/application/controllers/SuggestController.php
---
old/icingaweb2-module-director-1.11.5/application/controllers/SuggestController.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/application/controllers/SuggestController.php
2026-02-19 13:07:06.000000000 +0100
@@ -356,6 +356,18 @@
return $this->fetchTemplateNames('icinga_dependency');
}
+ protected function suggestDependencyRedundancyGroups()
+ {
+ $db = $this->db()->getDbAdapter();
+ $query = $db->select()
+ ->distinct()
+ ->from('icinga_dependency', 'redundancy_group')
+ ->where('redundancy_group IS NOT NULL')
+ ->order('redundancy_group');
+
+ return $db->fetchCol($query);
+ }
+
protected function highlight($val, $search)
{
$search = ($search);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/forms/IcingaDependencyForm.php
new/icingaweb2-module-director-1.11.6/application/forms/IcingaDependencyForm.php
---
old/icingaweb2-module-director-1.11.5/application/forms/IcingaDependencyForm.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/application/forms/IcingaDependencyForm.php
2026-02-19 13:07:06.000000000 +0100
@@ -303,6 +303,19 @@
}
}
+ $this->addElement('text', 'redundancy_group', [
+ 'label' => $this->translate('Redundancy Group'),
+ 'description' => $this->translate(
+ 'The dependency redundancy group. A name for a group of which'
+ . ' at least one single dependency must be fulfilled for the'
+ . ' whole dependency to be fulfilled.'
+ ),
+ 'class' => "director-suggest",
+ 'data-suggestion-context' => 'dependencyRedundancyGroups',
+ 'required' => false,
+ 'value' => $dependency->get('redundancy_group')
+ ]);
+
$elements = ['parent_host', 'child_host', 'parent_service',
'child_service'];
$this->addDisplayGroup($elements, 'related_objects', [
'decorators' => [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/forms/IcingaHostForm.php
new/icingaweb2-module-director-1.11.6/application/forms/IcingaHostForm.php
--- old/icingaweb2-module-director-1.11.5/application/forms/IcingaHostForm.php
2025-04-29 12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/application/forms/IcingaHostForm.php
2026-02-19 13:07:06.000000000 +0100
@@ -236,6 +236,12 @@
));
$applied = $this->getAppliedGroups();
+ if ($this->hasHostGroupRestriction()) {
+ $applied = (new HostgroupRestriction($this->getDb(),
$this->getAuth()))
+ ->filterRestrictedHostgroups($applied);
+ }
+
+
if (! empty($applied)) {
$this->addElement('simpleNote', 'applied_groups', [
'label' => $this->translate('Applied groups'),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/forms/IcingaObjectFieldForm.php
new/icingaweb2-module-director-1.11.6/application/forms/IcingaObjectFieldForm.php
---
old/icingaweb2-module-director-1.11.5/application/forms/IcingaObjectFieldForm.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/application/forms/IcingaObjectFieldForm.php
2026-02-19 13:07:06.000000000 +0100
@@ -111,8 +111,8 @@
$this->addFilterElement('var_filter', [
'description' => $this->translate(
'You might want to show this field only when certain
conditions are met.'
- . ' Otherwise it will not be available and values
eventually set before'
- . ' will be cleared once stored'
+ . ' Be careful, if previously satisfied conditions are no
longer met'
+ . ' and the object is updated, the field\'s value will be
lost.'
),
'columns' => $filterFields,
]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/forms/IcingaTemplateChoiceForm.php
new/icingaweb2-module-director-1.11.6/application/forms/IcingaTemplateChoiceForm.php
---
old/icingaweb2-module-director-1.11.5/application/forms/IcingaTemplateChoiceForm.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/application/forms/IcingaTemplateChoiceForm.php
2026-02-19 13:07:06.000000000 +0100
@@ -2,6 +2,7 @@
namespace Icinga\Module\Director\Forms;
+use Icinga\Module\Director\Data\Db\DbObject;
use Icinga\Module\Director\Db;
use Icinga\Module\Director\Objects\IcingaTemplateChoice;
use Icinga\Module\Director\Web\Form\DirectorObjectForm;
@@ -103,6 +104,13 @@
$this->setButtons();
}
+ protected function setDefaultsFromObject(DbObject $object)
+ {
+ parent::setDefaultsFromObject($object);
+
+
$this->getElement('required_template')->setValue($object->get('required_template'));
+ }
+
protected function fetchUnboundTemplates()
{
/** @var IcingaTemplateChoice $object */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/application/views/helpers/FormStoredPassword.php
new/icingaweb2-module-director-1.11.6/application/views/helpers/FormStoredPassword.php
---
old/icingaweb2-module-director-1.11.5/application/views/helpers/FormStoredPassword.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/application/views/helpers/FormStoredPassword.php
2026-02-19 13:07:06.000000000 +0100
@@ -28,6 +28,7 @@
'type' => 'password',
'name' => "{$name}[_value]",
'id' => $id,
+ 'autocomplete' => 'new-password'
]);
$res->add($el);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/doc/02-Installation.md.d/From-Source.md
new/icingaweb2-module-director-1.11.6/doc/02-Installation.md.d/From-Source.md
---
old/icingaweb2-module-director-1.11.5/doc/02-Installation.md.d/From-Source.md
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/doc/02-Installation.md.d/From-Source.md
2026-02-19 13:07:06.000000000 +0100
@@ -41,7 +41,7 @@
You might want to use a script as follows for this task:
```shell
-MODULE_VERSION="1.11.5"
+MODULE_VERSION="1.11.6"
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.5"
+MODULE_VERSION="1.11.6"
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.5/doc/10-How-it-works.md
new/icingaweb2-module-director-1.11.6/doc/10-How-it-works.md
--- old/icingaweb2-module-director-1.11.5/doc/10-How-it-works.md
2025-04-29 12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/doc/10-How-it-works.md
2026-02-19 13:07:06.000000000 +0100
@@ -17,8 +17,8 @@
The Director uses the Icinga 2 API to ship the configuration. It does
so by shipping full config packages, it does not deal with single
objects. This makes deployments much faster. It also makes it easier to
-eventually use Director in parallel with manual configuration or
-configuration shipped by other tools.
+use Director in parallel with manual configuration or configuration
+shipped by other tools.
Internally, Icinga 2 manages part of its configuration in its `var/lib`
directory. This is usually to be found in `/var/lib/icinga2`. Config
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/icingaweb2-module-director-1.11.5/doc/60-CLI.md
new/icingaweb2-module-director-1.11.6/doc/60-CLI.md
--- old/icingaweb2-module-director-1.11.5/doc/60-CLI.md 2025-04-29
12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/doc/60-CLI.md 2026-02-19
13:07:06.000000000 +0100
@@ -137,7 +137,7 @@
| `--<key> <value>` | Provide all properties as single command line
options |
| `--append-<key> <value>` | Appends to array values, like `imports`,
|
| | `groups` or `vars.system_owners`
|
-| `--remove-<key> [<value>]` | Remove a specific property, eventually only
|
+| `--remove-<key> [<value>]` | Remove a specific property, potentially only
|
| | when matching `value`. In case the property is
an |
| | array it will remove just `value` when given
|
| `--json` | Otherwise provide all options as a JSON string
|
@@ -174,7 +174,7 @@
With `set` you only set the specified properties and do not touch the other
ones. You could also want to completely override an object, purging all other
-eventually existing and unspecified parameters. Please use `--replace` if this
+unspecified parameters that might already exist. Please use `--replace` if this
is the desired behaviour.
@@ -504,8 +504,8 @@
Config matches active stage, deploying anyway
```
-In case you want to do not want `deploy` to waste time to re-render your
-config or in case you decide to re-deploy a specific, eventually older config
+In case you do not want `deploy` to waste time re-rendering your config
+or in case you decide to re-deploy a specific, possibly older, config
version the `deploy` command allows you to provide a specific checksum:
```shell
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/icingaweb2-module-director-1.11.5/doc/79-Jobs.md
new/icingaweb2-module-director-1.11.6/doc/79-Jobs.md
--- old/icingaweb2-module-director-1.11.5/doc/79-Jobs.md 2025-04-29
12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/doc/79-Jobs.md 2026-02-19
13:07:06.000000000 +0100
@@ -2,8 +2,8 @@
=====================
The [background daemon](75-Background-Daemon.md) is responsible for running
-Jobs accoring our schedule. Director allows you to schedule eventually long-
-running tasks so that they can run in the background.
+jobs according to our schedule. Director allows you to schedule long-
+running tasks, so they can run in the background.
Currently this includes:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/doc/82-Changelog.md
new/icingaweb2-module-director-1.11.6/doc/82-Changelog.md
--- old/icingaweb2-module-director-1.11.5/doc/82-Changelog.md 2025-04-29
12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/doc/82-Changelog.md 2026-02-19
13:07:06.000000000 +0100
@@ -4,6 +4,55 @@
Please make sure to always read our [Upgrading](05-Upgrading.md) documentation
before switching to a new version.
+v1.11.6
+-------
+
+### Database Schema
+
+- Fix: Update columns storing large strings to MEDIUMTEXT in MYSQL (no issue)
+
+### UI
+
+- Fix: Icinga Host Form shows applied groups that are not in restriction
(#3001)
+- Fix: Host Choices shows the partially wrong template at Associated Template
(#2982)
+- Fix: inherited "disabled" services not crossed out (#2983)
+- Fix: Hidden datafields should forbid autocompletion (#2347)
+- Fix: Cyclic inheritance causes UI to crash (#2853)
+- Fix: Clicking Groups repeatedly (x2) leads to "Page not found" (#2538)
+- Fix: Users with Director restrictions unable to create hosts unless you
manually specify the host group (#2876)
+- Feature: Add support for 'Dependency Redundancy Groups' (no issue)
+- Feature: Show an indicator if there is an active deployment is running
(#2917)
+
+### Kickstart
+
+- Fix: Kickstart fails to remove a zone and endpoint correctly (#2459)
+
+### CLI
+
+- Feature: Added an option to check a single import source or sync rule or
director job by name (no issue)
+- Feature: Add command to delete sync rule and import source by Icingacli
(#2706)
+
+### REST API
+
+- Fix: Possible timing attack in Self Service API (no issue)
+- Fix: Set a default agent version to the latest for Self Service API (#2968)
+
+### Integration
+
+- Fix: Don't require permissions for custom var rendering hooks (no issue)
+- Fix: Service modification still allowed in Monitoring View despite
restricted permissions in Director (#3017)
+
+### Internals
+
+- Fix: indexing of the stripped filter chain (no issue)
+- Fix: Director creates wrong url for scheduled downtime in activity log
(#2456)
+- Fix: Basket restore of Host Template and Host Template Choice fails (#2996)
+- Feature: Add wildcard support for 'contains' and render with match (no issue)
+
+### Fixed Issues
+
+You can find issues related to this release on our
[roadmap](https://github.com/Icinga/icingaweb2-module-director/milestone/41?closed=1)
+
v1.11.5
-------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/DirectorObject/Automation/BasketSnapshot.php
new/icingaweb2-module-director-1.11.6/library/Director/DirectorObject/Automation/BasketSnapshot.php
---
old/icingaweb2-module-director-1.11.5/library/Director/DirectorObject/Automation/BasketSnapshot.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/DirectorObject/Automation/BasketSnapshot.php
2026-02-19 13:07:06.000000000 +0100
@@ -80,8 +80,8 @@
'Command',
'TimePeriod',
'HostGroup',
- 'IcingaTemplateChoiceHost',
'HostTemplate',
+ 'IcingaTemplateChoiceHost',
'ServiceGroup',
'IcingaTemplateChoiceService',
'ServiceTemplate',
@@ -291,6 +291,11 @@
$importer = new ObjectImporter($connection);
$changed = [];
foreach ($objects as $object) {
+ // This relation is unnecessary as the relation is restored using
template choice members
+ if (($typeName === 'HostTemplate' || $typeName ===
'ServiceTemplate') && isset($object->template_choice)) {
+ unset($object->template_choice);
+ }
+
$new = $importer->import($class, $object);
if ($new->hasBeenModified()) {
if ($new instanceof IcingaObject && $new->supportsImports()) {
@@ -457,7 +462,16 @@
}
$exporter = new Exporter($connection);
foreach ($all as $object) {
- $this->objects[$typeName][$object->getUniqueIdentifier()] =
$exporter->export($object);
+ $exportedObject = $exporter->export($object);
+ // This relation is unnecessary as the relation can be restored
using template choice members
+ if (
+ $object instanceof IcingaHost || ($object instanceof
IcingaService && $object->isTemplate())
+ && isset($exportedObject->template_choice)
+ ) {
+ unset($exportedObject->template_choice);
+ }
+
+ $this->objects[$typeName][$object->getUniqueIdentifier()] =
$exportedObject;
}
}
@@ -515,7 +529,16 @@
$connection
);
if ($object !== null) {
- $this->objects[$typeName][$identifier] =
$exporter->export($object);
+ $exportedObject = $exporter->export($object);
+ // This relation is unnecessary as the relation can be restored
using template choice members
+ if (
+ $object instanceof IcingaHost || ($object instanceof
IcingaService && $object->isTemplate())
+ && isset($exportedObject->template_choice)
+ ) {
+ unset($exportedObject->template_choice);
+ }
+
+ $this->objects[$typeName][$identifier] = $exportedObject;
}
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Health.php
new/icingaweb2-module-director-1.11.6/library/Director/Health.php
--- old/icingaweb2-module-director-1.11.5/library/Director/Health.php
2025-04-29 12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/library/Director/Health.php
2026-02-19 13:07:06.000000000 +0100
@@ -36,14 +36,23 @@
return $this;
}
- public function getCheck($name)
+ public function getCheck(string $name, ?string $checkName = null):
CheckResults
{
- if (array_key_exists($name, $this->checks)) {
- $func = $this->checks[$name];
- $check = $this->$func();
+ if (! array_key_exists($name, $this->checks)) {
+ return (new CheckResults('Invalid Parameter'))
+ ->fail("There is no check named '$name'");
+ }
+
+ if ($checkName !== null && ($name === 'deployment' || $name ===
'config')) {
+ return (new CheckResults('Invalid Parameter'))
+ ->fail('--name is not supported with --check deployment or
--check config');
+ }
+
+ $func = $this->checks[$name];
+ if ($checkName !== null) {
+ $check = $this->$func($checkName);
} else {
- $check = new CheckResults('Invalid Parameter');
- $check->fail("There is no check named '$name'");
+ $check = $this->$func();
}
return $check;
@@ -142,15 +151,20 @@
return $check;
}
- public function checkSyncRules()
+ public function checkSyncRules(?string $checkName = null): CheckResults
{
$check = new CheckResults('Sync Rules');
- $rules = SyncRule::loadAll($this->getConnection(), null, 'rule_name');
- if (empty($rules)) {
- $check->succeed('No Sync Rules have been defined');
- return $check;
+ if ($checkName !== null) {
+ $rules = [SyncRule::load($checkName, $this->getConnection())];
+ } else {
+ $rules = SyncRule::loadAll($this->getConnection(), null,
'rule_name');
+ if (empty($rules)) {
+ $check->succeed('No Sync Rules have been defined');
+ return $check;
+ }
+
+ ksort($rules);
}
- ksort($rules);
foreach ($rules as $rule) {
$state = $rule->get('sync_state');
@@ -170,16 +184,21 @@
return $check;
}
- public function checkImportSources()
+ public function checkImportSources(?string $checkName = null): CheckResults
{
$check = new CheckResults('Import Sources');
- $sources = ImportSource::loadAll($this->getConnection(), null,
'source_name');
- if (empty($sources)) {
- $check->succeed('No Import Sources have been defined');
- return $check;
+ if ($checkName !== null) {
+ $sources = [ImportSource::load($checkName,
$this->getConnection())];
+ } else {
+ $sources = ImportSource::loadAll($this->getConnection(), null,
'source_name');
+ if (empty($sources)) {
+ $check->succeed('No Import Sources have been defined');
+ return $check;
+ }
+
+ ksort($sources);
}
- ksort($sources);
foreach ($sources as $src) {
$state = $src->get('import_state');
$name = $src->get('source_name');
@@ -198,15 +217,20 @@
return $check;
}
- public function checkDirectorJobs()
+ public function checkDirectorJobs(?string $checkName = null): CheckResults
{
$check = new CheckResults('Director Jobs');
- $jobs = DirectorJob::loadAll($this->getConnection(), null, 'job_name');
- if (empty($jobs)) {
- $check->succeed('No Jobs have been defined');
- return $check;
+ if ($checkName !== null) {
+ $jobs = [DirectorJob::load($checkName, $this->getConnection())];
+ } else {
+ $jobs = DirectorJob::loadAll($this->getConnection(), null,
'job_name');
+ if (empty($jobs)) {
+ $check->succeed('No Jobs have been defined');
+ return $check;
+ }
+
+ ksort($jobs);
}
- ksort($jobs);
foreach ($jobs as $job) {
$name = $job->get('job_name');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/IcingaConfig/AssignRenderer.php
new/icingaweb2-module-director-1.11.6/library/Director/IcingaConfig/AssignRenderer.php
---
old/icingaweb2-module-director-1.11.5/library/Director/IcingaConfig/AssignRenderer.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/IcingaConfig/AssignRenderer.php
2026-02-19 13:07:06.000000000 +0100
@@ -115,11 +115,24 @@
protected function renderContains(FilterExpression $filter)
{
- return sprintf(
- '%s in %s',
- $this->renderExpressionValue(json_decode($filter->getColumn())),
- $filter->getExpression()
- );
+ // Note: expression and column is flipped in this mode
+ $value = json_decode($filter->getColumn());
+ $expression = $this->renderExpressionValue($value);
+ $column = $filter->getExpression();
+
+ if (strpos($value, '*') !== false) {
+ return sprintf(
+ 'match(%s, %s, MatchAny)',
+ $expression,
+ $column
+ );
+ } else {
+ return sprintf(
+ '%s in %s',
+ $expression,
+ $column
+ );
+ }
}
protected function renderFilterExpression(FilterExpression $filter)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/KickstartHelper.php
new/icingaweb2-module-director-1.11.6/library/Director/KickstartHelper.php
--- old/icingaweb2-module-director-1.11.5/library/Director/KickstartHelper.php
2025-04-29 12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/library/Director/KickstartHelper.php
2026-02-19 13:07:06.000000000 +0100
@@ -289,7 +289,7 @@
*/
protected function removeZones()
{
- return $this->removeObjects($this->removeEndpoints, 'External Zone');
+ return $this->removeObjects($this->removeZones, 'External Zone');
}
/**
@@ -446,7 +446,7 @@
$object->delete();
} catch (Exception $e) {
throw new RuntimeException(sprintf(
- "Failed to remove %s '%s', it's eventually still in use",
+ "Failed to remove %s '%s', it might still be in use",
$typeName,
$object->getObjectName()
), 0, $e);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Objects/IcingaDependency.php
new/icingaweb2-module-director-1.11.6/library/Director/Objects/IcingaDependency.php
---
old/icingaweb2-module-director-1.11.5/library/Director/Objects/IcingaDependency.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/Objects/IcingaDependency.php
2026-02-19 13:07:06.000000000 +0100
@@ -29,6 +29,7 @@
'ignore_soft_states' => null,
'period_id' => null,
'zone_id' => null,
+ 'redundancy_group' => null,
'assign_filter' => null,
'parent_service_by_name' => null,
];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Objects/IcingaHost.php
new/icingaweb2-module-director-1.11.6/library/Director/Objects/IcingaHost.php
---
old/icingaweb2-module-director-1.11.5/library/Director/Objects/IcingaHost.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/Objects/IcingaHost.php
2026-02-19 13:07:06.000000000 +0100
@@ -585,13 +585,15 @@
$query = $db->getDbAdapter()
->select()
->from('icinga_host')
- ->where('api_key = ?', $key);
+ ->where('api_key IS NOT NULL')
+ ->query();
- $result = self::loadAll($db, $query);
- if (count($result) !== 1) {
- throw new NotFoundError('Got invalid API key "%s"', $key);
+ foreach ($query as $row) {
+ if (hash_equals($row->api_key, $key)) {
+ return (new
static())->setConnection($db)->setDbProperties($row);
+ }
}
- return current($result);
+ throw new NotFoundError('Got invalid API key "%s"', $key);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/ProvidedHook/Icingadb/HostActions.php
new/icingaweb2-module-director-1.11.6/library/Director/ProvidedHook/Icingadb/HostActions.php
---
old/icingaweb2-module-director-1.11.5/library/Director/ProvidedHook/Icingadb/HostActions.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/ProvidedHook/Icingadb/HostActions.php
2026-02-19 13:07:06.000000000 +0100
@@ -47,10 +47,12 @@
if (Util::hasPermission(Permission::HOSTS) &&
IcingaHost::exists($hostname, $db)) {
$allowEdit = true;
}
- if (Util::hasPermission(Permission::ICINGADB_HOSTS)) {
- if ((new IcingadbBackend())->canModifyHost($hostname)) {
- $allowEdit = IcingaHost::exists($hostname, $db);
- }
+ if (
+ Util::hasPermission(Permission::HOSTS)
+ && Util::hasPermission(Permission::ICINGADB_HOSTS)
+ && (new IcingadbBackend())->canModifyHost($hostname)
+ ) {
+ $allowEdit = IcingaHost::exists($hostname, $db);
}
if ($allowEdit) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/ProvidedHook/Icingadb/ServiceActions.php
new/icingaweb2-module-director-1.11.6/library/Director/ProvidedHook/Icingadb/ServiceActions.php
---
old/icingaweb2-module-director-1.11.5/library/Director/ProvidedHook/Icingadb/ServiceActions.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/ProvidedHook/Icingadb/ServiceActions.php
2026-02-19 13:07:06.000000000 +0100
@@ -52,12 +52,12 @@
}
$title = null;
- if (Util::hasPermission(Permission::HOSTS)) {
+ if (
+ Util::hasPermission(Permission::SERVICES)
+ && Util::hasPermission(Permission::ICINGADB_SERVICES)
+ && (new IcingadbBackend())->canModifyService($hostname,
$serviceName)
+ ) {
$title = mt('director', 'Modify');
- } elseif (Util::hasPermission(Permission::ICINGADB_SERVICES)) {
- if ((new IcingadbBackend())->canModifyService($hostname,
$serviceName)) {
- $title = mt('director', 'Modify');
- }
} elseif (Util::hasPermission(Permission::ICINGADB_SERVICES_RO)) {
$title = mt('director', 'Configuration');
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/ProvidedHook/Monitoring/HostActions.php
new/icingaweb2-module-director-1.11.6/library/Director/ProvidedHook/Monitoring/HostActions.php
---
old/icingaweb2-module-director-1.11.5/library/Director/ProvidedHook/Monitoring/HostActions.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/ProvidedHook/Monitoring/HostActions.php
2026-02-19 13:07:06.000000000 +0100
@@ -41,13 +41,12 @@
}
$allowEdit = false;
- if (Util::hasPermission(Permission::HOSTS) &&
IcingaHost::exists($hostname, $db)) {
- $allowEdit = true;
- }
- if (Util::hasPermission(Permission::MONITORING_HOSTS)) {
- if ((new
Monitoring(Auth::getInstance()))->canModifyHost($hostname)) {
- $allowEdit = IcingaHost::exists($hostname, $db);
- }
+ if (
+ Util::hasPermission(Permission::HOSTS)
+ && Util::hasPermission(Permission::MONITORING_HOSTS)
+ && (new Monitoring(Auth::getInstance()))->canModifyHost($hostname)
+ ) {
+ $allowEdit = IcingaHost::exists($hostname, $db);
}
if ($allowEdit) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/ProvidedHook/Monitoring/ServiceActions.php
new/icingaweb2-module-director-1.11.6/library/Director/ProvidedHook/Monitoring/ServiceActions.php
---
old/icingaweb2-module-director-1.11.5/library/Director/ProvidedHook/Monitoring/ServiceActions.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/ProvidedHook/Monitoring/ServiceActions.php
2026-02-19 13:07:06.000000000 +0100
@@ -53,12 +53,12 @@
}
$title = null;
- if (Util::hasPermission(Permission::HOSTS)) {
+ if (
+ Util::hasPermission(Permission::SERVICES)
+ && Util::hasPermission(Permission::MONITORING_SERVICES)
+ && (new
Monitoring(Auth::getInstance()))->canModifyService($hostname, $serviceName)
+ ) {
$title = mt('director', 'Modify');
- } elseif (Util::hasPermission(Permission::MONITORING_SERVICES)) {
- if ((new
Monitoring(Auth::getInstance()))->canModifyService($hostname, $serviceName)) {
- $title = mt('director', 'Modify');
- }
} elseif (Util::hasPermission(Permission::MONITORING_SERVICES_RO)) {
$title = mt('director', 'Configuration');
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/RestApi/IcingaObjectHandler.php
new/icingaweb2-module-director-1.11.6/library/Director/RestApi/IcingaObjectHandler.php
---
old/icingaweb2-module-director-1.11.5/library/Director/RestApi/IcingaObjectHandler.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/RestApi/IcingaObjectHandler.php
2026-02-19 13:07:06.000000000 +0100
@@ -139,6 +139,21 @@
], $data);
$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())
+ );
+ }
+
+ 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);
$this->sendJson($object->toPlainObject(false, true));
} elseif ($allowsOverrides && $type === 'service') {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Restriction/HostgroupRestriction.php
new/icingaweb2-module-director-1.11.6/library/Director/Restriction/HostgroupRestriction.php
---
old/icingaweb2-module-director-1.11.5/library/Director/Restriction/HostgroupRestriction.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/Restriction/HostgroupRestriction.php
2026-02-19 13:07:06.000000000 +0100
@@ -2,8 +2,10 @@
namespace Icinga\Module\Director\Restriction;
+use Icinga\Data\Filter\Filter;
use Icinga\Module\Director\Auth\Restriction;
use Icinga\Module\Director\Db\IcingaObjectFilterHelper;
+use Icinga\Module\Director\Objects\HostApplyMatches;
use Icinga\Module\Director\Objects\IcingaHost;
use Icinga\Module\Director\Objects\IcingaHostGroup;
use Icinga\Module\Director\Objects\IcingaObject;
@@ -59,7 +61,7 @@
// Hint: branched hosts have no id
if (! $host->hasBeenLoadedFromDb() || $host->hasModifiedGroups() ||
$host->get('id') === null) {
foreach ($this->listRestrictedHostgroups() as $group) {
- if ($host->hasGroup($group)) {
+ if ($host->hasGroup($group) ||
$this->matchesHostGroupFilter($group, $host)) {
return true;
}
}
@@ -77,6 +79,21 @@
}
/**
+ * Check if the given host matches the filter of given host group
+ *
+ * @param string $group
+ * @param IcingaHost $host
+ *
+ * @return bool
+ */
+ private function matchesHostGroupFilter(string $group, IcingaHost $host):
bool
+ {
+ return HostApplyMatches::prepare($host)->matchesFilter(
+ Filter::fromQueryString(IcingaHostGroup::load($group,
$host->getConnection())->get('assign_filter'))
+ );
+ }
+
+ /**
* Whether access to the given hostgroup is allowed
*
* @param IcingaHostGroup $hostgroup
@@ -121,6 +138,11 @@
);
}
+ public function filterRestrictedHostgroups(array $groups)
+ {
+ return array_intersect($groups, $this->listRestrictedHostgroups());
+ }
+
/**
* Apply the restriction to the given Hosts Query
*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Settings.php
new/icingaweb2-module-director-1.11.6/library/Director/Settings.php
--- old/icingaweb2-module-director-1.11.5/library/Director/Settings.php
2025-04-29 12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/library/Director/Settings.php
2026-02-19 13:07:06.000000000 +0100
@@ -22,6 +22,7 @@
'deployment_path_v1' => null,
'activation_script_v1' => null,
'self-service/agent_name' => 'fqdn',
+ 'self-service/agent_version' => 'latest',
'self-service/transform_hostname' => '0',
'self-service/resolve_parent_host' => '0',
'self-service/global_zones' => ['director-global'],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Web/Controller/ObjectController.php
new/icingaweb2-module-director-1.11.6/library/Director/Web/Controller/ObjectController.php
---
old/icingaweb2-module-director-1.11.5/library/Director/Web/Controller/ObjectController.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/Web/Controller/ObjectController.php
2026-02-19 13:07:06.000000000 +0100
@@ -7,6 +7,7 @@
use Icinga\Exception\InvalidPropertyException;
use Icinga\Exception\NotFoundError;
use Icinga\Exception\ProgrammingError;
+use Icinga\Module\Director\Dashboard\Dashlet\DeploymentDashlet;
use Icinga\Module\Director\Data\Db\DbObjectTypeRegistry;
use Icinga\Module\Director\Db\Branch\Branch;
use Icinga\Module\Director\Db\Branch\BranchedObject;
@@ -617,8 +618,21 @@
$info,
$this->Auth(),
$this->api()
- )->handleRequest()
+ )
+ ->callOnSuccess(function () {
+
$this->getResponse()->setHeader('X-Icinga-Extra-Updates', '#col1');
+ })
+ ->handleRequest()
);
+
+ if ((new
DeploymentDashlet($this->db()))->lastDeploymentPending()) {
+ $this->actions()->prependHtml(
+ Hint::warning($this->translate(
+ 'There is an active deployment running, please
wait until it is finished'
+ . ' before creating a new deployment.'
+ ))
+ );
+ }
}
}
} catch (IcingaException $e) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Web/Form/DirectorObjectForm.php
new/icingaweb2-module-director-1.11.6/library/Director/Web/Form/DirectorObjectForm.php
---
old/icingaweb2-module-director-1.11.5/library/Director/Web/Form/DirectorObjectForm.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/Web/Form/DirectorObjectForm.php
2026-02-19 13:07:06.000000000 +0100
@@ -18,11 +18,13 @@
use Icinga\Module\Director\Objects\IcingaTemplateChoice;
use Icinga\Module\Director\Objects\IcingaCommand;
use Icinga\Module\Director\Objects\IcingaObject;
+use Icinga\Module\Director\Resolver\TemplateTree;
use Icinga\Module\Director\Util;
use Icinga\Module\Director\Web\Form\Element\ExtensibleSet;
use Icinga\Module\Director\Web\Form\Validate\NamePattern;
use Zend_Form_Element as ZfElement;
use Zend_Form_Element_Select as ZfSelect;
+use Zend_Validate_Callback;
abstract class DirectorObjectForm extends DirectorForm
{
@@ -553,6 +555,7 @@
'email',
'pager',
'enable_notifications',
+ 'redundancy_group', //Dependencies
'disable_checks', //Dependencies
'disable_notifications',
'ignore_soft_states',
@@ -1283,7 +1286,40 @@
// 'multiOptions' => $this->optionallyAddFromEnum($enum),
'sorted' => true,
'value' => $this->presetImports,
- 'class' => 'autosubmit'
+ 'class' => 'autosubmit',
+ 'validators' => [
+ new Zend_Validate_Callback(function ($value) {
+ $templateTree = new
TemplateTree($this->object->getShortTableName(), $this->getDb());
+ $importsElement = $this->getElement('imports');
+ $objectName = $this->object->getObjectName();
+ if (in_array($objectName, $value, true)) {
+ $importsElement->addErrorMessage(
+ $this->translate('You can not import the same
object into itself, please remove it first')
+ );
+
+ return false;
+ }
+
+ if ($this->object->isTemplate()) {
+ $descendents =
$templateTree->getDescendantsFor($this->object);
+ $loopedImports =
array_intersect($templateTree->getDescendantsFor($this->object), $value);
+ if (! empty($loopedImports)) {
+ $loopedImport = array_slice($loopedImports, 0, 1);
+ array_push($loopedImport, ...$descendents);
+ $importsElement->addErrorMessage(
+ sprintf(
+ $this->translate('Loop detected for
imports: %s'),
+ implode('->', $loopedImports)
+ )
+ );
+
+ return false;
+ }
+ }
+
+ return true;
+ })
+ ]
));
return $this;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Web/Form/Element/DataFilter.php
new/icingaweb2-module-director-1.11.6/library/Director/Web/Form/Element/DataFilter.php
---
old/icingaweb2-module-director-1.11.5/library/Director/Web/Form/Element/DataFilter.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/Web/Form/Element/DataFilter.php
2026-02-19 13:07:06.000000000 +0100
@@ -97,7 +97,7 @@
$this->filter = null;
foreach ($array as $id => $entry) {
$filterId = $this->idToFilterId($id);
- $sub = $this->entryToFilter($entry);
+ $sub = $this->entryToFilter($entry)->setId($filterId);
$this->checkEntryForActions($filterId, $entry);
$parentId = $this->parentIdFor($filterId);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Web/Table/ActivityLogTable.php
new/icingaweb2-module-director-1.11.6/library/Director/Web/Table/ActivityLogTable.php
---
old/icingaweb2-module-director-1.11.5/library/Director/Web/Table/ActivityLogTable.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/Web/Table/ActivityLogTable.php
2026-02-19 13:07:06.000000000 +0100
@@ -212,9 +212,10 @@
if ($type === 'service' || $this->hasObjectFilter) {
$object = "\"$name\"";
} else {
+ $delimiter = $type === 'scheduled_downtime' ? '-' : '';
$object = Link::create(
"\"$name\"",
- 'director/' . str_replace('_', '', $type),
+ 'director/' . str_replace('_', $delimiter, $type),
['name' => $name],
['title' => $this->translate('Jump to this object')]
);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Web/Table/ObjectsTableService.php
new/icingaweb2-module-director-1.11.6/library/Director/Web/Table/ObjectsTableService.php
---
old/icingaweb2-module-director-1.11.5/library/Director/Web/Table/ObjectsTableService.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/Web/Table/ObjectsTableService.php
2026-02-19 13:07:06.000000000 +0100
@@ -198,12 +198,32 @@
['h' => 'icinga_host'],
'o.host_id = h.id',
[]
- )->joinLeft(
- ['hsb' => 'icinga_host_service_blacklist'],
- 'hsb.service_id = o.id AND hsb.host_id = o.host_id',
- []
- )->where('o.service_set_id IS NULL')
- ->group(['o.id', 'h.id','hsb.service_id', 'hsb.host_id'])
+ );
+
+ if ($this->inheritedBy) {
+ $subQuery->joinLeft(
+ ['hi' => 'icinga_host_inheritance'],
+ 'h.id = hi.parent_host_id',
+ []
+ )->joinLeft(
+ ['hc' => 'icinga_host'],
+ 'hi.host_id = hc.id',
+ []
+ )->joinLeft(
+ ['hsb' => 'icinga_host_service_blacklist'],
+ 'hsb.service_id = o.id AND hsb.host_id = hc.id',
+ []
+ )->where('hc.id = ?', $this->inheritedBy->get('id'));
+ } 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');
if ($this->branchUuid) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Web/Tabs/ObjectTabs.php
new/icingaweb2-module-director-1.11.6/library/Director/Web/Tabs/ObjectTabs.php
---
old/icingaweb2-module-director-1.11.5/library/Director/Web/Tabs/ObjectTabs.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/Web/Tabs/ObjectTabs.php
2026-02-19 13:07:06.000000000 +0100
@@ -67,7 +67,8 @@
'label' => $this->translate(ucfirst($type))
]);
}
- if ($object->getShortTableName() === 'host') {
+
+ if ($object->getShortTableName() === 'host' &&
$auth->hasPermission(Permission::SERVICES)) {
$this->add('services', [
'url' => 'director/host/services',
'urlParams' => $params,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/library/Director/Web/Tabs/ObjectsTabs.php
new/icingaweb2-module-director-1.11.6/library/Director/Web/Tabs/ObjectsTabs.php
---
old/icingaweb2-module-director-1.11.5/library/Director/Web/Tabs/ObjectsTabs.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/library/Director/Web/Tabs/ObjectsTabs.php
2026-02-19 13:07:06.000000000 +0100
@@ -65,7 +65,7 @@
if ($object->supportsGroups()) {
$this->add('groups', [
- 'url' => sprintf('director/%sgroups', $typeUrl),
+ 'url' => sprintf('director/%sgroups', $type),
'label' => $this->translate('Groups')
]);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/icingaweb2-module-director-1.11.5/module.info
new/icingaweb2-module-director-1.11.6/module.info
--- old/icingaweb2-module-director-1.11.5/module.info 2025-04-29
12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/module.info 2026-02-19
13:07:06.000000000 +0100
@@ -1,5 +1,5 @@
Name: Icinga Director
-Version: 1.11.5
+Version: 1.11.6
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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/icingaweb2-module-director-1.11.5/register-hooks.php
new/icingaweb2-module-director-1.11.6/register-hooks.php
--- old/icingaweb2-module-director-1.11.5/register-hooks.php 2025-04-29
12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/register-hooks.php 2026-02-19
13:07:06.000000000 +0100
@@ -4,8 +4,8 @@
use Icinga\Module\Director\DataType\DataTypeArray;
use Icinga\Module\Director\DataType\DataTypeBoolean;
use Icinga\Module\Director\DataType\DataTypeDatalist;
-use Icinga\Module\Director\DataType\DataTypeDirectorObject;
use Icinga\Module\Director\DataType\DataTypeDictionary;
+use Icinga\Module\Director\DataType\DataTypeDirectorObject;
use Icinga\Module\Director\DataType\DataTypeNumber;
use Icinga\Module\Director\DataType\DataTypeSqlQuery;
use Icinga\Module\Director\DataType\DataTypeString;
@@ -71,10 +71,11 @@
$this->provideHook('icingadb/icingadbSupport');
$this->provideHook('cube/Actions', CubeLinks::class);
$this->provideHook('cube/IcingaDbActions', IcingaDbCubeLinks::class);
- $this->provideHook('Icingadb/CustomVarRenderer');
- $this->provideHook('Monitoring/CustomVarRenderer');
}
+$this->provideHook('Icingadb/CustomVarRenderer', null, true);
+$this->provideHook('Monitoring/CustomVarRenderer', null, true);
+
$directorHooks = [
'director/DataType' => [
DataTypeArray::class,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/schema/mysql-migrations/upgrade_190.sql
new/icingaweb2-module-director-1.11.6/schema/mysql-migrations/upgrade_190.sql
---
old/icingaweb2-module-director-1.11.5/schema/mysql-migrations/upgrade_190.sql
1970-01-01 01:00:00.000000000 +0100
+++
new/icingaweb2-module-director-1.11.6/schema/mysql-migrations/upgrade_190.sql
2026-02-19 13:07:06.000000000 +0100
@@ -0,0 +1,6 @@
+ALTER TABLE icinga_dependency ADD COLUMN redundancy_group VARCHAR(255) DEFAULT
NULL AFTER parent_service_by_name;
+ALTER TABLE branched_icinga_dependency ADD COLUMN redundancy_group
VARCHAR(255) DEFAULT NULL AFTER parent_service_by_name;
+
+INSERT INTO director_schema_migration
+ (schema_version, migration_time)
+ VALUES (190, NOW());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/schema/mysql-migrations/upgrade_191.sql
new/icingaweb2-module-director-1.11.6/schema/mysql-migrations/upgrade_191.sql
---
old/icingaweb2-module-director-1.11.5/schema/mysql-migrations/upgrade_191.sql
1970-01-01 01:00:00.000000000 +0100
+++
new/icingaweb2-module-director-1.11.6/schema/mysql-migrations/upgrade_191.sql
2026-02-19 13:07:06.000000000 +0100
@@ -0,0 +1,10 @@
+ALTER TABLE director_activity_log
+ MODIFY COLUMN old_properties MEDIUMTEXT DEFAULT NULL COMMENT 'Property hash,
JSON',
+ MODIFY COLUMN new_properties MEDIUMTEXT DEFAULT NULL COMMENT 'Property hash,
JSON';
+
+ALTER TABLE icinga_host_var
+ MODIFY COLUMN varvalue MEDIUMTEXT DEFAULT NULL;
+
+INSERT INTO director_schema_migration
+(schema_version, migration_time)
+VALUES (191, NOW());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/icingaweb2-module-director-1.11.5/schema/mysql.sql
new/icingaweb2-module-director-1.11.6/schema/mysql.sql
--- old/icingaweb2-module-director-1.11.5/schema/mysql.sql 2025-04-29
12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/schema/mysql.sql 2026-02-19
13:07:06.000000000 +0100
@@ -35,8 +35,8 @@
object_type VARCHAR(64) NOT NULL,
object_name VARCHAR(255) NOT NULL,
action_name ENUM('create', 'delete', 'modify') NOT NULL,
- old_properties TEXT DEFAULT NULL COMMENT 'Property hash, JSON',
- new_properties TEXT DEFAULT NULL COMMENT 'Property hash, JSON',
+ old_properties MEDIUMTEXT DEFAULT NULL COMMENT 'Property hash, JSON',
+ new_properties MEDIUMTEXT DEFAULT NULL COMMENT 'Property hash, JSON',
author VARCHAR(64) NOT NULL,
change_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
checksum VARBINARY(20) NOT NULL,
@@ -654,7 +654,7 @@
CREATE TABLE icinga_host_var (
host_id INT(10) UNSIGNED NOT NULL,
varname VARCHAR(255) NOT NULL COLLATE utf8_bin,
- varvalue TEXT DEFAULT NULL,
+ varvalue MEDIUMTEXT DEFAULT NULL,
format enum ('string', 'json', 'expression'), -- immer string vorerst
checksum VARBINARY(20) DEFAULT NULL,
PRIMARY KEY (host_id, varname),
@@ -1774,6 +1774,7 @@
zone_id INT(10) UNSIGNED DEFAULT NULL,
assign_filter TEXT DEFAULT NULL,
parent_service_by_name VARCHAR(255) DEFAULT NULL,
+ redundancy_group VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE INDEX uuid (uuid),
CONSTRAINT icinga_dependency_parent_host
@@ -2431,6 +2432,7 @@
zone VARCHAR(255) DEFAULT NULL,
assign_filter TEXT DEFAULT NULL,
parent_service_by_name VARCHAR(255) DEFAULT NULL,
+ redundancy_group VARCHAR(255) DEFAULT NULL,
imports TEXT DEFAULT NULL,
set_null TEXT DEFAULT NULL,
@@ -2446,4 +2448,4 @@
INSERT INTO director_schema_migration
(schema_version, migration_time)
- VALUES (189, NOW());
+ VALUES (191, NOW());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/schema/pgsql-migrations/upgrade_190.sql
new/icingaweb2-module-director-1.11.6/schema/pgsql-migrations/upgrade_190.sql
---
old/icingaweb2-module-director-1.11.5/schema/pgsql-migrations/upgrade_190.sql
1970-01-01 01:00:00.000000000 +0100
+++
new/icingaweb2-module-director-1.11.6/schema/pgsql-migrations/upgrade_190.sql
2026-02-19 13:07:06.000000000 +0100
@@ -0,0 +1,6 @@
+ALTER TABLE icinga_dependency ADD COLUMN redundancy_group character
varying(255);
+ALTER TABLE branched_icinga_dependency ADD COLUMN redundancy_group character
varying(255);
+
+INSERT INTO director_schema_migration
+ (schema_version, migration_time)
+ VALUES (190, NOW());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/icingaweb2-module-director-1.11.5/schema/pgsql.sql
new/icingaweb2-module-director-1.11.6/schema/pgsql.sql
--- old/icingaweb2-module-director-1.11.5/schema/pgsql.sql 2025-04-29
12:12:06.000000000 +0200
+++ new/icingaweb2-module-director-1.11.6/schema/pgsql.sql 2026-02-19
13:07:06.000000000 +0100
@@ -2059,6 +2059,7 @@
zone_id integer DEFAULT NULL,
assign_filter text DEFAULT NULL,
parent_service_by_name character varying(255),
+ redundancy_group character varying(255),
PRIMARY KEY (id),
CONSTRAINT icinga_dependency_parent_host
FOREIGN KEY (parent_host_id)
@@ -2764,6 +2765,7 @@
zone_id integer DEFAULT NULL,
assign_filter text DEFAULT NULL,
parent_service_by_name character varying(255),
+ redundancy_group character varying(255),
imports TEXT DEFAULT NULL,
set_null TEXT DEFAULT NULL,
@@ -2781,4 +2783,4 @@
INSERT INTO director_schema_migration
(schema_version, migration_time)
- VALUES (189, NOW());
+ VALUES (190, NOW());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/icingaweb2-module-director-1.11.5/test/php/library/Director/IcingaConfig/AssignRendererTest.php
new/icingaweb2-module-director-1.11.6/test/php/library/Director/IcingaConfig/AssignRendererTest.php
---
old/icingaweb2-module-director-1.11.5/test/php/library/Director/IcingaConfig/AssignRendererTest.php
2025-04-29 12:12:06.000000000 +0200
+++
new/icingaweb2-module-director-1.11.6/test/php/library/Director/IcingaConfig/AssignRendererTest.php
2026-02-19 13:07:06.000000000 +0100
@@ -93,6 +93,15 @@
$expected,
$this->renderer($string)->renderAssign()
);
+
+ $string = json_encode('member*') . '=host.vars.some_array';
+
+ $expected = 'assign where match("member*", host.vars.some_array,
MatchAny)';
+
+ $this->assertEquals(
+ $expected,
+ $this->renderer($string)->renderAssign()
+ );
}
public function testInArrayIsRenderedCorrectly()