[luci] Fix the class name of priority checkboxes for nodes that are not part of a failover domain.
by Ryan McCabe
commit 2d1bf43a16de2dfa9234d3a15ae78bd6c73c1f5a
Author: Ryan McCabe <rmccabe(a)redhat.com>
Date: Mon Mar 19 15:10:38 2012 -0400
Fix the class name of priority checkboxes for
nodes that are not part of a failover domain.
luci/templates/failover.html | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
---
diff --git a/luci/templates/failover.html b/luci/templates/failover.html
index 4d89dcb..4e512b3 100644
--- a/luci/templates/failover.html
+++ b/luci/templates/failover.html
@@ -244,7 +244,7 @@
</td>
<td class="fdom_tmembers_priority">
<input id="${identifier_pri}" name="${identifier_pri}"
- type="text" maxlength="3" class="input_priority"
+ type="text" maxlength="3" class="input_priority_disabled"
py:attrs="details.getOrdered() is not True and {'disabled':'disabled'} or None"/>
</td>
</py:otherwise>
12 years, 3 months
[luci] Show the logger level class for sqlalchemy.engine instead of sqlalchemy on the admin/log configurati
by Ryan McCabe
commit 3957c3eeb6df24e62d24309913c6f988568d5422
Author: Ryan McCabe <rmccabe(a)redhat.com>
Date: Wed Mar 14 15:34:30 2012 -0400
Show the logger level class for sqlalchemy.engine instead
of sqlalchemy on the admin/log configuration screen.
luci/templates/admin.html | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
---
diff --git a/luci/templates/admin.html b/luci/templates/admin.html
index 7c33f12..5c1f44e 100644
--- a/luci/templates/admin.html
+++ b/luci/templates/admin.html
@@ -202,7 +202,7 @@
<td>sqlalchemy</td>
<td>
<select name="log_level_sqlalchemy"
- py:with="cur_level=logging.getLogger('sqlalchemy').getEffectiveLevel()">
+ py:with="cur_level=logging.getLogger('sqlalchemy.engine').getEffectiveLevel()">
<option value="NOTSET" py:attrs="not cur_level and {'selected':'selected'} or None">unset</option>
<option value="DEBUG" py:attrs="cur_level in (10, 'DEBUG') and {'selected':'selected'} or None">debug</option>
<option value="INFO" py:attrs="cur_level in (20, 'INFO') and {'selected':'selected'} or None">info</option>
12 years, 3 months
[luci] Pass values of the constants defined in the logging module for log levels instead of their textual r
by Ryan McCabe
commit 7f6ac3a54a1be1df71a2fc3c0aeef4f877232d8d
Author: Ryan McCabe <rmccabe(a)redhat.com>
Date: Wed Mar 14 15:10:03 2012 -0400
Pass values of the constants defined in the logging module for
log levels instead of their textual representations when calling
.setLevel()
luci/templates/admin.html | 8 +++---
luci/validation/validate_cluster_prop.py | 35 +++++++++++++++++++++--------
2 files changed, 29 insertions(+), 14 deletions(-)
---
diff --git a/luci/templates/admin.html b/luci/templates/admin.html
index f82ee34..7c33f12 100644
--- a/luci/templates/admin.html
+++ b/luci/templates/admin.html
@@ -189,7 +189,7 @@
<td>
<select name="log_level_tg.i18n"
py:with="cur_level=logging.getLogger('tg.i18n').getEffectiveLevel()">
- <option value="0" py:attrs="not cur_level and {'selected':'selected'} or None">unset</option>
+ <option value="NOTSET" py:attrs="not cur_level and {'selected':'selected'} or None">unset</option>
<option value="DEBUG" py:attrs="cur_level in (10, 'DEBUG') and {'selected':'selected'} or None">debug</option>
<option value="INFO" py:attrs="cur_level in (20, 'INFO') and {'selected':'selected'} or None">info</option>
<option value="WARNING" py:attrs="cur_level in (30, 'WARNING', 'WARN') and {'selected':'selected'} or None">warning</option>
@@ -203,7 +203,7 @@
<td>
<select name="log_level_sqlalchemy"
py:with="cur_level=logging.getLogger('sqlalchemy').getEffectiveLevel()">
- <option value="0" py:attrs="not cur_level and {'selected':'selected'} or None">unset</option>
+ <option value="NOTSET" py:attrs="not cur_level and {'selected':'selected'} or None">unset</option>
<option value="DEBUG" py:attrs="cur_level in (10, 'DEBUG') and {'selected':'selected'} or None">debug</option>
<option value="INFO" py:attrs="cur_level in (20, 'INFO') and {'selected':'selected'} or None">info</option>
<option value="WARNING" py:attrs="cur_level in (30, 'WARNING', 'WARN') and {'selected':'selected'} or None">warning</option>
@@ -217,7 +217,7 @@
<td>
<select name="log_level_luci"
py:with="cur_level=logging.getLogger('luci').getEffectiveLevel()">
- <option value="0" py:attrs="not cur_level and {'selected':'selected'} or None">unset</option>
+ <option value="NOTSET" py:attrs="not cur_level and {'selected':'selected'} or None">unset</option>
<option value="DEBUG" py:attrs="cur_level in (10, 'DEBUG') and {'selected':'selected'} or None">debug</option>
<option value="INFO" py:attrs="cur_level in (20, 'INFO') and {'selected':'selected'} or None">info</option>
<option value="WARNING" py:attrs="cur_level in (30, 'WARNING', 'WARN') and {'selected':'selected'} or None">warning</option>
@@ -231,7 +231,7 @@
<td>
<select name="log_level_root"
py:with="cur_level=logging.getLogger('').getEffectiveLevel()">
- <option value="0" py:attrs="not cur_level and {'selected':'selected'} or None">unset</option>
+ <option value="NOTSET" py:attrs="not cur_level and {'selected':'selected'} or None">unset</option>
<option value="DEBUG" py:attrs="cur_level in (10, 'DEBUG') and {'selected':'selected'} or None">debug</option>
<option value="INFO" py:attrs="cur_level in (20, 'INFO') and {'selected':'selected'} or None">info</option>
<option value="WARNING" py:attrs="cur_level in (30, 'WARNING', 'WARN') and {'selected':'selected'} or None">warning</option>
diff --git a/luci/validation/validate_cluster_prop.py b/luci/validation/validate_cluster_prop.py
index fe4624c..e79dd59 100644
--- a/luci/validation/validate_cluster_prop.py
+++ b/luci/validation/validate_cluster_prop.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2009-2011 Red Hat, Inc.
+# Copyright (C) 2009-2012 Red Hat, Inc.
#
# This program is free software; you can redistribute
# it and/or modify it under the terms of version 2 of the
@@ -1310,13 +1310,28 @@ def validate_user_perms(name, **kw):
def validate_luci_log_levels(**kw):
errors = []
+ loggermap = {
+ 'NOTSET': logging.NOTSET,
+ 'DEBUG': logging.DEBUG,
+ 'INFO': logging.INFO,
+ 'WARNING': logging.WARNING,
+ 'ERROR': logging.ERROR,
+ 'CRITICAL': logging.CRITICAL,
+
+ str(logging.NOTSET): logging.NOTSET,
+ str(logging.DEBUG): logging.DEBUG,
+ str(logging.INFO): logging.INFO,
+ str(logging.WARNING): logging.WARNING,
+ str(logging.ERROR): logging.ERROR,
+ str(logging.CRITICAL): logging.CRITICAL,
+ }
log_root = kw.get('log_level_root')
if log_root:
log_root = log_root.upper()
cur_logger = logging.getLogger('')
try:
- cur_logger.setLevel(log_root)
+ cur_logger.setLevel(loggermap[log_root])
except ValueError:
errors.append(_("Invalid log level for root: %s") % log_root)
except:
@@ -1328,7 +1343,7 @@ def validate_luci_log_levels(**kw):
log_tg_i18n = log_tg_i18n.upper()
cur_logger = logging.getLogger('tg.i18n')
try:
- cur_logger.setLevel(log_tg_i18n)
+ cur_logger.setLevel(loggermap[log_tg_i18n])
except ValueError:
errors.append(_("Invalid log level for tg.i18n: %s") % log_tg_i18n)
except:
@@ -1340,14 +1355,14 @@ def validate_luci_log_levels(**kw):
log_sqlalchemy = log_sqlalchemy.upper()
cur_logger = logging.getLogger('sqlalchemy')
try:
- cur_logger.setLevel(log_sqlalchemy)
+ cur_logger.setLevel(loggermap[log_sqlalchemy])
try:
# Change child and related loggers to match
log_manager = cur_logger.manager
for i in log_manager.loggerDict.keys():
- if i[:11] == "sqlalchemy." or i in ('txn'):
+ if i.startswith("sqlalchemy") or i in ('txn'):
cur_logger = logging.getLogger(i)
- cur_logger.setLevel(log_sqlalchemy)
+ cur_logger.setLevel(loggermap[log_sqlalchemy])
except:
log.exception("Updating child loggers for sqlalchemy")
except ValueError:
@@ -1361,16 +1376,16 @@ def validate_luci_log_levels(**kw):
log_luci = log_luci.upper()
cur_logger = logging.getLogger('luci')
try:
- cur_logger.setLevel(log_luci)
+ cur_logger.setLevel(loggermap[log_luci])
try:
# Change child loggers to match
log_manager = cur_logger.manager
for i in log_manager.loggerDict.keys():
- if i[:5] == "luci.":
+ if i.startswith("luci."):
cur_logger = logging.getLogger(i)
- cur_logger.setLevel(log_sqlalchemy)
+ cur_logger.setLevel(loggermap[log_luci])
except:
- log.exception("Updating child loggers for sqlalchemy")
+ log.exception("Updating child loggers for luci")
except ValueError:
errors.append(_("Invalid log level for luci: %s") % log_luci)
except:
12 years, 3 months
[luci] Fix the redirect when creating resources to avoid the server confusing part of the resource name for
by Ryan McCabe
commit 20245e4a0daff55dabb73cf57c0dfd30025d0714
Author: Ryan McCabe <rmccabe(a)redhat.com>
Date: Thu Mar 8 11:57:35 2012 -0500
Fix the redirect when creating resources to avoid the server confusing
part of the resource name for an extension that has a mime type
luci/controllers/cluster.py | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
---
diff --git a/luci/controllers/cluster.py b/luci/controllers/cluster.py
index c59c9e4..871ef84 100644
--- a/luci/controllers/cluster.py
+++ b/luci/controllers/cluster.py
@@ -583,12 +583,11 @@ class IndividualClusterController(BaseController):
if vret[0] is True:
# For IP resources there is no name, just an IP Address
# and to make IP addresses work you need to add a .html
+ redir_fmt = '%s/%s.html'
if res_type == 'ip':
res_name = kw.get('address')
- redir_fmt = '%s/%s.html'
else:
res_name = kw.get('resourcename')
- redir_fmt = '%s/%s'
log.info('User "%s" %s global resource "%s" in cluster "%s"'
% (self.username, cur_action, res_name, self.name))
flash(_('%s global resource "%s"') % (cur_action, res_name))
12 years, 3 months
[luci] Add support for the 'tunnelled' attribute added to the vm resource agent
by Ryan McCabe
commit 0bd1d4c929923e3c058ea618c614d6ec282dd81f
Author: Ryan McCabe <rmccabe(a)redhat.com>
Date: Tue Mar 6 10:21:48 2012 -0500
Add support for the 'tunnelled' attribute added to the vm resource agent
luci/lib/ClusterConf/Vm.py | 4 ++--
luci/templates/resource_list.html | 11 ++++++++++-
luci/templates/service.html | 2 +-
luci/validation/validate_resource.py | 21 ++++++++++++++++-----
4 files changed, 29 insertions(+), 9 deletions(-)
---
diff --git a/luci/lib/ClusterConf/Vm.py b/luci/lib/ClusterConf/Vm.py
index 17e4600..2163500 100644
--- a/luci/lib/ClusterConf/Vm.py
+++ b/luci/lib/ClusterConf/Vm.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2011 Red Hat, Inc.
+# Copyright (C) 2006-2012 Red Hat, Inc.
#
# This program is free software; you can redistribute
# it and/or modify it under the terms of version 2 of the
@@ -12,7 +12,7 @@ TAG_NAME = "vm"
vm_attributes = ('migration_mapping', 'xmlfile', 'migrate',
'path', 'snapshot', 'hypervisor_uri',
- 'migration_uri', 'status_program')
+ 'migration_uri', 'status_program', 'tunnelled')
class Vm(Service, BaseResource):
def __init__(self):
diff --git a/luci/templates/resource_list.html b/luci/templates/resource_list.html
index 03c1415..ebcd2a7 100644
--- a/luci/templates/resource_list.html
+++ b/luci/templates/resource_list.html
@@ -1644,7 +1644,9 @@
</div>
<div py:def="vm_resource(res, form_id, parent_id, isref)" name="VM" id="vm_resource" class="row rescfg"
- py:with="global_resource = res and isref != 0"
+ py:with="global_resource = res and isref != 0;
+ cluster_os = tmpl_context.cluster.get_OS();
+ os_version = tmpl_context.cluster.get_OSVersion()"
py:attrs="res and {'id': 'global_res_%s' % res.getName(), 'name': res.getName()}">
<input name="global" type="hidden" value="1" py:if="global_resource"/>
<input name="parent_id" type="hidden" value="${parent_id}"/>
@@ -1715,6 +1717,13 @@
py:attrs="res and {'value':res.getAttribute('migration_uri')} or {}" />
</td>
</tr>
+ <tr py:if="cluster_os != 'RHEL' or os_version > 6.2">
+ <td>Tunnel data over ssh during migration</td>
+ <td>
+ <input type="checkbox" class="checkbox" name="tunnelled"
+ py:attrs="{'checked':(res and res.getAttribute('tunnelled')) and 'checked' or None, 'disabled':global_resource and 'disabled' or None}"/>
+ </td>
+ </tr>
${res_footer(res)}
</table>
</div>
diff --git a/luci/templates/service.html b/luci/templates/service.html
index bf623bb..eb4d8df 100644
--- a/luci/templates/service.html
+++ b/luci/templates/service.html
@@ -195,7 +195,7 @@
</form>
</div>
- <div id="edit_service_dialog">
+ <div id="edit_service_dialog" py:if="svc">
<form
style="padding-left: 24px; "
name="edit_service_dialog" method="post" action="${tg.url(services_cmd + '?command=Edit')}">
diff --git a/luci/validation/validate_resource.py b/luci/validation/validate_resource.py
index 3c2210b..f499d47 100644
--- a/luci/validation/validate_resource.py
+++ b/luci/validation/validate_resource.py
@@ -186,10 +186,20 @@ def addVM(res, rname, model, **kw):
('snapshot', '', False, None),
('hypervisor_uri', '', False, None),
('migration_uri', '', False, None),
- ('status_program', '', False, None)
+ ('status_program', '', False, None),
+ ('tunnelled', '', False, None),
)
+ if not kw.has_key('tunnelled'):
+ kw['tunnelled'] = '0'
+ else:
+ kw['tunnelled'] = '1'
+
errors = config_resource(params, res, rname, **kw)
+ if res.getBinaryAttribute('tunnelled') is True:
+ res.addAttribute('tunnelled', 'on')
+ else:
+ res.removeAttribute('tunnelled')
return errors
def addNFSClient(res, rname, model, **kw):
@@ -748,10 +758,11 @@ def validate_clusvc_form(model, **kw):
else:
dummy_form['resourcename'] = dummy_form['address_nominal']
dummy_form['address'] = dummy_form['resourcename']
- if dummy_form['resourcename'] in existing_res_names:
- return (False, { 'errors': [ _('A resource named "%s" already exists') % dummy_form['resourcename'] ]})
- else:
- existing_res_names.append(dummy_form['resourcename'])
+ if dummy_form.has_key('resourcename'):
+ if dummy_form['resourcename'] in existing_res_names:
+ return (False, { 'errors': [ _('A resource named "%s" already exists') % dummy_form['resourcename'] ]})
+ else:
+ existing_res_names.append(dummy_form['resourcename'])
except:
log.exception('no ipaddr')
return (False, { 'errors': [ _('No IP address was given') ]})
12 years, 3 months
[luci] Update the condor resource handlers per the latest cut of the condor resource agent
by Ryan McCabe
commit 878cd92f167d0dbf71883db98dc042f0d93131f9
Author: Ryan McCabe <rmccabe(a)redhat.com>
Date: Mon Mar 5 14:35:27 2012 -0500
Update the condor resource handlers per the latest cut of the condor resource agent
.../lib/ClusterConf/{CondorSchedd.py => Condor.py} | 6 ++--
luci/lib/ClusterConf/ModelBuilder.py | 4 +-
luci/templates/resource_list.html | 28 +++++++++++++++----
luci/validation/validate_resource.py | 16 +++++++++--
4 files changed, 40 insertions(+), 14 deletions(-)
---
diff --git a/luci/lib/ClusterConf/CondorSchedd.py b/luci/lib/ClusterConf/Condor.py
similarity index 80%
rename from luci/lib/ClusterConf/CondorSchedd.py
rename to luci/lib/ClusterConf/Condor.py
index 718c8d4..ab67e89 100644
--- a/luci/lib/ClusterConf/CondorSchedd.py
+++ b/luci/lib/ClusterConf/Condor.py
@@ -8,10 +8,10 @@
from BaseResource import BaseResource
from gettext import gettext as _
-TAG_NAME = 'condor_schedd'
-RESOURCE_TYPE = _('condor_schedd Instance')
+TAG_NAME = 'condor'
+RESOURCE_TYPE = _('Condor Resource')
-class CondorSchedd(BaseResource):
+class Condor(BaseResource):
def __init__(self):
BaseResource.__init__(self)
self.TAG_NAME = TAG_NAME
diff --git a/luci/lib/ClusterConf/ModelBuilder.py b/luci/lib/ClusterConf/ModelBuilder.py
index a4e7d9f..23ba30d 100644
--- a/luci/lib/ClusterConf/ModelBuilder.py
+++ b/luci/lib/ClusterConf/ModelBuilder.py
@@ -63,7 +63,7 @@ import Event
# Children of <resources> and <service>
import Ip, Script, NFSClient, NFSExport, NFSServer, Fs, Samba, Smb, Apache, Named, \
- CondorSchedd, DRBD, LVM, MySQL, OpenLDAP, Postgres8, Tomcat5, Tomcat6, \
+ Condor, DRBD, LVM, MySQL, OpenLDAP, Postgres8, Tomcat5, Tomcat6, \
SAPDatabase, SAPInstance, SybaseASE, Netfs, Clusterfs, \
OracleDB, OracleListener, OracleInstance
@@ -113,7 +113,7 @@ TAGNAMES = {
Smb.TAG_NAME: Smb.Smb,
Apache.TAG_NAME: Apache.Apache,
Named.TAG_NAME: Named.Named,
- CondorSchedd.TAG_NAME: CondorSchedd.CondorSchedd,
+ Condor.TAG_NAME: Condor.Condor,
DRBD.TAG_NAME: DRBD.DRBD,
LVM.TAG_NAME: LVM.LVM,
MySQL.TAG_NAME: MySQL.MySQL,
diff --git a/luci/templates/resource_list.html b/luci/templates/resource_list.html
index b8aa938..03c1415 100644
--- a/luci/templates/resource_list.html
+++ b/luci/templates/resource_list.html
@@ -1604,7 +1604,7 @@
</table>
</div>
-<div py:def="condor_schedd_resource(res, form_id, parent_id, isref)" name="CONDOR_SCHEDD" id="condor_schedd_resource" class="row rescfg"
+<div py:def="condor_resource(res, form_id, parent_id, isref)" name="CONDOR" id="condor_resource" class="row rescfg"
py:with="global_resource = res and isref != 0"
py:attrs="res and {'id': 'global_res_%s' % res.getName(), 'name': res.getName()}">
<input name="global" type="hidden" value="1" py:if="global_resource"/>
@@ -1612,17 +1612,33 @@
<input name="form_id" type="hidden" value="${form_id}"/>
<input name="oldname" type="hidden"
py:attrs="res and {'value':res.getAttribute('name')} or {}" />
- <input name="type" type="hidden" value="condor_schedd" />
+ <input name="type" type="hidden" value="condor" />
- <h3>condor_schedd Instance</h3>
+ <h3>Condor Instance</h3>
<table class="formtable">
<tr>
- <td>Name of the condor_schedd Instance to Control</td>
+ <td>Instance Name</td>
<td>
<input type="text" class="text" name="resourcename"
py:attrs="res and {'value':res.getAttribute('name'), 'disabled':global_resource and 'disabled' or None} or {}" />
</td>
</tr>
+ <tr>
+ <td>Condor Subsystem Type</td>
+ <td>
+ <select name="subsystype" class="serviceformselect"
+ py:attrs="{'disabled':global_resource and 'disabled' or None}">
+ <option value=""
+ py:attrs="(not res or not res.getAttribute('type')) and {'selected':'selected'} or {}">Subsystem Type</option>
+ <option name="schedd" value="schedd"
+ py:attrs="res and res.getAttribute('type') == 'schedd' and {'selected':'selected'} or {}">schedd</option>
+ <option name="job_server" value="job_server"
+ py:attrs="res and res.getAttribute('type') == 'job_server' and {'selected':'selected'} or {}">job_server</option>
+ <option name="query_server" value="query_server"
+ py:attrs="res and res.getAttribute('type') == 'query_server' and {'selected':'selected'} or {}">query_server</option>
+ </select>
+ </td>
+ </tr>
${res_footer(res)}
</table>
</div>
@@ -1730,7 +1746,7 @@ ${oralistener_resource(None,None,None,0)}
${named_resource(None,None,None,0)}
${drbd_resource(None,None,None,0)}
${vm_resource(None,None,None,0)}
-${condor_schedd_resource(None,None,None,0)}
+${condor_resource(None,None,None,0)}
<py:if test="model">
<py:for each="res in model.getResources()">
@@ -1767,7 +1783,7 @@ ${condor_schedd_resource(None,None,None,0)}
<option name="apache_resource" value="apache_resource">Apache</option>
<py:if test="cluster_version >= 3">
<option py:if="cluster_os != 'RHEL' or os_version > 6.2"
- name="condor_schedd" value="condor_schedd_resource">condor_schedd Instance</option>
+ name="condor" value="condor_resource">Condor Instance</option>
<option name="drbd_resource" value="drbd_resource">DRBD Resource</option>
</py:if>
<option name="fs_resource" value="fs_resource">Filesystem</option>
diff --git a/luci/validation/validate_resource.py b/luci/validation/validate_resource.py
index 3f5c3b5..3c2210b 100644
--- a/luci/validation/validate_resource.py
+++ b/luci/validation/validate_resource.py
@@ -23,7 +23,7 @@ from luci.lib.ClusterConf.Apache import Apache
from luci.lib.ClusterConf.OpenLDAP import OpenLDAP
from luci.lib.ClusterConf.LVM import LVM
from luci.lib.ClusterConf.MySQL import MySQL
-from luci.lib.ClusterConf.CondorSchedd import CondorSchedd
+from luci.lib.ClusterConf.Condor import Condor
from luci.lib.ClusterConf.DRBD import DRBD
from luci.lib.ClusterConf.Vm import Vm
from luci.lib.ClusterConf.Named import Named
@@ -445,9 +445,19 @@ def addDRBD(res, rname, model, **kw):
errors = config_resource(params, res, rname, **kw)
return errors
-def addCondorSchedd(res, rname, model, **kw):
+def addCondor(res, rname, model, **kw):
params = ()
errors = config_resource(params, res, rname, **kw)
+
+ subsys = kw.get('subsystype')
+ if not subsys or subsys.isspace():
+ errors.append(_('No condor subsystem type was given'))
+ else:
+ subsys = subsys.lower()
+ if not subsys in ('schedd', 'job_server', 'query_server'):
+ errors.append(_('Invalid condor subsystem type: "%s"') % subsys)
+ else:
+ res.addAttribute('type', subsys)
return errors
resource_table = {
@@ -476,7 +486,7 @@ resource_table = {
'ASEHAagent': ( addSybaseASE, SybaseASE ),
'named': ( addNamed, Named ),
'drbd': ( addDRBD, DRBD ),
- 'condor_schedd': ( addCondorSchedd, CondorSchedd ),
+ 'condor': ( addCondor, Condor ),
'vm': ( addVM, Vm ),
}
12 years, 3 months