For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

xuwen's avatar
xuwen
Icon for Cumulonimbus rankCumulonimbus
Dec 14, 2022

I recently plan to write a GTM wideip Network Map, Generate a json file

GTM type A and AAAA wideip generate a json file, like LTM NetworkMap

At present, use python f5-sdk, only type A wideip has been written. GTM works in Common partition testing. The configuration format generated by AS3 has not been test and adapted, because its config seems to work in /partition/folder/config, unlike /Common/config

{
    "wideips": [
        {
            "enabled": true,
            "name": "pay.bestpay-gtm.189.cn",
            "partition": "Common",
            "wideip_type": "A",
            "poolLbMode": "round-robin",
            "persistence": "disabled",
            "pools": [
                {
                    "name": "gslb_pool_bestpay_ctc_v4",
                    "partition": "Common",
                    "order": 0,
                    "ratio": 1,
                    "loadBalancingMode": "round-robin",
                    "alternateMode": "none",
                    "fallbackMode": "none",
                    "fallbackIp": "any",
                    "Members": [
                        {
                            "Member": "/Common/vs_ctc_97_22",
                            "Member Order": 0,
                            "Member Address": "58.213.97.22",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        },
                        {
                            "Member": "/Common/vs_ctc_97_23",
                            "Member Order": 1,
                            "Member Address": "58.213.97.23",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        }
                    ]
                }
            ]
        },
        {
            "enabled": true,
            "name": "www.163.com",
            "partition": "Common",
            "wideip_type": "A",
            "poolLbMode": "round-robin",
            "persistence": "disabled",
            "pools": [
                {
                    "name": "gslb_pool_bestpay_ctc_v4",
                    "partition": "Common",
                    "order": 0,
                    "ratio": 1,
                    "loadBalancingMode": "round-robin",
                    "alternateMode": "none",
                    "fallbackMode": "none",
                    "fallbackIp": "any",
                    "Members": [
                        {
                            "Member": "/Common/vs_ctc_97_22",
                            "Member Order": 0,
                            "Member Address": "58.213.97.22",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        },
                        {
                            "Member": "/Common/vs_ctc_97_23",
                            "Member Order": 1,
                            "Member Address": "58.213.97.23",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        }
                    ]
                }
            ]
        },
        {
            "disabled": true,
            "name": "www.as3.com",
            "partition": "Common",
            "wideip_type": "A",
            "poolLbMode": "round-robin",
            "persistence": "disabled"
        },
        {
            "aliases": [
                "mapi.bestpay.com.cn"
            ],
            "iRules": [
                "/Common/edns_wideip_test"
            ],
            "enabled": true,
            "name": "www.bestpay.com.cn",
            "partition": "Common",
            "wideip_type": "A",
            "poolLbMode": "topology",
            "persistence": "disabled",
            "pools": [
                {
                    "name": "gslb_pool_bestpay_cmcc_v4",
                    "partition": "Common",
                    "order": 2,
                    "ratio": 1,
                    "loadBalancingMode": "round-robin",
                    "alternateMode": "none",
                    "fallbackMode": "none",
                    "fallbackIp": "any",
                    "Members": [
                        {
                            "Member": "/Common/vs_cmcc_99_22",
                            "Member Order": 0,
                            "Member Address": "58.213.99.22",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        },
                        {
                            "Member": "/Common/vs_cmcc_99_23",
                            "Member Order": 1,
                            "Member Address": "58.213.99.23",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        }
                    ]
                },
                {
                    "name": "gslb_pool_bestpay_ctc_v4",
                    "partition": "Common",
                    "order": 0,
                    "ratio": 1,
                    "loadBalancingMode": "round-robin",
                    "alternateMode": "none",
                    "fallbackMode": "none",
                    "fallbackIp": "any",
                    "Members": [
                        {
                            "Member": "/Common/vs_ctc_97_22",
                            "Member Order": 0,
                            "Member Address": "58.213.97.22",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        },
                        {
                            "Member": "/Common/vs_ctc_97_23",
                            "Member Order": 1,
                            "Member Address": "58.213.97.23",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        }
                    ]
                },
                {
                    "name": "gslb_pool_bestpay_cuc_v4",
                    "partition": "Common",
                    "order": 1,
                    "ratio": 1,
                    "loadBalancingMode": "round-robin",
                    "alternateMode": "none",
                    "fallbackMode": "none",
                    "fallbackIp": "any",
                    "Members": [
                        {
                            "Member": "/Common/vs_ctc_98_22",
                            "Member Order": 0,
                            "Member Address": "58.213.98.22",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        },
                        {
                            "Member": "/Common/vs_ctc_98_23",
                            "Member Order": 1,
                            "Member Address": "58.213.98.23",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        }
                    ]
                }
            ]
        },
        {
            "enabled": true,
            "name": "www.gslb.xuwen.com",
            "partition": "Common",
            "wideip_type": "A",
            "poolLbMode": "topology",
            "persistence": "disabled",
            "pools": [
                {
                    "name": "gslb_pool_ctc_v4",
                    "partition": "Common",
                    "order": 0,
                    "ratio": 1,
                    "loadBalancingMode": "global-availability",
                    "alternateMode": "none",
                    "fallbackMode": "return-to-dns",
                    "fallbackIp": "any",
                    "Members": [
                        {
                            "Member": "/Common/vs_ctc",
                            "Member Order": 0,
                            "Member Address": "58.213.97.84",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        },
                        {
                            "Member": "/Common/vs_cuc",
                            "Member Order": 1,
                            "Member Address": "58.240.114.130",
                            "Service Port": "80",
                            "Translation Address": "none",
                            "Translation Service Port": 0
                        }
                    ]
                }
            ]
        }
    ]
}

 

5 Replies

  • xuwen's avatar
    xuwen
    Icon for Cumulonimbus rankCumulonimbus

    Python f5-sdk send a GET request to GTM in the form of  ~partition~name, but the format of the GET request for the AS3 published wideip should be ~partition~Application~name, so when retrieving the AS3 published wideip, the URL constructed will report HTTP 404. After reading the error source code icontrol\session.py There is a function def _ validate_ name_ partition_ Subpath (element):

     

    def _validate_name_partition_subpath(element):
        # '/' and '~' are illegal characters in most cases, however there are
        # few exceptions (GTM Regions endpoint being one of them where the
        # validation of name should not apply.
        """
        if '~' in element:
        error_message =\
            "instance names and partitions cannot contain '~', but it's: %s"\
            % element
        raise InvalidInstanceNameOrFolder(error_message)
        """

     

    the determination of whether the name carries the character ~ will cause the structure of AS3 name=i.subPath + '~' + i.name doesn't work.

    so delete the judgment of ~ will generate a GTM Wideip NetworkMap json

    {
        "wideips": [
            {
                "enabled": true,
                "name": "www.gslb.bank.com",
                "partition": "Common",
                "wideip_type": "A",
                "poolLbMode": "round-robin",
                "persistence": "disabled",
                "lastResortPool": "",
                "fullPath": "/Common/www.gslb.bank.com",
                "pools": [
                    {
                        "name": "gslb_pool_test",
                        "partition": "Common",
                        "order": 0,
                        "ratio": 1,
                        "fullPath": "/Common/gslb_pool_test",
                        "loadBalancingMode": "round-robin",
                        "alternateMode": "round-robin",
                        "fallbackMode": "return-to-dns",
                        "fallbackIp": "any",
                        "Members": [
                            {
                                "Member": "/Common/vs_sideband",
                                "Member Order": 0,
                                "Member Address": "200.1.1.200",
                                "Service Port": "80",
                                "Translation Address": "none",
                                "Translation Service Port": 0
                            }
                        ]
                    }
                ]
            },
            {
                "aliases": [
                    "another.example*"
                ],
                "enabled": true,
                "subPath": "Application",
                "name": "example.edu",
                "partition": "Example_Tenant",
                "wideip_type": "A",
                "poolLbMode": "ratio",
                "persistence": "disabled",
                "lastResortPool": "",
                "fullPath": "/Example_Tenant/Application/example.edu",
                "pools": [
                    {
                        "name": "testPool",
                        "partition": "Example_Tenant",
                        "order": 0,
                        "ratio": 1,
                        "subPath": "Application",
                        "fullPath": "/Example_Tenant/Application/testPool",
                        "loadBalancingMode": "round-robin",
                        "alternateMode": "round-robin",
                        "fallbackMode": "return-to-dns",
                        "fallbackIp": "any",
                        "Members": []
                    }
                ]
            },
            {
                "enabled": true,
                "subPath": "Application",
                "name": "example.as3.io",
                "partition": "example2Tenant",
                "wideip_type": "A",
                "poolLbMode": "ratio",
                "persistence": "disabled",
                "lastResortPool": "",
                "fullPath": "/example2Tenant/Application/example.as3.io",
                "pools": [
                    {
                        "name": "testPoolA",
                        "partition": "example2Tenant",
                        "order": 0,
                        "ratio": 1,
                        "subPath": "Application",
                        "fullPath": "/example2Tenant/Application/testPoolA",
                        "loadBalancingMode": "round-robin",
                        "alternateMode": "round-robin",
                        "fallbackMode": "return-to-dns",
                        "fallbackIp": "any",
                        "Members": [
                            {
                                "Member": "0",
                                "Member Order": 0,
                                "Member Address": "2.2.3.8",
                                "Service Port": "5050",
                                "Translation Address": "none",
                                "Translation Service Port": 0
                            },
                            {
                                "Member": "2",
                                "Member Order": 1,
                                "Member Address": "2.2.3.9",
                                "Service Port": "5050",
                                "Translation Address": "none",
                                "Translation Service Port": 0
                            }
                        ]
                    }
                ]
            },
            {
                "enabled": true,
                "subPath": "Application",
                "name": "example.edu",
                "partition": "example2Tenant",
                "wideip_type": "AAAA",
                "poolLbMode": "ratio",
                "persistence": "disabled",
                "lastResortPool": "",
                "fullPath": "/example2Tenant/Application/example.edu",
                "pools": [
                    {
                        "name": "testPoolAAAA",
                        "partition": "example2Tenant",
                        "order": 0,
                        "ratio": 1,
                        "subPath": "Application",
                        "fullPath": "/example2Tenant/Application/testPoolAAAA",
                        "loadBalancingMode": "round-robin",
                        "alternateMode": "round-robin",
                        "fallbackMode": "return-to-dns",
                        "fallbackIp": "any",
                        "Members": [
                            {
                                "Member": "1",
                                "Member Order": 0,
                                "Member Address": "2001:db8:85a3::8a2e:370:7334",
                                "Service Port": "5051",
                                "Translation Address": "none",
                                "Translation Service Port": 0
                            },
                            {
                                "Member": "3",
                                "Member Order": 1,
                                "Member Address": "2001:db8:85a3::8a2e:370:1337",
                                "Service Port": "5052",
                                "Translation Address": "none",
                                "Translation Service Port": 0
                            }
                        ]
                    }
                ]
            }
        ]
    }

     

  • I know we are no longer doing external development on the sdk, but let me ask someone internal to see if there is a way without development to accomplish what you're looking for.

    • xuwen's avatar
      xuwen
      Icon for Cumulonimbus rankCumulonimbus

      Thanks for your reply. BIGIP's built-in Statistics>>Dashbord>>DNS>>Wide IPs, shows that when the wideip goes to gtm pool members, the pool member name is displayed, but the pool members address and service port are not displayed.

      Now, i can  use python f5 sdk to obtain the json of the type A and AAAA data of the GTM wideip. It supports retrieving the AS3 published wideip. However, to achieve tree like visual display like AppViewX, i must learn some front-end programming languages such as Vue.js to do html visual display