]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: add list-networks command
authorSage Weil <sage@redhat.com>
Fri, 13 Mar 2020 12:38:46 +0000 (07:38 -0500)
committerSage Weil <sage@redhat.com>
Mon, 16 Mar 2020 19:38:22 +0000 (14:38 -0500)
Summarize CIDR networks and our IPs in them.  Result looks like this:

{
    "10.3.64.0/24": [
        "10.3.64.23",
        "10.3.64.27"
    ],
    "10.88.0.0/16": [
        "10.88.0.1"
    ],
    "192.168.122.0/24": [
        "192.168.122.1"
    ]
}

Signed-off-by: Sage Weil <sage@redhat.com>
src/cephadm/cephadm

index 850a4d35463a37a8302a807b9f7a9d5f2263d1e5..29582b8241667f0a3bd751ae2568b41f8c5d3124 100755 (executable)
@@ -2624,6 +2624,36 @@ def command_logs():
 
 ##################################
 
+def list_networks():
+    # type: () -> Dict[str,List[str]]
+    r = {}  # type: Dict[str,List[str]]
+
+    ## sadly, 18.04's iproute2 4.15.0-2ubun doesn't support the -j flag,
+    ## so we'll need to use a regex to parse 'ip' command output.
+    #out, _, _ = call_throws(['ip', '-j', 'route', 'ls'])
+    #j = json.loads(out)
+    #for x in j:
+
+    out, _, _ = call_throws([find_executable('ip'), 'route', 'ls'])
+    p = re.compile(r'^(\S+) (.*)scope link (.*)src (\S+)')
+    for line in out.splitlines():
+        m = p.findall(line)
+        if not m:
+            continue
+        net = m[0][0]
+        ip = m[0][3]
+        if net not in r:
+            r[net] = []
+        r[net].append(ip)
+    return r
+
+def command_list_networks():
+    # type: () -> None
+    r = list_networks()
+    print(json.dumps(r, indent=4))
+
+##################################
+
 def command_ls():
     # type: () -> None
     ls = list_daemons(detail=not args.no_detail,
@@ -3705,6 +3735,10 @@ def _get_parser():
         default='/',
         help='base directory for legacy daemon data')
 
+    parser_list_networks = subparsers.add_parser(
+        'list-networks', help='list IP networks')
+    parser_list_networks.set_defaults(func=command_list_networks)
+
     parser_adopt = subparsers.add_parser(
         'adopt', help='adopt daemon deployed with a different tool')
     parser_adopt.set_defaults(func=command_adopt)