Updated Branches:
  refs/heads/4.2 1a3f39473 -> 16a51ee47

CLOUDSTACK-4674
[baremetal] /usr/share/cloudstack-common/scripts/util/ipmi.py script
need to recognize various ipmi version and BMC type of server


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/16a51ee4
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/16a51ee4
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/16a51ee4

Branch: refs/heads/4.2
Commit: 16a51ee47925eeaafb27bee5f0610800b79f93fc
Parents: 1a3f394
Author: Frank.Zhang <frank.zh...@citrix.com>
Authored: Mon Oct 28 14:48:01 2013 -0700
Committer: Frank.Zhang <frank.zh...@citrix.com>
Committed: Mon Oct 28 14:48:01 2013 -0700

----------------------------------------------------------------------
 .../networkservice/BareMetalResourceBase.java   | 19 ++++++++++++++++
 scripts/util/ipmi.py                            | 23 ++++++++++++++------
 server/src/com/cloud/configuration/Config.java  |  1 +
 3 files changed, 36 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/16a51ee4/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
 
b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
index d84096e..abe1d4d 100755
--- 
a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
+++ 
b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
@@ -30,6 +30,8 @@ import javax.ejb.Local;
 import javax.naming.ConfigurationException;
 
 import com.cloud.agent.api.*;
+import com.cloud.configuration.Config;
+import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.utils.Pair;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.log4j.Logger;
@@ -155,6 +157,14 @@ public class BareMetalResourceBase extends ManagerBase 
implements ServerResource
                    _isEchoScAgent = Boolean.valueOf(echoScAgent);
                }
 
+        String ipmiIface = "default";
+        try {
+            ConfigurationDao configDao = 
ComponentContext.getComponent(ConfigurationDao.class);
+            ipmiIface = 
configDao.getValue(Config.BaremetalIpmiLanInterface.key());
+        } catch (Exception e) {
+            s_logger.debug(e.getMessage(), e);
+        }
+
                String injectScript = "scripts/util/ipmi.py";
                String scriptPath = Script.findScript("", injectScript);
                if (scriptPath == null) {
@@ -164,6 +174,7 @@ public class BareMetalResourceBase extends ManagerBase 
implements ServerResource
                _pingCommand = new Script2(pythonPath, s_logger);
                _pingCommand.add(scriptPath);
                _pingCommand.add("ping");
+        _pingCommand.add("interface=" + ipmiIface);
                _pingCommand.add("hostname=" + _ip);
                _pingCommand.add("usrname=" + _username);
                _pingCommand.add("password=" + _password, ParamType.PASSWORD);
@@ -171,6 +182,7 @@ public class BareMetalResourceBase extends ManagerBase 
implements ServerResource
                _setPxeBootCommand = new Script2(pythonPath, s_logger);
                _setPxeBootCommand.add(scriptPath);
                _setPxeBootCommand.add("boot_dev");
+        _setPxeBootCommand.add("interface=" + ipmiIface);
                _setPxeBootCommand.add("hostname=" + _ip);
                _setPxeBootCommand.add("usrname=" + _username);
                _setPxeBootCommand.add("password=" + _password, 
ParamType.PASSWORD);
@@ -179,6 +191,7 @@ public class BareMetalResourceBase extends ManagerBase 
implements ServerResource
                _setDiskBootCommand = new Script2(pythonPath, s_logger);
                _setDiskBootCommand.add(scriptPath);
                _setDiskBootCommand.add("boot_dev");
+        _setDiskBootCommand.add("interface=" + ipmiIface);
                _setDiskBootCommand.add("hostname=" + _ip);
                _setDiskBootCommand.add("usrname=" + _username);
                _setDiskBootCommand.add("password=" + _password, 
ParamType.PASSWORD);
@@ -187,6 +200,7 @@ public class BareMetalResourceBase extends ManagerBase 
implements ServerResource
                _rebootCommand = new Script2(pythonPath, s_logger);
                _rebootCommand.add(scriptPath);
                _rebootCommand.add("reboot");
+        _rebootCommand.add("interface=" + ipmiIface);
                _rebootCommand.add("hostname=" + _ip);
                _rebootCommand.add("usrname=" + _username);
                _rebootCommand.add("password=" + _password, ParamType.PASSWORD);
@@ -194,6 +208,7 @@ public class BareMetalResourceBase extends ManagerBase 
implements ServerResource
                _getStatusCommand = new Script2(pythonPath, s_logger);
                _getStatusCommand.add(scriptPath);
                _getStatusCommand.add("ping");
+        _getStatusCommand.add("interface=" + ipmiIface);
                _getStatusCommand.add("hostname=" + _ip);
                _getStatusCommand.add("usrname=" + _username);
                _getStatusCommand.add("password=" + _password, 
ParamType.PASSWORD);
@@ -201,6 +216,7 @@ public class BareMetalResourceBase extends ManagerBase 
implements ServerResource
                _powerOnCommand = new Script2(pythonPath, s_logger);
                _powerOnCommand.add(scriptPath);
                _powerOnCommand.add("power");
+        _powerOnCommand.add("interface=" + ipmiIface);
                _powerOnCommand.add("hostname=" + _ip);
                _powerOnCommand.add("usrname=" + _username);
                _powerOnCommand.add("password=" + _password, 
ParamType.PASSWORD);
@@ -209,6 +225,7 @@ public class BareMetalResourceBase extends ManagerBase 
implements ServerResource
                _powerOffCommand = new Script2(pythonPath, s_logger);
                _powerOffCommand.add(scriptPath);
                _powerOffCommand.add("power");
+        _powerOffCommand.add("interface=" + ipmiIface);
                _powerOffCommand.add("hostname=" + _ip);
                _powerOffCommand.add("usrname=" + _username);
                _powerOffCommand.add("password=" + _password, 
ParamType.PASSWORD);
@@ -217,6 +234,7 @@ public class BareMetalResourceBase extends ManagerBase 
implements ServerResource
                _forcePowerOffCommand = new Script2(pythonPath, s_logger);
                _forcePowerOffCommand.add(scriptPath);
                _forcePowerOffCommand.add("power");
+        _forcePowerOffCommand.add("interface=" + ipmiIface);
                _forcePowerOffCommand.add("hostname=" + _ip);
                _forcePowerOffCommand.add("usrname=" + _username);
                _forcePowerOffCommand.add("password=" + _password, 
ParamType.PASSWORD);
@@ -225,6 +243,7 @@ public class BareMetalResourceBase extends ManagerBase 
implements ServerResource
                _bootOrRebootCommand = new Script2(pythonPath, s_logger);
                _bootOrRebootCommand.add(scriptPath);
                _bootOrRebootCommand.add("boot_or_reboot");
+        _bootOrRebootCommand.add("interface=" + ipmiIface);
                _bootOrRebootCommand.add("hostname=" + _ip);
                _bootOrRebootCommand.add("usrname=" + _username);
                _bootOrRebootCommand.add("password=" + _password, 
ParamType.PASSWORD);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/16a51ee4/scripts/util/ipmi.py
----------------------------------------------------------------------
diff --git a/scripts/util/ipmi.py b/scripts/util/ipmi.py
index c9e9a66..0cd6fc0 100755
--- a/scripts/util/ipmi.py
+++ b/scripts/util/ipmi.py
@@ -83,6 +83,15 @@ def check_tool():
         print "Can not find ipmitool"
         return False
 
+def addInterfaceOption(cmd, args):
+    iface = args.get("interface")
+    if not iface or iface == "default":
+        return cmd
+
+    cmd.insert(0, iface)
+    cmd.insert(0, "-I")
+    return cmd
+
 def ping(args):
     hostname = args.get("hostname")
     usrname = args.get("usrname")
@@ -92,7 +101,7 @@ def ping(args):
         print "No hostname"
         return 1
 
-    o = ipmitool("-H", hostname, "-U", usrname, "-P", password, "chassis", 
"power", "status")
+    o = ipmitool(*addInterfaceOption(["-H", hostname, "-U", usrname, "-P", 
password, "chassis", "power", "status"], args))
     if o.ret:
         print o.stderr
         return 1
@@ -114,7 +123,7 @@ def boot_dev(args):
         print "No boot device specified"
         return 1
 
-    o = ipmitool("-H", hostname, "-U", usrname, "-P", password, "chassis", 
"bootdev", dev)
+    o = ipmitool(*addInterfaceOption(["-H", hostname, "-U", usrname, "-P", 
password, "chassis", "bootdev", dev], args))
     if o.ret:
         print o.stderr
         return 1
@@ -130,16 +139,16 @@ def reboot(args):
         print "No hostname"
         return 1
 
-    o = ipmitool("-H", hostname, "-U", usrname, "-P", password, "chassis", 
"power", "status")
+    o = ipmitool(*addInterfaceOption(["-H", hostname, "-U", usrname, "-P", 
password, "chassis", "power", "status"], args))
     if o.ret:
         print o.stderr
         return 1
     
 
     if "is on" in o.stdout:
-        o = ipmitool("-H", hostname, "-U", usrname, "-P", password, "chassis", 
"power", "cycle")
+        o = ipmitool(*addInterfaceOption(["-H", hostname, "-U", usrname, "-P", 
password, "chassis", "power", "cycle"], args))
     else:
-        o = ipmitool("-H", hostname, "-U", usrname, "-P", password, "chassis", 
"power", "reset")
+        o = ipmitool(*addInterfaceOption(["-H", hostname, "-U", usrname, "-P", 
password, "chassis", "power", "reset"], args))
         
     if o.ret:
         print o.stderr
@@ -157,7 +166,7 @@ def power(args):
         print "No hostname"
         return 1
 
-    o = ipmitool("-H", hostname, "-U", usrname, "-P", password, "chassis", 
"power", action)
+    o = ipmitool(*addInterfaceOption(["-H", hostname, "-U", usrname, "-P", 
password, "chassis", "power", action], args))
     if o.ret:
         print o.stderr
         return 1
@@ -168,7 +177,7 @@ def boot_or_reboot(args):
     hostname = args.get("hostname")
     usrname = args.get("usrname")
     password = args.get("password")
-    o = ipmitool("-H", hostname, "-U", usrname, "-P", password, "chassis", 
"power", "status")
+    o = ipmitool(*addInterfaceOption(["-H", hostname, "-U", usrname, "-P", 
password, "chassis", "power", "status"], args))
     if o.ret:
         print o.stderr
         return 1

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/16a51ee4/server/src/com/cloud/configuration/Config.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/Config.java 
b/server/src/com/cloud/configuration/Config.java
index 0c78c53..f3cb919 100755
--- a/server/src/com/cloud/configuration/Config.java
+++ b/server/src/com/cloud/configuration/Config.java
@@ -423,6 +423,7 @@ public enum Config {
        EnableBaremetalSecurityGroupAgentEcho("Advanced", 
ManagementServer.class, Boolean.class, 
"enable.baremetal.securitygroup.agent.echo", "false", "After starting provision 
process, periodcially echo security agent installed in the template. Treat 
provisioning as success only if echo successfully", null),
        IntervalToEchoBaremetalSecurityGroupAgent("Advanced", 
ManagementServer.class, Integer.class, 
"interval.baremetal.securitygroup.agent.echo", "10", "Interval to echo 
baremetal security group agent, in seconds", null),
        TimeoutToEchoBaremetalSecurityGroupAgent("Advanced", 
ManagementServer.class, Integer.class, 
"timeout.baremetal.securitygroup.agent.echo", "3600", "Timeout to echo 
baremetal security group agent, in seconds, the provisioning process will be 
treated as a failure", null),
+    BaremetalIpmiLanInterface("Advanced", ManagementServer.class, 
String.class, "baremetal.ipmi.lan.interface", "default", "option specified in 
-I option of impitool. candidates are: open/bmc/lipmi/lan/lanplus/free/imb, see 
ipmitool man page for details. default valule 'default' means using default 
option of ipmitool", null),
 
     ApiLimitEnabled("Advanced", ManagementServer.class, Boolean.class, 
"api.throttling.enabled", "false", "Enable/disable Api rate limit", null),
        ApiLimitInterval("Advanced", ManagementServer.class, Integer.class, 
"api.throttling.interval", "1", "Time interval (in seconds) to reset API 
count", null),

Reply via email to