From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmccabe@sourceware.org Date: 7 Jan 2010 18:08:41 -0000 Subject: [Cluster-devel] conga luci/cluster/fence-macros luci/cluster/v ... Message-ID: <20100107180841.5181.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 Branch: RHEL5 Changes by: rmccabe at sourceware.org 2010-01-07 18:08:37 Modified files: luci/cluster : fence-macros validate_fence.js luci/homebase : form-macros luci/plone-custom: conga.js luci/site/luci/Extensions: FenceHandler.py LuciValidation.py ResourceHandler.py homebase_adapters.py luci/site/luci/Extensions/ClusterModel: FenceDeviceAttr.py ModelBuilder.py luci/test : CGA_0160_Add_User.py CGA_0170_Online_Documentation_Portlet.py CGA_0200_Create_cluster.py cleaner.py congaDemoTests.py conga_Helpers.py conga_suite.py loggerObject.py luci/utils : luci_admin ricci/modules/cluster: Clusvcadm.cpp ricci/ricci : Ricci.cpp Log message: Sync with RHEL5.5 tree Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.12&r2=1.2.2.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_fence.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.11&r2=1.1.2.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.44.2.14&r2=1.44.2.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.7&r2=1.3.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.17&r2=1.4.2.18 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.12&r2=1.6.2.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.8&r2=1.1.4.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.34.2.17&r2=1.34.2.18 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.2&r2=1.5.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.12&r2=1.1.4.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/CGA_0160_Add_User.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.1&r2=1.7.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/CGA_0170_Online_Documentation_Portlet.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/CGA_0200_Create_cluster.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.2&r2=1.4.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/cleaner.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.3&r2=1.1.4.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/congaDemoTests.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.11.2.2&r2=1.11.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/conga_Helpers.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.14.2.3&r2=1.14.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/conga_suite.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.11.2.2&r2=1.11.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/loggerObject.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_admin.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.50.2.7&r2=1.50.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Clusvcadm.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.7&r2=1.7.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Ricci.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.6&r2=1.18.2.7 --- conga/luci/cluster/fence-macros 2009/05/14 21:05:58 1.2.2.12 +++ conga/luci/cluster/fence-macros 2010/01/07 18:08:34 1.2.2.13 @@ -190,6 +190,10 @@ + + + + @@ -354,6 +358,7 @@ + @@ -725,6 +730,79 @@ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Fence TypeDell iDrac
Name + +
IP Address + +
Login + +
Password + +
+ Password Script (optional) + + +
+ Use SSH + + + +
+ + + + + + + +
+
+
@@ -1646,6 +1724,7 @@ + @@ -1762,6 +1841,15 @@ + + Managed System + + + + +
--- conga/luci/cluster/validate_fence.js 2009/04/23 20:38:51 1.1.2.11 +++ conga/luci/cluster/validate_fence.js 2010/01/07 18:08:34 1.1.2.12 @@ -20,7 +20,7 @@ fence_inst_validator['vixel'] = [ 'port' ]; fence_inst_validator['wti'] = [ 'port', 'secure' ]; fence_inst_validator['xvm'] = [ 'domain' ]; -fence_inst_validator['lpar'] = [ 'partition' ]; +fence_inst_validator['lpar'] = [ 'partition', 'managed' ]; fence_inst_validator['vmware'] = [ 'port' ]; var fence_validator = []; @@ -29,6 +29,7 @@ fence_validator['brocade'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ]; fence_validator['bullpap'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ]; fence_validator['drac'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script', 'secure' ]; +fence_validator['idrac'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script', 'secure' ]; fence_validator['egenera'] = [ 'cserver' ]; fence_validator['gnbd'] = [ 'servers' ]; fence_validator['ilo'] = [ 'hostname', 'login', 'passwd', 'passwd_script', 'secure' ]; @@ -150,6 +151,7 @@ field_validator['pserver'] = validate_field_str; field_validator['domain'] = validate_field_str; field_validator['partition'] = validate_field_str; +field_validator['managed'] = validate_field_str; function validate_fence(form) { var errors = []; --- conga/luci/homebase/form-macros 2008/02/08 21:56:33 1.44.2.14 +++ conga/luci/homebase/form-macros 2010/01/07 18:08:34 1.44.2.15 @@ -210,6 +210,17 @@ + + + + + +
+ Set user password + + +
+

Clusters

--- conga/luci/plone-custom/conga.js 2008/07/14 21:52:30 1.3.2.7 +++ conga/luci/plone-custom/conga.js 2010/01/07 18:08:35 1.3.2.8 @@ -202,8 +202,6 @@ if (i.length === 1) { if (iponly) { return ('You must enter an IP address in quad-dot notation.'); - } else { - return ('Hostnames must be fully qualified.'); } } --- conga/luci/site/luci/Extensions/FenceHandler.py 2009/04/23 20:38:52 1.4.2.17 +++ conga/luci/site/luci/Extensions/FenceHandler.py 2010/01/07 18:08:35 1.4.2.18 @@ -43,6 +43,7 @@ FI_PROVIDE_EPSERVER = 'A PServer value must be provided for this Egenera Fence' FI_PROVIDE_NODENAME = 'A Node Name value must be provided for this SCSI Fence' FI_PROVIDE_PARTITION = 'A partition name must be provided for this LPAR Fence' +FI_PROVIDE_MANAGED = 'A managed system name must be provided for this LPAR Fence' ILLEGAL_CHARS_REPLACED = 'Illegal characters were replaced by underscores. Feel free to set a new value.' @@ -820,6 +821,68 @@ return errors +def val_idrac_fd(form, fencedev): + errors = list() + + try: + ip = form['ipaddr'].strip() + if not ip: + raise Exception, 'blank' + fencedev.addAttribute('ipaddr', ip) + except Exception, e: + errors.append(FD_PROVIDE_IP) + + try: + log = form['login'].strip() + if not log: + raise Exception, 'blank' + fencedev.addAttribute('login', log) + except Exception, e: + errors.append(FD_PROVIDE_LOGIN) + + has_passwd = False + try: + pwd = form['passwd'].strip() + if not pwd: + # Allow passwords that consist of only spaces. + if not form.has_key('passwd') or form['passwd'] == '': + raise Exception, 'blank' + else: + pwd = form['passwd'] + fencedev.addAttribute('passwd', pwd) + has_passwd = True + except Exception, e: + try: + fencedev.removeAttribute('passwd') + except: + pass + + try: + pwd_script = form['passwd_script'].strip() + if not pwd_script: + raise Exception, 'blank' + fencedev.addAttribute('passwd_script', pwd_script) + has_passwd = True + except Exception, e: + try: + fencedev.removeAttribute('passwd_script') + except: + pass + + if not has_passwd: + errors.append(FD_PROVIDE_PASSWD) + + use_ssh = form.has_key('secure') and (form['secure'] == '1' or form['secure'].lower() == 'true') + if use_ssh: + fencedev.addAttribute('secure', '1') + else: + try: + fencedev.removeAttribute('secure') + except: + pass + + return errors + def val_rps10_fd(form, fencedev): errors = list() @@ -988,6 +1051,7 @@ 'fence_ipmilan': val_ipmilan_fd, 'fence_drac': val_drac_fd, 'fence_drac5': val_drac_fd, + 'fence_idrac': val_idrac_fd, 'fence_rsa': val_rsa_fd, 'fence_rsb': val_rsa_fd, # same params as rsa 'fence_rps10': val_rps10_fd, @@ -1252,6 +1316,14 @@ except Exception, e: errors.append(FI_PROVIDE_PARTITION) + try: + managed = form['managed'].strip() + if not managed: + raise Exception, 'blank' + fenceinst.addAttribute('managed', managed) + except Exception, e: + errors.append(FI_PROVIDE_MANAGED) + fenceinst.addAttribute('secure', '1') return errors @@ -1304,6 +1376,7 @@ 'fence_ipmilan': val_noop_fi, 'fence_drac': val_noop_fi, 'fence_drac5': val_noop_fi, + 'fence_idrac': val_noop_fi, 'fence_rsa': val_noop_fi, 'fence_rsb': val_noop_fi, 'fence_rps10': val_noop_fi --- conga/luci/site/luci/Extensions/LuciValidation.py 2009/05/21 13:32:04 1.6.2.12 +++ conga/luci/site/luci/Extensions/LuciValidation.py 2010/01/07 18:08:35 1.6.2.13 @@ -288,6 +288,37 @@ luci_log.debug_verbose('vSA1: error: %r %s: %r' % (e, str(e), form_xml)) return (False, { 'errors': [ 'The resource data submitted for this service is not properly formed' ]}) + service_name = fvar['svc_name'] + if service_name is None: + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('vSA5: no service name') + errors.append('No service name was given') + + try: + cur_service = model.retrieveServiceByName(service_name) + except Exception, e: + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('vSA5c: no service named %s found: %r %s' \ + % (service_name, e, str(e))) + cur_service = None + + action = fvar['action'] + if action is None: + return (False, {'errors': [ 'No action was given for service %s' % service_name ] }) + + if action == 'edit': + if cur_service is None: + return (False, {'errors': [ 'The service %s could not be found for editing' % service_name ]}) + model.deleteService(service_name) + elif action == 'add': + if cur_service is not None: + return (False, {'errors': [ 'A service with the name %s already exists' % service_name ]}) + else: + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('vSA4a: unknown action %s' \ + % request.form['action']) + return (False, {'errors': [ 'An unknown action was specified' ]}) + form_hash = {} form_hash['toplevel'] = { 'form': None, 'kids': [] } for i in forms: @@ -391,13 +422,6 @@ errors.append('Restart expire time must be a number greater than or equal to 0') restart_expire_time = None - - service_name = fvar['svc_name'] - if service_name is None: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('vSA5: no service name') - errors.append('No service name was given') - nfslock = '0' try: if not request.form.has_key('nfslock') or request.form['nfslock'] != '1': @@ -429,31 +453,6 @@ except Exception, e: exclusive = '0' - try: - cur_service = model.retrieveServiceByName(service_name) - except Exception, e: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('vSA5c: no service named %s found: %r %s' \ - % (service_name, e, str(e))) - cur_service = None - - action = fvar['action'] - if action is None: - return (False, {'errors': [ 'No action was given for service %s' % service_name ] }) - - if action == 'edit': - if cur_service is None: - return (False, {'errors': [ 'The service %s could not be found for editing' % service_name ]}) - model.deleteService(service_name) - elif action == 'add': - if cur_service is not None: - return (False, {'errors': [ 'A service with the name %s already exists' % service_name ]}) - else: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('vSA4a: unknown action %s' \ - % request.form['action']) - return (False, {'errors': [ 'An unknown action was specified' ]}) - def buildSvcTree(parent, child_id_list): for i in child_id_list: try: --- conga/luci/site/luci/Extensions/ResourceHandler.py 2009/05/21 13:32:04 1.1.4.8 +++ conga/luci/site/luci/Extensions/ResourceHandler.py 2010/01/07 18:08:35 1.1.4.9 @@ -675,10 +675,7 @@ raise KeyError, 'No volume group name was given for "%s"' % rname res.addAttribute('vg_name', vg_name) except Exception, e: - err = str(e) - errors.append(err) - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('addLVM5: %s' % err) + vg_name = None try: lv_name = form['lv_name'].strip() @@ -686,10 +683,12 @@ raise KeyError, 'No logical volume name was given for "%s"' % rname res.addAttribute('lv_name', lv_name) except Exception, e: - err = str(e) - errors.append(err) + lv_name = None + + if not lv_name and not vg_name: + errors.append('Neither lv_name nor vg_name given for resource "%s"' % rname) if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('addLVM6: %s' % err) + luci_log.debug_verbose('addLVM6: no vg_name or lv_name for "%s"' % rname) return errors --- conga/luci/site/luci/Extensions/homebase_adapters.py 2008/04/23 17:27:10 1.34.2.17 +++ conga/luci/site/luci/Extensions/homebase_adapters.py 2010/01/07 18:08:35 1.34.2.18 @@ -139,6 +139,12 @@ if passwd != pwconfirm: return (False, { 'errors': [ 'The passwords given do not match' ]}) + if ":" in passwd: + return (False, { 'errors': [ 'The passwords cannot contain semicolons' ]}) + + if " " in passwd: + return (False, { 'errors': [ 'The passwords cannot contain spaces' ]}) + user_props = { 'username': user, 'password': passwd, @@ -763,6 +769,18 @@ if len(errors) > 0: return (False, { 'errors': errors }) + new_passwd = request.form.get('newpasswd') + if new_passwd: + new_passwd = new_passwd.strip() + if new_passwd: + try: + user.userSetPassword(user_id, new_passwd) + messages.append('Set password for user "%s"' % username) + except Exception, e: + errors.append('An error occurred while setting the password for user "%s"' % username) + if len(errors) > 0: + return (False, { 'errors': errors }) + clusters = self.restrictedTraverse('%s/systems/cluster/objectItems' % PLONE_ROOT)('Folder') if not request.form.has_key('__CLUSTER'): for i in clusters: --- conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py 2009/02/18 19:13:30 1.5.2.2 +++ conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py 2010/01/07 18:08:35 1.5.2.3 @@ -27,6 +27,7 @@ 'fence_ilo': 'HP iLO Device', 'fence_ipmilan': 'IPMI Lan', 'fence_drac': 'Dell DRAC', + 'fence_idrac': 'Dell iDRAC', 'fence_rsa': 'IBM RSA II Device', 'fence_rps10': 'RPS10 Serial Switch', 'fence_lpar': 'LPAR Fencing', @@ -52,6 +53,7 @@ 'fence_ilo': False, 'fence_ipmilan': False, 'fence_drac': False, + 'fence_idrac': False, 'fence_rsa': False, 'fence_rps10': False, 'fence_manual': False @@ -95,6 +97,7 @@ 'fence_ilo': ( ), 'fence_ipmilan': ( ), 'fence_drac': ( ), + 'fence_idrac': ( ), 'fence_rsa': ( ), 'fence_rps10': ( ), 'fence_manual': ( ) @@ -135,6 +138,8 @@ ( 'name', 'ipaddr', 'login', 'passwd', 'lanplus', 'auth' ), 'fence_drac': ( 'name', 'ipaddr', 'login', 'passwd' ), + 'fence_idrac': + ( 'name', 'ipaddr', 'login', 'passwd' ), 'fence_rsa': ( 'name', 'hostname', 'login', 'passwd' ), 'fence_rps10': --- conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py 2009/01/23 19:33:29 1.1.4.12 +++ conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py 2010/01/07 18:08:35 1.1.4.13 @@ -1008,7 +1008,6 @@ self.mcast_address = mcast_addr self.mcast_interface = mcast_if self.usesMulticast = True - self.set_nodes_multicast(mcast_addr, mcast_if=mcast_if) self.isModified = True def del_nodes_multicast(self): --- conga/luci/test/CGA_0160_Add_User.py 2007/03/01 00:31:19 1.7.2.1 +++ conga/luci/test/CGA_0160_Add_User.py 2010/01/07 18:08:36 1.7.2.2 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#!/usr/bin/python # Copyright Red Hat, Inc. 2006 # --- conga/luci/test/CGA_0170_Online_Documentation_Portlet.py 2007/03/01 00:31:19 1.1.4.1 +++ conga/luci/test/CGA_0170_Online_Documentation_Portlet.py 2010/01/07 18:08:36 1.1.4.2 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#!/usr/bin/python # Copyright Red Hat, Inc. 2006 # --- conga/luci/test/CGA_0200_Create_cluster.py 2007/06/18 18:39:49 1.4.2.2 +++ conga/luci/test/CGA_0200_Create_cluster.py 2010/01/07 18:08:36 1.4.2.3 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#!/usr/bin/python # Copyright Red Hat, Inc. 2006 # --- conga/luci/test/cleaner.py 2008/01/23 04:44:56 1.1.4.3 +++ conga/luci/test/cleaner.py 2010/01/07 18:08:36 1.1.4.4 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#!/usr/bin/python # Copyright (C) Red Hat, Inc. 2007-2008 # --- conga/luci/test/congaDemoTests.py 2007/06/25 16:17:27 1.11.2.2 +++ conga/luci/test/congaDemoTests.py 2010/01/07 18:08:36 1.11.2.3 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#!/usr/bin/python # Copyright Red Hat, Inc. 2006 # --- conga/luci/test/conga_Helpers.py 2008/01/23 04:44:57 1.14.2.3 +++ conga/luci/test/conga_Helpers.py 2010/01/07 18:08:36 1.14.2.4 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#!/usr/bin/python # Copyright (C) Red Hat, Inc. 2006-2008 # --- conga/luci/test/conga_suite.py 2007/06/25 16:17:27 1.11.2.2 +++ conga/luci/test/conga_suite.py 2010/01/07 18:08:36 1.11.2.3 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#!/usr/bin/python # Copyright Red Hat, Inc. 2006 # --- conga/luci/test/loggerObject.py 2007/03/01 00:31:19 1.2.4.1 +++ conga/luci/test/loggerObject.py 2010/01/07 18:08:36 1.2.4.2 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#!/usr/bin/python # Copyright Red Hat, Inc. 2006 # --- conga/luci/utils/luci_admin 2008/04/11 06:50:33 1.50.2.7 +++ conga/luci/utils/luci_admin 2010/01/07 18:08:36 1.50.2.8 @@ -181,6 +181,10 @@ err.write('Spaces are not allowed in passwords\n') continue + elif ':' in s1: + err.write('Semicolons are not allowed in passwords\n') + continue + s2 = getpass(confirm_prompt) if s1 != s2: err.write('Password mismatch, try again\n') @@ -1022,7 +1026,7 @@ try: (pid, status) = os.waitpid(childpid, 0) except OSError, (errno, msg): - err.write('%s waitpid: %s\n' % (__name__, msg)) + err.write('%s waitpid: %s\n' % (__name__, msg)) if os.WIFEXITED(status): status = os.WEXITSTATUS(status) --- conga/ricci/modules/cluster/Clusvcadm.cpp 2008/01/17 17:38:37 1.7.2.7 +++ conga/ricci/modules/cluster/Clusvcadm.cpp 2010/01/07 18:08:36 1.7.2.8 @@ -101,6 +101,8 @@ continue; String flag; + if (iter->status == ServiceStatus::RG_STATE_RECOVER) + throw String(servicename + " is in the process of being recovered"); if (iter->status == ServiceStatus::RG_STATE_MIGRATE) throw String(servicename + " is in the process of being migrated"); @@ -199,6 +201,8 @@ continue; String flag; + if (iter->status == ServiceStatus::RG_STATE_RECOVER) + throw String(servicename + " is in the process of being recovered"); if (iter->status == ServiceStatus::RG_STATE_MIGRATE) throw String(servicename + " is already in the process of being migrated"); @@ -273,6 +277,7 @@ if (iter->status == ServiceStatus::RG_STATE_STARTING || iter->status == ServiceStatus::RG_STATE_FAILED || + iter->status == ServiceStatus::RG_STATE_RECOVER || iter->status == ServiceStatus::RG_STATE_STARTED) { String out, err; --- conga/ricci/ricci/Ricci.cpp 2008/01/17 17:38:39 1.18.2.6 +++ conga/ricci/ricci/Ricci.cpp 2010/01/07 18:08:37 1.18.2.7 @@ -483,6 +483,7 @@ int status; vector args; + args.push_back("--readonly"); args.push_back("nodeinfo"); if (utils::execute("/usr/bin/virsh", args, out, err, status, false)) throw command_not_found_error_msg("/usr/bin/virsh");