[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <5fe9a6d2a6bf97f470281162ccb73558416ac7c9.1690447762.git.mtahhan@redhat.com>
Date: Thu, 27 Jul 2023 04:55:56 -0400
From: mtahhan@...hat.com
To: netdev@...r.kernel.org,
kuba@...nel.org,
davem@...emloft.net,
edumazet@...gle.com,
pabeni@...hat.com
Cc: Maryam Tahhan <mtahhan@...hat.com>
Subject: [net-next,v1 1/2] tools/net/ynl: configuration through json
From: Maryam Tahhan <mtahhan@...hat.com>
Enable YNL configuration through a json file alongside the
current commandline arguments. This will allow one to cycle
through multiple specs and commands at once.
Signed-off-by: Maryam Tahhan <mtahhan@...hat.com>
---
tools/net/ynl/cli.py | 108 ++++++++++++++++++++++++++++++++++---------
1 file changed, 87 insertions(+), 21 deletions(-)
diff --git a/tools/net/ynl/cli.py b/tools/net/ynl/cli.py
index ffaa8038aa8c..1749851f8460 100755
--- a/tools/net/ynl/cli.py
+++ b/tools/net/ynl/cli.py
@@ -5,13 +5,54 @@ import argparse
import json
import pprint
import time
+import os
from lib import YnlFamily
+class ynlConfig():
+ def __init__(self):
+ self.no_schema = True
+ self.schema = None
+ self.spec = None
+ self.json_text = None
+ self.ntf = None
+ self.sleep = None
+ self.do = None
+ self.dump = None
+ def run(self):
+ ynl_cfg(self.no_schema, self.spec, self.schema, self.json_text, self.ntf, self.sleep, self.do, self.dump)
+
+def ynl_cfg(no_schema, spec, schema, json_text, ntf, sleep, do, dump):
+
+ if no_schema:
+ schema = ''
+
+ attrs = {}
+ if json_text:
+ attrs = json.loads(json_text)
+
+ ynl = YnlFamily(spec, schema)
+
+ if ntf:
+ ynl.ntf_subscribe(ntf)
+
+ if sleep:
+ time.sleep(sleep)
+
+ if do:
+ reply = ynl.do(do, attrs)
+ pprint.PrettyPrinter().pprint(reply)
+ if dump:
+ reply = ynl.dump(dump, attrs)
+ pprint.PrettyPrinter().pprint(reply)
+
+ if ntf:
+ ynl.check_ntf()
+ pprint.PrettyPrinter().pprint(ynl.async_msg_queue)
def main():
parser = argparse.ArgumentParser(description='YNL CLI sample')
- parser.add_argument('--spec', dest='spec', type=str, required=True)
+ parser.add_argument('--spec', dest='spec', type=str)
parser.add_argument('--schema', dest='schema', type=str)
parser.add_argument('--no-schema', action='store_true')
parser.add_argument('--json', dest='json_text', type=str)
@@ -19,34 +60,59 @@ def main():
parser.add_argument('--dump', dest='dump', type=str)
parser.add_argument('--sleep', dest='sleep', type=int)
parser.add_argument('--subscribe', dest='ntf', type=str)
+ parser.add_argument('--config', dest='config', type=str)
args = parser.parse_args()
- if args.no_schema:
- args.schema = ''
-
- attrs = {}
- if args.json_text:
- attrs = json.loads(args.json_text)
+ if args.config:
+ directory = ""
+ yamls = {}
- ynl = YnlFamily(args.spec, args.schema)
+ if not os.path.exists(args.config):
+ print("Error: ", args.config, " doesn't exist")
+ exit(-1)
- if args.ntf:
- ynl.ntf_subscribe(args.ntf)
+ f = open(args.config)
+ data = json.load(f)
- if args.sleep:
- time.sleep(args.sleep)
+ for k in data:
+ if k == 'yaml-specs-path':
+ directory = data[k]
- if args.do:
- reply = ynl.do(args.do, attrs)
- pprint.PrettyPrinter().pprint(reply)
- if args.dump:
- reply = ynl.dump(args.dump, attrs)
- pprint.PrettyPrinter().pprint(reply)
+ # Scan the dir and get all the yaml files.
+ for filename in os.scandir(directory):
+ if filename.is_file():
+ if filename.name.endswith('.yaml'):
+ yamls[filename.name] = filename.path
- if args.ntf:
- ynl.check_ntf()
- pprint.PrettyPrinter().pprint(ynl.async_msg_queue)
+ elif k == 'spec-args':
+ for v in data[k]:
+ print("############### ",v," ###############\n")
+ cfg = ynlConfig()
+ # Check for yaml from the specs we found earlier
+ if v in yamls:
+ # FOUND
+ cfg.spec = yamls[v]
+ if 'no-schema' in data[k][v]:
+ cfg.no_schema = data[k][v]['no-schema']
+ if 'schema' in data[k][v]:
+ cfg.schema = data[k][v]['schema']
+ cfg.no_schema = False
+ if 'do' in data[k][v]:
+ cfg.do = data[k][v]['do']
+ if 'dump' in data[k][v]:
+ cfg.dump = data[k][v]['dump']
+ if 'subscribe' in data[k][v]:
+ cfg.ntf = data[k][v]['subscribe']
+ if 'sleep' in data[k][v]:
+ cfg.sleep = data[k][v]['sleep']
+ if 'json-params' in data[k][v]:
+ cfg.json_text = json.dumps(data[k][v]['json-params'])
+ cfg.run()
+ else:
+ print("Error: ", v, " doesn't have a valid yaml file in ", directory, "\n")
+ else:
+ ynl_cfg(args.no_schema, args.spec, args.schema, args.json_text, args.ntf, args.sleep, args.do, args.dump)
if __name__ == "__main__":
main()
--
2.39.2
Powered by blists - more mailing lists