Hello, I want to use assign_where in our icinga2 when create HostGroup by REST API by ansible uri tasks. But seems it’s not supported. It works by static configure as below shows. So my question is does icinga2 version: 2.13.2-1 support assign conditions in REST API for hostgroup? Any official document clarify this?
icinga2 statis config works
object Host “Rocky8 (with icinga2 predeployed)” {
import “generic-host”
zone = “test_usmidet”
address = “10.192.230.10”
groups = [“icinga_mas”, “plcyf”]
}
object HostGroup “icinga_mas” {
display_name = “icinga_mas”
assign where host.groups.contains(“icinga_mas”)
}
object HostGroup “plcyf” {
display_name = “plcyf”
assign where host.groups.contains(“plcyf”)
}
REST api for creating HostGroup doesn’t work:
-
name: collect_HostGroup_yml_update_icinga2_hostgroup
uri:
use_proxy: false
url: “https://{{ icinga.ip }}:{{ icinga.port }}/v1/objects/hostgroups/{{ item }}”
method: “{{ ‘PUT’ if hostgroup_check.results[loop_index].status == 404 else ‘POST’ }}”
user: “{{ icinga.api_user }}”
password: “{{ icinga.api_password }}”
force_basic_auth: yes
validate_certs: false
body_format: json
status_code: [200, 201]
return_content: yes
headers:
Content-Type: "application/json" Accept: "application/json"body:
attrs: display_name: "{{ item }}" \# assign_where: "host.groups.contains(\\"{{ item }}\\")"loop: “{{ group_names | unique }}”
loop_control:
index_var: loop_index
register: api_result
when:
-
group_names is defined and group_names | length > 0
-
hostgroup_check is defined
+++++++++++++++++++++++++++++++++++++++++++++++++++
-
- Version used (
icinga2 --version) 2.13.2-1 - Operating System and version Rocky Linux release 8.9
- Enabled features (
icinga2 feature list) api checker icingadb ido-mysql mainlog notification syslog - Icinga Web 2 version and modules (System - About) not installed
- Config validation (
icinga2 daemon -C)
[root@localhost ~]# icinga2 daemon -C
[2025-12-16 03:34:05 +0000] information/cli: Icinga application loader (version: 2.13.2-1)
[2025-12-16 03:34:05 +0000] information/cli: Loading configuration file(s).
[2025-12-16 03:34:05 +0000] information/ConfigItem: Committing config item(s).
[2025-12-16 03:34:05 +0000] information/ApiListener: My API identity: localhost.localdomain
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 SyslogLogger.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 NotificationComponent.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 IdoMysqlConnection.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 CheckerComponent.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 User.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 UserGroup.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 3 ServiceGroups.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 3 TimePeriods.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 753 Services.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 3 Zones.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 ScheduledDowntime.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 2 NotificationCommands.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 4 HostGroups.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 12 Notifications.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 Downtime.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 IcingaApplication.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 450 Hosts.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 Endpoint.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 IcingaDB.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 FileLogger.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 3 ApiUsers.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 256 CheckCommands.
[2025-12-16 03:34:06 +0000] information/ConfigItem: Instantiated 1 ApiListener.
[2025-12-16 03:34:06 +0000] information/ScriptGlobal: Dumping variables to file ‘/var/cache/icinga2/icinga2.vars’
[2025-12-16 03:34:06 +0000] information/cli: Finished validating the configuration file(s). - If you run multiple Icinga 2 instances, the
zones.conffile (oricinga2 object list --type Endpointandicinga2 object list --type Zone) from all affected nodes
[root@localhost ~]# icinga2 object list --type Endpoint
Object ‘localhost.localdomain’ of type ‘Endpoint’:
% declared in ‘/etc/icinga2/zones.conf’, lines 4:1-4:39
-
__name = “localhost.localdomain”
-
host = “”
-
log_duration = 86400
-
name = “localhost.localdomain”
-
package = “_etc”
-
port = “5665”
-
source_location
- first_column = 1
- first_line = 4
- last_column = 39
- last_line = 4
- path = “/etc/icinga2/zones.conf”
-
templates = [ “localhost.localdomain” ]
% = modified in ‘/etc/icinga2/zones.conf’, lines 4:1-4:39 -
type = “Endpoint”
-
zone = “”
[root@localhost ~]# icinga2 object list --type Zone
Object ‘test_usmidet’ of type ‘Zone’:
% declared in ‘/etc/icinga2/zones.conf’, lines 7:1-7:26- __name = “test_usmidet”
- endpoints = [ “localhost.localdomain” ]
% = modified in ‘/etc/icinga2/zones.conf’, lines 8:3-8:41 - global = false
- name = “test_usmidet”
- package = “_etc”
- parent = “”
- source_location
- first_column = 1
- first_line = 7
- last_column = 26
- last_line = 7
- path = “/etc/icinga2/zones.conf”
- templates = [ “test_usmidet” ]
% = modified in ‘/etc/icinga2/zones.conf’, lines 7:1-7:26 - type = “Zone”
- zone = “”
Object ‘global-templates’ of type ‘Zone’:
% declared in ‘/etc/icinga2/zones.conf’, lines 11:1-11:30- __name = “global-templates”
- endpoints = null
- global = true
% = modified in ‘/etc/icinga2/zones.conf’, lines 12:9-12:21 - name = “global-templates”
- package = “_etc”
- parent = “”
- source_location
- first_column = 1
- first_line = 11
- last_column = 30
- last_line = 11
- path = “/etc/icinga2/zones.conf”
- templates = [ “global-templates” ]
% = modified in ‘/etc/icinga2/zones.conf’, lines 11:1-11:30 - type = “Zone”
- zone = “”
Object ‘director-global’ of type ‘Zone’:
% declared in ‘/etc/icinga2/zones.conf’, lines 15:1-15:29- __name = “director-global”
- endpoints = null
- global = true
% = modified in ‘/etc/icinga2/zones.conf’, lines 16:9-16:21 - name = “director-global”
- package = “_etc”
- parent = “”
- source_location
- first_column = 1
- first_line = 15
- last_column = 29
- last_line = 15
- path = “/etc/icinga2/zones.conf”
- templates = [ “director-global” ]
% = modified in ‘/etc/icinga2/zones.conf’, lines 15:1-15:29 - type = “Zone”
- zone = “”