You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/10/27 17:36:41 UTC
[5/9] JCLOUDS-758 Drop VirtualBox labs provider.
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/IMediumPredicates.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/IMediumPredicates.java b/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/IMediumPredicates.java
deleted file mode 100644
index 7cee923..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/IMediumPredicates.java
+++ /dev/null
@@ -1,91 +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.virtualbox.predicates;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Predicates.equalTo;
-import static com.google.common.collect.Iterables.any;
-
-import org.virtualbox_4_2.DeviceType;
-import org.virtualbox_4_2.IMedium;
-
-import com.google.common.base.Predicate;
-
-public class IMediumPredicates {
- public static class DeviceTypeEquals implements Predicate<IMedium> {
- private final DeviceType deviceType;
-
- public DeviceTypeEquals(DeviceType deviceType) {
- this.deviceType = checkNotNull(deviceType, "deviceType");
- }
-
- @Override
- public boolean apply(IMedium arg0) {
- return deviceType.equals(arg0.getDeviceType());
- }
-
- @Override
- public String toString() {
- return "deviceTypeEquals(" + deviceType + ")";
- }
- }
-
- public static Predicate<IMedium> deviceTypeEquals(DeviceType deviceType) {
- return new DeviceTypeEquals(deviceType);
- }
-
- public static enum HasParent implements Predicate<IMedium> {
- INSTANCE;
-
- @Override
- public boolean apply(IMedium arg0) {
- return arg0.getParent() != null;
- }
-
- @Override
- public String toString() {
- return "hasParent()";
- }
- }
-
- public static Predicate<IMedium> hasParent() {
- return HasParent.INSTANCE;
- }
-
- public static class MachineIdsContain implements Predicate<IMedium> {
- private final String id;
-
- public MachineIdsContain(String id) {
- this.id = checkNotNull(id, "id");
- }
-
- @Override
- public boolean apply(IMedium arg0) {
- return any(arg0.getMachineIds(), equalTo(id));
- }
-
- @Override
- public String toString() {
- return "machineIdsContain(" + id + ")";
- }
- }
-
- public static Predicate<IMedium> machineIdsContain(String id) {
- return new MachineIdsContain(id);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/RetryIfSocketNotYetOpen.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/RetryIfSocketNotYetOpen.java b/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/RetryIfSocketNotYetOpen.java
deleted file mode 100644
index 73ad969..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/RetryIfSocketNotYetOpen.java
+++ /dev/null
@@ -1,94 +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.virtualbox.predicates;
-
-import static org.jclouds.util.Predicates2.retry;
-
-import java.util.concurrent.TimeUnit;
-
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
-import org.jclouds.logging.Logger;
-import org.jclouds.predicates.SocketOpen;
-
-import com.google.common.base.Predicate;
-import com.google.common.net.HostAndPort;
-
-/**
- *
- *
- * Not singleton as seconds are mutable
- */
-public class RetryIfSocketNotYetOpen implements Predicate<HostAndPort> {
- @Resource
- @Named(ComputeServiceConstants.COMPUTE_LOGGER)
- private Logger logger = Logger.NULL;
- private final SocketOpen socketTester;
- private long timeoutValue;
- private TimeUnit timeoutUnits;
-
-
- public RetryIfSocketNotYetOpen(SocketOpen socketTester, Logger logger, long timeoutValue, TimeUnit timeoutUnits) {
- this.socketTester = socketTester;
- this.logger = logger;
- this.timeoutValue = timeoutValue;
- this.timeoutUnits = timeoutUnits;
- }
-
- public RetryIfSocketNotYetOpen(SocketOpen socketTester, Logger logger) {
- this(socketTester, logger, 0, TimeUnit.MILLISECONDS);
- }
-
- @Inject
- public RetryIfSocketNotYetOpen(SocketOpen socketTester, Timeouts timeouts) {
- this(socketTester, Logger.NULL, timeouts.portOpen, TimeUnit.MILLISECONDS);
- }
-
- public RetryIfSocketNotYetOpen milliseconds(long milliseconds) {
- this.timeoutValue = milliseconds;
- this.timeoutUnits = TimeUnit.MILLISECONDS;
- return this;
- }
-
- public RetryIfSocketNotYetOpen seconds(long seconds) {
- this.timeoutValue = seconds;
- this.timeoutUnits = TimeUnit.SECONDS;
- return this;
- }
-
- @Override
- public String toString() {
- return "retryIfSocketNotYetOpen(" + timeoutValue + " " + timeoutUnits + ")";
- }
-
- @Override
- public boolean apply(HostAndPort socket) {
- logger.debug(">> blocking on socket %s for %d %s", socket, timeoutValue, timeoutUnits);
- // Specify a retry period of 1s, expressed in the same time units.
- long period = timeoutUnits.convert(1, TimeUnit.SECONDS);
- boolean passed = retry(socketTester, timeoutValue, period, timeoutUnits).apply(socket);
- if (passed)
- logger.debug("<< socket %s opened", socket);
- else
- logger.warn("<< socket %s didn't open after %d %s", socket, timeoutValue, timeoutUnits);
- return passed;
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/SshAvailable.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/SshAvailable.java b/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/SshAvailable.java
deleted file mode 100644
index 54546bf..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/SshAvailable.java
+++ /dev/null
@@ -1,65 +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.virtualbox.predicates;
-
-import static org.jclouds.compute.options.RunScriptOptions.Builder.wrapInInitScript;
-
-import javax.annotation.Resource;
-import javax.inject.Named;
-
-import org.jclouds.compute.ComputeServiceContext;
-import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.logging.Logger;
-import org.jclouds.ssh.SshException;
-
-import com.google.common.base.Predicate;
-
-public class SshAvailable implements Predicate<String> {
-
- @Resource
- @Named(ComputeServiceConstants.COMPUTE_LOGGER)
- protected Logger logger = Logger.NULL;
-
- private final ComputeServiceContext context;
-
- public SshAvailable(ComputeServiceContext context) {
- this.context = context;
- }
-
- @Override
- public boolean apply(String nodeId) {
- boolean sshDaemonIsRunning = false;
- try {
- if (context.getComputeService()
- .runScriptOnNode(nodeId, "id", wrapInInitScript(false).runAsRoot(false))
- .getExitStatus() == 0) {
- logger.debug("Got response from ssh daemon running on %s", nodeId);
- sshDaemonIsRunning = true;
- }
- } catch (SshException e) {
- logger.debug("No response from ssh daemon running on %s", nodeId);
- return sshDaemonIsRunning;
- }
- return sshDaemonIsRunning;
- }
-
- @Override
- public String toString() {
- return "sshAvailable()";
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/SshResponds.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/SshResponds.java b/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/SshResponds.java
deleted file mode 100644
index 9ab3dba..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/predicates/SshResponds.java
+++ /dev/null
@@ -1,48 +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.virtualbox.predicates;
-
-import javax.annotation.Resource;
-
-import org.jclouds.logging.Logger;
-import org.jclouds.ssh.SshClient;
-import org.jclouds.ssh.SshException;
-
-import com.google.common.base.Predicate;
-
-public class SshResponds implements Predicate<SshClient> {
- @Resource
- protected Logger logger = Logger.NULL;
-
- @Override
- public boolean apply(SshClient client) {
-
- try {
- client.connect();
- if (client.exec("id").getExitStatus() == 0) {
- return true;
- }
- } catch (SshException e) {
- logger.trace("No response from ssh daemon connecting to %s: %s", client, e.getMessage());
- } finally {
- if (client != null) {
- client.disconnect();
- }
- }
- return false;
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/settings/KeyboardScancodes.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/settings/KeyboardScancodes.java b/virtualbox/src/main/java/org/jclouds/virtualbox/settings/KeyboardScancodes.java
deleted file mode 100644
index 7c650ef..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/settings/KeyboardScancodes.java
+++ /dev/null
@@ -1,162 +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.virtualbox.settings;
-
-import com.google.common.collect.ImmutableMultimap;
-import com.google.common.collect.Multimap;
-
-/**
- *
- * @see <a href="http://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html" />
- */
-public class KeyboardScancodes {
-
- public static final Multimap<String, Integer> NORMAL_KEYBOARD_BUTTON_MAP_LIST = ImmutableMultimap
- .<String, Integer> builder()
-
- .putAll("1", 0x02, 0x82)
- .putAll("2", 0x03, 0x83)
- .putAll("3", 0x04, 0x84)
- .putAll("4", 0x05, 0x85)
- .putAll("5", 0x06, 0x86)
- .putAll("6", 0x07, 0x87)
- .putAll("7", 0x08, 0x88)
- .putAll("8", 0x09, 0x89)
- .putAll("9", 0x0a, 0x8a)
- .putAll("0", 0x0b, 0x8b)
-
- .putAll("-", 0x0c, 0x8c)
- .putAll("=", 0x0d, 0x8d)
- .putAll("Tab", 0x0f, 0x8f)
- .putAll("q", 0x10, 0x90)
- .putAll("w", 0x11, 0x91)
- .putAll("e", 0x12, 0x92)
- .putAll("r", 0x13, 0x93)
- .putAll("t", 0x14, 0x94)
- .putAll("y", 0x15, 0x95)
- .putAll("u", 0x16, 0x96)
- .putAll("i", 0x17, 0x97)
- .putAll("o", 0x18, 0x98)
- .putAll("p", 0x19, 0x99)
-
- .putAll("Q", 0x2a, 0x10, 0xaa)
- .putAll("W", 0x2a, 0x11, 0xaa)
- .putAll("E", 0x2a, 0x12, 0xaa)
- .putAll("R", 0x2a, 0x13, 0xaa)
- .putAll("T", 0x2a, 0x14, 0xaa)
- .putAll("Y", 0x2a, 0x15, 0xaa)
- .putAll("U", 0x2a, 0x16, 0xaa)
- .putAll("I", 0x2a, 0x17, 0xaa)
- .putAll("O", 0x2a, 0x18, 0xaa)
- .putAll("P", 0x2a, 0x19, 0xaa)
-
- .putAll("a", 0x1e, 0x9e)
- .putAll("s", 0x1f, 0x9f)
- .putAll("d", 0x20, 0xa0)
- .putAll("f", 0x21, 0xa1)
- .putAll("g", 0x22, 0xa2)
- .putAll("h", 0x23, 0xa3)
- .putAll("j", 0x24, 0xa4)
- .putAll("k", 0x25, 0xa5)
- .putAll("l", 0x26, 0xa6)
-
- .putAll("A", 0x2a, 0x1e, 0xaa, 0x9e)
- .putAll("S", 0x2a, 0x1f, 0xaa, 0x9f)
- .putAll("D", 0x2a, 0x20, 0xaa, 0xa0)
- .putAll("F", 0x2a, 0x21, 0xaa, 0xa1)
- .putAll("G", 0x2a, 0x22, 0xaa, 0xa2)
- .putAll("H", 0x2a, 0x23, 0xaa, 0xa3)
- .putAll("J", 0x2a, 0x24, 0xaa, 0xa4)
- .putAll("K", 0x2a, 0x25, 0xaa, 0xa5)
- .putAll("L", 0x2a, 0x26, 0xaa, 0xa6)
-
- .putAll(") ", 0x27, 0xa7)
- .putAll("\"", 0x2a, 0x28, 0xaa, 0xa8)
- .putAll("\"", 0x28, 0xa8)
- .putAll("\\", 0x2b, 0xab)
- .putAll("|", 0x2a, 0x2b, 0xaa, 0x8b)
- .putAll("[", 0x1a, 0x9a)
- .putAll("", 0x1b, 0x9b)
- .putAll("<", 0x2a, 0x33, 0xaa, 0xb3)
- .putAll(">", 0x2a, 0x34, 0xaa, 0xb4)
- .putAll("$", 0x2a, 0x05, 0xaa, 0x85)
- .putAll("+", 0x2a, 0x0d, 0xaa, 0x8d)
-
- .putAll("z", 0x2c, 0xac)
- .putAll("x", 0x2d, 0xad)
- .putAll("c", 0x2e, 0xae)
- .putAll("v", 0x2f, 0xaf)
- .putAll("b", 0x30, 0xb0)
- .putAll("n", 0x31, 0xb1)
- .putAll("m", 0x32, 0xb2)
- .putAll("Z", 0x2a, 0x2c, 0xaa, 0xac)
- .putAll("X", 0x2a, 0x2d, 0xaa, 0xad)
- .putAll("C", 0x2a, 0x2e, 0xaa, 0xae)
- .putAll("V", 0x2a, 0x2f, 0xaa, 0xaf)
- .putAll("B", 0x2a, 0x30, 0xaa, 0xb0)
- .putAll("N", 0x2a, 0x31, 0xaa, 0xb1)
- .putAll("M", 0x2a, 0x32, 0xaa, 0xb2)
-
- .putAll(",", 0x33, 0xb3)
- .putAll(".", 0x34, 0xb4)
- .putAll("/", 0x35, 0xb5)
- .putAll(":", 0x2a, 0x27, 0xaa, 0xa7)
- .putAll("%", 0x2a, 0x06, 0xaa, 0x86)
- .putAll("_", 0x2a, 0x0c, 0xaa, 0x8c)
- .putAll("&", 0x2a, 0x08, 0xaa, 0x88)
- .putAll("(", 0x2a, 0x0a, 0xaa, 0x8a)
- .putAll(")", 0x2a, 0x0b, 0xaa, 0x8b)
- .putAll("#", 0x2a, 0x04, 0xaa, 0x85)
-
- .build();
-
-
- public static final Multimap<String, Integer> SPECIAL_KEYBOARD_BUTTON_MAP_LIST = ImmutableMultimap
- .<String, Integer> builder()
-
- .putAll("<Enter>", 0x1c, 0x9c)
- .putAll("<Backspace>", 0x0e, 0x8e)
- .putAll("<Spacebar>", 0x39, 0xb9)
- .putAll("<Return>", 0x1c, 0x9c)
- .putAll("<Esc>", 0x01, 0x81)
- .putAll("<Tab>", 0x0f, 0x8f)
- .putAll("<KillX>", 0x1d, 0x38, 0x0e)
-
- .putAll("<Up>", 0x48, 0xc8)
- .putAll("<Down>", 0x50, 0xd0)
- .putAll("<PageUp>", 0x49, 0xc9)
- .putAll("<PageDown>", 0x51, 0xd1)
- .putAll("<End>", 0x4f, 0xcf)
- .putAll("<Insert>", 0x52, 0xd2)
- .putAll("<Delete>", 0x53, 0xd3)
- .putAll("<Left>", 0x4b, 0xcb)
- .putAll("<Right>", 0x4d, 0xcd)
- .putAll("<Home>", 0x47, 0xc7)
-
- .putAll("<F1>", 0x3b)
- .putAll("<F2>", 0x3c)
- .putAll("<F3>", 0x3d)
- .putAll("<F4>", 0x3e)
- .putAll("<F5>", 0x3f)
- .putAll("<F6>", 0x40)
- .putAll("<F7>", 0x41)
- .putAll("<F8>", 0x42)
- .putAll("<F9>", 0x43)
- .putAll("<F10>", 0x44)
- .build();
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/statements/DeleteGShadowLock.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/DeleteGShadowLock.java b/virtualbox/src/main/java/org/jclouds/virtualbox/statements/DeleteGShadowLock.java
deleted file mode 100644
index b304f0d..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/DeleteGShadowLock.java
+++ /dev/null
@@ -1,43 +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.virtualbox.statements;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.scriptbuilder.domain.OsFamily;
-import org.jclouds.scriptbuilder.domain.Statement;
-
-import com.google.common.collect.ImmutableList;
-
-/**
- * Deletes /etc/gshadow.lock. see https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/732864.
- */
-public class DeleteGShadowLock implements Statement {
-
- @Override
- public Iterable<String> functionDependencies(OsFamily family) {
- return ImmutableList.of();
- }
-
- @Override
- public String render(OsFamily family) {
- if (checkNotNull(family, "family") == OsFamily.WINDOWS)
- throw new UnsupportedOperationException("windows not yet implemented");
- return "rm -f /etc/passwd.lock /etc/group.lock /etc/gshadow.lock";
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/statements/EnableNetworkInterface.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/EnableNetworkInterface.java b/virtualbox/src/main/java/org/jclouds/virtualbox/statements/EnableNetworkInterface.java
deleted file mode 100644
index 421419b..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/EnableNetworkInterface.java
+++ /dev/null
@@ -1,79 +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.virtualbox.statements;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.scriptbuilder.domain.Statements.exec;
-
-import java.util.List;
-
-import com.google.common.collect.Lists;
-
-import org.jclouds.scriptbuilder.domain.OsFamily;
-import org.jclouds.scriptbuilder.domain.Statement;
-import org.jclouds.scriptbuilder.domain.StatementList;
-import org.jclouds.virtualbox.domain.NetworkInterfaceCard;
-
-/**
- * Up the network interface chosen
- */
-public class EnableNetworkInterface implements Statement {
-
- private final StatementList statements;
-
- public EnableNetworkInterface(NetworkInterfaceCard networkInterfaceCard) {
- int slot = (int) networkInterfaceCard.getSlot();
- String iface = null;
- switch (slot) {
- case 0:
- iface = "eth0";
- break;
- case 1:
- iface = "eth1";
- break;
- case 2:
- iface = "eth2";
- break;
- case 3:
- iface = "eth3";
- break;
- default:
- throw new IllegalArgumentException("slot must be 0,1,2,3 (was: " + slot + ")");
- }
- this.statements = new StatementList(getStatements(iface));
- }
-
- private List<Statement> getStatements(String iface) {
- List<Statement> statements = Lists.newArrayList();
- statements.add(exec(String.format("echo auto %s >> /etc/network/interfaces", iface)));
- statements.add(exec(String.format("echo iface %s inet dhcp >> /etc/network/interfaces", iface)));
- statements.add(exec("/etc/init.d/networking restart"));
- return statements;
- }
-
- @Override
- public Iterable<String> functionDependencies(OsFamily family) {
- return statements.functionDependencies(family);
- }
-
- @Override
- public String render(OsFamily family) {
- if (checkNotNull(family, "family") == OsFamily.WINDOWS)
- throw new UnsupportedOperationException("windows not yet implemented");
- return statements.render(family);
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/statements/GetIPAddressFromMAC.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/GetIPAddressFromMAC.java b/virtualbox/src/main/java/org/jclouds/virtualbox/statements/GetIPAddressFromMAC.java
deleted file mode 100644
index 7f9f463..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/GetIPAddressFromMAC.java
+++ /dev/null
@@ -1,70 +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.virtualbox.statements;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Map;
-
-import org.jclouds.scriptbuilder.domain.OsFamily;
-import org.jclouds.scriptbuilder.domain.Statement;
-import org.jclouds.scriptbuilder.util.Utils;
-import org.jclouds.virtualbox.functions.MacAddressToBSD;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Splitter;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
-public class GetIPAddressFromMAC implements Statement {
-
- public static final Map<OsFamily, String> OS_TO_ARP = ImmutableMap
- .of(OsFamily.UNIX,
- "MAC={macAddress} && [[ `uname -s` = \"Darwin\" ]] && MAC={macAddressBsd}\n arp -an | grep $MAC\n",
- OsFamily.WINDOWS, "set MAC={macAddress} arp -a | Findstr %MAC%");
-
- private String macAddress;
- private String macAddressBsd;
-
- public GetIPAddressFromMAC(String macAddress) {
- this(Joiner.on(":").join(Splitter.fixedLength(2).split(macAddress)).toLowerCase(),
- MacAddressToBSD.INSTANCE.apply(Joiner.on(":").join(Splitter.fixedLength(2).split(macAddress)).toLowerCase()));
- }
-
- public GetIPAddressFromMAC(String macAddress, String macAddressBsd) {
- checkNotNull(macAddress, "macAddress");
- checkArgument(macAddress.length() == 17);
- this.macAddress = macAddress;
- checkNotNull(macAddressBsd, "macAddressBsd");
- this.macAddressBsd = macAddressBsd;
- }
-
- @Override
- public Iterable<String> functionDependencies(OsFamily family) {
- return ImmutableList.of();
- }
-
- @Override
- public String render(OsFamily family) {
- StringBuilder arp = new StringBuilder();
- arp.append(Utils.replaceTokens(OS_TO_ARP.get(family), ImmutableMap.of(
- "macAddress", macAddress, "macAddressBsd", macAddressBsd)));
- return arp.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/statements/InstallGuestAdditions.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/InstallGuestAdditions.java b/virtualbox/src/main/java/org/jclouds/virtualbox/statements/InstallGuestAdditions.java
deleted file mode 100644
index e9258da..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/InstallGuestAdditions.java
+++ /dev/null
@@ -1,99 +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.virtualbox.statements;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.scriptbuilder.domain.Statements.call;
-import static org.jclouds.scriptbuilder.domain.Statements.exec;
-import static org.jclouds.scriptbuilder.domain.Statements.saveHttpResponseTo;
-
-import java.net.URI;
-import java.util.List;
-
-import javax.annotation.Resource;
-import javax.inject.Named;
-
-import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.logging.Logger;
-import org.jclouds.scriptbuilder.domain.OsFamily;
-import org.jclouds.scriptbuilder.domain.Statement;
-import org.jclouds.scriptbuilder.domain.StatementList;
-import org.jclouds.virtualbox.domain.IsoImage;
-import org.jclouds.virtualbox.domain.StorageController;
-import org.jclouds.virtualbox.domain.VmSpec;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-/**
- * Mounts the DVD with guest additions that was downloaded and attached as removable storage. If no
- * guest additions is attached to the vmspec then it is downloaded.
- */
-public class InstallGuestAdditions implements Statement {
-
- @Resource
- @Named(ComputeServiceConstants.COMPUTE_LOGGER)
- protected Logger logger = Logger.NULL;
- private final StatementList statements;
-
- public InstallGuestAdditions(VmSpec vmSpecification, String vboxVersion) {
- this.statements = new StatementList(getStatements(vmSpecification, vboxVersion));
- }
-
- private List<Statement> getStatements(VmSpec vmSpecification, String vboxVersion) {
- List<Statement> statements = Lists.newArrayList();
- statements.add(call("installModuleAssistantIfNeeded"));
- String mountPoint = "/mnt";
- if (Iterables.tryFind(vmSpecification.getControllers(), new Predicate<StorageController>() {
- @Override
- public boolean apply(StorageController input) {
- if (!input.getIsoImages().isEmpty()) {
- for (IsoImage iso : input.getIsoImages()) {
- if (iso.getSourcePath().contains("VBoxGuestAdditions_")) {
- return true;
- }
- }
- }
- return false;
- }
- }).isPresent()) {
- statements.add(exec("mount -t iso9660 /dev/cdrom1 " + mountPoint));
- } else {
- String vboxGuestAdditionsIso = "VBoxGuestAdditions_" + vboxVersion + ".iso";
- URI download = URI.create("http://download.virtualbox.org/virtualbox/" + vboxVersion + "/"
- + vboxGuestAdditionsIso);
- statements.add(call("setupPublicCurl"));
- statements.add(saveHttpResponseTo(download, "{tmp}{fs}", vboxGuestAdditionsIso));
- statements.add(exec(String.format("mount -o loop {tmp}{fs}%s %s", vboxGuestAdditionsIso, mountPoint)));
- }
- statements.add(exec(String.format("%s%s", mountPoint, "/VBoxLinuxAdditions.run --nox11")));
- return statements;
- }
-
- @Override
- public String render(OsFamily family) {
- if (checkNotNull(family, "family") == OsFamily.WINDOWS)
- throw new UnsupportedOperationException("windows not yet implemented");
- return statements.render(family);
- }
-
- @Override
- public Iterable<String> functionDependencies(OsFamily family) {
- return statements.functionDependencies(family);
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/statements/Md5.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/Md5.java b/virtualbox/src/main/java/org/jclouds/virtualbox/statements/Md5.java
deleted file mode 100644
index 36e30f2..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/Md5.java
+++ /dev/null
@@ -1,47 +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.virtualbox.statements;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.scriptbuilder.domain.OsFamily;
-import org.jclouds.scriptbuilder.domain.Statement;
-
-import com.google.common.collect.ImmutableList;
-
-public class Md5 implements Statement {
-
- private final String filePath;
-
- public Md5(String filePath) {
- this.filePath = checkNotNull(filePath, "filePath");
- }
-
- @Override
- public Iterable<String> functionDependencies(OsFamily family) {
- return ImmutableList.of();
- }
-
- @Override
- public String render(OsFamily family) {
- if (checkNotNull(family, "family") == OsFamily.WINDOWS)
- throw new UnsupportedOperationException("windows not yet implemented");
- return String.format("command -v md5sum >/dev/null 2>&1 && md5sum %s | awk '{print $1}' "
- + "|| command -v md5 >/dev/null 2>&1 && md5 %s | awk '{ print $4 }'", filePath, filePath);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/statements/PasswordlessSudo.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/PasswordlessSudo.java b/virtualbox/src/main/java/org/jclouds/virtualbox/statements/PasswordlessSudo.java
deleted file mode 100644
index 0078730..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/PasswordlessSudo.java
+++ /dev/null
@@ -1,49 +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.virtualbox.statements;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.scriptbuilder.domain.OsFamily;
-import org.jclouds.scriptbuilder.domain.Statement;
-
-import com.google.common.collect.ImmutableList;
-
-/**
- * Assign to user the passwordless sudo rights
- */
-public class PasswordlessSudo implements Statement {
-
- private final String user;
-
- public PasswordlessSudo(String user) {
- this.user = user;
- }
-
- @Override
- public Iterable<String> functionDependencies(OsFamily family) {
- return ImmutableList.of();
- }
-
- @Override
- public String render(OsFamily family) {
- if (checkNotNull(family, "family") == OsFamily.WINDOWS)
- throw new UnsupportedOperationException("windows not yet implemented");
- return String.format("touch /etc/sudoers.d/passwordless && echo \"%s ALL = NOPASSWD: ALL\" > /etc/sudoers.d/passwordless && chmod 0440 /etc/sudoers.d/passwordless", user);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/statements/ScanNetworkWithPing.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/ScanNetworkWithPing.java b/virtualbox/src/main/java/org/jclouds/virtualbox/statements/ScanNetworkWithPing.java
deleted file mode 100644
index 68f6ed9..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/ScanNetworkWithPing.java
+++ /dev/null
@@ -1,56 +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.virtualbox.statements;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Map;
-
-import org.jclouds.scriptbuilder.domain.OsFamily;
-import org.jclouds.scriptbuilder.domain.Statement;
-import org.jclouds.scriptbuilder.util.Utils;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
-public class ScanNetworkWithPing implements Statement {
-
- public static final Map<OsFamily, String> OS_TO_PING = ImmutableMap
- .of(OsFamily.UNIX,
- "for i in {1..254} ; do ping -c 1 -t 1 {network}.$i & done",
- OsFamily.WINDOWS, "TODO");
-
- private String network;
-
- public ScanNetworkWithPing(String network) {
- this.network = checkNotNull(network, "network");
- }
-
- @Override
- public Iterable<String> functionDependencies(OsFamily family) {
- return ImmutableList.of();
- }
-
- @Override
- public String render(OsFamily family) {
- network = network.substring(0, network.lastIndexOf("."));
- StringBuilder arp = new StringBuilder();
- arp.append(Utils.replaceTokens(OS_TO_PING.get(family), ImmutableMap.of("network", network)));
- return arp.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/statements/SetHostname.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/SetHostname.java b/virtualbox/src/main/java/org/jclouds/virtualbox/statements/SetHostname.java
deleted file mode 100644
index eae7006..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/SetHostname.java
+++ /dev/null
@@ -1,50 +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.virtualbox.statements;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.scriptbuilder.domain.OsFamily;
-import org.jclouds.scriptbuilder.domain.Statement;
-
-import com.google.common.collect.ImmutableList;
-
-/**
- * Set hostname
- */
-public class SetHostname implements Statement {
-
- private final String publicIpAddress;
-
- public SetHostname(String publicIpAddress) {
- this.publicIpAddress = checkNotNull(publicIpAddress, "publicIpAddress");
- }
-
- @Override
- public Iterable<String> functionDependencies(OsFamily family) {
- return ImmutableList.of();
- }
-
- @Override
- public String render(OsFamily family) {
- if (checkNotNull(family, "family") == OsFamily.WINDOWS)
- throw new UnsupportedOperationException("windows not yet implemented");
- return String.format("sudo hostname %s", publicIpAddress);
- }
-
-}
-
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/statements/SetIpAddress.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/SetIpAddress.java b/virtualbox/src/main/java/org/jclouds/virtualbox/statements/SetIpAddress.java
deleted file mode 100644
index 4353fe5..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/SetIpAddress.java
+++ /dev/null
@@ -1,70 +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.virtualbox.statements;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.scriptbuilder.domain.OsFamily;
-import org.jclouds.scriptbuilder.domain.Statement;
-import org.jclouds.virtualbox.domain.NetworkInterfaceCard;
-
-import com.google.common.collect.ImmutableList;
-
-/**
- * Sets the ipaddress using ssh. Used for host-only networking
- */
-public class SetIpAddress implements Statement {
-
- private String script;
-
- public SetIpAddress(NetworkInterfaceCard networkInterfaceCard) {
- String ipAddress = networkInterfaceCard.getNetworkAdapter().getStaticIp();
- checkNotNull(ipAddress, "ip address");
- int slot = (int) networkInterfaceCard.getSlot();
- String iface = null;
- switch (slot) {
- case 0:
- iface = "eth0";
- break;
- case 1:
- iface = "eth1";
- break;
- case 2:
- iface = "eth2";
- break;
- case 3:
- iface = "eth3";
- break;
- default:
- throw new IllegalArgumentException("slot must be 0,1,2,3 (was: " + slot + ")");
- }
- script = String.format("ifconfig %s %s;", iface, ipAddress);
- }
-
- @Override
- public Iterable<String> functionDependencies(OsFamily family) {
- return ImmutableList.of();
- }
-
- @Override
- public String render(OsFamily family) {
- if (checkNotNull(family, "family") == OsFamily.WINDOWS)
- throw new UnsupportedOperationException("windows not yet implemented");
- return script;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/statements/Statements.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/Statements.java b/virtualbox/src/main/java/org/jclouds/virtualbox/statements/Statements.java
deleted file mode 100644
index 6f27be6..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/statements/Statements.java
+++ /dev/null
@@ -1,36 +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.virtualbox.statements;
-
-import org.jclouds.scriptbuilder.ScriptBuilder;
-import org.jclouds.scriptbuilder.domain.Statement;
-
-/**
- * VboxManage statements used in shell scripts .
- */
-public class Statements {
-
- /**
- * Extract the IP address from the specified vm and stores the IP address into the variable {@code FOUND_IP_ADDRESS} if successful.
- *
- * @param vmname
- * - the vm name
- */
- public static Statement exportIpAddressFromVmNamed(String vmName) {
- return ScriptBuilder.call("exportIpAddressFromVmNamed", vmName);
- }
- }
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/util/IMediumAttachments.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/util/IMediumAttachments.java b/virtualbox/src/main/java/org/jclouds/virtualbox/util/IMediumAttachments.java
deleted file mode 100644
index d9a2652..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/util/IMediumAttachments.java
+++ /dev/null
@@ -1,41 +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.virtualbox.util;
-
-import org.virtualbox_4_2.IMedium;
-import org.virtualbox_4_2.IMediumAttachment;
-
-import com.google.common.base.Function;
-
-public class IMediumAttachments {
- static enum ToMedium implements Function<IMediumAttachment, IMedium> {
- INSTANCE;
- @Override
- public IMedium apply(IMediumAttachment arg0) {
- return arg0.getMedium();
- }
-
- @Override
- public String toString() {
- return "toMedium()";
- }
- };
-
- public static Function<IMediumAttachment, IMedium> toMedium() {
- return ToMedium.INSTANCE;
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineController.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineController.java b/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineController.java
deleted file mode 100644
index c1f2623..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineController.java
+++ /dev/null
@@ -1,262 +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.virtualbox.util;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.jclouds.util.Predicates2.retry;
-
-import java.util.List;
-
-import javax.annotation.Resource;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.logging.Logger;
-import org.jclouds.virtualbox.domain.ExecutionType;
-import org.jclouds.virtualbox.functions.LaunchMachineIfNotAlreadyRunning;
-import org.virtualbox_4_2.AdditionsFacilityStatus;
-import org.virtualbox_4_2.AdditionsFacilityType;
-import org.virtualbox_4_2.AdditionsRunLevelType;
-import org.virtualbox_4_2.IAdditionsFacility;
-import org.virtualbox_4_2.IMachine;
-import org.virtualbox_4_2.IProgress;
-import org.virtualbox_4_2.ISession;
-import org.virtualbox_4_2.IVirtualBox;
-import org.virtualbox_4_2.LockType;
-import org.virtualbox_4_2.MachineState;
-import org.virtualbox_4_2.VirtualBoxManager;
-
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.base.Strings;
-import com.google.common.base.Supplier;
-import com.google.common.collect.Iterables;
-import com.google.inject.Inject;
-
-/**
- * Utilities to manage VirtualBox machine life cycle.
- */
-
-@Singleton
-public class MachineController {
-
- @Resource
- @Named(ComputeServiceConstants.COMPUTE_LOGGER)
- protected Logger logger = Logger.NULL;
-
- private final Supplier<VirtualBoxManager> manager;
- private final MachineUtils machineUtils;
- private final ExecutionType executionType;
-
- @Inject
- public MachineController(Supplier<VirtualBoxManager> manager, MachineUtils machineUtils, ExecutionType executionType) {
- this.manager = manager;
- this.machineUtils = machineUtils;
- this.executionType = executionType;
- }
-
- public ISession ensureMachineIsLaunched(String vmName) {
- ISession session = null;
- IMachine machine = manager.get().getVBox().findMachine(vmName);
- while (!machine.getState().equals(MachineState.Running)) {
- try {
- session = machineUtils.applyForMachine(vmName, new LaunchMachineIfNotAlreadyRunning(manager.get(),
- executionType, ""));
- } catch (RuntimeException e) {
- if (e.getMessage().contains(
- "org.virtualbox_4_2.VBoxException: VirtualBox error: The given session is busy (0x80BB0007)")) {
- throw e;
- } else if (e.getMessage().contains("VirtualBox error: The object is not ready")) {
- continue;
- } else {
- throw e;
- }
- }
- }
-
- String guestAdditionsInstalled = machineUtils.sharedLockMachineAndApplyToSession(vmName,
- new Function<ISession, String>() {
- @Override
- public String apply(ISession session) {
- retry(new FacilitiesPredicate(session), 15, 3, SECONDS).apply(4);
- String guestAdditionsInstalled = session.getConsole().getGuest().getAdditionsVersion();
- return guestAdditionsInstalled;
- }
-
- });
- if (!Strings.nullToEmpty(guestAdditionsInstalled).isEmpty()) {
- logger.debug("<< guest additions(%s) installed on vm(%s)", guestAdditionsInstalled, vmName);
- waitVBoxServiceIsActive(vmName);
- } else {
- logger.debug("<< guest additions not available on(%s)", vmName);
- }
- return checkNotNull(session, "session");
- }
-
- public ISession ensureMachineHasPowerDown(String vmName) {
- ISession session = machineUtils.sharedLockMachineAndApplyToSession(vmName, new Function<ISession, ISession>() {
- @Override
- public ISession apply(ISession session) {
- IProgress powerdownIProgress = session.getConsole().powerDown();
- powerdownIProgress.waitForCompletion(-1);
- return session;
- }
- });
- return checkNotNull(session, "session");
- }
-
- /**
- * if machine supports ACPI it can be shutdown gently - not powerdown()
- * http://askubuntu.com/questions/82015/shutting-down-ubuntu-server-running-in-headless-virtualbox
- */
- public ISession ensureMachineIsShutdown(String vmName) {
- ISession session = machineUtils.sharedLockMachineAndApplyToSession(vmName, new Function<ISession, ISession>() {
- @Override
- public ISession apply(ISession session) {
- session.getConsole().powerButton();
- return session;
- }
- });
- checkState(
- retry(new MachineStatePredicate(manager.get().getVBox(), vmName), 15, 3, SECONDS).apply(
- MachineState.PoweredOff), "vm(%s) is not shutdown correctly", vmName);
- return checkNotNull(session, "session");
- }
-
- public void ensureMachineIsPaused(String vmName) {
- while (!manager.get().getVBox().findMachine(vmName).getState().equals(MachineState.Paused)) {
- try {
- machineUtils.lockSessionOnMachineAndApply(vmName, LockType.Shared, new Function<ISession, Void>() {
- @Override
- public Void apply(ISession session) {
- session.getConsole().pause();
- return null;
- }
- });
- } catch (RuntimeException e) {
- // sometimes the machine might be powered of between the while
- // test and the call to
- // lockSessionOnMachineAndApply
- if (e.getMessage().contains("Invalid machine state: Paused")) {
- return;
- } else if (e.getMessage().contains("VirtualBox error: The object is not ready")) {
- continue;
- } else {
- throw e;
- }
- }
- }
- }
-
- public void ensureMachineIsResumed(String vmName) {
- while (!manager.get().getVBox().findMachine(vmName).getState().equals(MachineState.Running)) {
- try {
- machineUtils.lockSessionOnMachineAndApply(vmName, LockType.Shared, new Function<ISession, Void>() {
- @Override
- public Void apply(ISession session) {
- session.getConsole().resume();
- return null;
- }
- });
- } catch (RuntimeException e) {
- // sometimes the machine might be powered of between the while
- // test and the call to lockSessionOnMachineAndApply
- if (e.getMessage().contains("Invalid machine state: Resumed")) {
- return;
- } else if (e.getMessage().contains("VirtualBox error: The object is not ready")) {
- continue;
- } else {
- throw e;
- }
- }
- }
- }
-
- private void waitVBoxServiceIsActive(final String vmName) {
- machineUtils.sharedLockMachineAndApplyToSession(vmName, new Function<ISession, Void>() {
-
- @Override
- public Void apply(ISession session) {
- checkState(
- retry(new AdditionsStatusPredicate(session), 10, 2, SECONDS).apply(AdditionsRunLevelType.Userland),
- "timed out waiting for additionsRunLevelType to be %s", AdditionsRunLevelType.Userland);
- checkState(retry(new FacilitiesPredicate(session), 15, 3, SECONDS).apply(4),
- "timed out waiting for 4 running facilities");
- Optional<IAdditionsFacility> vboxServiceFacility = Optional.absent();
- while (!vboxServiceFacility.isPresent()) {
- List<IAdditionsFacility> facilities = session.getConsole().getGuest().getFacilities();
- vboxServiceFacility = Iterables.tryFind(facilities, new Predicate<IAdditionsFacility>() {
- @Override
- public boolean apply(IAdditionsFacility additionsFacility) {
- return additionsFacility.getType().equals(AdditionsFacilityType.VBoxService)
- && additionsFacility.getStatus().equals(AdditionsFacilityStatus.Active);
- }
- });
- }
- logger.debug("<< virtualbox service ready on vm(%s)", vmName);
- return null;
- }
- });
- }
-
- private static class AdditionsStatusPredicate implements Predicate<AdditionsRunLevelType> {
- private final ISession session;
-
- AdditionsStatusPredicate(ISession session) {
- this.session = session;
- }
-
- @Override
- public boolean apply(AdditionsRunLevelType input) {
- return session.getConsole().getGuest().getAdditionsStatus(input);
- }
- }
-
- private static class FacilitiesPredicate implements Predicate<Integer> {
- private final ISession session;
-
- FacilitiesPredicate(ISession session) {
- this.session = session;
- }
-
- @Override
- public boolean apply(Integer input) {
- return session.getConsole().getGuest().getFacilities().size() == input;
- }
- }
-
- private static class MachineStatePredicate implements Predicate<MachineState> {
- private final IVirtualBox virtualBox;
- private final String vmName;
-
- MachineStatePredicate(IVirtualBox virtualBox, String vmName) {
- this.virtualBox = virtualBox;
- this.vmName = vmName;
- }
-
- @Override
- public boolean apply(MachineState input) {
- MachineState state = virtualBox.findMachine(vmName).getState();
- return state.equals(input);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineNameOrIdAndNicSlot.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineNameOrIdAndNicSlot.java b/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineNameOrIdAndNicSlot.java
deleted file mode 100644
index 04a6abe..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineNameOrIdAndNicSlot.java
+++ /dev/null
@@ -1,131 +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.virtualbox.util;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-
-
-import com.google.common.base.Objects;
-import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
-import com.google.common.collect.Iterables;
-
-
-/**
- * An immutable representation of a MachineNameOrId and NIC port.
- *
- * <p>Example usage:
- * <pre>
- * MachineNameOrIdAndNicSlot mp = MachineNameOrIdAndNicSlot.fromString("myMachine:1");
- * hp.getMachineNameOrId(); // returns "myMachine"
- * hp.getSlot(); // returns 1
- * hp.toString(); // returns "myMachine:1"
- * </pre>
- */
-public final class MachineNameOrIdAndNicSlot {
-
- private static final String SEPARATOR = ":";
-
-/** IMachine name or id*/
- private final String machineNameOrId;
-
- /** Validated NIC slot number in the range [0..3] */
- private final long slot;
-
- private MachineNameOrIdAndNicSlot(String machineNameOrId, long slot) {
- this.machineNameOrId = machineNameOrId;
- this.slot = slot;
- }
-
- public String getMachineNameOrId() {
- return machineNameOrId;
- }
-
- public boolean hasSlot() {
- return slot >= 0;
- }
-
- public long getSlot() {
- checkState(hasSlot());
- return slot;
- }
-
- public String getSlotText() {
- checkState(hasSlot());
- return String.valueOf(slot);
- }
-
- public static MachineNameOrIdAndNicSlot fromParts(String machineNameOrId, long slot) {
- checkArgument(isValidSlot(slot));
- return new MachineNameOrIdAndNicSlot(checkNotNull(machineNameOrId, "machineNameOrId"), slot);
- }
-
- public static MachineNameOrIdAndNicSlot fromString(String machineNameOrIdAndNicSlotString) {
- Iterable<String> splittedString = Splitter.on(SEPARATOR).split(machineNameOrIdAndNicSlotString);
- checkState(Iterables.size(splittedString) == 2);
- String machineNameOrId = Strings.nullToEmpty(Iterables.get(splittedString, 0));
- String nicSlotString = Strings.nullToEmpty(Iterables.get(splittedString, 1));
- checkArgument(!nicSlotString.startsWith("+"), "Unparseable slot number: %s", nicSlotString);
- try {
- long slot = Long.parseLong(nicSlotString);
- checkArgument(isValidSlot(slot), "Slot number out of range: %s", nicSlotString);
- return new MachineNameOrIdAndNicSlot(machineNameOrId, slot);
- } catch (NumberFormatException e) {
- throw new IllegalArgumentException("Unparseable slot number: " + nicSlotString);
- }
- }
-
- public MachineNameOrIdAndNicSlot withDefaultSlot(int defaultSlot) {
- checkArgument(isValidSlot(defaultSlot));
- if (hasSlot() || slot == defaultSlot) {
- return this;
- }
- return new MachineNameOrIdAndNicSlot(machineNameOrId, defaultSlot);
- }
-
- @Override
- public boolean equals(Object other) {
- if (this == other) {
- return true;
- }
- if (other instanceof MachineNameOrIdAndNicSlot) {
- MachineNameOrIdAndNicSlot that = (MachineNameOrIdAndNicSlot) other;
- return Objects.equal(this.machineNameOrId, that.machineNameOrId)
- && this.slot == that.slot;
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(machineNameOrId, slot);
- }
-
- @Override
- public String toString() {
- return Objects.toStringHelper(this)
- .add("machineNameOrId", machineNameOrId)
- .add("nicSlot", slot)
- .toString();
- }
-
- private static boolean isValidSlot(long slot) {
- return slot >= 0l && slot <= 3l;
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/75178c77/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineUtils.java
----------------------------------------------------------------------
diff --git a/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineUtils.java b/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineUtils.java
deleted file mode 100644
index f4bae13..0000000
--- a/virtualbox/src/main/java/org/jclouds/virtualbox/util/MachineUtils.java
+++ /dev/null
@@ -1,280 +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.virtualbox.util;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.Uninterruptibles;
-import com.google.inject.Inject;
-import org.jclouds.compute.callables.RunScriptOnNode;
-import org.jclouds.compute.callables.RunScriptOnNode.Factory;
-import org.jclouds.compute.domain.ExecResponse;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.options.RunScriptOptions;
-import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.logging.Logger;
-import org.jclouds.scriptbuilder.domain.Statement;
-import org.jclouds.util.Throwables2;
-import org.virtualbox_4_2.IMachine;
-import org.virtualbox_4_2.ISession;
-import org.virtualbox_4_2.LockType;
-import org.virtualbox_4_2.SessionState;
-import org.virtualbox_4_2.VBoxException;
-import org.virtualbox_4_2.VirtualBoxManager;
-
-import javax.annotation.Resource;
-import javax.inject.Named;
-import javax.inject.Singleton;
-import java.util.concurrent.TimeUnit;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static org.jclouds.util.Predicates2.retry;
-
-/**
- * Utilities for executing functions on a VirtualBox machine.
- */
-
-@Singleton
-public class MachineUtils {
- public static final String IP_V4_ADDRESS_PATTERN = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
- + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
- + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
-
- @Resource
- @Named(ComputeServiceConstants.COMPUTE_LOGGER)
- protected Logger logger = Logger.NULL;
-
- private final Supplier<VirtualBoxManager> manager;
- private final Factory scriptRunner;
-
-
- @Inject
- public MachineUtils(Supplier<VirtualBoxManager> manager, RunScriptOnNode.Factory scriptRunner) {
- this.manager = manager;
- this.scriptRunner = scriptRunner;
- }
-
- public ListenableFuture<ExecResponse> runScriptOnNode(NodeMetadata metadata, Statement statement,
- RunScriptOptions options) {
- return scriptRunner.submit(metadata, statement, options);
- }
-
- /**
- * Locks the machine and executes the given function using the machine matching the given id.
- * Since the machine is locked it is possible to perform some modifications to the IMachine.
- * <p/>
- * Unlocks the machine before returning.
- *
- * @param machineId
- * the id of the machine
- * @param function
- * the function to execute
- * @return the result from applying the function to the machine.
- */
- public <T> T writeLockMachineAndApply(final String machineId, final Function<IMachine, T> function) {
- return lockSessionOnMachineAndApply(machineId, LockType.Write, new Function<ISession, T>() {
-
- @Override
- public T apply(ISession session) {
- return function.apply(session.getMachine());
- }
-
- @Override
- public String toString() {
- return function.toString();
- }
-
- });
- }
-
- /**
- * Locks the machine and executes the given function using the machine matching the given id. The
- * machine is write locked and modifications to the session that reflect on the machine can be
- * done safely.
- * <p/>
- * Unlocks the machine before returning.
- *
- * @param machineId
- * the id of the machine
- * @param function
- * the function to execute
- * @return the result from applying the function to the machine.
- */
- public <T> T writeLockMachineAndApplyToSession(final String machineId, final Function<ISession, T> function) {
- return lockSessionOnMachineAndApply(machineId, LockType.Write, function);
- }
-
- /**
- * Locks the machine and executes the given function using the machine matching the given id. The
- * machine is read locked, which means that settings can be read safely (but not changed) by
- * function.
- * <p/>
- * Unlocks the machine before returning.
- *
- * @param machineId
- * the id of the machine
- * @param function
- * the function to execute
- * @return the result from applying the function to the machine.
- */
- public <T> T sharedLockMachineAndApply(final String machineId, final Function<IMachine, T> function) {
- return lockSessionOnMachineAndApply(machineId, LockType.Shared, new Function<ISession, T>() {
-
- @Override
- public T apply(ISession session) {
- return function.apply(session.getMachine());
- }
-
- @Override
- public String toString() {
- return function.toString();
- }
-
- });
- }
-
- /**
- * Locks the machine and executes the given function to the session using the machine matching
- * the given id. The machine is read locked, which means that settings can be read safely (but
- * not changed) by function.
- * <p/>
- * Unlocks the machine before returning.
- *
- * @param machineId
- * the id of the machine
- * @param function
- * the function to execute
- * @return the result from applying the function to the machine.
- */
- public <T> T sharedLockMachineAndApplyToSession(final String machineId, final Function<ISession, T> function) {
- return lockSessionOnMachineAndApply(machineId, LockType.Shared, function);
- }
-
- /**
- * Locks the machine and executes the given function using the current session. Since the machine
- * is locked it is possible to perform some modifications to the IMachine.
- * <p/>
- * Unlocks the machine before returning.
- *
- * Tries to obtain a lock 15 times before giving up waiting 1 sec between tries. When no machine
- * is found null is returned.
- *
- * @param type
- * the kind of lock to use when initially locking the machine.
- * @param machineId
- * the id of the machine
- * @param function
- * the function to execute
- * @return the result from applying the function to the session.
- */
- protected <T> T lockSessionOnMachineAndApply(String machineId, LockType type, Function<ISession, T> function) {
- int retries = 15;
- ISession session = checkNotNull(lockSession(machineId, type, retries), "session");
- try {
- return function.apply(session);
- } catch (VBoxException e) {
- throw new RuntimeException(String.format("error applying %s to %s with %s lock: %s", function, machineId,
- type, e.getMessage()), e);
- } finally {
- // this is a workaround for shared lock type, where session state is not updated immediately
- if (type == LockType.Shared) {
- Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
- }
- if (session.getState().equals(SessionState.Locked)) {
- session.unlockMachine();
- }
- if (!session.getState().equals(SessionState.Unlocked)) {
- checkSessionIsUnlocked(session, 5, 3L, TimeUnit.SECONDS);
- }
- }
- }
-
- private ISession lockSession(String machineId, LockType type, int retries) {
- int count = 0;
- IMachine immutableMachine = manager.get().getVBox().findMachine(machineId);
- ISession session;
- while (true) {
- try {
- session = manager.get().getSessionObject();
- immutableMachine.lockMachine(session, type);
- break;
- } catch (VBoxException e) {
- VBoxException vbex = Throwables2.getFirstThrowableOfType(e, VBoxException.class);
- if (vbex != null && machineNotFoundException(vbex)) {
- return null;
- }
- count++;
- logger.debug("Could not lock machine (try %d of %d). Error: %s", count, retries, e.getMessage());
- if (count == retries) {
- throw new RuntimeException(String.format("error locking %s with %s lock: %s", machineId, type,
- e.getMessage()), e);
- }
- Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
- }
- }
- checkState(session.getState().equals(SessionState.Locked));
- return checkNotNull(session, "session");
- }
-
- /**
- * @param machineId
- * @param function
- * @return
- */
- public <T> T applyForMachine(final String machineId, final Function<IMachine, T> function) {
- final IMachine immutableMachine = manager.get().getVBox().findMachine(machineId);
- return new Function<IMachine, T>() {
- @Override
- public T apply(IMachine machine) {
- return function.apply(machine);
- }
-
- @Override
- public String toString() {
- return function.toString();
- }
- }.apply(immutableMachine);
- }
-
- public static boolean machineNotFoundException(VBoxException e) {
- return e.getMessage().contains("VirtualBox error: Could not find a registered machine named ")
- || e.getMessage().contains("Could not find a registered machine with UUID {");
- }
-
- private void checkSessionIsUnlocked(ISession session, int attempts, long period, TimeUnit timeUnit) {
- checkState(
- retry(new SessionStatePredicate(session), attempts * period, period, timeUnit).apply(SessionState.Unlocked),
- "timed out or number of retries(%s) reached waiting for session to be unlocked", attempts);
- }
-
- private static class SessionStatePredicate implements Predicate<SessionState> {
- private final ISession session;
-
- SessionStatePredicate(ISession session) {
- this.session = session;
- }
-
- @Override
- public boolean apply(SessionState input) {
- return session.getState().equals(input);
- }
- }
-
-}