Compare commits

...

2 Commits

Author SHA1 Message Date
dave 581f0ca353 remove html preview mode 2019-05-07 19:44:45 -07:00
dave f10bacfa16 node renaming 2019-05-07 19:44:20 -07:00
4 changed files with 31 additions and 14 deletions

View File

@ -89,18 +89,26 @@ class AppWeb(object):
return ret
@cherrypy.expose
def node_edit(self, node=None, op=None, body=None, fqdn=None, parent=None):
if op in ("Edit", "Create") and body and fqdn:
def node_edit(self, node=None, op=None, body=None, fqdn=None, parent=None, name=None):
if op in ("Edit", "Create") and body and name:
with self.nodes.db.transaction() as c:
obj = c.root.nodes[fqdn] if fqdn in c.root.nodes else NObject(fqdn, body)
if name and fqdn: # existing node
obj = c.root.nodes[fqdn]
if name != fqdn:
self.nodes.rename(c, obj, name)
else: # new node
if name in c.root.nodes:
raise Exception("node already exists")
obj = NObject(name, body)
obj.body = body
obj.parents.clear()
parent = parent or []
for name in [parent] if isinstance(parent, str) else parent:
obj.parents.append(c.root.nodes[name])
c.root.nodes[fqdn] = obj
for pname in [parent] if isinstance(parent, str) else parent:
obj.parents.append(c.root.nodes[pname])
c.root.nodes[name] = obj
raise cherrypy.HTTPRedirect("node/{}".format(fqdn), 302)
raise cherrypy.HTTPRedirect("node/{}".format(name), 302)
with self.nodes.db.transaction() as c:
return self.render("node_edit.html", node=c.root.nodes.get(node, None))
@ -113,16 +121,14 @@ class AppWeb(object):
# raise cherrypy.HTTPRedirect('feed', 302)
@cherrypy.expose
def puppet(self, fqdn, preview=False):
def puppet(self, fqdn):
with self.nodes.db.transaction() as c:
node = c.root.nodes[fqdn]
doc = {"environment": "production",
"classes": {cls.name: yaml.load(conf) or {} for cls, conf in recurse_classes(node).items()},
"parameters": recurse_params(node)}
if preview:
yield "<plaintext>"
yield "---\n"
yield yamldump(doc)
cherrypy.response.headers["Content-type"] = "text/plain"
return "---\n" + yamldump(doc)
@cherrypy.expose
def login(self):

View File

@ -56,3 +56,13 @@ class NodeOps(object):
c.root.nodes = BTrees.OOBTree.BTree()
if "classes" not in c.root():
c.root.classes = BTrees.OOBTree.BTree()
def rename(self, c, node, newname):
# check new name isnt taken
if newname in c.root.nodes:
raise Exception(f"{newname} already exists")
# move in root
del c.root.nodes[node.fqdn]
node.fqdn = newname
c.root.nodes[node.fqdn] = node

View File

@ -10,7 +10,7 @@
</form>-->
<a href="/node_edit?node={{ node.fqdn }}"><button class="secondary-button pure-button">Edit</button></a>
<a href="/node/{{ node.fqdn }}/attach"><button class="secondary-button pure-button">Attach class</button></a>
<a href="/puppet?preview=true&fqdn={{ node.fqdn }}"><button class="secondary-button pure-button">Render</button></a>
<a href="/puppet?fqdn={{ node.fqdn }}"><button class="secondary-button pure-button">Render</button></a>
{% endblock %}
{% block body %}

View File

@ -13,7 +13,7 @@
<form action="/node_edit" method="post" class="pure-form pure-form-stacked">
<fieldset>
<fieldset class="pure-group pure-u-1">
<input name="fqdn" type="text" class="pure-input-1" placeholder="FQDN" value="{{ node.fqdn or '' }}" />
<input name="name" type="text" class="pure-input-1" placeholder="FQDN" value="{{ node.fqdn or '' }}" />
<textarea name="body" class="pure-input-1" placeholder="Body" rows="15">{{ node and node.body or '' }}</textarea>
</fieldset>
<!-- <div class="pure-u-1">
@ -29,6 +29,7 @@
</select>
</div>
<div class="pure-u-1">
<input type="hidden" name="fqdn" value="{{ node.fqdn or '' }}"/>
<input type="submit" class="pure-button pure-button-primary" name="op" value="{% if node %}Edit{% else %}Create{% endif %}" />
</div>
</fieldset>