Return-Path: X-Original-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3A3B2D646 for ; Thu, 21 Feb 2013 23:44:18 +0000 (UTC) Received: (qmail 16948 invoked by uid 500); 21 Feb 2013 23:44:17 -0000 Delivered-To: apmail-incubator-cloudstack-commits-archive@incubator.apache.org Received: (qmail 16892 invoked by uid 500); 21 Feb 2013 23:44:17 -0000 Mailing-List: contact cloudstack-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cloudstack-dev@incubator.apache.org Delivered-To: mailing list cloudstack-commits@incubator.apache.org Received: (qmail 16709 invoked by uid 99); 21 Feb 2013 23:44:17 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Feb 2013 23:44:17 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 5081482E63D; Thu, 21 Feb 2013 23:44:17 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: frankzhang@apache.org To: cloudstack-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [3/7] git commit: refs/heads/master - CloudStack CLOUDSTACK-774 Supporting kickstart in CloudStack baremetal Message-Id: <20130221234417.5081482E63D@tyr.zones.apache.org> Date: Thu, 21 Feb 2013 23:44:17 +0000 (UTC) CloudStack CLOUDSTACK-774 Supporting kickstart in CloudStack baremetal adding missing scripts back Conflicts: client/pom.xml client/tomcatconf/commands.properties.in server/src/com/cloud/server/ManagementServerImpl.java Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/55b77c7c Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/55b77c7c Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/55b77c7c Branch: refs/heads/master Commit: 55b77c7c8f16f360666b06afb99d8ca0283b8881 Parents: 1f15c1e Author: frank Authored: Fri Feb 15 17:09:05 2013 -0800 Committer: frank Committed: Thu Feb 21 15:46:11 2013 -0800 ---------------------------------------------------------------------- client/pom.xml | 14 +- client/tomcatconf/commands.properties.in | 3 + client/tomcatconf/componentContext.xml.in | 3 + .../baremetal/manager/AddBaremetalHostCmd.java | 5 + .../cloud/baremetal/manager/BaremetalManager.java | 3 +- .../baremetal/manager/BaremetalManagerImpl.java | 9 ++ .../networkservice/AddBaremetalDhcpCmd.java | 6 +- .../networkservice/AddBaremetalPxeCmd.java | 6 +- .../networkservice/BareMetalPingServiceImpl.java | 6 + .../BaremetalKickStartPxeResource.java | 9 +- .../BaremetalKickStartServiceImpl.java | 5 + .../networkservice/BaremetalPxeManagerImpl.java | 14 +- .../networkservice/BaremetalPxeService.java | 2 + .../networkservice/BaremetalUserdataElement.java | 8 +- scripts/network/ping/baremetal_user_data.py | 87 +++++++++++++++ scripts/network/ping/prepare_kickstart_bootfile.py | 78 +++++++++++++ .../ping/prepare_kickstart_kernel_initrd.py | 54 +++++++++ .../src/com/cloud/network/NetworkServiceImpl.java | 17 +++- 18 files changed, 300 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/client/pom.xml ---------------------------------------------------------------------- diff --git a/client/pom.xml b/client/pom.xml index 5f219fe..73866ee 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -273,6 +273,12 @@ + + + + + + @@ -285,13 +291,7 @@ - - - - - + http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/client/tomcatconf/commands.properties.in ---------------------------------------------------------------------- diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index e1d0fb2..f03e8d5 100644 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -543,3 +543,6 @@ listVMSnapshot=15 createVMSnapshot=15 deleteVMSnapshot=15 revertToSnapshot=15 + +#### Baremetal commands +addBaremetalHost=1 http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/client/tomcatconf/componentContext.xml.in ---------------------------------------------------------------------- diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in index 23f8f2b..8169796 100644 --- a/client/tomcatconf/componentContext.xml.in +++ b/client/tomcatconf/componentContext.xml.in @@ -74,6 +74,9 @@ + + + http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/AddBaremetalHostCmd.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/AddBaremetalHostCmd.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/AddBaremetalHostCmd.java index f778a4f..f07b212 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/AddBaremetalHostCmd.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/AddBaremetalHostCmd.java @@ -30,7 +30,12 @@ public class AddBaremetalHostCmd extends AddHostCmd { private String vmIpAddress; public AddBaremetalHostCmd() { + } + + @Override + public void execute(){ this.getFullUrlParams().put(ApiConstants.BAREMETAL_DISCOVER_NAME, BareMetalDiscoverer.class.getName()); + super.execute(); } public String getVmIpAddress() { http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java index 1599050..6467c94 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java @@ -20,8 +20,9 @@ package com.cloud.baremetal.manager; import com.cloud.network.Network.Provider; import com.cloud.utils.component.Manager; +import com.cloud.utils.component.PluggableService; -public interface BaremetalManager extends Manager { +public interface BaremetalManager extends Manager, PluggableService { public static final String EchoSecurityGroupAgent = "EchoSecurityGroupAgent"; public static final String ExternalBaremetalSystemUrl = "ExternalBaremetalSystemUrl"; public static final String DO_PXE = "doPxe"; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java index b07a6bb..b41d6ca 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java @@ -18,6 +18,8 @@ // Automatically generated by addcopyright.py at 01/29/2013 package com.cloud.baremetal.manager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import javax.ejb.Local; @@ -110,4 +112,11 @@ public class BaremetalManagerImpl extends ManagerBase implements BaremetalManage return true; } + + @Override + public List> getCommands() { + List> cmds = new ArrayList>(); + cmds.add(AddBaremetalHostCmd.class); + return cmds; + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalDhcpCmd.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalDhcpCmd.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalDhcpCmd.java index d9d8bec..c749832 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalDhcpCmd.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalDhcpCmd.java @@ -26,6 +26,8 @@ import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseCmd.CommandType; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; @@ -48,10 +50,10 @@ public class AddBaremetalDhcpCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, required=true, description="the Physical Network ID") private Long physicalNetworkId; - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required = true, description="Pod Id") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, required = true, description="Pod Id") private Long podId; @Parameter(name=ApiConstants.DHCP_SERVER_TYPE, type=CommandType.STRING, required = true, description="Type of dhcp device") http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxeCmd.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxeCmd.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxeCmd.java index 54a9c02..63e1147 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxeCmd.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxeCmd.java @@ -26,6 +26,8 @@ import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseCmd.CommandType; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; @@ -46,10 +48,10 @@ public class AddBaremetalPxeCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, required=true, description="the Physical Network ID") private Long physicalNetworkId; - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="Pod Id") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, description="Pod Id") private Long podId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the external pxe device") http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java index 3e21750..d6b96a8 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java @@ -297,4 +297,10 @@ public class BareMetalPingServiceImpl extends BareMetalPxeServiceBase implements } return responses; } + + + @Override + public String getPxeServiceType() { + return BaremetalPxeManager.BaremetalPxeType.PING.toString(); + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java index 938b3ac..2b9b140 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java @@ -32,6 +32,7 @@ import com.cloud.agent.api.Command; import com.cloud.agent.api.PingCommand; import com.cloud.agent.api.PingRoutingCommand; import com.cloud.agent.api.routing.VmDataCommand; +import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; import com.cloud.utils.ssh.SSHCmdHelper; import com.cloud.vm.VirtualMachine.State; @@ -70,27 +71,27 @@ public class BaremetalKickStartPxeResource extends BaremetalPxeResourceBase { String prepareScript = "scripts/network/ping/prepare_kickstart_bootfile.py"; String prepareScriptPath = Script.findScript("", prepareScript); if (prepareScriptPath == null) { - throw new ConfigurationException("Can not find prepare_kickstart_bootfile.py at " + prepareScriptPath); + throw new ConfigurationException("Can not find prepare_kickstart_bootfile.py at " + prepareScript); } scp.put(prepareScriptPath, "/usr/bin/", "0755"); String cpScript = "scripts/network/ping/prepare_kickstart_kernel_initrd.py"; String cpScriptPath = Script.findScript("", cpScript); if (cpScriptPath == null) { - throw new ConfigurationException("Can not find prepare_kickstart_kernel_initrd.py at " + cpScriptPath); + throw new ConfigurationException("Can not find prepare_kickstart_kernel_initrd.py at " + cpScript); } scp.put(cpScriptPath, "/usr/bin/", "0755"); String userDataScript = "scripts/network/ping/baremetal_user_data.py"; String userDataScriptPath = Script.findScript("", userDataScript); if (userDataScriptPath == null) { - throw new ConfigurationException("Can not find baremetal_user_data.py at " + userDataScriptPath); + throw new ConfigurationException("Can not find baremetal_user_data.py at " + userDataScript); } scp.put(userDataScriptPath, "/usr/bin/", "0755"); return true; } catch (Exception e) { - throw new ConfigurationException(e.getMessage()); + throw new CloudRuntimeException(e); } finally { if (sshConnection != null) { sshConnection.close(); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/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 617893f..ba5fb0d 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java @@ -233,6 +233,11 @@ public class BaremetalKickStartServiceImpl extends BareMetalPxeServiceBase imple responses.add(getApiResponse(vo)); } return responses; + } + + @Override + public String getPxeServiceType() { + return BaremetalPxeManager.BaremetalPxeType.KICK_START.toString(); } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java index 35cbaee..6288f91 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java @@ -54,7 +54,6 @@ import com.cloud.resource.UnableDeleteHostException; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.uservm.UserVm; import com.cloud.utils.StringUtils; -import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ManagerBase; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.db.SearchCriteria2; @@ -107,12 +106,13 @@ public class BaremetalPxeManagerImpl extends ManagerBase implements BaremetalPxe } protected BaremetalPxeService getServiceByType(String type) { - BaremetalPxeService _service; - _service = AdapterBase.getAdapterByName(_services, type); - if (_service == null) { - throw new CloudRuntimeException("Cannot find PXE service for " + type); - } - return _service; + for (BaremetalPxeService service : _services) { + if (service.getPxeServiceType().equals(type)) { + return service; + } + } + + throw new CloudRuntimeException("Cannot find PXE service for " + type); } @Override http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeService.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeService.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeService.java old mode 100644 new mode 100755 index 8504f82..9fd560f --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeService.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeService.java @@ -46,6 +46,8 @@ public interface BaremetalPxeService extends Adapter { List listPxeServers(ListBaremetalPxePingServersCmd cmd); + String getPxeServiceType(); + public static final String PXE_PARAM_TYPE = "type"; public static final String PXE_PARAM_ZONE = "zone"; public static final String PXE_PARAM_POD = "pod"; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java index ae58254..3d9f581 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java @@ -149,7 +149,7 @@ public class BaremetalUserdataElement extends AdapterBase implements NetworkElem @Override public boolean canEnableIndividualServices() { // TODO Auto-generated method stub - return false; + return true; } @@ -162,14 +162,12 @@ public class BaremetalUserdataElement extends AdapterBase implements NetworkElem @Override public boolean destroy(Network network, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - return false; + return true; } @Override public boolean verifyServicesCombination(Set services) { - // TODO Auto-generated method stub - return false; + return true; } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/scripts/network/ping/baremetal_user_data.py ---------------------------------------------------------------------- diff --git a/scripts/network/ping/baremetal_user_data.py b/scripts/network/ping/baremetal_user_data.py new file mode 100755 index 0000000..dd4a8f7 --- /dev/null +++ b/scripts/network/ping/baremetal_user_data.py @@ -0,0 +1,87 @@ +''' +Created on Jul 2, 2012 + +@author: frank +''' +import sys +import os +import os.path +import base64 + +HTML_ROOT = "/var/www/html/" + +def writeIfNotHere(fileName, texts): + if not os.path.exists(fileName): + entries = [] + else: + f = open(fileName, 'r') + entries = f.readlines() + f.close() + + texts = [ "%s\n" % t for t in texts ] + need = False + for t in texts: + if not t in entries: + entries.append(t) + need = True + + if need: + f = open(fileName, 'w') + f.write(''.join(entries)) + f.close() + +def createRedirectEntry(vmIp, folder, filename): + entry = "RewriteRule ^%s$ ../%s/%%{REMOTE_ADDR}/%s [L,NC,QSA]" % (filename, folder, filename) + htaccessFolder="/var/www/html/latest" + htaccessFile=os.path.join(htaccessFolder, ".htaccess") + if not os.path.exists(htaccessFolder): + os.makedirs(htaccessFolder) + writeIfNotHere(htaccessFile, ["Options +FollowSymLinks", "RewriteEngine On", entry]) + + htaccessFolder = os.path.join("/var/www/html/", folder, vmIp) + if not os.path.exists(htaccessFolder): + os.makedirs(htaccessFolder) + htaccessFile=os.path.join(htaccessFolder, ".htaccess") + entry="Options -Indexes\nOrder Deny,Allow\nDeny from all\nAllow from %s" % vmIp + f = open(htaccessFile, 'w') + f.write(entry) + f.close() + + if folder in ['metadata', 'meta-data']: + entry1="RewriteRule ^meta-data/(.+)$ ../%s/%%{REMOTE_ADDR}/$1 [L,NC,QSA]" % folder + htaccessFolder="/var/www/html/latest" + htaccessFile=os.path.join(htaccessFolder, ".htaccess") + entry2="RewriteRule ^meta-data/$ ../%s/%%{REMOTE_ADDR}/meta-data [L,NC,QSA]" % folder + writeIfNotHere(htaccessFile, [entry1, entry2]) + + +def addUserData(vmIp, folder, fileName, contents): + + baseFolder = os.path.join(HTML_ROOT, folder, vmIp) + if not os.path.exists(baseFolder): + os.makedirs(baseFolder) + + createRedirectEntry(vmIp, folder, fileName) + + datafileName = os.path.join(HTML_ROOT, folder, vmIp, fileName) + metaManifest = os.path.join(HTML_ROOT, folder, vmIp, "meta-data") + if folder == "userdata": + if contents != "none": + contents = base64.urlsafe_b64decode(contents) + else: + contents = "" + + f = open(datafileName, 'w') + f.write(contents) + f.close() + + if folder == "metadata" or folder == "meta-data": + writeIfNotHere(metaManifest, fileName) + +if __name__ == '__main__': + string = sys.argv[1] + allEntires = string.split(";") + for entry in allEntires: + (vmIp, folder, fileName, contents) = entry.split(',', 3) + addUserData(vmIp, folder, fileName, contents) + sys.exit(0) http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/scripts/network/ping/prepare_kickstart_bootfile.py ---------------------------------------------------------------------- diff --git a/scripts/network/ping/prepare_kickstart_bootfile.py b/scripts/network/ping/prepare_kickstart_bootfile.py new file mode 100755 index 0000000..4378293 --- /dev/null +++ b/scripts/network/ping/prepare_kickstart_bootfile.py @@ -0,0 +1,78 @@ +#!/usr/bin/python +# Copyright 2012 Citrix Systems, Inc. Licensed under the +# Apache License, Version 2.0 (the "License"); you may not use this +# file except in compliance with the License. Citrix Systems, Inc. +# reserves all rights not expressly granted by the License. +# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Automatically generated by addcopyright.py at 04/03/2012 + + + + + +# Usage: prepare_tftp_bootfile.py tftp_dir mac cifs_server share directory image_to_restore cifs_username cifs_password +import os, sys +from sys import exit +from os import makedirs +from os.path import exists, join + +fmt1 = '''DEFAULT default +PROMPT 1 +TIMEOUT 26 +DISPLAY boot.msg +LABEL default +KERNEL %s +APPEND ramdisk_size=66000 initrd=%s ksdevice=%s ks=%s +''' +fmt2 = '''DEFAULT default +PROMPT 1 +TIMEOUT 26 +DISPLAY boot.msg +LABEL default +KERNEL %s +APPEND ramdisk_size=66000 initrd=%s ks=%s +''' + +tftp_dir = '' +mac = '' +kernel = '' +initrd = '' +ks_file = '' +ks_device = '' + +def prepare(): + try: + pxelinux = join(tftp_dir, "pxelinux.cfg") + if exists(pxelinux) == False: + makedirs(pxelinux) + + cfg_name = "01-" + mac.replace(':','-').lower() + cfg_path = join(pxelinux, cfg_name) + f = open(cfg_path, "w") + if ks_device == '': + stuff = fmt2 % (kernel, initrd, ks_file) + else: + stuff = fmt1 % (kernel, initrd, ks_device, ks_file) + f.write(stuff) + f.close() + return 0 + except Exception, e: + print e + return 1 + + +if __name__ == "__main__": + if len(sys.argv) < 7: + print "Usage: prepare_kickstart_bootfile.py tftp_dir mac kernel initrd ks_file ks_device" + exit(1) + + (tftp_dir, mac, kernel, initrd, ks_file, ks_device) = sys.argv[1:] + + ret = prepare() + exit(ret) http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/scripts/network/ping/prepare_kickstart_kernel_initrd.py ---------------------------------------------------------------------- diff --git a/scripts/network/ping/prepare_kickstart_kernel_initrd.py b/scripts/network/ping/prepare_kickstart_kernel_initrd.py new file mode 100755 index 0000000..52ae02c --- /dev/null +++ b/scripts/network/ping/prepare_kickstart_kernel_initrd.py @@ -0,0 +1,54 @@ +#!/usr/bin/python + +import sys +import tempfile +import os.path +import os + +iso_folder = '' +copy_to = '' + +def cmd(cmdstr, err=True): + if os.system(cmdstr) != 0 and err: + raise Exception("Failed to run shell command: %s" % cmdstr) + +def prepare(): + try: + kernel = os.path.join(copy_to, "vmlinuz") + initrd = os.path.join(copy_to, "initrd.img") + if os.path.exists(kernel) and os.path.exists(initrd): + print "Having template(%s) prepared already, skip copying" % copy_to + return 0 + else: + if not os.path.exists(copy_to): + os.makedirs(copy_to) + + mnt_path = tempfile.mkdtemp() + try: + mnt = "mount %s %s" % (iso_folder, mnt_path) + cmd(mnt) + + kernel = os.path.join(mnt_path, "vmlinuz") + initrd = os.path.join(mnt_path, "initrd.img") + cp = "cp -f %s %s/" % (kernel, copy_to) + cmd(cp) + cp = "cp -f %s %s/" % (initrd, copy_to) + cmd(cp) + finally: + umnt = "umount %s" % mnt_path + cmd(umnt, False) + rm = "rm -r %s" % mnt_path + cmd(rm, False) + return 0 + except Exception, e: + print e + return 1 + +if __name__ == "__main__": + if len(sys.argv) < 3: + print "Usage: prepare_kickstart_kerneal_initrd.py path_to_kernel_initrd_iso path_kernel_initrd_copy_to" + sys.exit(1) + + (iso_folder, copy_to) = sys.argv[1:] + sys.exit(prepare()) + http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/scripts/util/ipmi.py ---------------------------------------------------------------------- diff --git a/scripts/util/ipmi.py b/scripts/util/ipmi.py old mode 100644 new mode 100755 http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/55b77c7c/server/src/com/cloud/network/NetworkServiceImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index 37b4903..d4150d5 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -1937,7 +1937,10 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { addDefaultSecurityGroupProviderToPhysicalNetwork(pNetwork.getId()); // add VPCVirtualRouter as the defualt network service provider - addDefaultVpcVirtualRouterToPhysicalNetwork(pNetwork.getId()); + addDefaultVpcVirtualRouterToPhysicalNetwork(pNetwork.getId()); + + // add baremetal pxe/dhcp provider to the physical network + addDefaultBaremetalProvidersToPhysicalNetwork(pNetwork.getId()); txn.commit(); return pNetwork; @@ -2745,6 +2748,18 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { element.addElement(nsp.getId(), VirtualRouterProviderType.VirtualRouter); return nsp; + } + + + private PhysicalNetworkServiceProvider addDefaultBaremetalProvidersToPhysicalNetwork(long physicalNetworkId) { + PhysicalNetworkVO pvo = _physicalNetworkDao.findById(physicalNetworkId); + DataCenterVO dvo = _dcDao.findById(pvo.getDataCenterId()); + if (dvo.getNetworkType() == NetworkType.Basic) { + addProviderToPhysicalNetwork(physicalNetworkId, "BaremetalDhcpProvider", null, null); + addProviderToPhysicalNetwork(physicalNetworkId, "BaremetalPxeProvider", null, null); + addProviderToPhysicalNetwork(physicalNetworkId, "BaremetaUserdataProvider", null, null); + } + return null; } protected PhysicalNetworkServiceProvider addDefaultVpcVirtualRouterToPhysicalNetwork(long physicalNetworkId) {