Repository: cloudstack
Updated Branches:
  refs/heads/bugfix/CID-1230587-2ndtime b6401b04f -> 1c2a29ffa


Move the kickstart pxe vr commands to the virtualroutingresource instead
of using a direct ssh channel.

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

Branch: refs/heads/bugfix/CID-1230587-2ndtime
Commit: 1c2a29ffae463f6fa4d79a39f378f3137298d602
Parents: b6401b0
Author: Hugo Trippaers <htrippa...@schubergphilis.com>
Authored: Thu Oct 2 11:48:09 2014 +0200
Committer: Hugo Trippaers <htrippa...@schubergphilis.com>
Committed: Thu Oct 2 11:48:09 2014 +0200

----------------------------------------------------------------------
 .../PrepareKickstartPxeServerCommand.java       |  3 +-
 .../resource/virtualnetwork/ConfigHelper.java   | 22 ++++++++-
 .../resource/virtualnetwork/VRScripts.java      |  2 +
 .../BaremetalKickStartServiceImpl.java          | 52 +++++---------------
 4 files changed, 38 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1c2a29ff/core/src/com/cloud/agent/api/baremetal/PrepareKickstartPxeServerCommand.java
----------------------------------------------------------------------
diff --git 
a/core/src/com/cloud/agent/api/baremetal/PrepareKickstartPxeServerCommand.java 
b/core/src/com/cloud/agent/api/baremetal/PrepareKickstartPxeServerCommand.java
index 6f7ddad..b8fb5d0 100755
--- 
a/core/src/com/cloud/agent/api/baremetal/PrepareKickstartPxeServerCommand.java
+++ 
b/core/src/com/cloud/agent/api/baremetal/PrepareKickstartPxeServerCommand.java
@@ -1,3 +1,4 @@
+//
 // Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -15,7 +16,7 @@
 // specific language governing permissions and limitations
 // under the License.
 //
-// Automatically generated by addcopyright.py at 01/29/2013
+
 package com.cloud.agent.api.baremetal;
 
 import com.cloud.agent.api.Command;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1c2a29ff/core/src/com/cloud/agent/resource/virtualnetwork/ConfigHelper.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/ConfigHelper.java 
b/core/src/com/cloud/agent/resource/virtualnetwork/ConfigHelper.java
index 92d8329..90ec0ec 100644
--- a/core/src/com/cloud/agent/resource/virtualnetwork/ConfigHelper.java
+++ b/core/src/com/cloud/agent/resource/virtualnetwork/ConfigHelper.java
@@ -30,7 +30,9 @@ import org.apache.commons.codec.binary.Base64;
 import com.google.gson.Gson;
 
 import com.cloud.agent.api.BumpUpPriorityCommand;
+import com.cloud.agent.api.Command;
 import com.cloud.agent.api.SetupGuestNetworkCommand;
+import com.cloud.agent.api.baremetal.PrepareKickstartPxeServerCommand;
 import com.cloud.agent.api.routing.CreateIpAliasCommand;
 import com.cloud.agent.api.routing.DeleteIpAliasCommand;
 import com.cloud.agent.api.routing.DhcpEntryCommand;
@@ -66,7 +68,7 @@ import com.cloud.utils.net.NetUtils;
 
 public class ConfigHelper {
 
-    public static List<ConfigItem> generateCommandCfg(NetworkElementCommand 
cmd) {
+    public static List<ConfigItem> generateCommandCfg(Command cmd) {
         List<ConfigItem> cfg;
         if (cmd instanceof SetPortForwardingRulesVpcCommand) {
             cfg = generateConfig((SetPortForwardingRulesVpcCommand)cmd);
@@ -110,6 +112,8 @@ public class ConfigHelper {
             cfg = generateConfig((SetSourceNatCommand)cmd);
         } else if (cmd instanceof IpAssocCommand) {
             cfg = generateConfig((IpAssocCommand)cmd);
+        } else if (cmd instanceof PrepareKickstartPxeServerCommand) {
+            cfg = generateConfig((PrepareKickstartPxeServerCommand)cmd);
         } else {
             return null;
         }
@@ -716,4 +720,20 @@ public class ConfigHelper {
         return cfg;
     }
 
+    private static List<ConfigItem> 
generateConfig(PrepareKickstartPxeServerCommand cmd) {
+        LinkedList<ConfigItem> cfg = new LinkedList<>();
+
+        String args = String.format("%s %s %s %s %s %s", cmd.getKernel(), 
cmd.getInitrd(), cmd.getTemplateUuid(), String.format("01-%s", 
cmd.getMac().replaceAll(":", "-"))
+                .toLowerCase(), cmd.getKsFile(), cmd.getMac());
+        ScriptConfigItem c = new ScriptConfigItem(VRScripts.PXE_CONFIG, args);
+        cfg.add(c);
+
+        //args = String.format("%s %s %s", mgmtNic.getIp4Address(), 
internalServerIp, mgmtNic.getGateway());
+        args = "10.1.1.1 10.1.1.2 10.1.1.3"; //FIXME dummy values for test
+        c = new ScriptConfigItem(VRScripts.BAREMETAL_SNAT, args);
+        cfg.add(c);
+
+        return cfg;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1c2a29ff/core/src/com/cloud/agent/resource/virtualnetwork/VRScripts.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VRScripts.java 
b/core/src/com/cloud/agent/resource/virtualnetwork/VRScripts.java
index 7d4253b..ec50089 100644
--- a/core/src/com/cloud/agent/resource/virtualnetwork/VRScripts.java
+++ b/core/src/com/cloud/agent/resource/virtualnetwork/VRScripts.java
@@ -54,6 +54,8 @@ public class VRScripts {
     protected static final String VPC_STATIC_NAT = "vpc_staticnat.sh";
     protected static final String VPC_STATIC_ROUTE = "vpc_staticroute.sh";
     protected static final String VPN_L2TP = "vpn_l2tp.sh";
+    protected static final String PXE_CONFIG = "prepare_pxe.sh";
+    protected static final String BAREMETAL_SNAT = "baremetal_snat.sh";
 
     protected static final String VR_CFG = "vr_cfg.sh";
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1c2a29ff/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java
 
b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java
index 0c52915..2d9aede 100755
--- 
a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java
+++ 
b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java
@@ -18,9 +18,7 @@
 // Automatically generated by addcopyright.py at 01/29/2013
 package com.cloud.baremetal.networkservice;
 
-import java.io.File;
 import java.net.URI;
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -30,8 +28,6 @@ import java.util.Map;
 import javax.ejb.Local;
 import javax.inject.Inject;
 
-import com.cloud.configuration.Config;
-
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.AddBaremetalKickStartPxeCmd;
@@ -41,11 +37,12 @@ import 
org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.baremetal.IpmISetBootDevCommand;
-import com.cloud.agent.api.baremetal.PrepareKickstartPxeServerCommand;
 import com.cloud.agent.api.baremetal.IpmISetBootDevCommand.BootDev;
+import com.cloud.agent.api.baremetal.PrepareKickstartPxeServerCommand;
 import com.cloud.baremetal.database.BaremetalPxeDao;
 import com.cloud.baremetal.database.BaremetalPxeVO;
 import com.cloud.baremetal.networkservice.BaremetalPxeManager.BaremetalPxeType;
+import com.cloud.configuration.Config;
 import com.cloud.dc.DataCenter;
 import com.cloud.deploy.DeployDestination;
 import com.cloud.exception.AgentUnavailableException;
@@ -69,12 +66,10 @@ import com.cloud.resource.ServerResource;
 import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.dao.VMTemplateDao;
 import com.cloud.uservm.UserVm;
-import com.cloud.utils.Pair;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.QueryBuilder;
 import com.cloud.utils.db.SearchCriteria.Op;
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.ssh.SshHelper;
 import com.cloud.vm.DomainRouterVO;
 import com.cloud.vm.NicProfile;
 import com.cloud.vm.NicVO;
@@ -162,24 +157,6 @@ public class BaremetalKickStartServiceImpl extends 
BareMetalPxeServiceBase imple
         return Arrays.asList(ks, kernel, initrd);
     }
 
-    public File getSystemVMKeyFile() {
-        URL url = 
this.getClass().getClassLoader().getResource("scripts/vm/systemvm/id_rsa.cloud");
-        File keyFile = null;
-        if (url != null) {
-            keyFile = new File(url.getPath());
-        }
-        if (keyFile == null || !keyFile.exists()) {
-            keyFile = new 
File("/usr/share/cloudstack-common/scripts/vm/systemvm/id_rsa.cloud");
-        }
-        if (!keyFile.exists()) {
-            throw new CloudRuntimeException(String.format("cannot find 
id_rsa.cloud"));
-        }
-        if (!keyFile.exists()) {
-            s_logger.error("Unable to locate id_rsa.cloud in your setup at " + 
keyFile.toString());
-        }
-        return keyFile;
-    }
-
     private boolean preparePxeInBasicZone(VirtualMachineProfile profile, 
NicProfile nic, DeployDestination dest, ReservationContext context) throws 
AgentUnavailableException, OperationTimedoutException {
         NetworkVO nwVO = _nwDao.findById(nic.getNetworkId());
         QueryBuilder<BaremetalPxeVO> sc = 
QueryBuilder.create(BaremetalPxeVO.class);
@@ -232,20 +209,17 @@ public class BaremetalKickStartServiceImpl extends 
BareMetalPxeServiceBase imple
         }
 
         List<String> tuple =  parseKickstartUrl(profile);
-        String cmd =  String.format("/usr/bin/prepare_pxe.sh %s %s %s %s %s 
%s", tuple.get(1), tuple.get(2), profile.getTemplate().getUuid(),
-                String.format("01-%s", nic.getMacAddress().replaceAll(":", 
"-")).toLowerCase(), tuple.get(0), nic.getMacAddress().toLowerCase());
-        s_logger.debug(String.format("prepare pxe on virtual router[ip:%s], 
cmd: %s", mgmtNic.getIp4Address(), cmd));
-        Pair<Boolean, String> ret = 
SshHelper.sshExecute(mgmtNic.getIp4Address(), 3922, "root", 
getSystemVMKeyFile(), null, cmd);
-        if (!ret.first()) {
-            throw new CloudRuntimeException(String.format("failed preparing 
PXE in virtual router[id:%s], because %s", vr.getId(), ret.second()));
-        }
-
-        //String internalServerIp = "10.223.110.231";
-        cmd = String.format("/usr/bin/baremetal_snat.sh %s %s %s", 
mgmtNic.getIp4Address(), internalServerIp, mgmtNic.getGateway());
-        s_logger.debug(String.format("prepare SNAT on virtual router[ip:%s], 
cmd: %s", mgmtNic.getIp4Address(), cmd));
-        ret = SshHelper.sshExecute(mgmtNic.getIp4Address(), 3922, "root", 
getSystemVMKeyFile(), null, cmd);
-        if (!ret.first()) {
-            throw new CloudRuntimeException(String.format("failed preparing 
PXE in virtual router[id:%s], because %s", vr.getId(), ret.second()));
+        PrepareKickstartPxeServerCommand cmd = new 
PrepareKickstartPxeServerCommand();
+        cmd.setKsFile(tuple.get(0));
+        cmd.setKernel(tuple.get(1));
+        cmd.setInitrd(tuple.get(2));
+        cmd.setMac(nic.getMacAddress().toLowerCase());
+        cmd.setTemplateUuid(profile.getTemplate().getUuid());
+
+        Answer answer = _agentMgr.send(vr.getHostId(), cmd);
+        if (!answer.getResult()) {
+            s_logger.warn("Unable to configure the PXE server on virtual 
router " + vr.getUuid());
+            return false;
         }
 
         return true;

Reply via email to