[ZBX-9286] Cannot perform "configuration.import" when host and trigger have a user macro Created: 2015 Feb 05  Updated: 2017 May 30  Resolved: 2015 Feb 25

Status: Closed
Project: ZABBIX BUGS AND ISSUES
Component/s: API (A)
Affects Version/s: 2.4.3
Fix Version/s: 2.4.5rc1, 2.5.0

Type: Incident report Priority: Blocker
Reporter: Oleksii Zagorskyi Assignee: Unassigned
Resolution: Fixed Votes: 1
Labels: import, macros, regression
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Duplicate

 Description   

See comments



 Comments   
Comment by Oleksii Zagorskyi [ 2015 Feb 05 ]

It's regression, as it's not reproducible on latest 2.2

To reproduce:

  • have a host/template with 1 trigger, 1 item, 1 usermacro.
  • export it using "configuration.export" method.
    {
        "jsonrpc": "2.0",
        "method": "configuration.export",
        "params": {
            "options": {
                "templates": [
                    "10152"
                ]
            },
            "format": "xml"
        },
        "auth": "148de878253589e93ca25b3c47a89801",
        "id": 1
    }
    
  • import then using
    {"jsonrpc": "2.0", "method": "configuration.import",
     "params": { "rules": {
     "templates": { "createMissing": true, "updateExisting": true },
     "items": {"createMissing": true, "updateExisting": true },
     "triggers": {"createMissing": true, "updateExisting": true },
     "groups": {"createMissing": true, "updateExisting": true} },
     "format": "xml",
     "source": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zabbix_export><version>2.0<\/version><date>2015-02-05T14:17:41Z<\/date><groups><group><name>Templates<\/name><\/group><\/groups><templates><template><template>Templ_test<\/template><name>Templ_test<\/name><description\/><groups><group><name>Templates<\/name><\/group><\/groups><applications\/><items><item><name>Test_item<\/name><type>0<\/type><snmp_community\/><multiplier>0<\/multiplier><snmp_oid\/><key>test<\/key><delay>180<\/delay><history>3<\/history><trends>365<\/trends><status>0<\/status><value_type>4<\/value_type><allowed_hosts\/><units\/><delta>0<\/delta><snmpv3_contextname\/><snmpv3_securityname\/><snmpv3_securitylevel>0<\/snmpv3_securitylevel><snmpv3_authprotocol>0<\/snmpv3_authprotocol><snmpv3_authpassphrase\/><snmpv3_privprotocol>0<\/snmpv3_privprotocol><snmpv3_privpassphrase\/><formula>1<\/formula><delay_flex\/><params\/><ipmi_sensor\/><data_type>0<\/data_type><authtype>0<\/authtype><username\/><password\/><publickey\/><privatekey\/><port\/><description\/><inventory_link>0<\/inventory_link><applications\/><valuemap\/><logtimefmt\/><\/item><\/items><discovery_rules\/><macros><macro><macro>{$TEST_MACRO}<\/macro><value>anythyng<\/value><\/macro><\/macros><templates\/><screens\/><\/template><\/templates><triggers><trigger><expression>{Templ_test:test.last()}={$TEST_MACRO}<\/expression><name>Test_trigger<\/name><url\/><status>0<\/status><priority>2<\/priority><description\/><type>0<\/type><dependencies\/><\/trigger><\/triggers><\/zabbix_export>"},
     "auth": "148de878253589e93ca25b3c47a89801",
     "id": 1 }
    

If the host/template doesn't exist - it (creation) will be success.
But if it does already exist (update existing) - you will get this error:

{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"Trigger \"Test_trigger\" already exists on \"Templ_test\".","debug":[{"file":"\/zab\/www-dev\/2.4\/include\/classes\/api\/services\/CTriggerGeneral.php","line":283,"function":"exception","class":"CApiService","type":"::","args":[100,"Trigger \"Test_trigger\" already exists on \"Templ_test\"."]},{"file":"\/zab\/www-dev\/2.4\/include\/classes\/api\/services\/CTrigger.php","line":695,"function":"checkIfExistsOnHost","class":"CTriggerGeneral","type":"->","args":[{"expression":"{Templ_test:test.last()}={$TEST_MACRO}","url":"","status":"0","priority":"2","type":"0","comments":"","description":"Test_trigger","parsedExpressions":[{"host":"Templ_test","item":"test"}]}]},{"file":"\/zab\/www-dev\/2.4\/include\/classes\/api\/services\/CTrigger.php","line":712,"function":"checkInput","class<span class="code-quote">":"CTrigger","type":"->","args":[[{"expression":"{Templ_test:test.last()}={$TEST_MACRO}","url":"","status":"0","priority":"2","type":"0","comments":"","description":"Test_trigger","parsedExpressions":[{"host":"Templ_test","item":"test"}],"value":0}],"create"]},{"file":"\/zab\/www-dev\/2.4\/include\/classes\/import\/CConfigurationImport.php","line":1268,"function":"create","class<span class="code-quote">":"CTrigger","type":"->","args":[[{"expression":"{Templ_test:test.last()}={$TEST_MACRO}","url":"","status":"0","priority":"2","type":"0","comments":"","description":"Test_trigger","parsedExpressions":[{"host":"Templ_test","item":"test"}]}]]},{"file":"\/zab\/www-dev\/2.4\/include\/classes\/import\/CConfigurationImport.php","line":181,"function":"processTriggers","class<span class="code-quote">":"CConfigurationImport","type":"->","args":[]},{"file":"\/zab\/www-dev\/2.4\/include\/classes\/api\/services\/CConfiguration.php","line":86,"function":"import","class<span class="code-quote">":"CConfigurationImport","type":"->","args":[]},{"function":"import","class<span class="code-quote">":"CConfiguration","type":"->","args":[{"rules":{"templates":{"createMissing":true,"updateExisting":true},"items":{"createMissing":true,"updateExisting":true},"triggers":{"createMissing":true,"updateExisting":true},"groups":{"createMissing":true,"updateExisting":true}},"format":"xml","source":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zabbix_export><version>2.0<\/version><date>2015-02-05T14:17:41Z<\/date><groups><group><name>Templates<\/name><\/group><\/groups><templates><template><template>Templ_test<\/template><name>Templ_test<\/name><description\/><groups><group><name>Templates<\/name><\/group><\/groups><applications\/><items><item><name>Test_item<\/name><type>0<\/type><snmp_community\/><multiplier>0<\/multiplier><snmp_oid\/><key>test<\/key><delay>180<\/delay><history>3<\/history><trends>365<\/trends><status>0<\/status><value_type>4<\/value_type><allowed_hosts\/><units\/><delta>0<\/delta><snmpv3_contextname\/><snmpv3_securityname\/><snmpv3_securitylevel>0<\/snmpv3_securitylevel><snmpv3_authprotocol>0<\/snmpv3_authprotocol><snmpv3_authpassphrase\/><snmpv3_privprotocol>0<\/snmpv3_privprotocol><snmpv3_privpassphrase\/><formula>1<\/formula><delay_flex\/><params\/><ipmi_sensor\/><data_type>0<\/data_type><authtype>0<\/authtype><username\/><password\/><publickey\/><privatekey\/><port\/><description\/><inventory_link>0<\/inventory_link><applications\/><valuemap\/><logtimefmt\/><\/item><\/items><discovery_rules\/><macros><macro><macro>{$TEST_MACRO}<\/macro><value>anythyng<\/value><\/macro><\/macros><templates\/><screens\/><\/template><\/templates><triggers><trigger><expression>{Templ_test:test.last()}={$TEST_MACRO}<\/expression><name>Test_trigger<\/name><url\/><status>0<\/status><priority>2<\/priority><description\/><type>0<\/type><dependencies\/><\/trigger><\/triggers><\/zabbix_export>"}]},{"file":"\/zab\/www-dev\/2.4\/include\/classes\/api\/clients\/CLocalApiClient.php","line":103,"function":"call_user_func_array","args":[[{},"import"],[{"rules":{"templates":{"createMissing":true,"updateExisting":true},"items":{"createMissing":true,"updateExisting":true},"triggers":{"createMissing":true,"updateExisting":true},"groups":{"createMissing":true,"updateExisting":true}},"format":"xml","source":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zabbix_export><version>2.0<\/version><date>2015-02-05T14:17:41Z<\/date><groups><group><name>Templates<\/name><\/group><\/groups><templates><template><template>Templ_test<\/template><name>Templ_test<\/name><description\/><groups><group><name>Templates<\/name><\/group><\/groups><applications\/><items><item><name>Test_item<\/name><type>0<\/type><snmp_community\/><multiplier>0<\/multiplier><snmp_oid\/><key>test<\/key><delay>180<\/delay><history>3<\/history><trends>365<\/trends><status>0<\/status><value_type>4<\/value_type><allowed_hosts\/><units\/><delta>0<\/delta><snmpv3_contextname\/><snmpv3_securityname\/><snmpv3_securitylevel>0<\/snmpv3_securitylevel><snmpv3_authprotocol>0<\/snmpv3_authprotocol><snmpv3_authpassphrase\/><snmpv3_privprotocol>0<\/snmpv3_privprotocol><snmpv3_privpassphrase\/><formula>1<\/formula><delay_flex\/><params\/><ipmi_sensor\/><data_type>0<\/data_type><authtype>0<\/authtype><username\/><password\/><publickey\/><privatekey\/><port\/><description\/><inventory_link>0<\/inventory_link><applications\/><valuemap\/><logtimefmt\/><\/item><\/items><discovery_rules\/><macros><macro><macro>{$TEST_MACRO}<\/macro><value>anythyng<\/value><\/macro><\/macros><templates\/><screens\/><\/template><\/templates><triggers><trigger><expression>{Templ_test:test.last()}={$TEST_MACRO}<\/expression><name>Test_trigger<\/name><url\/><status>0<\/status><priority>2<\/priority><description\/><type>0<\/type><dependencies\/><\/trigger><\/triggers><\/zabbix_export>"}]]},{"file":"\/zab\/www-dev\/2.4\/include\/classes\/core\/CJsonRpc.php","line":70,"function":"callMethod","class<span class="code-quote">":"CLocalApiClient","type":"->","args":["configuration","import",{"rules":{"templates":{"createMissing":true,"updateExisting":true},"items":{"createMissing":true,"updateExisting":true},"triggers":{"createMissing":true,"updateExisting":true},"groups":{"createMissing":true,"updateExisting":true}},"format":"xml","source":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zabbix_export><version>2.0<\/version><date>2015-02-05T14:17:41Z<\/date><groups><group><name>Templates<\/name><\/group><\/groups><templates><template><template>Templ_test<\/template><name>Templ_test<\/name><description\/><groups><group><name>Templates<\/name><\/group><\/groups><applications\/><items><item><name>Test_item<\/name><type>0<\/type><snmp_community\/><multiplier>0<\/multiplier><snmp_oid\/><key>test<\/key><delay>180<\/delay><history>3<\/history><trends>365<\/trends><status>0<\/status><value_type>4<\/value_type><allowed_hosts\/><units\/><delta>0<\/delta><snmpv3_contextname\/><snmpv3_securityname\/><snmpv3_securitylevel>0<\/snmpv3_securitylevel><snmpv3_authprotocol>0<\/snmpv3_authprotocol><snmpv3_authpassphrase\/><snmpv3_privprotocol>0<\/snmpv3_privprotocol><snmpv3_privpassphrase\/><formula>1<\/formula><delay_flex\/><params\/><ipmi_sensor\/><data_type>0<\/data_type><authtype>0<\/authtype><username\/><password\/><publickey\/><privatekey\/><port\/><description\/><inventory_link>0<\/inventory_link><applications\/><valuemap\/><logtimefmt\/><\/item><\/items><discovery_rules\/><macros><macro><macro>{$TEST_MACRO}<\/macro><value>anythyng<\/value><\/macro><\/macros><templates\/><screens\/><\/template><\/templates><triggers><trigger><expression>{Templ_test:test.last()}={$TEST_MACRO}<\/expression><name>Test_trigger<\/name><url\/><status>0<\/status><priority>2<\/priority><description\/><type>0<\/type><dependencies\/><\/trigger><\/triggers><\/zabbix_export>"},"148de878253589e93ca25b3c47a89801"]},{"file":"\/zab\/www-dev\/2.4\/api_jsonrpc.php","line":63,"function":"execute","class<span class="code-quote">":"CJsonRpc","type":"->","args":[]}]},"id":1}

Problem probably is that the macro is expanded in the expression at some point (before existence check) and API suppose that this is new trigger and mistakenly tries to create new one with the same expression.

Simple "Templ_test" template is attached to this issue.

Comment by Oleg Egorov (Inactive) [ 2015 Feb 10 ]

(1) No string changes

sasha CLOSED

Comment by Oleg Egorov (Inactive) [ 2015 Feb 10 ]

Fixed in svn://svn.zabbix.com/branches/dev/ZBX-9286 r52133

Comment by Oleg Egorov (Inactive) [ 2015 Feb 25 ]

FIXED IN 2.4.5rc1 r52381, 2.5.0(trunk) r52382
CLOSED

Generated at Fri Mar 29 04:15:21 EET 2024 using Jira 9.12.4#9120004-sha1:625303b708afdb767e17cb2838290c41888e9ff0.