[Cluster-devel] conga luci/site/luci/Extensions/HelperFunction ...

rmccabe at sourceware.org rmccabe at sourceware.org
Tue Jan 15 04:41:43 UTC 2008


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2008-01-15 04:41:41

Modified files:
	luci/site/luci/Extensions: HelperFunctions.py LuciClusterInfo.py 
	                           LuciValidation.py LuciZopeExternal.py 
	                           homebase_adapters.py 
	luci/site/luci/Extensions/ClusterModel: ModelBuilder.py 
	luci/cluster   : cluster_svc-macros 
	.              : Makefile clustermon.spec.in.in conga.spec.in.in 

Log message:
	Fix bz383071 (Virtual machine configuration - add field for "migration type" xml attr = "migrate")

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/HelperFunctions.py.diff?cvsroot=cluster&r1=1.12&r2=1.13
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&r1=1.18&r2=1.19
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeExternal.py.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&r1=1.54&r2=1.55
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&r1=1.14&r2=1.15
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Makefile.diff?cvsroot=cluster&r1=1.14&r2=1.15
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&r1=1.34&r2=1.35
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&r1=1.92&r2=1.93

--- conga/luci/site/luci/Extensions/HelperFunctions.py	2008/01/02 21:00:31	1.12
+++ conga/luci/site/luci/Extensions/HelperFunctions.py	2008/01/15 04:41:40	1.13
@@ -9,7 +9,8 @@
 import threading
 
 def resolveOSType(os_str):
-	if not os_str or os_str.find('Tikanga') != (-1) or os_str.find('FC6') != (-1) or os_str.find('Zod') != (-1) or os_str.find('Moonshine') != (-1):
+	rhel5_clu_ver = [ 'Tikanga', 'Zod', 'Moonshine', 'Werewolf' ]
+	if not os_str or os_str in rhel5_clu_ver:
 		return 'rhel5'
 	else:
 		return 'rhel4'
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2008/01/02 21:00:31	1.18
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2008/01/15 04:41:40	1.19
@@ -575,6 +575,15 @@
 		return {}
 
 	clumap = {}
+	try:
+		cluster_os = model.getClusterOS()
+		if cluster_os.find('Tikanga'):
+			os_minor = int(cluster_os[cluster_os.find('5.') + 2])
+			if os_minor > 1:
+				clumap['vm_migration_choice'] = True
+	except:
+		pass
+
 	if not model:
 		try:
 			model = getModelForCluster(self, cluname)
@@ -1487,6 +1496,15 @@
 			luci_log.debug_verbose('getVMInfo0: no service name')
 		return vm_map
 
+	try:
+		cluster_os = model.getClusterOS()
+		if cluster_os.find('Tikanga'):
+			os_minor = int(cluster_os[cluster_os.find('5.') + 2])
+			if os_minor > 1:
+				vm_map['vm_migration_choice'] = True
+	except:
+		pass
+
 	vm_map['formurl'] = '%s?clustername=%s&pagetype=29&servicename=%s' \
 		% (baseurl, clustername, svcname)
 
@@ -1537,7 +1555,7 @@
 		return None
 
 	try:
-		model = ModelBuilder(0, None, None, cluster_conf_node)
+		model = ModelBuilder(None, cluster_conf_node, rc.os())
 		if not model:
 			raise Exception, 'ModelBuilder() returned None'
 		model.setIsVirtualized(isVirtualized)
--- conga/luci/site/luci/Extensions/LuciValidation.py	2008/01/02 21:00:31	1.2
+++ conga/luci/site/luci/Extensions/LuciValidation.py	2008/01/15 04:41:40	1.3
@@ -1062,7 +1062,7 @@
 def validate_vmsvc_form(model, request):
 	errors = list()
 
-	fvar = GetReqVars(request, [ 'vmname', 'oldname', 'vmpath', 'recovery', 'domain', ])
+	fvar = GetReqVars(request, [ 'vmname', 'oldname', 'vmpath', 'recovery', 'domain', 'migration_type'])
 
 	vm_name = fvar['vmname']
 	if vm_name is None:
@@ -1092,6 +1092,10 @@
 	if recovery is not None and recovery != 'restart' and recovery != 'relocate' and recovery != 'disable':
 		errors.append('You entered an invalid recovery option "%s" for VM service "%s". Valid options are "restart" "relocate" and "disable"' % (recovery, vm_name))
 
+	migration_type = fvar['migration_type']
+	if migration_type is not None and migration_type != 'live' and migration_type != 'pause':
+		errors.append('Migration type must be either "live" or "pause"')
+
 	if len(errors) > 0:
 		return (False, {'errors': errors })
 
@@ -1130,6 +1134,8 @@
 
 	xvm.addAttribute('autostart', str(autostart))
 	xvm.addAttribute('exclusive', str(exclusive))
+	if migration_type:
+		xvm.addAttribute('migrate', str(migration_type))
 
 	fdom = fvar['domain']
 	if fdom:
--- conga/luci/site/luci/Extensions/LuciZopeExternal.py	2008/01/02 21:00:31	1.5
+++ conga/luci/site/luci/Extensions/LuciZopeExternal.py	2008/01/15 04:41:40	1.6
@@ -14,8 +14,8 @@
 	getDefaultUser
 
 from cluster_adapters import clusterTaskProcess, \
-	resourceDelete, serviceDelete, \
-	isClusterBusy, nodeTaskProcess, process_cluster_conf_editor, \
+	resourceDelete, serviceDelete, isClusterBusy, nodeTaskProcess, \
+	process_cluster_conf_editor, \
 	serviceMigrate, serviceRestart, serviceStart, serviceStop, \
 	getResourceInfo, getSystemLogs
 
--- conga/luci/site/luci/Extensions/homebase_adapters.py	2008/01/02 21:00:32	1.54
+++ conga/luci/site/luci/Extensions/homebase_adapters.py	2008/01/15 04:41:40	1.55
@@ -201,7 +201,7 @@
 	try:
 		cur_host_trusted = request.form.has_key('host_is_trusted')
 	except:
-		cur_host_trusted = False
+		cur_host_trusted = not check_certs
 
 	trust_shown = False
 	try:
--- conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2008/01/02 20:56:08	1.14
+++ conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2008/01/15 04:41:40	1.15
@@ -50,8 +50,8 @@
 from Rm import Rm
 from Altname import Altname
 
-DLM_TYPE	= 0
-GULM_TYPE	= 1
+DLM_TYPE    = 0
+GULM_TYPE   = 1
 
 TAGNAMES = { 'cluster': Cluster,
              'clusternodes': ClusterNodes,
@@ -119,8 +119,10 @@
 
 
 class ModelBuilder:
-  def __init__(self, lock_type, filename=None, mcast_addr=None, domm=None):
-    self.filename = filename
+  def __init__(self, mcast_addr=None, domm=None, cluster_os=None):
+    if domm is None:
+      raise Exception, 'No cluster configuration'
+
     self.lock_type = DLM_TYPE
     self.mcast_address = mcast_addr
     self.mcast_interface = None
@@ -141,43 +143,25 @@
     self.fence_xvmd_ptr = None
     self.unusual_items = list()
     self.isVirtualized = False
+    self.cluster_os = cluster_os 
+
     if mcast_addr is None:
       self.usesMulticast = False
     else:
       self.usesMulticast = True
 
-    if domm is not None:
-      self.parent = domm
-      self.object_tree = self.buildModel(None)
-      self.check_empty_ptrs()
-      self.check_fence_daemon()
-      self.resolve_fence_instance_types()
-      self.purgePCDuplicates()
-      self.resolve_references()
-      self.check_for_multicast()
-      self.check_for_nodeids()
-    else:
-      if filename is None:
-        if lock_type == DLM_TYPE:
-          self.lock_type = DLM_TYPE
-          self.object_tree = self.buildDLMModelTemplate()
-        else:
-          self.lock_type = GULM_TYPE
-          self.object_tree = self.buildGULMModelTemplate()
-      else:
-        try:
-          self.parent = minidom.parse(self.filename)
-        except IOError, e:
-          pass
-
-        self.object_tree = self.buildModel(None)
-        self.check_empty_ptrs()
-        self.check_fence_daemon()
-        self.resolve_fence_instance_types()
-        self.purgePCDuplicates()
-        self.resolve_references()
-        self.check_for_multicast()
+    self.parent = domm
+    self.object_tree = self.buildModel(None)
+    self.check_empty_ptrs()
+    self.check_fence_daemon()
+    self.resolve_fence_instance_types()
+    self.purgePCDuplicates()
+    self.resolve_references()
+    self.check_for_multicast()
+    self.check_for_nodeids()
 
+  def getClusterOS(self):
+    return self.cluster_os
 
   def buildModel(self, parent_node, parent_object=None):
 
--- conga/luci/cluster/cluster_svc-macros	2008/01/02 20:52:22	1.2
+++ conga/luci/cluster/cluster_svc-macros	2008/01/15 04:41:41	1.3
@@ -140,6 +140,8 @@
 </div>
 
 <div metal:define-macro="vmadd-form">
+	<tal:block tal:define="
+		global clusterinfo python: here.getClusterInfo(modelb, request)" />
 <form method="post" action="">
 	<input type="hidden" name="clustername"
 		tal:attributes="value request/clustername | nothing" />
@@ -178,6 +180,7 @@
 					</select>
 				</td>
 			</tr>
+
 			<tr class="systemsTable">
 				<td>Recovery policy</td>
 				<td>
@@ -189,6 +192,19 @@
 					</select>
 				</td>
 			</tr>
+
+			<tr class="systemsTable"
+				tal:condition="exists:clusterinfo/vm_migration_choice">
+
+				<td>Migration type</td>
+				<td>
+					<select name="migration_type">
+						<option value="live" selected="selected">Live</option>
+						<option value="pause">Pause</option>
+					</select>
+				</td>
+			</tr>
+						
 			<tr class="systemsTable"><td colspan="2">
 				<div class="hbSubmit">
 					<input type="submit" value="Create Virtual Machine Service" />
@@ -343,6 +359,21 @@
 					</select>
 				</td>
 			</tr>
+
+			<tr class="systemsTable"
+				tal:condition="exists:vminfo/vm_migration_choice">
+
+				<td>Migration type</td>
+				<td>
+					<select name="migration_type">
+						<option value="live" tal:content="string:Live"
+							tal:attributes="selected python:('migrate' not in vminfo or vminfo['migrate'] != 'pause') and 'selected' or ''" />
+						<option value="pause" tal:content="string:Pause"
+							tal:attributes="selected python:('migrate' in vminfo and vminfo['migrate'] == 'pause') and 'selected' or ''" />
+					</select>
+				</td>
+			</tr>
+						
 			<tr class="systemsTable"><td colspan="2">
 				<div class="hbSubmit">
 					<input name="submit" type="submit" value="Update Virtual Machine Service" />
--- conga/Makefile	2007/09/11 16:02:16	1.14
+++ conga/Makefile	2008/01/15 04:41:41	1.15
@@ -1,6 +1,6 @@
 ################################################################################
 ##
-## Copyright (C) 2005-2007 Red Hat, Inc. All rights reserved.
+## Copyright (C) 2005-2008 Red Hat, Inc. All rights reserved.
 ##
 ## This copyrighted material is made available to anyone wishing to use,
 ## modify, copy, or redistribute it subject to the terms and conditions
--- conga/clustermon.spec.in.in	2007/10/10 20:09:46	1.34
+++ conga/clustermon.spec.in.in	2008/01/15 04:41:41	1.35
@@ -1,6 +1,6 @@
 ##############################################################################
 #
-# Copyright (C) 2006-2007 Red Hat, Inc. All rights reserved.
+# Copyright (C) 2006-2008 Red Hat, Inc. All rights reserved.
 #
 # This copyrighted material is made available to anyone wishing to use,
 # modify, copy, or redistribute it subject to the terms and conditions
--- conga/conga.spec.in.in	2008/01/14 20:51:42	1.92
+++ conga/conga.spec.in.in	2008/01/15 04:41:41	1.93
@@ -303,6 +303,7 @@
 - Fixed bz337041 (Add option to not fail-back service)
 - Fixed bz264161 (RFE: support setting the "__independent_subtree" attribute on cluster resources)
 - Fixed bz239387 (RFE: add timeouts for actions that can leave cluster unreachable)
+- Fixed bz383071 (Virtual machine configuration - add field for "migration type" xml attr = "migrate")
 
 * Mon Aug 27 2007 Ryan McCabe <rmccabe at redhat.com> 0.10.0-6
 - Fixed bz253783




More information about the Cluster-devel mailing list