diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmCommonModule.py b/ovm/scripts/vm/hypervisor/ovm/OvmCommonModule.py
index 9e94da8dade..da51e184283 100755
--- a/ovm/scripts/vm/hypervisor/ovm/OvmCommonModule.py
+++ b/ovm/scripts/vm/hypervisor/ovm/OvmCommonModule.py
@@ -23,6 +23,7 @@ HEARTBEAT_TIMESTAMP_FORMAT='%s'
HEARTBEAT_TIMESTAMP_PATTERN='(\\d+.\d+<\/timestamp\>)'
HEARTBEAT_DIR='heart_beat'
ETC_HOSTS='/etc/hosts'
+HOSTNAME_FILE='/etc/sysconfig/network'
logger = OvmLogger('OvmCommon')
diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmHostModule.py b/ovm/scripts/vm/hypervisor/ovm/OvmHostModule.py
old mode 100644
new mode 100755
index 6c4708aee34..983c50593f1
--- a/ovm/scripts/vm/hypervisor/ovm/OvmHostModule.py
+++ b/ovm/scripts/vm/hypervisor/ovm/OvmHostModule.py
@@ -63,7 +63,9 @@ class OvmHost(OvmObject):
return vmPath
def _vmNameToPath(self, vmName):
- return successToMap(xen_get_vm_path(vmName))['path']
+ # the xen_get_vm_path always sucks!!!
+ #return successToMap((vmName))['path']
+ return self._getVmPathFromPrimaryStorage(vmName)
def _getAllDomains(self):
stdout = timeout_command(["xm", "list"])
diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py b/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py
index 22eb9ad908e..6684e5b22ec 100755
--- a/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py
+++ b/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py
@@ -2,6 +2,7 @@ from OvmCommonModule import *
from OVSSiteSR import sp_create, sr_create, sr_do
from OVSParser import parse_ocfs2_cluster_conf
from OVSXCluster import clusterm_set_ocfs2_cluster_conf, clusterm_start_o2cb_service
+from OVSSiteRMServer import get_master_ip
import re
class OvmStoragePoolDecoder(json.JSONDecoder):
@@ -241,6 +242,33 @@ class OvmStoragePool(OvmObject):
fd = open(ETC_HOSTS, "w")
fd.write(orignalConf)
fd.close()
+
+ def configureHostName(nodes):
+ myIp = successToMap(get_master_ip())['ip']
+ nodeName = None
+ for n in nodes:
+ if myIp == n["ip_address"]:
+ nodeName = n["name"]
+ break
+
+ if nodeName == None: raise Exception("Cannot find node equals to my ip address:%s"%myIp)
+ if not exists(HOSTNAME_FILE):
+ originalConf = ""
+ else:
+ fd = open(HOSTNAME_FILE, "r")
+ originalConf = fd.read()
+ fd.close()
+
+ pattern = r"HOSTNAME=(.*)"
+ # remove any old hostname
+ originalConf = re.sub(pattern, "", originalConf)
+ # remove extra empty lines
+ originalConf = re.sub(r"\n\s*\n*", "\n", originalConf) + "\n" + "HOSTNAME=%s"%nodeName
+ logger.debug(OvmStoragePool.prepareOCFS2Nodes, "Configure %s:%s\n"%(HOSTNAME_FILE,originalConf))
+ fd = open(HOSTNAME_FILE, "w")
+ fd.write(originalConf)
+ fd.close()
+ doCmd(['hostname', nodeName])
try:
nodeString = nodeString.strip(";")
@@ -273,10 +301,12 @@ class OvmStoragePool(OvmObject):
lines.append("\tname = %s\n" % clusterName)
lines.append("\n")
conf = "".join(lines)
+
+ configureHostName(nodes)
+ configureEtcHosts(nodes)
clusterm_set_ocfs2_cluster_conf(conf)
clusterm_start_o2cb_service()
logger.debug(OvmStoragePool.prepareOCFS2Nodes, "Configure cluster.conf to:\n%s"%conf)
- configureEtcHosts(nodes)
rs = SUCC()
return rs
diff --git a/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java b/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
index f3c1bfebc9b..6105edec51b 100755
--- a/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
+++ b/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
@@ -216,12 +216,16 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
/* set to false so each time ModifyStoragePoolCommand will re-setup heartbeat*/
_isHeartBeat = false;
+ /*
try {
_canBridgeFirewall = canBridgeFirewall();
} catch (XmlRpcException e) {
s_logger.error("Failed to detect whether the host supports security groups.", e);
_canBridgeFirewall = false;
}
+ */
+
+ _canBridgeFirewall = false;
s_logger.debug(_canBridgeFirewall ? "OVM host supports security groups." : "OVM host doesn't support security groups.");
diff --git a/server/src/com/cloud/storage/OCFS2ManagerImpl.java b/server/src/com/cloud/storage/OCFS2ManagerImpl.java
index b7bb6635b1d..81f611f3e12 100755
--- a/server/src/com/cloud/storage/OCFS2ManagerImpl.java
+++ b/server/src/com/cloud/storage/OCFS2ManagerImpl.java
@@ -65,7 +65,10 @@ public class OCFS2ManagerImpl implements OCFS2Manager, ResourceListener {
Integer i = 0;
List> lst = new ArrayList>();
for (HostVO h : hosts) {
- String nodeName = "node_" + h.getPrivateIpAddress().replace(".", "_");
+ /**
+ * Don't show "node" in node name otherwise OVM's utils/config_o2cb.sh will be going crazy
+ */
+ String nodeName = "ovm_" + h.getPrivateIpAddress().replace(".", "_");
Ternary node = new Ternary(i, h.getPrivateIpAddress(), nodeName);
lst.add(node);
i ++;
@@ -103,6 +106,16 @@ public class OCFS2ManagerImpl implements OCFS2Manager, ResourceListener {
}
return clusterName;
+
+
+ /**
+ * right now let's use "ocfs2" that is default cluster name of OVM OCFS2 service.
+ * Using another name is fine but requires extra effort to modify OVM's "utils/config_o2cb.sh",
+ * currently it doesn't receive parameter specifying which cluster to start.
+ * And I don't see the benefit of a cluster name rather than "ocfs2"
+ */
+
+ //return "ocfs2";
}
@Override
diff --git a/server/src/com/cloud/template/HyervisorTemplateAdapter.java b/server/src/com/cloud/template/HyervisorTemplateAdapter.java
old mode 100644
new mode 100755
index db6a672719f..2d7244c2beb
--- a/server/src/com/cloud/template/HyervisorTemplateAdapter.java
+++ b/server/src/com/cloud/template/HyervisorTemplateAdapter.java
@@ -103,9 +103,8 @@ public class HyervisorTemplateAdapter extends TemplateAdapterBase implements Tem
if ((cmd.getFormat().equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith("vhd") && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url.toLowerCase().endsWith("vhd.gz") ))
|| (cmd.getFormat().equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith("qcow2") && !url.toLowerCase().endsWith("qcow2.zip") && !url.toLowerCase().endsWith("qcow2.bz2") && !url.toLowerCase().endsWith("qcow2.gz") ))
|| (cmd.getFormat().equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith("ova") && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url.toLowerCase().endsWith("ova.gz")))
- || (cmd.getFormat().equalsIgnoreCase("img") && !url.toLowerCase().endsWith("img"))
- || (cmd.getFormat().equalsIgnoreCase("raw") && !url.toLowerCase().endsWith("raw")) ) {
- throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is a invalid for the format " + cmd.getFormat().toLowerCase());
+ || (cmd.getFormat().equalsIgnoreCase("raw") && (!url.toLowerCase().endsWith("img") && !url.toLowerCase().endsWith("raw")))) {
+ throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + cmd.getFormat().toLowerCase());
}
profile.setUrl(validateUrl(url));