[CentOS] problems configuring cluster to lucci and virtual machines resource

Thu Mar 22 14:19:57 UTC 2012
Miguel Angel Coa M. <miguelcoam at gmail.com>

I have Centos 6.1 and i'm configuring cluster with conga, lucci and ricci
these services are installed and running without problem. I need this type
configuration for a high availability of virtual machines which is run on
kvm. My problem is at the time of configuring "service group", when i click
to add appears the new windows wich say "add service to cluster" and i fill
the options (service named, run exclusive, failover domain, etc ) i can
save this configuration and i dont have problem, but when after click to
"add resource" option and appears "add to resource to service" and i select
the option "virtual machine" i fill only the next option:

Path to xmlfile used to create the VM  -> /etc/libvirt/qemu/centos.xml
VM configuration file path -> /etc/libvirt/qemu

and after save the change appears the error in lucci:

Error 500

We're sorry but we weren't able to process this request.

And the lucci.log :

Error - <type 'exceptions.AttributeError'>: 'Vm' object has no attribute
'delIndependentSubtree'
URL: https://192.168.0.88:4443/cluster/machines/services_cmd?command=Edit
File '/usr/lib/python2.6/site-packages/weberror/errormiddleware.py', line
162 in __call__
  app_iter = self.application(environ, sr_checker)
File '/usr/lib/python2.6/site-packages/tg/configuration.py', line 655 in
wrapper
  return app(environ, start_response)
File '/usr/lib/python2.6/site-packages/tg/configuration.py', line 555 in
remover
  return app(environ, start_response)
File '/usr/lib/python2.6/site-packages/repoze/tm/__init__.py', line 19 in
__call__
  result = self.application(environ, save_status_and_headers)
File '/usr/lib/python2.6/site-packages/tw/core/middleware.py', line 43 in
__call__
  return self.wsgi_app(environ, start_response)
File '/usr/lib/python2.6/site-packages/tw/core/middleware.py', line 68 in
wsgi_app
  resp = req.get_response(self.application)
File '/usr/lib/python2.6/site-packages/webob/__init__.py', line 1325 in
get_response
  application, catch_exc_info=False)
File '/usr/lib/python2.6/site-packages/webob/__init__.py', line 1293 in
call_application
  app_iter = application(self.environ, start_response)
File '/usr/lib/python2.6/site-packages/tw/core/resource_injector.py', line
68 in _injector
  resp = req.get_response(app)
File '/usr/lib/python2.6/site-packages/webob/__init__.py', line 1325 in
get_response
  application, catch_exc_info=False)
File '/usr/lib/python2.6/site-packages/webob/__init__.py', line 1293 in
call_application
  app_iter = application(self.environ, start_response)
File '/usr/lib/python2.6/site-packages/beaker/middleware.py', line 73 in
__call__
  return self.app(environ, start_response)
File '/usr/lib/python2.6/site-packages/beaker/middleware.py', line 152 in
__call__
  return self.wrap_app(environ, session_start_response)
File '/usr/lib/python2.6/site-packages/routes/middleware.py', line 130 in
__call__
  response = self.app(environ, start_response)
File '/usr/lib/python2.6/site-packages/pylons/wsgiapp.py', line 125 in
__call__
  response = self.dispatch(controller, environ, start_response)
File '/usr/lib/python2.6/site-packages/pylons/wsgiapp.py', line 324 in
dispatch
  return controller(environ, start_response)
File '/usr/lib64/python2.6/site-packages/luci/controllers/root.py', line 48
in __call__
  return BaseController.__call__(self, environ, start_response)
File '/usr/lib64/python2.6/site-packages/luci/lib/base.py', line 48 in
__call__
  return TGController.__call__(self, environ, start_response)
File '/usr/lib/python2.6/site-packages/pylons/controllers/core.py', line
221 in __call__
  response = self._dispatch_call()
File '/usr/lib/python2.6/site-packages/pylons/controllers/core.py', line
172 in _dispatch_call
  response = self._inspect_call(func)
File '/usr/lib/python2.6/site-packages/pylons/controllers/core.py', line
107 in _inspect_call
  result = self._perform_call(func, args)
File '/usr/lib/python2.6/site-packages/tg/controllers.py', line 857 in
_perform_call
  self, controller, params, remainder=remainder)
File '/usr/lib/python2.6/site-packages/tg/controllers.py', line 172 in
_perform_call
  output = controller(*remainder, **dict(params))
File '/usr/lib64/python2.6/site-packages/luci/controllers/cluster.py', line
609 in services_cmd
  vret = validate_clusvc_form(self.model, **kw)
File
'/usr/lib64/python2.6/site-packages/luci/widget_validators/validate_resource.py',
line 629 in validate_clusvc_form
  resObj.delIndependentSubtree()
AttributeError: 'Vm' object has no attribute 'delIndependentSubtree'


CGI Variables
-------------
  AUTH_TYPE: 'cookie'
  CONTENT_LENGTH: '-1'
  CONTENT_TYPE: 'application/x-www-form-urlencoded'
  HTTP_ACCEPT:
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
  HTTP_ACCEPT_CHARSET: 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
  HTTP_ACCEPT_ENCODING: 'gzip,deflate,sdch'
  HTTP_ACCEPT_LANGUAGE: 'en-US,en;q=0.8,es-419;q=0.6,es;q=0.4'
  HTTP_CACHE_CONTROL: 'max-age=0'
  HTTP_CONNECTION: 'keep-alive'
  HTTP_COOKIE: 'tabCookie=0; expertMode=0;
luci=ac68c9121cd1d044ebf15a2f2ec3db1252bb2ba7148b8328446d88a7323307db9627c40a;
auth_tkt="63c7278294e41b63fce01b6af2eef3124f6b26ddroot!"'
  HTTP_HOST: '192.168.0.88:4443'
  HTTP_ORIGIN: 'https://192.168.0.88:4443'
  HTTP_REFERER: '
https://192.168.0.88:4443/cluster/machines/services/centos_vm'
  HTTP_USER_AGENT: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11
(KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'
  PATH_INFO: '/cluster/machines/services_cmd'
  QUERY_STRING: 'command=Edit'
  REMOTE_ADDR: '192.168.0.80'
  REMOTE_USER: 'root'
  REMOTE_USER_TOKENS: ['']
  REQUEST_METHOD: 'POST'
  SERVER_NAME: '0.0.0.0'
  SERVER_PORT: '4443'
  SERVER_PROTOCOL: 'HTTP/1.1'


WSGI Variables
--------------
  application: <function wrapper at 0x2bcb6e0>
  beaker.cache: <beaker.cache.CacheManager object at 0x2bc7f90>
  beaker.get_session: <bound method SessionMiddleware._get_session of
<beaker.middleware.SessionMiddleware object at 0x2bc7f10>>
  beaker.session: {'_accessed_time': 1332423457.421567}
  paste.cookies: (<SimpleCookie:
auth_tkt='63c7278294e41b63fce01b6af2eef3124f6b26ddroot!' expertMode='0'
luci='ac68c9121cd1d044ebf15a2f2ec3db1252bb2ba7148b8328446d88a7323307db9627c40a'
tabCookie='0'>, 'tabCookie=0; expertMode=0;
luci=ac68c9121cd1d044ebf15a2f2ec3db1252bb2ba7148b8328446d88a7323307db9627c40a;
auth_tkt="63c7278294e41b63fce01b6af2eef3124f6b26ddroot!"')
  paste.httpserver.thread_pool: <paste.httpserver.ThreadPool object at
0x2bce850>
  paste.parsed_dict_querystring: (MultiDict([('command', 'Edit')]),
'command=Edit')
  paste.parsed_querystring: ([('command', 'Edit')], 'command=Edit')
  paste.registry: <paste.registry.Registry object at 0x7fa7981fef10>
  paste.throw_errors: True
  pylons.action_method: <bound method RootController.routes_placeholder of
<luci.controllers.root.RootController object at 0x7fa78c7e76d0>>
  pylons.controller: <luci.controllers.root.RootController object at
0x7fa78c7e76d0>
  pylons.environ_config: {'session': 'beaker.session', 'cache':
'beaker.cache'}
  pylons.pylons: <pylons.util.PylonsContext object at 0x7fa78c7e7d50>
  pylons.routes_dict: {'url': u'cluster/machines/services_cmd', 'action':
u'routes_placeholder', 'controller': u'root'}
  repoze.tm.active: True
  repoze.what.credentials: {'repoze.what.userid': 'root', 'groups':
['managers'], 'permissions': ['manage']}
  repoze.who.identity: <repoze.who identity (hidden, dict-like) at
140358121980336>
  repoze.who.logger: None
  repoze.who.plugins: {'luci_sasl2auth':
<luci.lib.plugin_sasl2auth.Sasl2AuthPlugin object at 0x2c0e150>,
'friendlyform': <FriendlyFormPlugin 46196560>, 'auth_tkt':
<AuthTktCookiePlugin 31860432>}
  routes.route: <routes.route.Route object at 0x2b36f10>
  routes.url: <routes.util.URLGenerator object at 0x7fa7982dc690>
  toscawidgets.framework: <tw.mods.base.HostFramework object at 0x2bce050>
  toscawidgets.javascript.require_once: False
  toscawidgets.prefix: '/toscawidgets'
  webob._parsed_post_vars: (MultiDict([('old_name', 'centos_vm'),
('svc_name', 'centos_vm'), ('autostart', 'on'), ('exclusive', 'on'),
('domain', ''), ('recovery', 'disable'), ('parent_id', 'esvc_root'),
('form_id', 'res_0'), ('oldname', ''), ('type', 'vm'), ('migrate', 'live'),
('migration_mapping', ''), ('status_program', ''), ('xmlfile',
'/etc/libvirt/qemu/centos5.xml'), ('path', '/etc/libvirt/qemu'),
('snapshot', ''), ('hypervisor_uri', ''), ('migration_uri', ''),
('__max_failures', ''), ('__failure_expire_time', ''), ('__max_restarts',
''), ('__restart_expire_time', ''), ('root_elem', 'esvc_root'), ('action',
'edit'), ('res_count', '1'), ('form_xml', '<formlist><form id="res_0"
parent="esvc_root"><input name="parent_id" value="esvc_root"
type="hidden"/><input name="form_id" value="res_0" type="hidden"/><input
name="type" value="vm" type="hidden"/><input name="migrate" value="live"
type="undefined"/><input name="xmlfile"
value="/etc/libvirt/qemu/centos5.xml" type="text"/><input name="path"
value=...t([('ol...>')])>)
  webob._parsed_query_vars: (MultiDict([('command', 'Edit')]),
'command=Edit')
  webob.adhoc_attrs: {'errors': 'ignore', 'language': 'en-us',
'start_response': <function repl_start_response at 0x7fa798339cf8>,
'response_type': None, 'response_ext': None, 'identity': <repoze.who
identity (hidden, dict-like) at 140358121980336>}
  wsgi process: 'Multithreaded'
  wsgiorg.routing_args: (<routes.util.URLGenerator object at
0x7fa7982dc690>, {'url': u'cluster/machines/services_cmd', 'action':
u'routes_placeholder', 'controller': u'root'})
------------------------------------------------------------

My clusert.conf configuration is these:


[root at nodo1 ~]# cat /etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster config_version="36" name="machines">
<clusternodes>
<clusternode name="nodo1.example.com" nodeid="1"/>
<clusternode name="nodo2.example.com" nodeid="2"/>
</clusternodes>
<fencedevices>
<fencedevice agent="fence_ilo" ipaddr="192.168.0.88" login="linux"
name="ilo_n1" passwd="my_pass"/>
<fencedevice agent="fence_ilo" ipaddr="192.168.0.89" login="linux"
name="ilo_n2" passwd="my_pass"/>
</fencedevices>
<rm>
<failoverdomains>
<failoverdomain name="relocated" nofailback="0" ordered="0" restricted="1"/>
</failoverdomains>
<service exclusive="1" name="centos_vm" recovery="disable"/>
</rm>
<cman expected_votes="1" two_node="1"/>
<logging debug="on"/>
</cluster>


¿Any suggestion fot this problem? ¿what's the problem?

Best regards.