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;