Repository: jclouds-labs Updated Branches: refs/heads/2.0.x f294ab108 -> 1fbb79721
Improve OS detection and SSH configuration in Packet Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/1fbb7972 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/1fbb7972 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/1fbb7972 Branch: refs/heads/2.0.x Commit: 1fbb7972188cab146fecb431b74c6e097a841dd3 Parents: f294ab1 Author: El del tallat <[email protected]> Authored: Mon Jun 12 08:31:51 2017 +0200 Committer: El del tallat <[email protected]> Committed: Mon Jun 12 08:31:51 2017 +0200 ---------------------------------------------------------------------- .../PacketComputeServiceContextModule.java | 16 ++-- .../functions/OperatingSystemToImage.java | 77 ++++++++++++++------ .../strategy/CreateSshKeysThenCreateNodes.java | 1 + .../org/jclouds/packet/domain/ActionType.java | 39 ---------- .../org/jclouds/packet/domain/Distribution.java | 68 ----------------- 5 files changed, 66 insertions(+), 135 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1fbb7972/packet/src/main/java/org/jclouds/packet/compute/config/PacketComputeServiceContextModule.java ---------------------------------------------------------------------- diff --git a/packet/src/main/java/org/jclouds/packet/compute/config/PacketComputeServiceContextModule.java b/packet/src/main/java/org/jclouds/packet/compute/config/PacketComputeServiceContextModule.java index 0a64f43..576f2ba 100644 --- a/packet/src/main/java/org/jclouds/packet/compute/config/PacketComputeServiceContextModule.java +++ b/packet/src/main/java/org/jclouds/packet/compute/config/PacketComputeServiceContextModule.java @@ -16,11 +16,19 @@ */ package org.jclouds.packet.compute.config; +import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING; +import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED; +import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED; +import static org.jclouds.util.Predicates2.retry; + import org.jclouds.compute.ComputeServiceAdapter; import org.jclouds.compute.config.ComputeServiceAdapterContextModule; import org.jclouds.compute.domain.Hardware; import org.jclouds.compute.domain.Image; import org.jclouds.compute.domain.NodeMetadata; +import org.jclouds.compute.functions.NodeAndTemplateOptionsToStatement; +import org.jclouds.compute.functions.NodeAndTemplateOptionsToStatementWithoutPublicKey; import org.jclouds.compute.options.TemplateOptions; import org.jclouds.compute.reference.ComputeServiceConstants; import org.jclouds.compute.strategy.CreateNodesInGroupThenAddToSet; @@ -49,16 +57,9 @@ import com.google.inject.Provides; import com.google.inject.TypeLiteral; import com.google.inject.name.Named; -import static com.google.common.base.Preconditions.checkNotNull; -import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING; -import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED; -import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED; -import static org.jclouds.util.Predicates2.retry; - public class PacketComputeServiceContextModule extends ComputeServiceAdapterContextModule<Device, Plan, OperatingSystem, Facility> { - @SuppressWarnings("unchecked") @Override protected void configure() { super.configure(); @@ -80,6 +81,7 @@ public class PacketComputeServiceContextModule extends }); bind(TemplateOptions.class).to(PacketTemplateOptions.class); bind(CreateNodesInGroupThenAddToSet.class).to(CreateSshKeysThenCreateNodes.class); + bind(NodeAndTemplateOptionsToStatement.class).to(NodeAndTemplateOptionsToStatementWithoutPublicKey.class); } @Provides http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1fbb7972/packet/src/main/java/org/jclouds/packet/compute/functions/OperatingSystemToImage.java ---------------------------------------------------------------------- diff --git a/packet/src/main/java/org/jclouds/packet/compute/functions/OperatingSystemToImage.java b/packet/src/main/java/org/jclouds/packet/compute/functions/OperatingSystemToImage.java index d28b579..656ed88 100644 --- a/packet/src/main/java/org/jclouds/packet/compute/functions/OperatingSystemToImage.java +++ b/packet/src/main/java/org/jclouds/packet/compute/functions/OperatingSystemToImage.java @@ -16,16 +16,23 @@ */ package org.jclouds.packet.compute.functions; +import static com.google.common.collect.Iterables.tryFind; +import static java.util.Arrays.asList; +import static org.jclouds.compute.domain.OperatingSystem.builder; + +import java.util.Map; + import javax.inject.Singleton; import org.jclouds.compute.domain.Image; import org.jclouds.compute.domain.ImageBuilder; -import org.jclouds.packet.domain.Distribution; +import org.jclouds.compute.domain.OsFamily; import org.jclouds.packet.domain.OperatingSystem; import com.google.common.base.Function; - -import static org.jclouds.compute.domain.OperatingSystem.builder; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableMap; /** * Transforms an {@link OperatingSystem} to the jclouds portable model. @@ -33,22 +40,50 @@ import static org.jclouds.compute.domain.OperatingSystem.builder; @Singleton public class OperatingSystemToImage implements Function<OperatingSystem, Image> { - @Override - public Image apply(final OperatingSystem input) { - ImageBuilder builder = new ImageBuilder(); - builder.ids(input.slug()); - builder.name(input.name()); - builder.description(input.name()); - builder.status(Image.Status.AVAILABLE); - - builder.operatingSystem(builder() - .name(input.name()) - .family(Distribution.fromValue(input.distribution()).osFamily()) - .description(input.name()) - .version(input.version()) - .is64Bit(true) - .build()); - - return builder.build(); - } + private static final Map<String, OsFamily> OTHER_OS_MAP = ImmutableMap.<String, OsFamily> builder() + .put("nixos", OsFamily.LINUX) + .put("rancher", OsFamily.LINUX) + .put("vmware", OsFamily.ESX) + .build(); + + @Override + public Image apply(final OperatingSystem input) { + ImageBuilder builder = new ImageBuilder(); + builder.ids(input.slug()); + builder.name(input.name()); + builder.description(input.name()); + builder.status(Image.Status.AVAILABLE); + + OsFamily family = findInStandardFamilies(input.distribution()) + .or(findInOtherOSMap(input.distribution())) + .or(OsFamily.UNRECOGNIZED); + + builder.operatingSystem(builder().name(input.name()).family(family).description(input.name()) + .version(input.version()).is64Bit(true).build()); + + return builder.build(); + } + + private static Optional<OsFamily> findInStandardFamilies(final String label) { + return tryFind(asList(OsFamily.values()), new Predicate<OsFamily>() { + @Override + public boolean apply(OsFamily input) { + return label.contains(input.value()); + } + }); + } + + private static Optional<OsFamily> findInOtherOSMap(final String label) { + return tryFind(OTHER_OS_MAP.keySet(), new Predicate<String>() { + @Override + public boolean apply(String input) { + return label.contains(input); + } + }).transform(new Function<String, OsFamily>() { + @Override + public OsFamily apply(String input) { + return OTHER_OS_MAP.get(input); + } + }); + } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1fbb7972/packet/src/main/java/org/jclouds/packet/compute/strategy/CreateSshKeysThenCreateNodes.java ---------------------------------------------------------------------- diff --git a/packet/src/main/java/org/jclouds/packet/compute/strategy/CreateSshKeysThenCreateNodes.java b/packet/src/main/java/org/jclouds/packet/compute/strategy/CreateSshKeysThenCreateNodes.java index 3a5a02a..148079f 100644 --- a/packet/src/main/java/org/jclouds/packet/compute/strategy/CreateSshKeysThenCreateNodes.java +++ b/packet/src/main/java/org/jclouds/packet/compute/strategy/CreateSshKeysThenCreateNodes.java @@ -150,6 +150,7 @@ public class CreateSshKeysThenCreateNodes extends CreateNodesWithGroupEncodedInt logger.debug(">> key pair not found. creating a new key pair %s ...", label); SshKey newKey = api.sshKeyApi().create(label, options.getPublicKey()); logger.debug(">> key pair created! %s", newKey); + generatedSshKeyIds.add(newKey.id()); } else { logger.debug(">> key pair found! %s", key); generatedSshKeyIds.add(key.id()); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1fbb7972/packet/src/main/java/org/jclouds/packet/domain/ActionType.java ---------------------------------------------------------------------- diff --git a/packet/src/main/java/org/jclouds/packet/domain/ActionType.java b/packet/src/main/java/org/jclouds/packet/domain/ActionType.java deleted file mode 100644 index 9177ec5..0000000 --- a/packet/src/main/java/org/jclouds/packet/domain/ActionType.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * 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. - */ -package org.jclouds.packet.domain; - -/** - * Performs an action for the given device. Possible actions include: - - power_on - power_off - reboot - rescue: reboot the device into rescue OS. - */ -public enum ActionType { - - POWER_ON ("power_on"), - POWER_OFF ("power_off"), - REBOOT ("reboot"), - RESCUE ("rescue"); - - private final String type; - - ActionType(String type) { - this.type = type; - } -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1fbb7972/packet/src/main/java/org/jclouds/packet/domain/Distribution.java ---------------------------------------------------------------------- diff --git a/packet/src/main/java/org/jclouds/packet/domain/Distribution.java b/packet/src/main/java/org/jclouds/packet/domain/Distribution.java deleted file mode 100644 index 0692d59..0000000 --- a/packet/src/main/java/org/jclouds/packet/domain/Distribution.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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 regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * 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. - */ -package org.jclouds.packet.domain; - -import java.util.List; - -import org.jclouds.compute.domain.OsFamily; - -import com.google.common.base.Predicate; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.Iterables.tryFind; -import static java.util.Arrays.asList; - -public enum Distribution { - - CENTOS(OsFamily.CENTOS, "centos"), - COREOS(OsFamily.COREOS, "coreos"), - DEBIAN(OsFamily.DEBIAN, "debian"), - UBUNTU(OsFamily.UBUNTU, "ubuntu"), - WINDOWS(OsFamily.WINDOWS, "windows"), - UNRECOGNIZED(OsFamily.UNRECOGNIZED, ""); - - private static final List<Distribution> values = asList(Distribution.values()); - - private final OsFamily osFamily; - private final String value; - - private Distribution(OsFamily osFamily, String value) { - this.osFamily = checkNotNull(osFamily, "osFamily cannot be null"); - this.value = checkNotNull(value, "value cannot be null"); - } - - public OsFamily osFamily() { - return this.osFamily; - } - - public String value() { - return this.value; - } - - public static Distribution fromValue(String value) { - return tryFind(values, hasValue(value)).or(UNRECOGNIZED); - } - - private static Predicate<Distribution> hasValue(final String value) { - return new Predicate<Distribution>() { - @Override - public boolean apply(Distribution input) { - return input.value.equalsIgnoreCase(value); - } - }; - } -}
