mirror of https://github.com/apache/jclouds.git
Merge branch 'master' of github.com:jclouds/jclouds
This commit is contained in:
commit
de2ed9558a
|
@ -41,7 +41,8 @@ public class EC2PropertiesBuilder extends PropertiesBuilder {
|
|||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_EC2_ENDPOINT, "https://ec2.us-east-1.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_AWS_EXPIREINTERVAL, "60");
|
||||
properties.setProperty(PROPERTY_EC2_AMI_OWNERS, "063491364108");
|
||||
// alestic and canonical
|
||||
properties.setProperty(PROPERTY_EC2_AMI_OWNERS, "063491364108,099720109477");
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
|
|
@ -55,6 +55,7 @@ import org.jclouds.aws.ec2.domain.RunningInstance;
|
|||
import org.jclouds.aws.ec2.services.InstanceClient;
|
||||
import org.jclouds.compute.ComputeService;
|
||||
import org.jclouds.compute.ComputeServiceContext;
|
||||
import org.jclouds.compute.domain.Architecture;
|
||||
import org.jclouds.compute.domain.ComputeMetadata;
|
||||
import org.jclouds.compute.domain.Image;
|
||||
import org.jclouds.compute.domain.NodeMetadata;
|
||||
|
@ -109,7 +110,8 @@ public class EC2ComputeServiceContextModule extends EC2ContextModule {
|
|||
TemplateBuilder provideTemplate(Map<String, ? extends Location> locations,
|
||||
Map<String, ? extends Image> images, Map<String, ? extends Size> sizes,
|
||||
Location defaultLocation) {
|
||||
return new TemplateBuilderImpl(locations, images, sizes, defaultLocation).osFamily(UBUNTU);
|
||||
return new TemplateBuilderImpl(locations, images, sizes, defaultLocation).architecture(
|
||||
Architecture.X86_32).osFamily(UBUNTU);
|
||||
}
|
||||
|
||||
@Singleton
|
||||
|
@ -291,7 +293,7 @@ public class EC2ComputeServiceContextModule extends EC2ContextModule {
|
|||
@Singleton
|
||||
@Named(PROPERTY_EC2_AMI_OWNERS)
|
||||
String[] amiOwners(@Named(PROPERTY_EC2_AMI_OWNERS) String amiOwners) {
|
||||
return Iterables.toArray(Splitter.on('.').split(amiOwners), String.class);
|
||||
return Iterables.toArray(Splitter.on(',').split(amiOwners), String.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
@ -311,7 +313,7 @@ public class EC2ComputeServiceContextModule extends EC2ContextModule {
|
|||
if (image != null)
|
||||
images.add(image);
|
||||
else
|
||||
holder.logger.debug("<< images(%s) didn't parse", from.getId());
|
||||
holder.logger.trace("<< image(%s) didn't parse", from.getId());
|
||||
}
|
||||
}
|
||||
holder.logger.debug("<< images(%d)", images.size());
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
package org.jclouds.aws.ec2.compute.functions;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
@ -25,6 +26,7 @@ import javax.annotation.Resource;
|
|||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.aws.ec2.domain.Image.ImageType;
|
||||
import org.jclouds.compute.domain.Architecture;
|
||||
import org.jclouds.compute.domain.Image;
|
||||
import org.jclouds.compute.domain.OsFamily;
|
||||
|
@ -35,32 +37,48 @@ import org.jclouds.logging.Logger;
|
|||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
||||
/**
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Singleton
|
||||
public class ImageParser implements
|
||||
Function<org.jclouds.aws.ec2.domain.Image, Image> {
|
||||
public class ImageParser implements Function<org.jclouds.aws.ec2.domain.Image, Image> {
|
||||
@Resource
|
||||
@Named(ComputeServiceConstants.COMPUTE_LOGGER)
|
||||
protected Logger logger = Logger.NULL;
|
||||
|
||||
// alestic-32-eu-west-1/debian-4.0-etch-base-20081130
|
||||
public static final Pattern ALESTIC_PATTERN = Pattern
|
||||
public static final Pattern CANONICAL_PATTERN = Pattern
|
||||
.compile(".*/([^-]*)-([^-]*)-.*-(.*)(\\.manifest.xml)?");
|
||||
|
||||
public static final Map<String, String> NAME_VERSION_MAP = ImmutableMap
|
||||
.<String, String> builder().put("hardy", "8.04").put("intrepid", "8.10").put("jaunty",
|
||||
"9.04").put("karmic", "9.10").put("lucid", "10.04").put("maverick", "10.10")
|
||||
.build();
|
||||
|
||||
@Override
|
||||
public Image apply(org.jclouds.aws.ec2.domain.Image from) {
|
||||
if (from.getImageLocation().indexOf("test") != -1) {
|
||||
logger.trace("skipping test image(%s)", from.getId());
|
||||
return null;
|
||||
}
|
||||
if (from.getImageType() != ImageType.MACHINE) {
|
||||
logger.trace("skipping as not a machine image(%s)", from.getId());
|
||||
return null;
|
||||
}
|
||||
OsFamily os = null;
|
||||
String name = "";
|
||||
String description = from.getDescription() != null ? from.getDescription() : from
|
||||
.getImageLocation();
|
||||
String osDescription = from.getImageLocation();
|
||||
String version = "";
|
||||
|
||||
Matcher matcher = ALESTIC_PATTERN.matcher(from.getImageLocation());
|
||||
Matcher matcher = CANONICAL_PATTERN.matcher(from.getImageLocation());
|
||||
if (matcher.find()) {
|
||||
try {
|
||||
os = OsFamily.fromValue(matcher.group(1));
|
||||
name = matcher.group(2);// TODO no field for os version
|
||||
version = matcher.group(3).replace("\\.manifest.xml", "");
|
||||
// normalize versions across ubuntu from alestic and canonical
|
||||
if (NAME_VERSION_MAP.containsKey(name))
|
||||
name = NAME_VERSION_MAP.get(name);
|
||||
version = matcher.group(3).replace(".manifest.xml", "");
|
||||
} catch (IllegalArgumentException e) {
|
||||
logger.debug("<< didn't match os(%s)", matcher.group(1));
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ public class DescribeImagesResponseHandler extends ParseSax.HandlerWithResult<Se
|
|||
@Resource
|
||||
protected Logger logger = Logger.NULL;
|
||||
|
||||
private Set<Image> contents = Sets.newHashSet();
|
||||
private Set<Image> contents = Sets.newLinkedHashSet();
|
||||
private StringBuilder currentText = new StringBuilder();
|
||||
|
||||
private Architecture architecture;
|
||||
|
|
|
@ -28,6 +28,8 @@ import org.jclouds.ssh.jsch.config.JschSshClientModule;
|
|||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
|
@ -42,16 +44,22 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
|
|||
|
||||
@Test
|
||||
public void testTemplateBuilderCanUseImageId() {
|
||||
client.templateBuilder().imageId("ami-d57f93bc").build();
|
||||
client.templateBuilder().imageId(Iterables.get(client.getImages().keySet(), 0)).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTemplateBuilder() {
|
||||
Template defaultTemplate = client.templateBuilder().build();
|
||||
assert (defaultTemplate.getImage().getId().startsWith("ami-")) : defaultTemplate;
|
||||
assertEquals(defaultTemplate.getImage().getName(), "9.10");
|
||||
assertEquals(defaultTemplate.getImage().getArchitecture(), Architecture.X86_32);
|
||||
assertEquals(defaultTemplate.getImage().getOsFamily(), OsFamily.UBUNTU);
|
||||
assertEquals(defaultTemplate.getLocation().getId(), "us-east-1");
|
||||
assertEquals(defaultTemplate.getSize().getCores(), 1.0d);
|
||||
client.templateBuilder().osFamily(OsFamily.UBUNTU).smallest().architecture(
|
||||
Architecture.X86_32).imageId("ami-7e28ca17").build();
|
||||
client.templateBuilder().osFamily(OsFamily.UBUNTU).smallest().architecture(
|
||||
Architecture.X86_32).imageId("ami-bb709dd2").build();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -30,6 +30,7 @@ import org.jclouds.aws.domain.Region;
|
|||
import org.jclouds.aws.ec2.compute.functions.ImageParser;
|
||||
import org.jclouds.aws.ec2.domain.Image;
|
||||
import org.jclouds.aws.ec2.xml.DescribeImagesResponseHandler;
|
||||
import org.jclouds.compute.domain.OsFamily;
|
||||
import org.jclouds.http.functions.BaseHandlerTest;
|
||||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||
|
@ -44,6 +45,80 @@ import com.google.common.collect.Iterables;
|
|||
@Test(groups = "unit", testName = "compute.PropertiesTest")
|
||||
public class ImageParserTest extends BaseHandlerTest {
|
||||
|
||||
public void testParseAlesticCanonicalImage() {
|
||||
InputStream is = getClass().getResourceAsStream("/ec2/alestic_canonical.xml");
|
||||
|
||||
Set<Image> result = parseImages(is);
|
||||
assertEquals(result.size(), 6);
|
||||
|
||||
ImageParser parser = new ImageParser();
|
||||
org.jclouds.compute.domain.Image ubuntuHardy = parser.apply(Iterables.get(result, 0));
|
||||
|
||||
assertEquals(ubuntuHardy.getArchitecture(), org.jclouds.compute.domain.Architecture.X86_32);
|
||||
assertEquals(ubuntuHardy.getDescription(),
|
||||
"ubuntu-images-us/ubuntu-hardy-8.04-i386-server-20091130.manifest.xml");
|
||||
assertEquals(ubuntuHardy.getId(), "ami-7e28ca17");
|
||||
assertEquals(ubuntuHardy.getLocationId(), "default");
|
||||
assertEquals(ubuntuHardy.getName(), "8.04");
|
||||
assertEquals(ubuntuHardy.getOsDescription(),
|
||||
"ubuntu-images-us/ubuntu-hardy-8.04-i386-server-20091130.manifest.xml");
|
||||
assertEquals(ubuntuHardy.getOsFamily(), OsFamily.UBUNTU);
|
||||
assertEquals(ubuntuHardy.getUserMetadata(), ImmutableMap.<String, String> of("owner",
|
||||
"099720109477"));
|
||||
assertEquals(ubuntuHardy.getVersion(), "20091130");
|
||||
|
||||
org.jclouds.compute.domain.Image alesticKarmic = parser.apply(Iterables.get(result, 1));
|
||||
|
||||
assertEquals(alesticKarmic.getArchitecture(), org.jclouds.compute.domain.Architecture.X86_32);
|
||||
assertEquals(alesticKarmic.getDescription(),
|
||||
"alestic/ubuntu-9.10-karmic-base-20090623.manifest.xml");
|
||||
assertEquals(alesticKarmic.getId(), "ami-19a34270");
|
||||
assertEquals(alesticKarmic.getLocationId(), "default");
|
||||
assertEquals(alesticKarmic.getName(), "9.10");
|
||||
assertEquals(alesticKarmic.getOsDescription(),
|
||||
"alestic/ubuntu-9.10-karmic-base-20090623.manifest.xml");
|
||||
assertEquals(alesticKarmic.getOsFamily(), OsFamily.UBUNTU);
|
||||
assertEquals(alesticKarmic.getUserMetadata(), ImmutableMap.<String, String> of("owner",
|
||||
"063491364108"));
|
||||
assertEquals(alesticKarmic.getVersion(), "20090623");
|
||||
|
||||
org.jclouds.compute.domain.Image ubuntuKarmic = parser.apply(Iterables.get(result, 2));
|
||||
|
||||
assertEquals(ubuntuKarmic.getArchitecture(), org.jclouds.compute.domain.Architecture.X86_32);
|
||||
assertEquals(ubuntuKarmic.getDescription(),
|
||||
"ubuntu-images-us/ubuntu-karmic-9.10-i386-server-20100121.manifest.xml");
|
||||
assertEquals(ubuntuKarmic.getId(), "ami-bb709dd2");
|
||||
assertEquals(ubuntuKarmic.getLocationId(), "default");
|
||||
assertEquals(ubuntuKarmic.getName(), "9.10");
|
||||
assertEquals(ubuntuKarmic.getOsDescription(),
|
||||
"ubuntu-images-us/ubuntu-karmic-9.10-i386-server-20100121.manifest.xml");
|
||||
assertEquals(ubuntuKarmic.getOsFamily(), OsFamily.UBUNTU);
|
||||
assertEquals(ubuntuKarmic.getUserMetadata(), ImmutableMap.<String, String> of("owner",
|
||||
"099720109477"));
|
||||
assertEquals(ubuntuKarmic.getVersion(), "20100121");
|
||||
|
||||
// should skip testing image
|
||||
assert parser.apply(Iterables.get(result, 3)) == null;
|
||||
|
||||
org.jclouds.compute.domain.Image alesticHardy = parser.apply(Iterables.get(result, 4));
|
||||
|
||||
assertEquals(alesticHardy.getArchitecture(), org.jclouds.compute.domain.Architecture.X86_32);
|
||||
assertEquals(alesticHardy.getDescription(),
|
||||
"alestic/ubuntu-8.04-hardy-base-20080905.manifest.xml");
|
||||
assertEquals(alesticHardy.getId(), "ami-c0fa1ea9");
|
||||
assertEquals(alesticHardy.getLocationId(), "default");
|
||||
assertEquals(alesticHardy.getName(), "8.04");
|
||||
assertEquals(alesticHardy.getOsDescription(),
|
||||
"alestic/ubuntu-8.04-hardy-base-20080905.manifest.xml");
|
||||
assertEquals(alesticHardy.getOsFamily(), OsFamily.UBUNTU);
|
||||
assertEquals(alesticHardy.getUserMetadata(), ImmutableMap.<String, String> of("owner",
|
||||
"063491364108"));
|
||||
assertEquals(alesticHardy.getVersion(), "20080905");
|
||||
|
||||
// should skip kernel
|
||||
assert parser.apply(Iterables.get(result, 5)) == null;
|
||||
}
|
||||
|
||||
public void testParseVostokImage() {
|
||||
InputStream is = getClass().getResourceAsStream("/ec2/vostok.xml");
|
||||
|
||||
|
@ -78,7 +153,7 @@ public class ImageParserTest extends BaseHandlerTest {
|
|||
|
||||
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
|
||||
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
|
||||
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT });
|
||||
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT }).atLeastOnce();
|
||||
replay(request);
|
||||
handler.setContext(request);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
<?xml version="1.0"?>
|
||||
<DescribeImagesResponse xmlns="http://ec2.amazonaws.com/doc/2009-11-30/">
|
||||
<requestId>6104eee1-affd-49d7-92a0-516cab8a8ba6</requestId>
|
||||
<imagesSet>
|
||||
<item>
|
||||
<imageId>ami-7e28ca17</imageId>
|
||||
<imageLocation>ubuntu-images-us/ubuntu-hardy-8.04-i386-server-20091130.manifest.xml</imageLocation>
|
||||
<imageState>available</imageState>
|
||||
<imageOwnerId>099720109477</imageOwnerId>
|
||||
<isPublic>true</isPublic>
|
||||
<architecture>i386</architecture>
|
||||
<imageType>machine</imageType>
|
||||
<kernelId>aki-92ba58fb</kernelId>
|
||||
<ramdiskId>ari-94ba58fd</ramdiskId>
|
||||
<rootDeviceType>instance-store</rootDeviceType>
|
||||
<blockDeviceMapping />
|
||||
</item>
|
||||
<item>
|
||||
<imageId>ami-19a34270</imageId>
|
||||
<imageLocation>alestic/ubuntu-9.10-karmic-base-20090623.manifest.xml</imageLocation>
|
||||
<imageState>available</imageState>
|
||||
<imageOwnerId>063491364108</imageOwnerId>
|
||||
<isPublic>true</isPublic>
|
||||
<architecture>i386</architecture>
|
||||
<imageType>machine</imageType>
|
||||
<kernelId>aki-a71cf9ce</kernelId>
|
||||
<ramdiskId>ari-a51cf9cc</ramdiskId>
|
||||
<rootDeviceType>instance-store</rootDeviceType>
|
||||
<blockDeviceMapping />
|
||||
</item>
|
||||
<item>
|
||||
<imageId>ami-bb709dd2</imageId>
|
||||
<imageLocation>ubuntu-images-us/ubuntu-karmic-9.10-i386-server-20100121.manifest.xml</imageLocation>
|
||||
<imageState>available</imageState>
|
||||
<imageOwnerId>099720109477</imageOwnerId>
|
||||
<isPublic>true</isPublic>
|
||||
<architecture>i386</architecture>
|
||||
<imageType>machine</imageType>
|
||||
<kernelId>aki-5f15f636</kernelId>
|
||||
<ramdiskId>ari-d5709dbc</ramdiskId>
|
||||
<rootDeviceType>instance-store</rootDeviceType>
|
||||
<blockDeviceMapping />
|
||||
</item>
|
||||
<item>
|
||||
<imageId>ami-190fe070</imageId>
|
||||
<imageLocation>ubuntu-images-testing-us/ubuntu-lucid-daily-amd64-desktop-20100317.manifest.xml</imageLocation>
|
||||
<imageState>available</imageState>
|
||||
<imageOwnerId>099720109477</imageOwnerId>
|
||||
<isPublic>true</isPublic>
|
||||
<architecture>x86_64</architecture>
|
||||
<imageType>machine</imageType>
|
||||
<kernelId>aki-11c72878</kernelId>
|
||||
<name>ubuntu-images-testing/ubuntu-lucid-daily-amd64-desktop-20100317</name>
|
||||
<rootDeviceType>instance-store</rootDeviceType>
|
||||
<blockDeviceMapping />
|
||||
</item>
|
||||
<item>
|
||||
<imageId>ami-c0fa1ea9</imageId>
|
||||
<imageLocation>alestic/ubuntu-8.04-hardy-base-20080905.manifest.xml</imageLocation>
|
||||
<imageState>available</imageState>
|
||||
<imageOwnerId>063491364108</imageOwnerId>
|
||||
<isPublic>true</isPublic>
|
||||
<architecture>i386</architecture>
|
||||
<imageType>machine</imageType>
|
||||
<kernelId>aki-a71cf9ce</kernelId>
|
||||
<ramdiskId>ari-a51cf9cc</ramdiskId>
|
||||
<rootDeviceType>instance-store</rootDeviceType>
|
||||
<blockDeviceMapping />
|
||||
</item>
|
||||
<item>
|
||||
<imageId>aki-fd15f694</imageId>
|
||||
<imageLocation>ubuntu-kernels-us/ubuntu-karmic-amd64-linux-image-2.6.31-302-ec2-v-2.6.31-302.7-kernel.img.manifest.xml</imageLocation>
|
||||
<imageState>available</imageState>
|
||||
<imageOwnerId>099720109477</imageOwnerId>
|
||||
<isPublic>true</isPublic>
|
||||
<architecture>x86_64</architecture>
|
||||
<imageType>kernel</imageType>
|
||||
<rootDeviceType>instance-store</rootDeviceType>
|
||||
<blockDeviceMapping />
|
||||
</item>
|
||||
</imagesSet>
|
||||
</DescribeImagesResponse>
|
|
@ -85,6 +85,7 @@ Options can also be specified for extension modules
|
|||
{:after-marker #(.afterMarker %1 %2)
|
||||
:in-directory #(.inDirectory %1 %2)
|
||||
:max-results #(.maxResults %1 %2)
|
||||
:with-details #(when %2 (.withDetails %1))
|
||||
:recursive #(when %2 (.recursive %1))})
|
||||
|
||||
(defn list-container
|
||||
|
|
|
@ -48,6 +48,7 @@
|
|||
(is (upload-blob "container" "dir/blob2" "blob2"))
|
||||
(is (= 3 (count (list-container "container"))))
|
||||
(is (= 4 (count (list-container "container" :recursive true))))
|
||||
(is (= 3 (count (list-container "container" :with-details true))))
|
||||
(is (= 1 (count (list-container "container" :in-directory "dir")))))
|
||||
|
||||
(deftest download-blob-test
|
||||
|
|
|
@ -89,17 +89,17 @@ public class InitBuilder extends ScriptBuilder {
|
|||
"tail",
|
||||
newStatementList(
|
||||
call("default"),
|
||||
interpret("tail {varl}LOG_DIR{varr}{fs}stdout.log")))
|
||||
interpret("tail {varl}LOG_DIR{varr}{fs}stdout.log{lf}")))
|
||||
.put(
|
||||
"tailerr",
|
||||
newStatementList(
|
||||
call("default"),
|
||||
interpret("tail {varl}LOG_DIR{varr}{fs}stderr.log")))
|
||||
interpret("tail {varl}LOG_DIR{varr}{fs}stderr.log{lf}")))
|
||||
.put(
|
||||
"run",
|
||||
newStatementList(
|
||||
call("default"),
|
||||
interpret("{varl}INSTANCE_HOME{varr}{fs}{varl}INSTANCE_NAME{varr}.{sh}")))
|
||||
interpret("{varl}INSTANCE_HOME{varr}{fs}{varl}INSTANCE_NAME{varr}.{sh}{lf}")))
|
||||
.build()));
|
||||
}
|
||||
}
|
|
@ -19,6 +19,7 @@
|
|||
package org.jclouds.scriptbuilder.domain;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
import static org.jclouds.scriptbuilder.domain.Statements.interpret;
|
||||
|
||||
import java.util.Collections;
|
||||
|
@ -42,6 +43,7 @@ import com.google.common.collect.Maps;
|
|||
* @author Adrian Cole
|
||||
*/
|
||||
public class CreateRunScript implements Statement {
|
||||
public final static String MARKER = "END_OF_SCRIPT";
|
||||
final String instanceName;
|
||||
final Iterable<String> exports;
|
||||
final String pwd;
|
||||
|
@ -57,6 +59,7 @@ public class CreateRunScript implements Statement {
|
|||
this.exports = checkNotNull(exports, "exports");
|
||||
this.pwd = checkNotNull(pwd, "pwd").replaceAll("[/\\\\]", "{fs}");
|
||||
this.execLines = checkNotNull(execLines, "execLines");
|
||||
checkState(execLines.length > 0, "you must pass something to execute");
|
||||
}
|
||||
|
||||
public static class AddTitleToFile implements Statement {
|
||||
|
@ -142,36 +145,81 @@ public class CreateRunScript implements Statement {
|
|||
Map<String, String> tokenMap = ShellToken.tokenValueMap(family);
|
||||
String runScript = Utils.replaceTokens(pwd + "{fs}" + instanceName + ".{sh}", tokenMap);
|
||||
statements.add(interpret(String.format("{md} %s{lf}", pwd)));
|
||||
statements.add(interpret(String.format("{rm} %s 2{closeFd}{lf}", runScript)));
|
||||
for (String line : Splitter.on(ShellToken.LF.to(family)).split(
|
||||
ShellToken.BEGIN_SCRIPT.to(family))) {
|
||||
if (!line.equals(""))
|
||||
statements.add(appendToFile(line, runScript, family));
|
||||
}
|
||||
statements.add(new AddTitleToFile(instanceName, runScript));
|
||||
statements
|
||||
.add(appendToFile(Utils.writeZeroPath(family).replace(ShellToken.LF.to(family), ""),
|
||||
runScript, family));
|
||||
statements.add(new AddExportToFile("instanceName", instanceName, runScript));
|
||||
for (String export : exports) {
|
||||
statements.add(new AddExportToFile(export, Utils.replaceTokens("{varl}"
|
||||
+ CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, export) + "{varr}",
|
||||
tokenMap), runScript));
|
||||
}
|
||||
statements.add(appendToFile("{cd} " + pwd, runScript, family));
|
||||
for (String execLine : execLines) {
|
||||
statements.add(appendToFile(execLine, runScript, family));
|
||||
}
|
||||
for (String line : Splitter.on(ShellToken.LF.to(family)).split(
|
||||
ShellToken.END_SCRIPT.to(family))) {
|
||||
if (!line.equals(""))
|
||||
statements.add(appendToFile(line, runScript, family));
|
||||
if (family == OsFamily.UNIX) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("\n");
|
||||
addUnixRunScriptHeader(family, runScript, builder);
|
||||
builder.append("\n");
|
||||
addUnixRunScript(runScript, builder);
|
||||
builder.append("\n");
|
||||
addUnixRunScriptFooter(family, runScript, builder);
|
||||
builder.append("\n");
|
||||
statements.add(interpret(builder.toString()));
|
||||
} else {
|
||||
statements.add(interpret(String.format("{rm} %s 2{closeFd}{lf}", runScript)));
|
||||
for (String line : Splitter.on(ShellToken.LF.to(family)).split(
|
||||
ShellToken.BEGIN_SCRIPT.to(family))) {
|
||||
if (!line.equals(""))
|
||||
statements.add(appendToFile(line, runScript, family));
|
||||
}
|
||||
statements.add(new AddTitleToFile(instanceName, runScript));
|
||||
statements.add(appendToFile(Utils.writeZeroPath(family).replace(ShellToken.LF.to(family),
|
||||
""), runScript, family));
|
||||
statements.add(new AddExportToFile("instanceName", instanceName, runScript));
|
||||
for (String export : exports) {
|
||||
statements.add(new AddExportToFile(export, Utils.replaceTokens("{varl}"
|
||||
+ CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, export) + "{varr}",
|
||||
tokenMap), runScript));
|
||||
}
|
||||
statements.add(appendToFile("{cd} " + pwd, runScript, family));
|
||||
for (String execLine : execLines) {
|
||||
statements.add(appendToFile(execLine, runScript, family));
|
||||
}
|
||||
for (String line : Splitter.on(ShellToken.LF.to(family)).split(
|
||||
ShellToken.END_SCRIPT.to(family))) {
|
||||
if (!line.equals(""))
|
||||
statements.add(appendToFile(line, runScript, family));
|
||||
}
|
||||
}
|
||||
statements.add(interpret(Utils.replaceTokens(OS_TO_CHMOD_PATTERN.get(family), ImmutableMap
|
||||
.of("file", runScript))));
|
||||
return new StatementList(statements).render(family);
|
||||
}
|
||||
|
||||
private void addUnixRunScriptFooter(OsFamily family, String runScript, StringBuilder builder) {
|
||||
builder.append("# add runscript footer\n");
|
||||
builder.append("cat >> ").append(runScript).append(" <<'").append(MARKER).append("'\n");
|
||||
builder.append(ShellToken.END_SCRIPT.to(family));
|
||||
builder.append(MARKER).append("\n");
|
||||
}
|
||||
|
||||
private void addUnixRunScript(String runScript, StringBuilder builder) {
|
||||
builder.append("# add desired commands from the user\n");
|
||||
builder.append("cat >> ").append(runScript).append(" <<'").append(MARKER).append("'\n");
|
||||
builder.append("cd ").append(pwd).append("\n");
|
||||
for (String execLine : execLines) {
|
||||
builder.append(execLine).append("\n");
|
||||
}
|
||||
builder.append(MARKER).append("\n");
|
||||
}
|
||||
|
||||
private void addUnixRunScriptHeader(OsFamily family, String runScript, StringBuilder builder) {
|
||||
builder.append("# create runscript header\n");
|
||||
builder.append("cat > ").append(runScript).append(" <<").append(MARKER).append("\n");
|
||||
builder.append(ShellToken.BEGIN_SCRIPT.to(family));
|
||||
builder.append("PROMPT_COMMAND='echo -ne \"\\033]0;").append(instanceName).append(
|
||||
"\\007\"'\n");
|
||||
builder.append(Utils.writeZeroPath(family));
|
||||
builder.append("export INSTANCE_NAME='").append(instanceName).append("'\n");
|
||||
for (String export : exports) {
|
||||
String variableNameInUpper = CaseFormat.LOWER_CAMEL
|
||||
.to(CaseFormat.UPPER_UNDERSCORE, export);
|
||||
builder.append("export ").append(variableNameInUpper).append("='$").append(
|
||||
variableNameInUpper).append("'\n");
|
||||
}
|
||||
builder.append(MARKER).append("\n");
|
||||
}
|
||||
|
||||
private Statement appendToFile(String line, String runScript, OsFamily family) {
|
||||
String quote = "";
|
||||
if (!ShellToken.VQ.to(family).equals("")) {
|
||||
|
|
|
@ -28,6 +28,7 @@ import org.jclouds.scriptbuilder.util.Utils;
|
|||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
|
@ -39,6 +40,8 @@ import com.google.common.collect.Lists;
|
|||
*/
|
||||
public class SwitchArg implements Statement {
|
||||
|
||||
private static final String INDENT = " ";
|
||||
|
||||
public static final Map<OsFamily, String> OS_TO_SWITCH_PATTERN = ImmutableMap.of(OsFamily.UNIX,
|
||||
"case ${arg} in\n", OsFamily.WINDOWS, "goto CASE_%{arg}\r\n");
|
||||
|
||||
|
@ -84,10 +87,22 @@ public class SwitchArg implements Statement {
|
|||
"arg", arg + "")));
|
||||
|
||||
for (Entry<String, Statement> entry : valueToActions.entrySet()) {
|
||||
|
||||
StringBuilder actionBuilder = new StringBuilder();
|
||||
boolean inRunScript = false;
|
||||
for (String line : Splitter.on(ShellToken.LF.to(family)).split(
|
||||
entry.getValue().render(family))) {
|
||||
if (!inRunScript)
|
||||
actionBuilder.append(INDENT);
|
||||
actionBuilder.append(line).append(ShellToken.LF.to(family));
|
||||
if (line.indexOf(CreateRunScript.MARKER) != -1) {
|
||||
inRunScript = inRunScript ? false : true;
|
||||
}
|
||||
}
|
||||
actionBuilder.delete(actionBuilder.lastIndexOf(ShellToken.LF.to(family)), actionBuilder
|
||||
.length());
|
||||
switchClause.append(Utils.replaceTokens(OS_TO_CASE_PATTERN.get(family), ImmutableMap.of(
|
||||
"value", entry.getKey(), "action", entry.getValue().render(family).replaceAll(
|
||||
"^", " ").replace(ShellToken.LF.to(family),
|
||||
ShellToken.LF.to(family) + " "))));
|
||||
"value", entry.getKey(), "action", actionBuilder.toString())));
|
||||
}
|
||||
|
||||
switchClause.append(OS_TO_END_SWITCH_PATTERN.get(family));
|
||||
|
|
|
@ -61,41 +61,53 @@ init)
|
|||
default || exit 1
|
||||
mkebsboot || exit 1
|
||||
mkdir -p $INSTANCE_HOME
|
||||
rm $INSTANCE_HOME/mkebsboot.sh 2>&-
|
||||
echo '#!/bin/bash'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'set +u'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'shopt -s xpg_echo'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'shopt -s expand_aliases'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "PROMPT_COMMAND='echo -ne \"\033]0;mkebsboot\007\"'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export INSTANCE_NAME='mkebsboot'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export IMAGE_DIR='$IMAGE_DIR'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export EBS_DEVICE='$EBS_DEVICE'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export EBS_MOUNT_POINT='$EBS_MOUNT_POINT'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export INSTANCE_NAME='$INSTANCE_NAME'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export INSTANCE_HOME='$INSTANCE_HOME'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export LOG_DIR='$LOG_DIR'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'cd $INSTANCE_HOME'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'echo creating a filesystem and mounting the ebs volume'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'mkdir -p $IMAGE_DIR $EBS_MOUNT_POINT'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'rm -rf $IMAGE_DIR/*'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'yes| mkfs -t ext3 $EBS_DEVICE 2>&-'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'mount $EBS_DEVICE $EBS_MOUNT_POINT'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'echo making a local working copy of the boot disk'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'rsync -ax --exclude /ubuntu/.bash_history --exclude /home/*/.bash_history --exclude /etc/ssh/ssh_host_* --exclude /etc/ssh/moduli --exclude /etc/udev/rules.d/*persistent-net.rules --exclude /var/lib/ec2/* --exclude=/mnt/* --exclude=/proc/* --exclude=/tmp/* --exclude=/dev/log / $IMAGE_DIR'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'echo preparing the local working copy'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'touch $IMAGE_DIR/etc/init.d/ec2-init-user-data'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'echo copying the local working copy to the ebs mount'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'cd $IMAGE_DIR'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'tar -cSf - * | tar xf - -C $EBS_MOUNT_POINT'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'echo size of ebs'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'du -sk $EBS_MOUNT_POINT'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'echo size of source'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'du -sk $IMAGE_DIR'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'rm -rf $IMAGE_DIR/*'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'umount $EBS_MOUNT_POINT'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'echo ----COMPLETE----'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'exit 0'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
|
||||
# create runscript header
|
||||
cat > $INSTANCE_HOME/mkebsboot.sh <<END_OF_SCRIPT
|
||||
#!/bin/bash
|
||||
set +u
|
||||
shopt -s xpg_echo
|
||||
shopt -s expand_aliases
|
||||
PROMPT_COMMAND='echo -ne "\033]0;mkebsboot\007"'
|
||||
export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin
|
||||
export INSTANCE_NAME='mkebsboot'
|
||||
export IMAGE_DIR='$IMAGE_DIR'
|
||||
export EBS_DEVICE='$EBS_DEVICE'
|
||||
export EBS_MOUNT_POINT='$EBS_MOUNT_POINT'
|
||||
export INSTANCE_NAME='$INSTANCE_NAME'
|
||||
export INSTANCE_HOME='$INSTANCE_HOME'
|
||||
export LOG_DIR='$LOG_DIR'
|
||||
END_OF_SCRIPT
|
||||
|
||||
# add desired commands from the user
|
||||
cat >> $INSTANCE_HOME/mkebsboot.sh <<'END_OF_SCRIPT'
|
||||
cd $INSTANCE_HOME
|
||||
echo creating a filesystem and mounting the ebs volume
|
||||
mkdir -p $IMAGE_DIR $EBS_MOUNT_POINT
|
||||
rm -rf $IMAGE_DIR/*
|
||||
yes| mkfs -t ext3 $EBS_DEVICE 2>&-
|
||||
mount $EBS_DEVICE $EBS_MOUNT_POINT
|
||||
echo making a local working copy of the boot disk
|
||||
rsync -ax --exclude /ubuntu/.bash_history --exclude /home/*/.bash_history --exclude /etc/ssh/ssh_host_* --exclude /etc/ssh/moduli --exclude /etc/udev/rules.d/*persistent-net.rules --exclude /var/lib/ec2/* --exclude=/mnt/* --exclude=/proc/* --exclude=/tmp/* --exclude=/dev/log / $IMAGE_DIR
|
||||
echo preparing the local working copy
|
||||
touch $IMAGE_DIR/etc/init.d/ec2-init-user-data
|
||||
echo copying the local working copy to the ebs mount
|
||||
cd $IMAGE_DIR
|
||||
tar -cSf - * | tar xf - -C $EBS_MOUNT_POINT
|
||||
echo size of ebs
|
||||
du -sk $EBS_MOUNT_POINT
|
||||
echo size of source
|
||||
du -sk $IMAGE_DIR
|
||||
rm -rf $IMAGE_DIR/*
|
||||
umount $EBS_MOUNT_POINT
|
||||
echo ----COMPLETE----
|
||||
END_OF_SCRIPT
|
||||
|
||||
# add runscript footer
|
||||
cat >> $INSTANCE_HOME/mkebsboot.sh <<'END_OF_SCRIPT'
|
||||
exit 0
|
||||
END_OF_SCRIPT
|
||||
|
||||
chmod u+x $INSTANCE_HOME/mkebsboot.sh
|
||||
;;
|
||||
status)
|
||||
|
@ -117,12 +129,15 @@ start)
|
|||
;;
|
||||
tail)
|
||||
default || exit 1
|
||||
tail $LOG_DIR/stdout.log;;
|
||||
tail $LOG_DIR/stdout.log
|
||||
;;
|
||||
tailerr)
|
||||
default || exit 1
|
||||
tail $LOG_DIR/stderr.log;;
|
||||
tail $LOG_DIR/stderr.log
|
||||
;;
|
||||
run)
|
||||
default || exit 1
|
||||
$INSTANCE_HOME/$INSTANCE_NAME.sh;;
|
||||
$INSTANCE_HOME/$INSTANCE_NAME.sh
|
||||
;;
|
||||
esac
|
||||
exit 0
|
||||
|
|
|
@ -108,14 +108,17 @@ goto CASE_%1
|
|||
:CASE_tail
|
||||
call :default
|
||||
if errorlevel 1 goto abort
|
||||
tail %LOG_DIR%\stdout.logGOTO END_SWITCH
|
||||
tail %LOG_DIR%\stdout.log
|
||||
GOTO END_SWITCH
|
||||
:CASE_tailerr
|
||||
call :default
|
||||
if errorlevel 1 goto abort
|
||||
tail %LOG_DIR%\stderr.logGOTO END_SWITCH
|
||||
tail %LOG_DIR%\stderr.log
|
||||
GOTO END_SWITCH
|
||||
:CASE_run
|
||||
call :default
|
||||
if errorlevel 1 goto abort
|
||||
%INSTANCE_HOME%\%INSTANCE_NAME%.cmdGOTO END_SWITCH
|
||||
%INSTANCE_HOME%\%INSTANCE_NAME%.cmd
|
||||
GOTO END_SWITCH
|
||||
:END_SWITCH
|
||||
exit /b 0
|
||||
|
|
|
@ -59,21 +59,33 @@ init)
|
|||
default || exit 1
|
||||
mkebsboot || exit 1
|
||||
mkdir -p $INSTANCE_HOME
|
||||
rm $INSTANCE_HOME/mkebsboot.sh 2>&-
|
||||
echo '#!/bin/bash'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'set +u'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'shopt -s xpg_echo'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'shopt -s expand_aliases'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "PROMPT_COMMAND='echo -ne \"\033]0;mkebsboot\007\"'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export INSTANCE_NAME='mkebsboot'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export TMP_DIR='$TMP_DIR'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export INSTANCE_NAME='$INSTANCE_NAME'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export INSTANCE_HOME='$INSTANCE_HOME'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo "export LOG_DIR='$LOG_DIR'">>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'cd $INSTANCE_HOME'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'find /'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
echo 'exit 0'>>$INSTANCE_HOME/mkebsboot.sh
|
||||
|
||||
# create runscript header
|
||||
cat > $INSTANCE_HOME/mkebsboot.sh <<END_OF_SCRIPT
|
||||
#!/bin/bash
|
||||
set +u
|
||||
shopt -s xpg_echo
|
||||
shopt -s expand_aliases
|
||||
PROMPT_COMMAND='echo -ne "\033]0;mkebsboot\007"'
|
||||
export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin
|
||||
export INSTANCE_NAME='mkebsboot'
|
||||
export TMP_DIR='$TMP_DIR'
|
||||
export INSTANCE_NAME='$INSTANCE_NAME'
|
||||
export INSTANCE_HOME='$INSTANCE_HOME'
|
||||
export LOG_DIR='$LOG_DIR'
|
||||
END_OF_SCRIPT
|
||||
|
||||
# add desired commands from the user
|
||||
cat >> $INSTANCE_HOME/mkebsboot.sh <<'END_OF_SCRIPT'
|
||||
cd $INSTANCE_HOME
|
||||
find /
|
||||
END_OF_SCRIPT
|
||||
|
||||
# add runscript footer
|
||||
cat >> $INSTANCE_HOME/mkebsboot.sh <<'END_OF_SCRIPT'
|
||||
exit 0
|
||||
END_OF_SCRIPT
|
||||
|
||||
chmod u+x $INSTANCE_HOME/mkebsboot.sh
|
||||
;;
|
||||
status)
|
||||
|
@ -95,12 +107,15 @@ start)
|
|||
;;
|
||||
tail)
|
||||
default || exit 1
|
||||
tail $LOG_DIR/stdout.log;;
|
||||
tail $LOG_DIR/stdout.log
|
||||
;;
|
||||
tailerr)
|
||||
default || exit 1
|
||||
tail $LOG_DIR/stderr.log;;
|
||||
tail $LOG_DIR/stderr.log
|
||||
;;
|
||||
run)
|
||||
default || exit 1
|
||||
$INSTANCE_HOME/$INSTANCE_NAME.sh;;
|
||||
$INSTANCE_HOME/$INSTANCE_NAME.sh
|
||||
;;
|
||||
esac
|
||||
exit 0
|
||||
|
|
|
@ -1,15 +1,27 @@
|
|||
mkdir -p /tmp/$USER/scripttest
|
||||
rm /tmp/$USER/scripttest/yahooprod.sh 2>&-
|
||||
echo '#!/bin/bash'>>/tmp/$USER/scripttest/yahooprod.sh
|
||||
echo 'set +u'>>/tmp/$USER/scripttest/yahooprod.sh
|
||||
echo 'shopt -s xpg_echo'>>/tmp/$USER/scripttest/yahooprod.sh
|
||||
echo 'shopt -s expand_aliases'>>/tmp/$USER/scripttest/yahooprod.sh
|
||||
echo "PROMPT_COMMAND='echo -ne \"\033]0;yahooprod\007\"'">>/tmp/$USER/scripttest/yahooprod.sh
|
||||
echo 'export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin'>>/tmp/$USER/scripttest/yahooprod.sh
|
||||
echo "export INSTANCE_NAME='yahooprod'">>/tmp/$USER/scripttest/yahooprod.sh
|
||||
echo "export JAVA_HOME='$JAVA_HOME'">>/tmp/$USER/scripttest/yahooprod.sh
|
||||
echo 'cd /tmp/$USER/scripttest'>>/tmp/$USER/scripttest/yahooprod.sh
|
||||
echo 'echo hello'>>/tmp/$USER/scripttest/yahooprod.sh
|
||||
echo 'echo $JAVA_HOME/bin/java -DinstanceName=$INSTANCE_NAME myServer.Main'>>/tmp/$USER/scripttest/yahooprod.sh
|
||||
echo 'exit 0'>>/tmp/$USER/scripttest/yahooprod.sh
|
||||
|
||||
# create runscript header
|
||||
cat > /tmp/$USER/scripttest/yahooprod.sh <<END_OF_SCRIPT
|
||||
#!/bin/bash
|
||||
set +u
|
||||
shopt -s xpg_echo
|
||||
shopt -s expand_aliases
|
||||
PROMPT_COMMAND='echo -ne "\033]0;yahooprod\007"'
|
||||
export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin
|
||||
export INSTANCE_NAME='yahooprod'
|
||||
export JAVA_HOME='$JAVA_HOME'
|
||||
END_OF_SCRIPT
|
||||
|
||||
# add desired commands from the user
|
||||
cat >> /tmp/$USER/scripttest/yahooprod.sh <<'END_OF_SCRIPT'
|
||||
cd /tmp/$USER/scripttest
|
||||
echo hello
|
||||
echo $JAVA_HOME/bin/java -DinstanceName=$INSTANCE_NAME myServer.Main
|
||||
END_OF_SCRIPT
|
||||
|
||||
# add runscript footer
|
||||
cat >> /tmp/$USER/scripttest/yahooprod.sh <<'END_OF_SCRIPT'
|
||||
exit 0
|
||||
END_OF_SCRIPT
|
||||
|
||||
chmod u+x /tmp/$USER/scripttest/yahooprod.sh
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
mkdir -p /tmp/$USER/scripttest
|
||||
|
||||
# create runscript header
|
||||
(
|
||||
cat <<END_OF_SCRIPT
|
||||
#!/bin/bash
|
||||
set +u
|
||||
shopt -s xpg_echo
|
||||
shopt -s expand_aliases
|
||||
PROMPT_COMMAND='echo -ne "\033]0;yahooprod\007"'
|
||||
export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin
|
||||
export INSTANCE_NAME='yahooprod'
|
||||
export JAVA_HOME='$JAVA_HOME'
|
||||
END_OF_SCRIPT
|
||||
) > /tmp/$USER/scripttest/yahooprod.sh
|
||||
|
||||
# add desired commands from the user
|
||||
(
|
||||
cat <<'END_OF_SCRIPT'
|
||||
cd /tmp/$USER/scripttest
|
||||
echo hello
|
||||
echo $JAVA_HOME/bin/java -DinstanceName=$INSTANCE_NAME myServer.Main
|
||||
END_OF_SCRIPT
|
||||
) >> /tmp/$USER/scripttest/yahooprod.sh
|
||||
|
||||
# add runscript footer
|
||||
(
|
||||
cat <<'END_OF_SCRIPT'
|
||||
exit 0
|
||||
END_OF_SCRIPT
|
||||
) >> /tmp/$USER/scripttest/yahooprod.sh
|
||||
|
||||
chmod u+x /tmp/$USER/scripttest/yahooprod.sh
|
Loading…
Reference in New Issue