From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmccabe@sourceware.org Date: 23 Jan 2008 04:34:26 -0000 Subject: [Cluster-devel] conga/luci cluster/form-macros homebase/valida ... Message-ID: <20080123043426.845.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe at sourceware.org 2008-01-23 04:34:24 Modified files: luci/cluster : form-macros luci/homebase : validate_cluster_add_initial.js luci/plone-custom: clusterportlet.css luci/site/luci/Extensions: LuciClusterActions.py LuciValidation.py ResourceHandler.py RicciQueries.py cluster_adapters.py homebase_adapters.py luci/site/luci/var: Data.fs Added files: luci/plone-custom: clusterbanner.png Log message: sync some odds and ends Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.219&r2=1.220 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add_initial.js.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/clusterbanner.png.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/clusterportlet.css.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.279&r2=1.280 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&r1=1.56&r2=1.57 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&r1=1.27&r2=1.28 --- conga/luci/cluster/form-macros 2008/01/22 15:02:33 1.219 +++ conga/luci/cluster/form-macros 2008/01/23 04:34:09 1.220 @@ -1071,13 +1071,12 @@ set_page_title('Luci ??? cluster ??? Add a new cluster node'); - - - + +
- - - + + + + + @@ -1251,6 +1247,12 @@ +
+ +
+
--- conga/luci/homebase/validate_cluster_add_initial.js 2008/01/22 15:02:32 1.5 +++ conga/luci/homebase/validate_cluster_add_initial.js 2008/01/23 04:34:09 1.6 @@ -92,14 +92,12 @@ if (ret_status !== true) { /* A communication error occurred. */ alert(obj); - form_elem.submit(); return; } var err = get_ricci_response_status(obj.responseXML); if (err !== null && err.length > 0) { alert(err.join('\n')); - form_elem.submit(); return; } @@ -107,7 +105,6 @@ obj = obj.responseXML.getElementsByTagName('dict')[0]; } catch (e) { alert('Received a malformed response from the luci server.'); - form_elem.submit(); return; } @@ -115,7 +112,6 @@ var query_host_elem = document.getElementById('__SYSTEM0:Addr'); if (!query_host_elem || str_is_blank(query_host_elem.value)) { alert('No node was entered.'); - form_elem.submit(); return; } query_host = query_host_elem.value; /cvs/cluster/conga/luci/plone-custom/clusterbanner.png,v --> standard output revision 1.1 Binary files /cvs/cluster/conga/luci/plone-custom/clusterbanner.png and - differ co: output error: Broken pipe co aborted --- conga/luci/plone-custom/clusterportlet.css 2007/09/25 04:00:23 1.1 +++ conga/luci/plone-custom/clusterportlet.css 2008/01/23 04:34:09 1.2 @@ -173,7 +173,7 @@ .cluConfigTreeLevel5 { margin-left: 0.75em; } #main-portal-logo { - background: url(./clusterbanner.png) no-repeat; + background: url(clusterbanner.png) no-repeat; border: 0; margin: 0.75em 0em 0.75em 1.5em; padding: 0; --- conga/luci/site/luci/Extensions/LuciClusterActions.py 2007/10/09 21:41:46 1.8 +++ conga/luci/site/luci/Extensions/LuciClusterActions.py 2008/01/23 04:34:09 1.9 @@ -1,4 +1,4 @@ -# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2006-2008 Red Hat, Inc. # # This program is free software; you can redistribute # it and/or modify it under the terms of version 2 of the @@ -19,11 +19,21 @@ from conga_constants import CLUSTER_CONFIG, LUCI_DEBUG_MODE, \ NODE_DELETE, NODE_FORCE_DELETE, CLUSTER_DELETE, CLUSTERLIST, \ NODE_FENCE, NODE_JOIN_CLUSTER, NODE_LEAVE_CLUSTER, NODE_REBOOT, \ - RESOURCE_ADD, RESOURCE_CONFIG, RESOURCE_REMOVE, \ - SERVICE_DELETE, SERVICE_RESTART, SERVICE_START, SERVICE_STOP + RESOURCE_REMOVE, SERVICE_DELETE, SERVICE_RESTART, \ + SERVICE_START, SERVICE_STOP luci_log = get_logger() +def getRicciAgentForCluster(self, req): + from LuciZope import GetReqVars + fvar = GetReqVars(req, [ 'clustername' ]) + clustername = fvar['clustername'] + if clustername is None: + if LUCI_DEBUG_MODE is True: + luci_log.debug('GRAFC0: no cluster name was found') + return None + return getRicciAgent(self, clustername) + # # Cluster service tasks # @@ -184,45 +194,6 @@ if ret[0] is False: return ret -def AddResource(self, rc, model, res): - resname = None - try: - resname = res.getName() - model.getResourcesPtr().addChild(res) - except Exception, e: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('AddResource0: %r %s' % (e, str(e))) - if resname is not None: - errstr = 'Unable to add new resource "%s"' % resname - else: - errstr = 'Unable to add this new resource' - return (False, { 'errors': [ errstr ] }) - - ret = propagateClusterConfAsync(self, model, rc, RESOURCE_ADD, - 'Creating new cluster resource "%s"' % resname) - if ret[0] is False: - return ret - -def EditResource(self, rc, model, res): - resname = None - try: - resname = res.getName() - model.getResourcesPtr().addChild(res) - except Exception, e: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('EditResource0: %r %s' % (e, str(e))) - if resname is not None: - errstr = 'Unable to edit cluster resource "%s"' % resname - else: - errstr = 'Unable to edit this cluster resource' - return (False, { 'errors': [ errstr ] }) - - ret = propagateClusterConfAsync(self, model, rc, RESOURCE_CONFIG, - 'Configuring cluster resource "%s"' % resname) - - if ret[0] is False: - return ret - # # Cluster node membership-related tasks # --- conga/luci/site/luci/Extensions/LuciValidation.py 2008/01/22 15:05:17 1.5 +++ conga/luci/site/luci/Extensions/LuciValidation.py 2008/01/23 04:34:09 1.6 @@ -473,10 +473,11 @@ luci_log.debug_verbose('VRA0: type is blank') return (False, { 'errors': [ 'No resource type was given']}) + res = None try: res = create_resource(res_type, request.form, model) except Exception, e: - return (False, { 'errors': e } ) + return (False, { 'errors': e[0] } ) resname = '' try: --- conga/luci/site/luci/Extensions/ResourceHandler.py 2008/01/02 21:00:31 1.5 +++ conga/luci/site/luci/Extensions/ResourceHandler.py 2008/01/23 04:34:09 1.6 @@ -756,6 +756,7 @@ } def create_resource(res_type, form, model): + errors = list() if not resource_table.has_key(res_type): raise Exception, [ 'Unknown resource type: "%s"' % res_type ] @@ -785,14 +786,20 @@ else: rname = form['ip_address'].strip() + if not form.has_key('edit'): + try: + dummy = getResourceForEdit(model, rname) + if dummy: + errors.append('A resource named "%s" already exists.' % rname) + except: + pass + + if len(errors) > 0: + raise Exception, errors + errors = resource_table[res_type][0](res, rname, form, model) - try: - dummy = getResourceForEdit(model, rname) - if dummy: - errors.append('A resource named "%s" already exists.' % rname) - except: - pass if len(errors) > 0: raise Exception, errors + return res --- conga/luci/site/luci/Extensions/RicciQueries.py 2007/10/09 20:20:02 1.9 +++ conga/luci/site/luci/Extensions/RicciQueries.py 2008/01/23 04:34:09 1.10 @@ -1,4 +1,4 @@ -# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2006-2008 Red Hat, Inc. # # This program is free software; you can redistribute # it and/or modify it under the terms of version 2 of the @@ -10,6 +10,8 @@ from LuciSyslog import get_logger from conga_constants import LUCI_DEBUG_MODE + + luci_log = get_logger() def addClusterNodeBatch(cluster_name, @@ -18,11 +20,10 @@ install_shared_storage, install_LVS, upgrade_rpms, - gulm): + gulm, + reboot_nodes=False): batch = list() - batch.append('') - batch.append('') batch.append('') batch.append('') batch.append('') @@ -67,7 +68,7 @@ batch.append('') batch.append('') - need_reboot = install_base or install_services or install_shared_storage or install_LVS + need_reboot = reboot_nodes or install_base or install_services or install_shared_storage or install_LVS if need_reboot: batch.append('') batch.append('') @@ -118,9 +119,9 @@ batch.append('') batch.append('') batch.append('') - batch.append('') - return minidom.parseString(''.join(batch)).firstChild + return ''.join(batch) +## return minidom.parseString(''.join(batch)).firstChild def createClusterBatch( os_str, cluster_name, @@ -131,12 +132,10 @@ install_shared_storage, install_LVS, upgrade_rpms, - gulm_lockservers): + gulm_lockservers, + reboot_nodes=False): batch = list() - batch.append('') - batch.append('') - batch.append('') batch.append('') batch.append('') @@ -184,7 +183,7 @@ batch.append('') batch.append('') - need_reboot = install_base or install_services or install_shared_storage or install_LVS + need_reboot = reboot_nodes or install_base or install_services or install_shared_storage or install_LVS if need_reboot: batch.append('') batch.append('') @@ -253,9 +252,7 @@ batch.append('') batch.append('') batch.append('') - batch.append('') - - return minidom.parseString(''.join(batch)).firstChild + return ''.join(batch) def batchAttemptResult(doc): if not doc: @@ -689,17 +686,7 @@ if rc is None: return None - doc = minidom.Document() - batch = doc.createElement('batch') - module = doc.createElement('module') - module.setAttribute('name', 'cluster') - request = doc.createElement('request') - request.setAttribute('API_version', '1.0') - call = doc.createElement('function_call') - call.setAttribute('name', 'get_cluster.conf') - request.appendChild(call) - module.appendChild(request) - batch.appendChild(module) + batch_str = '' # temporary workaround for ricci bug system_info = rc.hostname() @@ -714,9 +701,9 @@ return None # end workaround + ricci_xml = rc.batch_run(batch_str, async=False) try: - ret = rc.process_batch(batch) - if not ret: + if not ricci_xml: raise Exception, 'no XML response' except Exception, e: if LUCI_DEBUG_MODE is True: @@ -724,6 +711,7 @@ % (system_info, e, str(e))) return None + ret = ricci_xml var_nodes = ret.getElementsByTagName('var') for i in var_nodes: if i.getAttribute('name') == 'cluster.conf': @@ -739,3 +727,22 @@ batch_str = '' % key_base64 ricci_xml = rc.batch_run(batch_str) return batchAttemptResult(ricci_xml) + +def create_cluster( rc, + os_str, + cluster_name, + cluster_alias, + nodeList, + install_base, + install_services, + install_shared_storage, + install_LVS, + upgrade_rpms, + gulm_lockservers): + + batch_str = createClusterBatch(os_str, cluster_name, cluster_alias, + nodeList, install_base, install_services, + install_shared_storage, install_LVS, upgrade_rpms, + gulm_lockservers) + ricci_xml = rc.batch_run(batch_str) + return batchAttemptResult(ricci_xml) --- conga/luci/site/luci/Extensions/cluster_adapters.py 2008/01/22 15:05:17 1.279 +++ conga/luci/site/luci/Extensions/cluster_adapters.py 2008/01/23 04:34:09 1.280 @@ -83,6 +83,8 @@ except: shared_storage = False + reboot_nodes = request.form.has_key('reboot_nodes') + same_node_passwds = False try: same_node_passwds = request.form.has_key('allSameCheckBox') @@ -95,7 +97,8 @@ 'download_pkgs': download_pkgs, 'cluster_os': cluster_os, 'identical_passwds': same_node_passwds, - 'check_certs': check_certs + 'check_certs': check_certs, + 'reboot_nodes': reboot_nodes } system_list, incomplete, errors, messages = parseHostForm(request, check_certs) @@ -277,7 +280,7 @@ ret = send_batch_to_hosts(node_list, 10, rq.create_cluster, add_cluster['cluster_os'], clustername, clustername, node_list, True, True, add_cluster['shared_storage'], False, - add_cluster['download_pkgs'], lockservers) + add_cluster['download_pkgs'], lockservers, add_cluster['reboot_nodes']) batch_id_map = {} for i in ret.iterkeys(): @@ -320,6 +323,8 @@ except: download_pkgs = 1 + reboot_nodes = request.form.has_key('reboot_nodes') + cluster_os = None try: cluster_os = request.form['cluster_os'].strip() @@ -394,7 +399,8 @@ 'download_pkgs': download_pkgs, 'cluster_os': cluster_os, 'identical_passwds': same_node_passwds, - 'check_certs': check_certs + 'check_certs': check_certs, + 'reboot_nodes': reboot_nodes } system_list, incomplete, errors, messages = parseHostForm(request, check_certs) @@ -549,7 +555,8 @@ shared_storage, False, download_pkgs, - model.GULM_ptr is not None) + model.GULM_ptr is not None, + reboot_nodes) if not batch_node: raise Exception, 'batch is blank' system_list[x]['batch'] = batch_node @@ -1419,18 +1426,18 @@ return {} fvars = GetReqVars(request, - [ 'resourcename', 'type', 'value', 'clustername', 'URL' ]) + [ 'resourcename', 'type', 'ip_address', 'clustername', 'URL' ]) baseurl = fvars['URL'] or LUCI_CLUSTER_BASE_URL - name = fvars['resourcename'] - if name is None: - if fvars['type'] == 'ip': - name = fvars['value'] + if fvars['type'] == 'ip': + name = fvars['ip_address'] + else: + name = fvars['resourcename'] if name is None: if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('GRI1: missing res name') + luci_log.debug_verbose('GRI1: missing res name: %s' % str(request.form.items())) return {} from LuciClusterInfo import getResourceInfo as gri --- conga/luci/site/luci/Extensions/homebase_adapters.py 2008/01/22 15:05:18 1.56 +++ conga/luci/site/luci/Extensions/homebase_adapters.py 2008/01/23 04:34:09 1.57 @@ -240,10 +240,6 @@ request.SESSION.set('add_cluster_initial', cur_entry) luci_log.info('SECURITY: %s' % errmsg) return (False, { 'errors': [ errmsg ] }) -# if trust_shown is True and cur_host_trusted is False: -# errmsg = 'You must elect to trust "%s" or abort the addition of the cluster to Luci.' % cur_host -# request.SESSION.set('add_cluster_initial', cur_entry) -# return (False, { 'errors': [ errmsg ] }) rc.trust() except Exception, e: if LUCI_DEBUG_MODE is True: @@ -496,15 +492,9 @@ if not rc: raise Exception, 'rc is None' - if not rc.trusted() and (trust_shown is True and cur_set_trust is False): - incomplete = True - cur_system['error'] = True - errors.append('You must either trust "%s" or remove it.' % cur_host) - else: - # The user doesn't care. Trust the system. - rc.trust() - cur_system['trusted'] = True - cur_system['prev_auth'] = rc.authed() + rc.trust() + cur_system['trusted'] = True + cur_system['prev_auth'] = rc.authed() except Exception, e: incomplete = True cur_system['error'] = True Binary files /cvs/cluster/conga/luci/site/luci/var/Data.fs 2007/06/27 08:14:13 1.27 and /cvs/cluster/conga/luci/site/luci/var/Data.fs 2008/01/23 04:34:10 1.28 differ rcsdiff: /cvs/cluster/conga/luci/site/luci/var/Data.fs: diff failed