Есть ли способ получить данные из файла конфигурации F5 big-ip с помощью PHP или любого другого языка?

Я не знаком с сетями, но у меня есть требование, когда я должен прочитать большой файл конфигурации ip и сохранить виртуальные данные ltm в файле.

Пример конф файла:

> ltm virtual /Common/vs_test {
>     destination /Common/10.01.01.111:80
>     ip-protocol tcp
>     mask 255.255.255.255
>     policies {
>          /Common/adt_vs_test {}
>     }
>     profile {
>        /Common/ADT_DSS_A_G { }
>     }
>     rules {
>        ....
>     }
>     security {
>         ....
>     } 
  }

Из этого файла мне нужно

Имя виртуального сервера — vs_test

IP:10.01.01.111

Порт: 80

Политика безопасности: DSS_A_G

Может ли кто-нибудь помочь мне разобраться в этом?


person Joe14_1990    schedule 05.03.2019    source источник
comment
Обычные выражения?   -  person Klaus D.    schedule 05.03.2019
comment
Я не уверен, что это можно сделать, потому что существует несколько LTM, а данные несколько неструктурированы, а файл конфигурации постоянно обновляется.   -  person Joe14_1990    schedule 06.03.2019
comment
Было бы неплохо включить всю эту информацию в вопрос.   -  person Klaus D.    schedule 06.03.2019
comment
нужно ли это делать, читая файл конфигурации, или можно использовать интерфейс iControl REST? Если второе, я могу привести пример для вас.   -  person Jason Rahm    schedule 06.03.2019
comment
Я думаю, что использование интерфейса iControl REST — это хорошо. Да, не могли бы вы привести пример, например, как получить необходимые данные из файла конфигурации.   -  person Joe14_1990    schedule 06.03.2019


Ответы (1)


Вы можете написать сценарий tmsh, который будет использоваться локально на BIG-IP для запроса этой информации, или вы также можете использовать интерфейс REST iControl для запроса этой информации. Вы можете получить более одного запроса для детализации для получения точной информации, поскольку профили и политики скрыты в подколлекциях объекта родительского виртуального сервера. Однако в одном запросе вы можете вернуть имя, пункт назначения (IP+порт виртуального сервера) и элементы коллекции профилей, например, с помощью curl или такого инструмента, как Postman:

https://ltm3.test.local/mgmt/tm/ltm/virtual?$select=name,destination,profilesReference&expandSubcollections=true

Это возвращает все виртуальные серверы только с именем, ip+port и информацией о профиле в следующем формате json (для краткости показан только виртуальный сервер с политикой):

{
    "kind": "tm:ltm:virtual:virtualcollectionstate",
    "selfLink": "https://localhost/mgmt/tm/ltm/virtual?$select=name%2Cdestination%2CprofilesReference&expandSubcollections=true&ver=14.0.0",
    "items": [
        {
            "name": "bigvip_443",
            "destination": "/Common/192.168.102.60:443",
            "profilesReference": {
                "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~bigvip_443/profiles?ver=14.0.0",
                "isSubcollection": true,
                "items": [
                    {
                        "kind": "tm:ltm:virtual:profiles:profilesstate",
                        "name": "ASM_asm_test_policy",
                        "partition": "Common",
                        "fullPath": "/Common/ASM_asm_test_policy",
                        "generation": 569,
                        "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~bigvip_443/profiles/~Common~ASM_asm_test_policy?ver=14.0.0",
                        "context": "all",
                        "nameReference": {
                            "link": "https://localhost/mgmt/tm/security/bot-defense/asm-profile/~Common~ASM_asm_test_policy?ver=14.0.0"
                        }
                    },
                    {
                        "kind": "tm:ltm:virtual:profiles:profilesstate",
                        "name": "clientssl",
                        "partition": "Common",
                        "fullPath": "/Common/clientssl",
                        "generation": 553,
                        "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~bigvip_443/profiles/~Common~clientssl?ver=14.0.0",
                        "context": "clientside",
                        "nameReference": {
                            "link": "https://localhost/mgmt/tm/ltm/profile/client-ssl/~Common~clientssl?ver=14.0.0"
                        }
                    },
                    {
                        "kind": "tm:ltm:virtual:profiles:profilesstate",
                        "name": "http",
                        "partition": "Common",
                        "fullPath": "/Common/http",
                        "generation": 553,
                        "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~bigvip_443/profiles/~Common~http?ver=14.0.0",
                        "context": "all",
                        "nameReference": {
                            "link": "https://localhost/mgmt/tm/ltm/profile/http/~Common~http?ver=14.0.0"
                        }
                    },
                    {
                        "kind": "tm:ltm:virtual:profiles:profilesstate",
                        "name": "tcp",
                        "partition": "Common",
                        "fullPath": "/Common/tcp",
                        "generation": 553,
                        "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~bigvip_443/profiles/~Common~tcp?ver=14.0.0",
                        "context": "all",
                        "nameReference": {
                            "link": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~tcp?ver=14.0.0"
                        }
                    },
                    {
                        "kind": "tm:ltm:virtual:profiles:profilesstate",
                        "name": "websecurity",
                        "partition": "Common",
                        "fullPath": "/Common/websecurity",
                        "generation": 568,
                        "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~bigvip_443/profiles/~Common~websecurity?ver=14.0.0",
                        "context": "all",
                        "nameReference": {
                            "link": "https://localhost/mgmt/tm/ltm/profile/web-security/~Common~websecurity?ver=14.0.0"
                        }
                    }
                ]
            }
        },

Это намного чище, если вы напишете сценарий на выбранном вами языке, чтобы возвращать только те данные, которые вам нужны, с ваших виртуальных серверов, и это можно сделать с удаленной машины на любом большом количестве устройств с большим IP, которые у вас есть.

person Jason Rahm    schedule 05.03.2019
comment
Я только что просмотрел страницу DevCentral, и CuRL кажется лучшим вариантом. Хотя я работал с CuRL ранее, чтобы получить коды HTTP. Я пытался выяснить, есть ли способ получить данные, используя какие-либо параметры CuRL, чтобы я мог просмотреть файл conf и автоматизировать его. - person Joe14_1990; 06.03.2019