From a5583d83d2c2612a176f392d95de2cca1a9d46ca Mon Sep 17 00:00:00 2001 From: dave Date: Sat, 13 Oct 2018 11:17:46 -0700 Subject: [PATCH] basic node inheritence --- checkdb.py | 12 ++++++++---- nodepupper/daemon.py | 25 +++++++++++++++++-------- templates/node.html | 21 ++++++++++++++++++--- 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/checkdb.py b/checkdb.py index 64d4dee..e69257a 100755 --- a/checkdb.py +++ b/checkdb.py @@ -17,14 +17,18 @@ import ZODB.FileStorage # print(v.conf) +# def main(): +# storage = ZODB.FileStorage.FileStorage("pupper.db") +# db = ZODB.DB(storage) +# with db.transaction() as c: +# del c.root.nodes["puppettest5.scc.net.davepedu.com"].classes["base2"] + def main(): storage = ZODB.FileStorage.FileStorage("pupper.db") db = ZODB.DB(storage) with db.transaction() as c: - del c.root.nodes["puppettest5.scc.net.davepedu.com"].classes["base2"] - # for k, v in db.open().root.nodes["foo2"].classes.items(): - # # print(k, v.name, ":", v, "\n\t", v.body, "\n") - # print(v.conf + print(c.root.nodes["puppettest5.scc.net.davepedu.com"].parents) + if __name__ == "__main__": main() diff --git a/nodepupper/daemon.py b/nodepupper/daemon.py index d1c55ac..2437aed 100644 --- a/nodepupper/daemon.py +++ b/nodepupper/daemon.py @@ -35,6 +35,13 @@ def slugify(words): return ''.join(letter for letter in '-'.join(words.lower().split()) if ('a' <= letter <= 'z') or ('0' <= letter <= '9') or letter == '-') +def recurse_params(node): + params = yaml.load(node.body) + for item in node.parents: + for k, v in recurse_params(item).items(): + if k not in params: + params[k] = v + return params class AppWeb(object): def __init__(self, nodedb, template_dir): @@ -60,6 +67,7 @@ class AppWeb(object): with self.nodes.db.transaction() as c: ret = { "classnames": c.root.classes.keys(), + "nodenames": c.root.nodes.keys(), # "all_albums": [], "path": cherrypy.request.path_info, "auth": True or auth() @@ -91,11 +99,7 @@ class AppWeb(object): node = c.root.nodes[fqdn] doc = {"environment": "production", "classes": {k: yaml.load(v.conf) or {} for k, v in node.classes.items()}, - "parameters": {}} - - for name, attachment in node.classes.items(): - print(name) - + "parameters": recurse_params(node)} yield "---\n" yield yaml.dump(doc, default_flow_style=False) @@ -137,10 +141,15 @@ class NodesWeb(object): yield self.render("node.html", node=c.root.nodes[node]) @cherrypy.expose - def op(self, node, op, clsname, config): + def op(self, node, op, clsname=None, config=None, parent=None): with self.nodes.db.transaction() as c: - # TODO validate yaml - c.root.nodes[node].classes[clsname] = NClassAttachment(c.root.classes[clsname], config) + if op == "Attach" and clsname and config: + # TODO validate yaml + c.root.nodes[node].classes[clsname] = NClassAttachment(c.root.classes[clsname], config) + elif op == "Add Parent" and parent: + c.root.nodes[node].parents.append(c.root.nodes[parent]) + else: + raise Exception("F") raise cherrypy.HTTPRedirect("/node/{}".format(node), 302) diff --git a/templates/node.html b/templates/node.html index f225a1d..1ab9bd1 100644 --- a/templates/node.html +++ b/templates/node.html @@ -17,13 +17,16 @@

{{ node.name }}

-

- -

 {{ node.body }}
             
+
+

Parents

+ {% for item in node.parents %} + {{ item.fqdn }}
+ {% endfor %} +

Classes

@@ -37,6 +40,7 @@ {% endfor %}
+

Add class

+
+

Add parent

+
+ + +
+