Skip to content
This repository was archived by the owner on Mar 25, 2018. It is now read-only.

Commit f804932

Browse files
author
Adrian Cole
committed
Merge pull request #1275 from jclouds/issue1264
parse smartos in joyent
2 parents e533618 + d9f1182 commit f804932

File tree

3 files changed

+53
-39
lines changed

3 files changed

+53
-39
lines changed

compute/src/main/java/org/jclouds/compute/domain/OsFamily.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
import static com.google.common.base.Preconditions.checkNotNull;
2222

23-
import com.google.common.base.CaseFormat;
23+
import static com.google.common.base.CaseFormat.*;
2424

2525
/**
2626
* Running Operating system
@@ -29,7 +29,11 @@
2929
* @author Adrian Cole
3030
*/
3131
public enum OsFamily {
32-
UNRECOGNIZED, AIX, ARCH, CENTOS, DARWIN, DEBIAN, ESX, FEDORA, FREEBSD, GENTOO, HPUX, LINUX,
32+
UNRECOGNIZED, AIX, ARCH, CENTOS, DARWIN, DEBIAN, ESX, FEDORA, FREEBSD, GENTOO, HPUX, LINUX,
33+
/**
34+
* @see <a href="http://smartos.org">SmartOS</a>
35+
*/
36+
SMARTOS,
3337
/**
3438
* @see <a href="http://aws.amazon.com/amazon-linux-ami/">amazon linux ami</a>
3539
*/
@@ -46,12 +50,10 @@ public enum OsFamily {
4650
/**
4751
* Google Compute Engine Linux
4852
*/
49-
GCEL,
50-
SIGAR,
51-
SLACKWARE,
52-
SOLARIS, SUSE, TURBOLINUX, CLOUD_LINUX, UBUNTU, WINDOWS;
53+
GCEL, SIGAR, SLACKWARE, SOLARIS, SUSE, TURBOLINUX, CLOUD_LINUX, UBUNTU, WINDOWS;
54+
5355
public String value() {
54-
return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, name());
56+
return UPPER_UNDERSCORE.to(LOWER_HYPHEN, name());
5557
}
5658

5759
@Override
@@ -61,7 +63,7 @@ public String toString() {
6163

6264
public static OsFamily fromValue(String osFamily) {
6365
try {
64-
return valueOf(CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(osFamily, "osFamily")));
66+
return valueOf(LOWER_HYPHEN.to(UPPER_UNDERSCORE, checkNotNull(osFamily, "osFamily")));
6567
} catch (IllegalArgumentException e) {
6668
return UNRECOGNIZED;
6769
}

labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetToOperatingSystem.java

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,30 @@
1818
*/
1919
package org.jclouds.joyent.cloudapi.v6_5.compute.functions;
2020

21+
import static org.jclouds.compute.domain.OsFamily.UNRECOGNIZED;
22+
import static org.jclouds.compute.domain.OsFamily.fromValue;
23+
import static org.jclouds.compute.util.ComputeServiceUtils.parseVersionOrReturnEmptyString;
24+
2125
import java.util.List;
2226
import java.util.Map;
23-
import java.util.regex.Pattern;
2427

2528
import javax.inject.Inject;
26-
import javax.inject.Named;
2729

2830
import org.jclouds.compute.domain.OperatingSystem;
2931
import org.jclouds.compute.domain.OperatingSystem.Builder;
3032
import org.jclouds.compute.domain.OsFamily;
31-
import org.jclouds.compute.reference.ComputeServiceConstants;
32-
import org.jclouds.compute.util.ComputeServiceUtils;
3333
import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
34-
import org.jclouds.logging.Logger;
3534

3635
import com.google.common.base.Function;
3736
import com.google.common.base.Splitter;
3837
import com.google.common.collect.ImmutableList;
3938

4039
/**
41-
* A function for transforming a cloudApi specific Dataset into a generic
42-
* OperatingSystem object.
40+
* A function for transforming a cloudApi specific Dataset into a generic OperatingSystem object.
4341
*
4442
* @author Adrian Cole
4543
*/
4644
public class DatasetToOperatingSystem implements Function<Dataset, OperatingSystem> {
47-
public static final Pattern DEFAULT_PATTERN = Pattern.compile("(([^ ]*) ([0-9.]+) ?.*)");
48-
// Windows Machine 2008 R2 x64
49-
public static final Pattern WINDOWS_PATTERN = Pattern.compile("Windows (.*) (x[86][64])");
50-
51-
@javax.annotation.Resource
52-
@Named(ComputeServiceConstants.COMPUTE_LOGGER)
53-
protected Logger logger = Logger.NULL;
5445

5546
private final Map<OsFamily, Map<String, String>> osVersionMap;
5647

@@ -63,20 +54,24 @@ public OperatingSystem apply(Dataset from) {
6354
Builder builder = OperatingSystem.builder();
6455
builder.name(from.getName());
6556
builder.description(from.getUrn());
66-
builder.is64Bit(true);//TODO: verify
67-
57+
builder.is64Bit(true);// TODO: verify
58+
OsFamily family = UNRECOGNIZED;
59+
String version = "";
6860
List<String> pieces = ImmutableList.copyOf(Splitter.on(':').split(from.getUrn()));
6961
if (pieces.get(2).indexOf('-') != -1) {
7062
List<String> osFamVersion = ImmutableList.copyOf(Splitter.on('-').split(pieces.get(2)));
71-
OsFamily family = OsFamily.fromValue(osFamVersion.get(0));
72-
builder.family(family);
73-
if (family != OsFamily.UNRECOGNIZED)
74-
builder.version(ComputeServiceUtils.parseVersionOrReturnEmptyString(family, osFamVersion.get(1),
75-
osVersionMap));
63+
family = fromValue(osFamVersion.get(0));
64+
if (family != UNRECOGNIZED)
65+
version = osFamVersion.get(1);
7666
} else {
77-
builder.family(OsFamily.fromValue(pieces.get(2)));
67+
family = fromValue(pieces.get(2));
7868
}
69+
builder.family(family);
70+
if (family != UNRECOGNIZED)
71+
version = parseVersionOrReturnEmptyString(family, version, osVersionMap);
72+
if ("".equals(version))
73+
version = from.getVersion();
74+
builder.version(version);
7975
return builder.build();
8076
}
81-
8277
}

labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudTemplateBuilderLiveTest.java

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,20 @@
1818
*/
1919
package org.jclouds.joyent.joyentcloud;
2020

21+
import static com.google.common.base.Predicates.not;
22+
import static org.jclouds.compute.domain.OsFamily.SMARTOS;
23+
import static org.jclouds.compute.domain.OsFamily.UBUNTU;
2124
import static org.testng.Assert.assertEquals;
2225

26+
import java.io.IOException;
2327
import java.util.Set;
2428

25-
import org.jclouds.compute.domain.OsFamily;
2629
import org.jclouds.compute.domain.OsFamilyVersion64Bit;
2730
import org.jclouds.compute.domain.Template;
2831
import org.jclouds.compute.internal.BaseTemplateBuilderLiveTest;
2932
import org.testng.annotations.Test;
3033

3134
import com.google.common.base.Predicate;
32-
import com.google.common.base.Predicates;
3335
import com.google.common.collect.ImmutableSet;
3436

3537
/**
@@ -45,13 +47,14 @@ public JoyentCloudTemplateBuilderLiveTest() {
4547

4648
@Override
4749
protected Predicate<OsFamilyVersion64Bit> defineUnsupportedOperatingSystems() {
48-
return Predicates.not(new Predicate<OsFamilyVersion64Bit>() {
50+
return not(new Predicate<OsFamilyVersion64Bit>() {
4951

5052
@Override
5153
public boolean apply(OsFamilyVersion64Bit input) {
5254
switch (input.family) {
5355
case UBUNTU:
54-
return (input.version.equals("") || input.version.equals("10.04")) && input.is64Bit;
56+
return (input.version.equals("") || input.version.equals("10.04") || input.version.equals("12.04"))
57+
&& input.is64Bit;
5558
case DEBIAN:
5659
return input.is64Bit && !input.version.equals("5.0");
5760
case CENTOS:
@@ -66,12 +69,26 @@ public boolean apply(OsFamilyVersion64Bit input) {
6669
}
6770

6871
@Test
69-
public void testTemplateBuilder() {
72+
public void testTemplateBuilderSmartOS() throws IOException {
73+
Template smartTemplate = view.getComputeService().templateBuilder().osFamily(SMARTOS).build();
74+
assertEquals(smartTemplate.getImage().getOperatingSystem().is64Bit(), true);
75+
assertEquals(smartTemplate.getImage().getOperatingSystem().getVersion(), "1.6.3");
76+
assertEquals(smartTemplate.getImage().getOperatingSystem().getFamily(), SMARTOS);
77+
assertEquals(smartTemplate.getImage().getName(), "smartos");
78+
assertEquals(smartTemplate.getImage().getDefaultCredentials().getUser(), "root");
79+
assertEquals(smartTemplate.getLocation().getId(), "us-east-1");
80+
assertEquals(smartTemplate.getImage().getLocation().getId(), "us-east-1");
81+
assertEquals(smartTemplate.getHardware().getLocation().getId(), "us-east-1");
82+
}
83+
84+
@Test
85+
@Override
86+
public void testDefaultTemplateBuilder() {
7087
Template defaultTemplate = this.view.getComputeService().templateBuilder().build();
7188
assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true);
72-
assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "10.04");
73-
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
74-
assertEquals(defaultTemplate.getImage().getName(), "ubuntu-10.04");
89+
assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "12.04");
90+
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), UBUNTU);
91+
assertEquals(defaultTemplate.getImage().getName(), "ubuntu-12.04");
7592
assertEquals(defaultTemplate.getImage().getDefaultCredentials().getUser(), "root");
7693
assertEquals(defaultTemplate.getLocation().getId(), "us-east-1");
7794
assertEquals(defaultTemplate.getImage().getLocation().getId(), "us-east-1");

0 commit comments

Comments
 (0)