All of lore.kernel.org
 help / color / mirror / Atom feed
From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/luci cluster/form-macros cluster/resourc ...
Date: 5 Dec 2006 06:44:11 -0000	[thread overview]
Message-ID: <20061205064411.11960.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2006-12-05 06:44:10

Modified files:
	luci/cluster   : form-macros resource-form-macros 
	                 resource_form_handlers.js 
	luci/site/luci/Extensions: cluster_adapters.py 

Log message:
	fixes for adding and editing services

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.119&r2=1.120
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&r1=1.24&r2=1.25
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&r1=1.22&r2=1.23
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.170&r2=1.171

--- conga/luci/cluster/form-macros	2006/12/04 22:59:56	1.119
+++ conga/luci/cluster/form-macros	2006/12/05 06:44:09	1.120
@@ -2879,7 +2879,9 @@
 		<input type="hidden" name="uuid" value="toplevel" />
 		<input type="hidden" name="parent_uuid" value="_toplevel" />
 		<input type="hidden" name="tree_level" value="-1" />
+		<input type="hidden" name="svc_name" value="" />
 		<input type="hidden" name="form_xml" />
+		<input type="hidden" name="action" value="add" />
 		</form>
 	</div>
 
@@ -2939,30 +2941,46 @@
 </div>
 
 <div metal:define-macro="serviceconfig-type-macro" tal:omit-tag="">
-	<span tal:omit-tag="" tal:condition="python: type == 'ip'">
-		<tal:block metal:use-macro="here/resource-form-macros/macros/ip_macro" />
-	</span>
-	<span tal:omit-tag="" tal:condition="python: type == 'fs'">
-		<tal:block metal:use-macro="here/resource-form-macros/macros/fs_macro" />
-	</span>
-	<span tal:omit-tag="" tal:condition="python: type == 'gfs'">
-		<tal:block metal:use-macro="here/resource-form-macros/macros/gfs_macro" />
-	</span>
-	<span tal:omit-tag="" tal:condition="python: type == 'nfsm'">
-		<tal:block metal:use-macro="here/resource-form-macros/macros/nfsm_macro" />
-	</span>
-	<span tal:omit-tag="" tal:condition="python: type == 'nfsx'">
-		<tal:block metal:use-macro="here/resource-form-macros/macros/nfsx_macro" />
-	</span>
-	<span tal:omit-tag="" tal:condition="python: type == 'nfsc'">
-		<tal:block metal:use-macro="here/resource-form-macros/macros/nfsc_macro" />
-	</span>
-	<span tal:omit-tag="" tal:condition="python: type == 'smb'">
-		<tal:block metal:use-macro="here/resource-form-macros/macros/smb_macro" />
-	</span>
-	<span tal:omit-tag="" tal:condition="python: type == 'script'">
-		<tal:block metal:use-macro="here/resource-form-macros/macros/scr_macro" />
-	</span>
+	<tal:block tal:condition="python: type == 'ip' or type == 'IP Address: '">
+		<tal:block
+			metal:use-macro="here/resource-form-macros/macros/ip_macro" />
+	</tal:block>
+
+	<tal:block tal:condition="python: type == 'fs' or type == 'File System: '">
+		<tal:block
+			metal:use-macro="here/resource-form-macros/macros/fs_macro" />
+	</tal:block>
+
+	<tal:block tal:condition="python: type == 'gfs' or type == 'GFS: '">
+		<tal:block
+			metal:use-macro="here/resource-form-macros/macros/gfs_macro" />
+	</tal:block>
+
+	<tal:block tal:condition="python: type == 'nfsm' or type == 'NFS Mount: '">
+		<tal:block
+			metal:use-macro="here/resource-form-macros/macros/nfsm_macro" />
+	</tal:block>
+
+	<tal:block tal:condition="python: type == 'nfsx' or type == 'NFS Export: '">
+		<tal:block
+			metal:use-macro="here/resource-form-macros/macros/nfsx_macro" />
+	</tal:block>
+
+	<tal:block tal:condition="python: type == 'nfsc' or type == 'NFS Client: '">
+		<tal:block
+			metal:use-macro="here/resource-form-macros/macros/nfsc_macro" />
+	</tal:block>
+
+	<tal:block
+		tal:condition="python: type == 'smb' or type == 'Samba Service: '">
+		<tal:block
+			metal:use-macro="here/resource-form-macros/macros/smb_macro" />
+	</tal:block>
+
+	<tal:block tal:condition="python: type == 'script' or type == 'Script: '">
+		<tal:block
+			metal:use-macro="here/resource-form-macros/macros/scr_macro" />
+	</tal:block>
 </div>
 
 <div metal:define-macro="service-config-head-macro" tal:omit-tag="">
@@ -3071,6 +3089,10 @@
 		</div>
 	</div>
 	<div class="service_comp_list">
+		<form name="service_name_form">
+			<input type="hidden" name="service_name"
+				tal:attributes="value sinfo/name | nothing" />
+		</form>
 		<form name="master" method="post">
 		<tal:block
 			tal:define="global clusterinfo python: here.getClusterInfo(modelb, request)" />
@@ -3086,7 +3108,9 @@
 		<input type="hidden" name="uuid" value="toplevel" />
 		<input type="hidden" name="parent_uuid" value="_toplevel" />
 		<input type="hidden" name="tree_level" value="-1" />
+		<input type="hidden" name="svc_name" value="" />
 		<input type="hidden" name="form_xml" />
+		<input type="hidden" name="action" value="edit" />
 		</form>
 	</div>
 
--- conga/luci/cluster/resource-form-macros	2006/11/10 19:44:57	1.24
+++ conga/luci/cluster/resource-form-macros	2006/12/05 06:44:09	1.25
@@ -271,7 +271,7 @@
 			<div metal:use-macro="here/resource-form-macros/macros/fs_macro" />
 		</tal:block>
 
-		<tal:block tal:condition="python: type == 'gfs'">
+		<tal:block tal:condition="python: type == 'gfs' or type == 'clusterfs'">
 			<div metal:use-macro="here/resource-form-macros/macros/gfs_macro" />
 		</tal:block>
 
@@ -307,7 +307,10 @@
 		tal:attributes="name res/parent_uuid | nothing"
 		tal:define="editDisabled resourceIsRef | nothing">
 
-	<input name="edit" type="hidden"
+	<input name="immutable" type="hidden" value="true"
+		tal:condition="editDisabled" />
+
+	<input name="edit" type="hidden" value="true"
 		tal:condition="python: ptype == '33' and True or False" />
 
 	<input name="pagetype" type="hidden"
@@ -368,7 +371,10 @@
 		tal:attributes="name res/parent_uuid | nothing"
 		tal:define="editDisabled resourceIsRef | nothing">
 
-	<input name="edit" type="hidden"
+	<input name="immutable" type="hidden" value="true"
+		tal:condition="editDisabled" />
+
+	<input name="edit" type="hidden" value="true"
 		tal:condition="python: ptype == '33' and True or False" />
 
 	<input name="pagetype" type="hidden"
@@ -507,7 +513,10 @@
 		tal:attributes="name res/parent_uuid | nothing"
 		tal:define="editDisabled resourceIsRef | nothing">
 
-	<input name="edit" type="hidden"
+	<input name="immutable" type="hidden" value="true"
+		tal:condition="editDisabled" />
+
+	<input name="edit" type="hidden" value="true"
 		tal:condition="python: ptype == '33' and True or False" />
 
 	<input name="pagetype" type="hidden"
@@ -609,7 +618,10 @@
 		tal:attributes="name res/parent_uuid | nothing"
 		tal:define="editDisabled resourceIsRef | nothing">
 
-	<input name="edit" type="hidden"
+	<input name="immutable" type="hidden" value="true"
+		tal:condition="editDisabled" />
+
+	<input name="edit" type="hidden" value="true"
 		tal:condition="python: ptype == '33' and True or False" />
 
 	<input name="pagetype" type="hidden"
@@ -727,7 +739,10 @@
 		tal:attributes="name res/parent_uuid | nothing"
 		tal:define="editDisabled resourceIsRef | nothing">
 
-	<input name="edit" type="hidden"
+	<input name="immutable" type="hidden" value="true"
+		tal:condition="editDisabled" />
+
+	<input name="edit" type="hidden" value="true"
 		tal:condition="python: ptype == '33' and True or False" />
 
 	<input name="pagetype" type="hidden"
@@ -799,7 +814,10 @@
 		tal:attributes="name res/parent_uuid | nothing"
 		tal:define="editDisabled resourceIsRef | nothing">
 
-	<input name="edit" type="hidden"
+	<input name="immutable" type="hidden" value="true"
+		tal:condition="editDisabled" />
+
+	<input name="edit" type="hidden" value="true"
 		tal:condition="python: ptype == '33' and True or False" />
 
 	<input name="pagetype" type="hidden"
@@ -851,7 +869,10 @@
 		tal:attributes="name res/parent_uuid | nothing"
 		tal:define="editDisabled resourceIsRef | nothing">
 
-	<input name="edit" type="hidden"
+	<input name="immutable" type="hidden" value="true"
+		tal:condition="editDisabled" />
+
+	<input name="edit" type="hidden" value="true"
 		tal:condition="python: ptype == '33' and True or False" />
 
 	<input name="pagetype" type="hidden"
@@ -913,7 +934,10 @@
 		tal:attributes="name res/parent_uuid | nothing"
 		tal:define="editDisabled resourceIsRef | nothing">
 
-	<input name="edit" type="hidden"
+	<input name="immutable" type="hidden" value="true"
+		tal:condition="editDisabled" />
+
+	<input name="edit" type="hidden" value="true"
 		tal:condition="python: ptype == '33' and True or False" />
 
 	<input name="pagetype" type="hidden"
--- conga/luci/cluster/resource_form_handlers.js	2006/11/10 19:44:57	1.22
+++ conga/luci/cluster/resource_form_handlers.js	2006/12/05 06:44:09	1.23
@@ -380,14 +380,27 @@
 function forms_to_xml(master_form) {
 	var errors = new Array();
 	var form_xml = '';
+	var svc_name = null;
 
 	var form = document.getElementsByTagName('form');
 	for (var i = 0 ; i < form.length ; i++) {
+		if (form[i].name == 'service_name_form') {
+			if (!form[i].service_name ||
+				str_is_blank(form[i].service_name.value))
+			{
+				set_form_err(form[i].service_name);
+			} else {
+				clr_form_err(form[i].service_name);
+				svc_name = form[i].service_name.value;
+			}
+			continue;
+		}
+
 		if (form[i].name == 'master' || !form[i].uuid || !form[i].uuid.value)
 			continue;
 		var err = check_form(form[i]);
 		if (err)
-			errors.concat(err);
+			errors = errors.concat(err);
 		var temp = form[i].innerHTML.match(/<input [^>]+>/ig).toString().replace(/>(,|$)/g, '/>');
 		if (!temp)
 			continue;
@@ -395,6 +408,9 @@
 					form[i].parent_uuid.value + '">' + temp + '</form>';
 	}
 
+	if (!svc_name)
+		errors.push('No name was given for this service.');
+
 	if (!form_xml)
 		errors.push('No resource information was submitted.');
 
@@ -403,7 +419,14 @@
 
 	/* sort this out in the backend */
 	master_form.form_xml.value = '<formlist>' + form_xml + '</formlist>';
-	if (confirm('Save changes to this service?'))
+	master_form.svc_name.value = svc_name;
+
+	var confirm_msg = null;
+	if (master_form.action.value == 'add')
+		confirm_msg = 'Create this service?';
+	else
+		confirm_msg = 'Save changes to this service?';
+	if (confirm(confirm_msg))
 		master_form.submit();
 	return (0);
 }
--- conga/luci/site/luci/Extensions/cluster_adapters.py	2006/11/29 18:15:20	1.170
+++ conga/luci/site/luci/Extensions/cluster_adapters.py	2006/12/05 06:44:10	1.171
@@ -399,8 +399,9 @@
 	try:
 		form_xml = request['form_xml']
 		if not form_xml:
-			raise KeyError('form_xml must not be blank')
-	except KeyError, e:
+			raise KeyError, 'form_xml must not be blank'
+	except Exception, e:
+		luci_log.debug_verbose('vSA0: no form_xml: %s' % str(e))
 		return (False, {'errors': ['No resource data was supplied for this service.']})
 
 	try:
@@ -408,7 +409,8 @@
 		forms = doc.getElementsByTagName('form')
 		if len(forms) < 1:
 			raise
-	except:
+	except Exception, e:
+		luci_log.debug_verbose('vSA1: error: %s' % str(e))
 		return (False, {'errors': ['The resource data submitted for this service is not properly formed.']})
 
 	form_hash = {}
@@ -440,24 +442,31 @@
 			try:
 				dummy_form[str(i.getAttribute('name'))] = str(i.getAttribute('value'))
 			except Exception, e:
-				luci_log.debug_verbose('Error parsing service XML: %s' % str(e))
+				luci_log.debug_verbose('vSA2: parsing XML: %s' % str(e))
 				pass
 
 		try:
 			res_type = dummy_form['type'].strip()
 			if not res_type or not res_type in resourceAddHandler:
-				raise
-		except:
+				raise Exception, 'invalid resource type: %s' % res_type
+		except Exception, e:
+			luci_log.debug_verbose('vSA3: %s' % str(e))
 			return (False, {'errors': ['An invalid resource type was specified: ' + res_type]})
 
 		try:
-			resObj = resourceAddHandler[res_type](request, dummy_form)
-		except:
-			luci_log('res type %d is invalid' % res_type)
+			if dummy_form.has_key('immutable'):
+				model = request.SESSION.get('model')
+				if not model:
+					raise Exception, 'model is None'
+				resObj = getResource(model, dummy_form['resourceName'])
+			else:
+				resObj = resourceAddHandler[res_type](request, dummy_form)
+		except Exception, e:
 			resObj = None
+			luci_log.debug_verbose('vSA4: type %s: %s' % (res_type, str(e)))
 
 		if resObj is None:
-			return (False, {'errors': ['An error occurred while adding ' + res_type]})
+			return (False, {'errors': [ 'An error occurred while adding %s' % res_type ]})
 		form_hash[form_id]['obj'] = resObj
 			
 	return (True, {'messages': ['This service has been updated.']})
@@ -3798,6 +3807,7 @@
 	for item in modelb.getResources():
 		itemmap = {}
 		itemmap['name'] = item.getName()
+		itemmap['attrs'] = item.attr_hash
 		itemmap['type'] = item.resource_type
 		itemmap['cfgurl'] = baseurl + "?" + "clustername=" + cluname + "&resourcename=" + item.getName() + "&pagetype=" + RESOURCE_CONFIG
 		itemmap['url'] = baseurl + "?" + "clustername=" + cluname + "&resourcename=" + item.getName() + "&pagetype=" + RESOURCE
@@ -4651,6 +4661,17 @@
 	response = request.RESPONSE
 	response.redirect(request['URL'] + "?pagetype=" + RESOURCES + "&clustername=" + clustername + '&busyfirst=true')
 
+def getResource(modelb, name):
+	resPtr = modelb.getResourcesPtr()
+	resources = resPtr.getChildren()
+
+	for res in resources:
+		if res.getName() == name:
+			return res
+
+	luci_log.debug_verbose('getResource: unable to find resource \"%s\"' % name)
+	raise KeyError, name
+
 def getResourceForEdit(modelb, name):
 	resPtr = modelb.getResourcesPtr()
 	resources = resPtr.getChildren()
@@ -4660,7 +4681,7 @@
 			resPtr.removeChild(res)
 			return res
 
-	luci_log.debug_verbose('unable to find resource \"%s\"' % name)
+	luci_log.debug_verbose('GRFE0: unable to find resource \"%s\"' % name)
 	raise KeyError, name
 
 def appendModel(request, model):



             reply	other threads:[~2006-12-05  6:44 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-05  6:44 rmccabe [this message]
  -- strict thread matches above, loose matches on Subject: below --
2007-05-30  5:54 [Cluster-devel] conga/luci cluster/form-macros cluster/resourc rmccabe
2007-02-16  2:12 rmccabe
2007-02-16  2:06 rmccabe
2007-02-08 16:00 rmccabe
2007-02-08 15:59 rmccabe
2007-02-08  5:05 rmccabe
2007-01-26 17:56 rmccabe
2007-01-20  4:50 rmccabe
2006-12-06 22:44 rmccabe
2006-12-05 23:32 rmccabe
2006-09-23  4:04 rmccabe
2006-09-14 21:24 rmccabe
2006-09-13 17:50 rmccabe
2006-09-11 22:22 rmccabe
2006-09-05 21:25 rmccabe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20061205064411.11960.qmail@sourceware.org \
    --to=rmccabe@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.