basic node inheritence

This commit is contained in:
dave 2018-10-13 11:17:46 -07:00
parent 444cca48de
commit a5583d83d2
3 changed files with 43 additions and 15 deletions

View File

@ -17,14 +17,18 @@ import ZODB.FileStorage
# print(v.conf) # 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(): def main():
storage = ZODB.FileStorage.FileStorage("pupper.db") storage = ZODB.FileStorage.FileStorage("pupper.db")
db = ZODB.DB(storage) db = ZODB.DB(storage)
with db.transaction() as c: with db.transaction() as c:
del c.root.nodes["puppettest5.scc.net.davepedu.com"].classes["base2"] print(c.root.nodes["puppettest5.scc.net.davepedu.com"].parents)
# for k, v in db.open().root.nodes["foo2"].classes.items():
# # print(k, v.name, ":", v, "\n\t", v.body, "\n")
# print(v.conf
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -35,6 +35,13 @@ def slugify(words):
return ''.join(letter for letter in '-'.join(words.lower().split()) return ''.join(letter for letter in '-'.join(words.lower().split())
if ('a' <= letter <= 'z') or ('0' <= letter <= '9') or letter == '-') 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): class AppWeb(object):
def __init__(self, nodedb, template_dir): def __init__(self, nodedb, template_dir):
@ -60,6 +67,7 @@ class AppWeb(object):
with self.nodes.db.transaction() as c: with self.nodes.db.transaction() as c:
ret = { ret = {
"classnames": c.root.classes.keys(), "classnames": c.root.classes.keys(),
"nodenames": c.root.nodes.keys(),
# "all_albums": [], # "all_albums": [],
"path": cherrypy.request.path_info, "path": cherrypy.request.path_info,
"auth": True or auth() "auth": True or auth()
@ -91,11 +99,7 @@ class AppWeb(object):
node = c.root.nodes[fqdn] node = c.root.nodes[fqdn]
doc = {"environment": "production", doc = {"environment": "production",
"classes": {k: yaml.load(v.conf) or {} for k, v in node.classes.items()}, "classes": {k: yaml.load(v.conf) or {} for k, v in node.classes.items()},
"parameters": {}} "parameters": recurse_params(node)}
for name, attachment in node.classes.items():
print(name)
yield "---\n" yield "---\n"
yield yaml.dump(doc, default_flow_style=False) 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]) yield self.render("node.html", node=c.root.nodes[node])
@cherrypy.expose @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: with self.nodes.db.transaction() as c:
# TODO validate yaml if op == "Attach" and clsname and config:
c.root.nodes[node].classes[clsname] = NClassAttachment(c.root.classes[clsname], 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) raise cherrypy.HTTPRedirect("/node/{}".format(node), 302)

View File

@ -17,13 +17,16 @@
<div class="node"> <div class="node">
<div class="node_info"> <div class="node_info">
<h2>{{ node.name }}</h2> <h2>{{ node.name }}</h2>
<p>
</p>
<pre> <pre>
{{ node.body }} {{ node.body }}
</pre> </pre>
</div> </div>
<div class="node-parents">
<h2>Parents</h2>
{% for item in node.parents %}
{{ item.fqdn }} <br />
{% endfor %}
</div>
<div class="node-classes"> <div class="node-classes">
<h2>Classes</h2> <h2>Classes</h2>
<div class="class-list"> <div class="class-list">
@ -37,6 +40,7 @@
{% endfor %} {% endfor %}
</div> </div>
<div class="node-add-class"> <div class="node-add-class">
<h2>Add class</h2>
<form action="/node/{{ node.fqdn }}/op" method="post" class="pure-form pure-form-stacked"> <form action="/node/{{ node.fqdn }}/op" method="post" class="pure-form pure-form-stacked">
<select name="clsname"> <select name="clsname">
{% for cls in classnames %} {% for cls in classnames %}
@ -47,6 +51,17 @@
<input type="submit" name="op" class="pure-button pure-button-primary" value="Attach"/> <input type="submit" name="op" class="pure-button pure-button-primary" value="Attach"/>
</form> </form>
</div> </div>
<div class="node-add-parent">
<h2>Add parent</h2>
<form action="/node/{{ node.fqdn }}/op" method="post" class="pure-form pure-form-stacked">
<select name="parent">
{% for item in nodenames %}
<option value="{{ item }}">{{ item }}</option>
{% endfor %}
</select>
<input type="submit" name="op" class="pure-button pure-button-primary" value="Add Parent"/>
</form>
</div>
</div> </div>
</div> </div>
</div> </div>