Skip to end of metadata
Go to start of metadata

для тестов будем пользоваться утилитой httpie уж больно приятный код она показывает.

считаем что в базе у нас есть устройство с именем GW и селектор my. под селектор my подпадает 2 устройства GW и GW-2

Для начала настроим сам mrt.

получается что при вызове mrt с именем get_config реально будет выполнятся map script get_config

давайте попробуем:

[testserver] # http --json --auth admin:admin POST http://noc-server/sa/mrt/get_config/ selector=GW
HTTP/1.1 202 ACCEPTED
Server: nginx/0.7.67
Date: Thu, 12 Apr 2012 16:52:19 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Language, Cookie
Location: http://noc-server/sa/mrt/get_config/583/
Content-Language: en-us
Cache-Control: no-cache, must-revalidate
Content-Length: 0

отработал. Результат будет не сразу. ведь активатору нужно отработать. за результатом нас приглашают по ссылке указанной в location.при чем как видно из запроса мы так же должны указать selector. в данном примере я выставляю его в название устройства, таким образом задание будет сформировано только для одного конкретного устройства

если попробовать сходить по ссылке указанной в  location нам отдадут вполне уже результат 

[testserver] # http --json --auth admin:admin GET http://noc-server/sa/mrt/get_config/583/
HTTP/1.1 200 OK
Server: nginx/0.7.67
Date: Thu, 12 Apr 2012 16:52:24 GMT
Content-Type: text/json; charset=utf-8
Connection: keep-alive
Vary: Accept-Language, Cookie
Content-Language: en-us
Cache-Control: no-cache, must-revalidate
Content-Length: 360

а так же json ради которого все затевалось

{
    "max_timeout": 0,
    "progress": 100,
    "ready": true,
    "result": [
        {
            "object_id": "2",
            "object_name": "GW",
            "result": "\nD-Link Firewall 2.27.00.14-14093  \nCopyright Clavister 1996-2010. All rights reserved\nQuickSec SSHIPSECPM version 2.1 library 2.1\nCopyright 1997-2003 SafeNet Inc\nBuild : May 25 2010\n\n\n",
            "script": "DLink.DFL.get_config",
            "status": true
        }
    ]
}

если же в качестве селектора отдать реальный селектор все слегка меняется

[testserver]  # http --json --auth admin:admin POST http://noc-server/sa/mrt/get_config/ selector=@my
HTTP/1.1 202 ACCEPTED
Server: nginx/0.7.67
Date: Thu, 12 Apr 2012 16:46:55 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Language, Cookie
Location: http://noc-server/sa/mrt/get_config/582/
Content-Language: en-us
Cache-Control: no-cache, must-revalidate
Content-Length: 0

во первых запрос может отработать слегка дольше благодаря чему мы можем поймать промежуточный результат:

[testserver] # http --json --auth admin:admin GET http://noc-server/sa/mrt/get_config/582/
HTTP/1.1 200 OK
Server: nginx/0.7.67
Date: Thu, 12 Apr 2012 16:46:58 GMT
Content-Type: text/json; charset=utf-8
Connection: keep-alive
Vary: Accept-Language, Cookie
Content-Language: en-us
Cache-Control: no-cache, must-revalidate
Content-Length: 65

{
    "max_timeout": 0,
    "progress": 0,
    "ready": false,
    "result": null
}

во вторых, когда все уже отработает, ответ от сервера будет другим:

[testserver] # http --json --auth admin:admin GET http://noc-server/sa/mrt/get_config/582/
HTTP/1.1 200 OK
Server: nginx/0.7.67
Date: Thu, 12 Apr 2012 16:47:00 GMT
Content-Type: text/json; charset=utf-8
Connection: keep-alive
Vary: Accept-Language, Cookie
Content-Language: en-us
Cache-Control: no-cache, must-revalidate
Content-Length: 660

вот как то так

{
    "max_timeout": 0,
    "progress": 100,
    "ready": true,
    "result": [
        {
            "object_id": "4",
            "object_name": "GW-2",
            "result": "\nD-Link Firewall 2.27.00.14-14093  \nCopyright Clavister 1996-2010. All rights reserved\nQuickSec SSHIPSECPM version 2.1 library 2.1\nCopyright 1997-2003 SafeNet Inc\nBuild : May 25 2010\n\n\n",
            "script": "DLink.DFL.get_config",
            "status": true
        },
        {
            "object_id": "2",
            "object_name": "GW",
            "result": "\nD-Link Firewall 2.27.00.14-14093  \nCopyright Clavister 1996-2010. All rights reserved\nQuickSec SSHIPSECPM version 2.1 library 2.1\nCopyright 1997-2003 SafeNet Inc\nBuild : May 25 2010\n\n\n",
            "script": "DLink.DFL.get_config",
            "status": true
        }
    ]
}
Как в MRT передать параметр

использовать параметр "map_args": {"address": "127.0.0.1"} в Скрипте это будет скорее всего вот так

[testserver]  # http --json --auth admin:admin POST http://noc-server/sa/mrt/get_config/ selector=GW map_args:=@my.jsqon
...
{
    "map_args": {
        "ap_id": "2211.128", 
        "lag_id": "18"
    }, 
    "selector": "GW"
}

при этом надо создать файл с содержимым параметров.

можно проще

[testserver]  # http --json --auth admin:admin POST http://noc-server/sa/mrt/get_config/ selector=GW  map_args:='{"ap_id":"2211.129", "lag_id":"18"}'
...
{
    "map_args": {
        "ap_id": "2211.128", 
        "lag_id": "18"
    }, 
    "selector": "GW"
}

 

Сложный пример

[desktop] 10:17:30 /tmp % http --print bBhH --json --auth user:pass POST https://noc-server/sa/mrt/create_sap/ selector=GW map_args:='{"ap_id":"2211.130", "lag_id":"18"}'
POST /sa/mrt/create_sap/ HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, compress
Authorization: Basic hidden==
Content-Length: 89
Content-Type: application/json; charset=utf-8
Host: noc-server
User-Agent: HTTPie/0.8.0

{
    "map_args": {
        "ap_id": "2211.130", 
        "lag_id": "18"
    }, 
    "selector": "GW"
}

HTTP/1.1 202 ACCEPTED
Cache-Control: no-cache
Connection: keep-alive
Content-Language: en-us
Content-Length: 0
Content-Type: text/html; charset=utf-8
Date: Fri, 03 Apr 2015 05:17:43 GMT
Expires: 0
Location: https://noc-server/sa/mrt/create_sap/29419652/
Pragma: no-cache
Server: nginx/1.6.2
Vary: Accept-Language, Cookie



[desktop] 10:17:45 /tmp % http --print bBhH --json --auth user:pass GET https://noc-server/sa/mrt/create_sap/29419652/                                                         
GET /sa/mrt/create_sap/29419652/ HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, compress
Authorization: Basic hidden==
Content-Type: application/json; charset=utf-8
Host: noc-server
User-Agent: HTTPie/0.8.0



HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: keep-alive
Content-Language: en-us
Content-Length: 258
Content-Security-Policy-Report-Only: default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report
Content-Type: text/json; charset=utf-8
Date: Fri, 03 Apr 2015 05:17:58 GMT
Expires: 0
Pragma: no-cache
Server: nginx/1.6.2
Strict-Transport-Security: max-age=31536000
Vary: Accept-Language, Cookie

{
    "max_timeout": 0, 
    "progress": 100, 
    "ready": true, 
    "result": [
        {
            "object_id": "1486", 
            "object_name": "GW", 
            "result": [], 
            "script": "Alcatel.TIMOS.create_sap", 
            "status": true
        }
    ]
}

1 Comment

  1. Unknown User (dv)

    По возможности надо показать, что в первом POST на сервер тоже уходит JSON