basic node inheritence
This commit is contained in:
parent
444cca48de
commit
a5583d83d2
12
checkdb.py
12
checkdb.py
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue