Compare commits
2 Commits
980e4b7d90
...
581f0ca353
Author | SHA1 | Date |
---|---|---|
dave | 581f0ca353 | |
dave | f10bacfa16 |
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue