Ad Widget

Collapse

unlink template через API

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • thund3r
    Junior Member
    • Mar 2017
    • 14

    #1

    unlink template через API

    Помогите, пожалуйста, уже всю голову сломал

    Пробую c помощью метода host.massremove {hostids=13579}, {templateids=3423)} удалить привязку с хоста.

    Выдает ошибку:

    Code:
    Response Body: {
        "jsonrpc": "2.0",
        "id": 2,
        "error": {
            "message": "Application error.",
            "code": -32500,
            "data": "No permissions to referred object or it does not exist!"
        }
    }
    Проверял есть хост с этим hostid и на нем есть шаблон с нужным id.
    Last edited by thund3r; 11-04-2017, 18:04.
  • yukra
    Senior Member
    • Apr 2013
    • 1359

    #2
    Originally posted by thund3r
    Проверял есть хост с этим hostid и на нем есть шаблон с нужным id.
    Права то есть у пользователя, которым в api логинитесь? Исходный запрос специально не показываете что б нам сложнее угадывать было?

    Comment

    • thund3r
      Junior Member
      • Mar 2017
      • 14

      #3
      Думал, что описание реализации будет загромаждать...
      Тайны нет... Написал на pythone через zapi библиотеку
      Code:
      zapi.host.massremove(hostids=host_id, templateids=template_id)
      Причем посмотрел на реализацию у ребят с проекта на гите - точно также сделано.
      Запускаю с помощью их скрипта zhtmplunlink.py та же ошибка.

      Хотя Если делать на этом же хосте unlink через веб - все прекрасно работает.

      Пока сделал через костыль:
      Code:
      zapi.host.update(hostid=host_id, templates=13630)
      т.е. просто меняю все привязанные шаблоны на специально созданный пустой шаблон. Этот код прописан точно в том же месте, что и предыдущая команда. На это прав хватает
      Если что-то упустил... Скажите - дополню.

      Comment

      • yukra
        Senior Member
        • Apr 2013
        • 1359

        #4
        думаю вам следует включить debug в zapi, посмотреть какой запрос генерируется из вашего кода.

        А так могу предположить следующее: hostids и templateids судя по документации должны быть строкой или массивом. У вас скорей всего в обоих параметрах по одному числу, и zapi передает их как число (просто условные 123), а нужно передавать как строку (те же "123", но в кавычках).
        Но это самое первое, что приходит на ум, вполне возможно я ошибаюсь, с zapi никогда не работал.

        Comment

        • thund3r
          Junior Member
          • Mar 2017
          • 14

          #5
          Code:
          test = zapi.host.massremove(hostids=13579, templateids=10106)
          Code:
          JSON-RPC Server Endpoint: http://127.0.0.1/zabbix//api_jsonrpc.php
          Sending: {
              "params": {
                  "password": "zabbix",
                  "user": "some"
              },
              "jsonrpc": "2.0",
              "method": "user.login",
              "id": 0
          }
          Response Code: 200
          Response Body: {
              "jsonrpc": "2.0",
              "result": "3e82a558a6e4383af2a93b2951593574",
              "id": 0
          }
          Sending: {
              "params": {},
              "jsonrpc": "2.0",
              "method": "apiinfo.version",
              "id": 1
          }
          Response Code: 200
          Response Body: {
              "jsonrpc": "2.0",
              "result": "3.2.4",
              "id": 1
          }
          Sending: {
              "params": {
                  "hostids": 13579,
                  "templateids": 10106
              },
              "jsonrpc": "2.0",
              "method": "host.massremove",
              "auth": "3e82a558a6e4383af2a93b2951593574",
              "id": 2
          }
          Response Code: 200
          Response Body: {
              "jsonrpc": "2.0",
              "id": 2,
              "error": {
                  "message": "Application error.",
                  "code": -32500,
                  "data": "No permissions to referred object or it does not exist!"
              }
          }
          Traceback (most recent call last):
            File "./host_change", line 37, in <module>
              test = zapi.host.massremove(hostids=13579, templateids=10106)
            File "/usr/local/lib/python2.7/dist-packages/pyzabbix/__init__.py", line 157, in fn
              args or kwargs
            File "/usr/local/lib/python2.7/dist-packages/pyzabbix/__init__.py", line 134, in do_request
              raise ZabbixAPIException(msg, response_json['error']['code'])
          pyzabbix.ZabbixAPIException: (u'Error -32500: Application error., No permissions to referred object or it does not exist!', -32500)
          C кавычками тоже самое
          Code:
          test = zapi.host.massremove(hostids="13579", templateids="10106")
          Code:
          JSON-RPC Server Endpoint: http://127.0.0.1/zabbix//api_jsonrpc.php
          Sending: {
              "params": {
                  "password": "zabbix",
                  "user": "some"
              },
              "jsonrpc": "2.0",
              "method": "user.login",
              "id": 0
          }
          Response Code: 200
          Response Body: {
              "jsonrpc": "2.0",
              "result": "307a86e8dcf2e8a6104f0009c4e494c8",
              "id": 0
          }
          Sending: {
              "params": {},
              "jsonrpc": "2.0",
              "method": "apiinfo.version",
              "id": 1
          }
          Response Code: 200
          Response Body: {
              "jsonrpc": "2.0",
              "result": "3.2.4",
              "id": 1
          }
          Sending: {
              "params": {
                  "hostids": "13579",
                  "templateids": "10106"
              },
              "jsonrpc": "2.0",
              "method": "host.massremove",
              "auth": "307a86e8dcf2e8a6104f0009c4e494c8",
              "id": 2
          }
          Response Code: 200
          Response Body: {
              "jsonrpc": "2.0",
              "id": 2,
              "error": {
                  "message": "Application error.",
                  "code": -32500,
                  "data": "No permissions to referred object or it does not exist!"
              }
          }
          Traceback (most recent call last):
            File "./host_change", line 37, in <module>
              test = zapi.host.massremove(hostids="13579", templateids="10106")
            File "/usr/local/lib/python2.7/dist-packages/pyzabbix/__init__.py", line 157, in fn
              args or kwargs
            File "/usr/local/lib/python2.7/dist-packages/pyzabbix/__init__.py", line 134, in do_request
              raise ZabbixAPIException(msg, response_json['error']['code'])
          pyzabbix.ZabbixAPIException: (u'Error -32500: Application error., No permissions to referred object or it does not exist!', -32500)
          Ничего особенного не видно.

          Спасибо.
          Last edited by thund3r; 12-04-2017, 13:13. Reason: Нашел нужное

          Comment

          • yukra
            Senior Member
            • Apr 2013
            • 1359

            #6
            Originally posted by thund3r
            ...
            Ничего особенного не видно.

            Спасибо.
            Code:
            [root@zabbix ~]# ./test 
            ** POST https://zabbix.local/zabbix/api_jsonrpc.php ==> 200 OK
            Request: In JSON format:
            {"params":{"password":"PASSWORD","user":"USER"},"jsonrpc":"2.0","id":0,"method":"user.login"}
            ** POST https://zabbix.local/zabbix/api_jsonrpc.php ==> 200 OK
            Decoded content from POST:
            {"jsonrpc":"2.0","id":0,"result":"2c55a384dbc21aac829bd05f57ae53fa"}
            Got auth token=2c55a384dbc21aac829bd05f57ae53fa
            Request: In JSON format:
            {"auth":"2c55a384dbc21aac829bd05f57ae53fa","params":{"templateids":"10104","hostids":"10845"},"jsonrpc":"2.0","id":1,"method":"host.massremove"}
            ** POST https://zabbix.local/zabbix/api_jsonrpc.php ==> 200 OK
            Decoded content from POST:
            {"jsonrpc":"2.0","error":{"data":"No permissions to referred object or it does not exist!","message":"Application error.","code":-32500},"id":1}
            Error received from server in reply to JSON request: No permissions to referred object or it does not exist!
            Use of uninitialized value $c in concatenation (.) or string at ./groupHostCont line 41.
            
            [root@zabbix ~]# ./test 
            ** POST https://zabbix.local/zabbix/api_jsonrpc.php ==> 200 OK
            Request: In JSON format:
            {"params":{"password":"PASSWORD","user":"USER"},"jsonrpc":"2.0","id":0,"method":"user.login"}
            ** POST https://zabbix.local/zabbix/api_jsonrpc.php ==> 200 OK
            Decoded content from POST:
            {"jsonrpc":"2.0","id":0,"result":"fab930d54687de0aeb70266dd5c460a5"}
            Got auth token=fab930d54687de0aeb70266dd5c460a5
            Request: In JSON format:
            {"auth":"fab930d54687de0aeb70266dd5c460a5","params":{"templateids":["10104"],"hostids":["10845"]},"jsonrpc":"2.0","id":1,"method":"host.massremove"}
            ** POST https://zabbix.local/zabbix/api_jsonrpc.php ==> 200 OK
            Decoded content from POST:
            {"jsonrpc":"2.0","id":1,"result":{"hostids":["10845"]}}
            HASH(0x1a106c8)
            [root@zabbix ~]#
            Мое php оставляет желать лучшего, но я слегка потыкал в скрипты и выяснил что если обернуть параметры templateids и hostids в массив, то все работает.
            А ставить на боевой сервер дебагер мне не хочется

            Comment

            • thund3r
              Junior Member
              • Mar 2017
              • 14

              #7
              Большое СПАСИБО! Заработало!
              Почему-то не подумал, что может быть список в JSON орфографии

              Конечный вариант:

              Code:
              zapi.host.massremove(hostids=[host_id], templateids=[temp_id])
              Вопрос решен! Можно закрывать!
              Last edited by thund3r; 13-04-2017, 15:38. Reason: Вопрос решен! Можно закрывать!

              Comment

              Working...