mirror of https://github.com/apache/jclouds.git
cleanup on vbox
This commit is contained in:
parent
a7412c40b5
commit
d99c18140e
|
@ -33,7 +33,7 @@ import java.util.Properties;
|
||||||
import org.jclouds.apis.ApiMetadata;
|
import org.jclouds.apis.ApiMetadata;
|
||||||
import org.jclouds.apis.internal.BaseApiMetadata;
|
import org.jclouds.apis.internal.BaseApiMetadata;
|
||||||
import org.jclouds.compute.ComputeServiceContext;
|
import org.jclouds.compute.ComputeServiceContext;
|
||||||
import org.jclouds.virtualbox.config.DefaultCacheNodeStoreModule;
|
import org.jclouds.virtualbox.config.HardcodeLocalhostAsNodeMetadataSupplier;
|
||||||
import org.jclouds.virtualbox.config.VirtualBoxComputeServiceContextModule;
|
import org.jclouds.virtualbox.config.VirtualBoxComputeServiceContextModule;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
@ -106,7 +106,7 @@ public class VirtualBoxApiMetadata extends BaseApiMetadata {
|
||||||
.buildVersion("4.1.8r75467")
|
.buildVersion("4.1.8r75467")
|
||||||
.defaultProperties(VirtualBoxApiMetadata.defaultProperties())
|
.defaultProperties(VirtualBoxApiMetadata.defaultProperties())
|
||||||
.view(ComputeServiceContext.class)
|
.view(ComputeServiceContext.class)
|
||||||
.defaultModules(ImmutableSet.<Class<? extends Module>>of(DefaultCacheNodeStoreModule.class, VirtualBoxComputeServiceContextModule.class));
|
.defaultModules(ImmutableSet.<Class<? extends Module>>of(HardcodeLocalhostAsNodeMetadataSupplier.class, VirtualBoxComputeServiceContextModule.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds 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.config;
|
|
||||||
|
|
||||||
import java.net.URI;
|
|
||||||
|
|
||||||
import org.jclouds.byon.Node;
|
|
||||||
import org.jclouds.byon.config.CacheNodeStoreModule;
|
|
||||||
import org.jclouds.compute.domain.OsFamily;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
|
|
||||||
public class DefaultCacheNodeStoreModule extends CacheNodeStoreModule {
|
|
||||||
public DefaultCacheNodeStoreModule() {
|
|
||||||
super(ImmutableMap.of("host", Node.builder().id("host").name("host installing virtualbox").hostname("localhost")
|
|
||||||
.osFamily(OsFamily.LINUX.toString()).osDescription(System.getProperty("os.name")).osVersion(
|
|
||||||
System.getProperty("os.version")).group("ssh").username(System.getProperty("user.name"))
|
|
||||||
.credentialUrl(URI.create("file://" + System.getProperty("user.home") + "/.ssh/id_rsa")).build()));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds 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.config;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
|
import org.jclouds.compute.callables.RunScriptOnNode;
|
||||||
|
import org.jclouds.compute.domain.NodeMetadata;
|
||||||
|
import org.jclouds.compute.domain.NodeMetadataBuilder;
|
||||||
|
import org.jclouds.compute.domain.NodeState;
|
||||||
|
import org.jclouds.compute.domain.OperatingSystem;
|
||||||
|
import org.jclouds.compute.domain.OsFamily;
|
||||||
|
import org.jclouds.domain.LocationBuilder;
|
||||||
|
import org.jclouds.domain.LocationScope;
|
||||||
|
import org.jclouds.domain.LoginCredentials;
|
||||||
|
|
||||||
|
import com.google.common.base.Charsets;
|
||||||
|
import com.google.common.base.Supplier;
|
||||||
|
import com.google.common.base.Throwables;
|
||||||
|
import com.google.common.io.Files;
|
||||||
|
import com.google.inject.AbstractModule;
|
||||||
|
import com.google.inject.Provides;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In particular, this binds {@code Supplier<NodeMetadata>} so that it can be used in ssh commands.
|
||||||
|
* Ssh is necessary for operations that cannot be performed in the virtual box api, such as clearing
|
||||||
|
* sessions.
|
||||||
|
*
|
||||||
|
* ex. once this is loaded, use Guice to inject {@code Supplier<NodeMetadata>} as {@code host} and
|
||||||
|
* {@link RunScriptOnNode#Factory} as factory, to start making commands like the following:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* import static org.jclouds.compute.options.RunScriptOptions.Builder.runAsRoot;
|
||||||
|
* import static org.jclouds.scriptbuilder.domain.Statements.*;
|
||||||
|
*
|
||||||
|
* ...
|
||||||
|
*
|
||||||
|
* // direct execute a script as opposed to using sudo, or an init wrapper
|
||||||
|
* ListenableFuture<ExecResponse> fooInTheFuture = factory.submit(host.get(),
|
||||||
|
* exec("echo foo"), runAsRoot(false).wrapInInitScript(false));
|
||||||
|
*
|
||||||
|
* ExecResponse foo = Futures.getUnchecked(fooInTheFuture);
|
||||||
|
*
|
||||||
|
* // call a set of commands that are defined in classpath/functions/function_name.sh
|
||||||
|
* ListenableFuture<ExecResponse> kill = factory.submit(host.get(),
|
||||||
|
* call("killsession"), runAsRoot(false).wrapInInitScript(false));
|
||||||
|
*
|
||||||
|
* ...
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* <h3>Note</h3>
|
||||||
|
*
|
||||||
|
* People often forget to call {@link Future#get} when using {@link RunScriptOnNode.Factory#submit}.
|
||||||
|
* Don't forget!
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public class HardcodeLocalhostAsNodeMetadataSupplier extends AbstractModule {
|
||||||
|
|
||||||
|
public static final String HOST_ID = "host";
|
||||||
|
public static final String HOSTNAME = System.getenv("HOSTNAME");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lazy so that we don't hang up the injector reading a file
|
||||||
|
*/
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
protected Supplier<NodeMetadata> lazySupplyHostAsNodeMetadata() {
|
||||||
|
return new Supplier<NodeMetadata>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NodeMetadata get() {
|
||||||
|
|
||||||
|
String privateKey = readRsaIdentity();
|
||||||
|
|
||||||
|
return new NodeMetadataBuilder()
|
||||||
|
.id(HOST_ID)
|
||||||
|
.name("host installing virtualbox")
|
||||||
|
.hostname(HOSTNAME)
|
||||||
|
.operatingSystem(OperatingSystem.builder()
|
||||||
|
.family(OsFamily.LINUX)
|
||||||
|
.description(System.getProperty("os.name"))
|
||||||
|
.arch(System.getProperty("os.arch"))
|
||||||
|
.version(System.getProperty("os.version"))
|
||||||
|
.build())
|
||||||
|
.state(NodeState.RUNNING)
|
||||||
|
.location(new LocationBuilder().id(HOST_ID)
|
||||||
|
.scope(LocationScope.HOST)
|
||||||
|
.description(HOSTNAME)
|
||||||
|
.build())
|
||||||
|
.credentials(LoginCredentials.builder()
|
||||||
|
.user(System.getProperty("user.name"))
|
||||||
|
.privateKey(privateKey)
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static String readRsaIdentity() {
|
||||||
|
String privateKey;
|
||||||
|
try {
|
||||||
|
File keyFile = new File(System.getProperty("user.home") + "/.ssh/id_rsa");
|
||||||
|
privateKey = Files.toString(keyFile, Charsets.UTF_8);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw Throwables.propagate(e);
|
||||||
|
}
|
||||||
|
return privateKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,22 +24,14 @@ import static org.jclouds.virtualbox.config.VirtualBoxConstants.VIRTUALBOX_DEFAU
|
||||||
import static org.jclouds.virtualbox.config.VirtualBoxConstants.VIRTUALBOX_DEFAULT_IMAGE_VERSION;
|
import static org.jclouds.virtualbox.config.VirtualBoxConstants.VIRTUALBOX_DEFAULT_IMAGE_VERSION;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import org.eclipse.jetty.server.Server;
|
import org.eclipse.jetty.server.Server;
|
||||||
import org.jclouds.ContextBuilder;
|
|
||||||
import org.jclouds.byon.BYONApiMetadata;
|
|
||||||
import org.jclouds.byon.Node;
|
|
||||||
import org.jclouds.byon.functions.NodeToNodeMetadata;
|
|
||||||
import org.jclouds.byon.suppliers.SupplyFromProviderURIOrNodesProperty;
|
|
||||||
import org.jclouds.compute.ComputeServiceAdapter;
|
import org.jclouds.compute.ComputeServiceAdapter;
|
||||||
import org.jclouds.compute.ComputeServiceContext;
|
|
||||||
import org.jclouds.compute.ImageExtension;
|
import org.jclouds.compute.ImageExtension;
|
||||||
import org.jclouds.compute.ComputeServiceAdapter.NodeAndInitialCredentials;
|
import org.jclouds.compute.ComputeServiceAdapter.NodeAndInitialCredentials;
|
||||||
import org.jclouds.compute.config.ComputeServiceAdapterContextModule;
|
import org.jclouds.compute.config.ComputeServiceAdapterContextModule;
|
||||||
|
@ -51,11 +43,8 @@ import org.jclouds.compute.domain.TemplateBuilder;
|
||||||
import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
|
import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
|
||||||
import org.jclouds.domain.Location;
|
import org.jclouds.domain.Location;
|
||||||
import org.jclouds.functions.IdentityFunction;
|
import org.jclouds.functions.IdentityFunction;
|
||||||
import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
|
|
||||||
import org.jclouds.predicates.RetryablePredicate;
|
import org.jclouds.predicates.RetryablePredicate;
|
||||||
import org.jclouds.ssh.SshClient;
|
import org.jclouds.ssh.SshClient;
|
||||||
import org.jclouds.sshj.config.SshjSshClientModule;
|
|
||||||
import org.jclouds.virtualbox.Host;
|
|
||||||
import org.jclouds.virtualbox.compute.VirtualBoxComputeServiceAdapter;
|
import org.jclouds.virtualbox.compute.VirtualBoxComputeServiceAdapter;
|
||||||
import org.jclouds.virtualbox.compute.VirtualBoxImageExtension;
|
import org.jclouds.virtualbox.compute.VirtualBoxImageExtension;
|
||||||
import org.jclouds.virtualbox.domain.CloneSpec;
|
import org.jclouds.virtualbox.domain.CloneSpec;
|
||||||
|
@ -86,17 +75,13 @@ import org.virtualbox_4_1.VirtualBoxManager;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Functions;
|
|
||||||
import com.google.common.base.Optional;
|
import com.google.common.base.Optional;
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.base.Supplier;
|
import com.google.common.base.Supplier;
|
||||||
import com.google.common.base.Suppliers;
|
|
||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
import com.google.common.cache.LoadingCache;
|
import com.google.common.cache.LoadingCache;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
import com.google.inject.Module;
|
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
import com.google.inject.TypeLiteral;
|
import com.google.inject.TypeLiteral;
|
||||||
|
|
||||||
|
@ -157,10 +142,6 @@ public class VirtualBoxComputeServiceContextModule extends
|
||||||
bind(new TypeLiteral<Server>() {
|
bind(new TypeLiteral<Server>() {
|
||||||
}).to((Class) PreseedCfgServer.class).asEagerSingleton();
|
}).to((Class) PreseedCfgServer.class).asEagerSingleton();
|
||||||
|
|
||||||
// for byon
|
|
||||||
bind(new TypeLiteral<Function<URI, InputStream>>() {
|
|
||||||
}).to(SupplyFromProviderURIOrNodesProperty.class);
|
|
||||||
|
|
||||||
bind(new TypeLiteral<Function<IMachine, SshClient>>() {
|
bind(new TypeLiteral<Function<IMachine, SshClient>>() {
|
||||||
}).to(IMachineToSshClient.class);
|
}).to(IMachineToSshClient.class);
|
||||||
|
|
||||||
|
@ -168,15 +149,6 @@ public class VirtualBoxComputeServiceContextModule extends
|
||||||
bind(LockType.class).toInstance(LockType.Write);
|
bind(LockType.class).toInstance(LockType.Write);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Host
|
|
||||||
@Singleton
|
|
||||||
protected ComputeServiceContext provideHostController() {
|
|
||||||
return ContextBuilder.newBuilder(new BYONApiMetadata()).credentials("", "")
|
|
||||||
.modules(ImmutableSet.<Module> of(new SLF4JLoggingModule(), new SshjSshClientModule()))
|
|
||||||
.build(ComputeServiceContext.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
protected Function<Supplier<NodeMetadata>, VirtualBoxManager> provideVBox() {
|
protected Function<Supplier<NodeMetadata>, VirtualBoxManager> provideVBox() {
|
||||||
|
@ -195,12 +167,6 @@ public class VirtualBoxComputeServiceContextModule extends
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
protected Supplier defaultClient(Supplier<VirtualBoxManager> in) {
|
|
||||||
return in;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
protected Predicate<SshClient> sshResponds(SshResponds sshResponds, Timeouts timeouts) {
|
protected Predicate<SshClient> sshResponds(SshResponds sshResponds, Timeouts timeouts) {
|
||||||
|
@ -213,19 +179,6 @@ public class VirtualBoxComputeServiceContextModule extends
|
||||||
.osArchMatches(VIRTUALBOX_DEFAULT_IMAGE_ARCH);
|
.osArchMatches(VIRTUALBOX_DEFAULT_IMAGE_ARCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
protected Supplier<NodeMetadata> host(Supplier<LoadingCache<String, Node>> nodes, NodeToNodeMetadata converter)
|
|
||||||
throws ExecutionException {
|
|
||||||
return Suppliers.compose(Functions.compose(converter, new Function<LoadingCache<String, Node>, Node>() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Node apply(LoadingCache<String, Node> arg0) {
|
|
||||||
return arg0.apply("host");
|
|
||||||
}
|
|
||||||
}), nodes);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Optional<ImageExtension> provideImageExtension(Injector i) {
|
protected Optional<ImageExtension> provideImageExtension(Injector i) {
|
||||||
return Optional.of(i.getInstance(ImageExtension.class));
|
return Optional.of(i.getInstance(ImageExtension.class));
|
||||||
|
|
|
@ -29,12 +29,12 @@ import javax.annotation.Resource;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import org.jclouds.Constants;
|
|
||||||
import org.jclouds.compute.domain.ExecResponse;
|
import org.jclouds.compute.domain.ExecResponse;
|
||||||
import org.jclouds.compute.domain.NodeMetadata;
|
import org.jclouds.compute.domain.NodeMetadata;
|
||||||
import org.jclouds.compute.options.RunScriptOptions;
|
import org.jclouds.compute.options.RunScriptOptions;
|
||||||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||||
import org.jclouds.logging.Logger;
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.rest.annotations.BuildVersion;
|
||||||
import org.jclouds.ssh.SshClient;
|
import org.jclouds.ssh.SshClient;
|
||||||
import org.jclouds.virtualbox.domain.IsoSpec;
|
import org.jclouds.virtualbox.domain.IsoSpec;
|
||||||
import org.jclouds.virtualbox.domain.MasterSpec;
|
import org.jclouds.virtualbox.domain.MasterSpec;
|
||||||
|
@ -74,7 +74,7 @@ public class CreateAndInstallVm implements Function<MasterSpec, IMachine> {
|
||||||
CreateAndRegisterMachineFromIsoIfNotAlreadyExists CreateAndRegisterMachineFromIsoIfNotAlreadyExists,
|
CreateAndRegisterMachineFromIsoIfNotAlreadyExists CreateAndRegisterMachineFromIsoIfNotAlreadyExists,
|
||||||
IMachineToNodeMetadata imachineToNodeMetadata, Predicate<SshClient> sshResponds,
|
IMachineToNodeMetadata imachineToNodeMetadata, Predicate<SshClient> sshResponds,
|
||||||
Function<IMachine, SshClient> sshClientForIMachine, MachineUtils machineUtils,
|
Function<IMachine, SshClient> sshClientForIMachine, MachineUtils machineUtils,
|
||||||
MachineController machineController, @Named(Constants.PROPERTY_BUILD_VERSION) String version,
|
MachineController machineController, @BuildVersion String version,
|
||||||
@Named(VIRTUALBOX_PRECONFIGURATION_URL) String preconfigurationUrl) {
|
@Named(VIRTUALBOX_PRECONFIGURATION_URL) String preconfigurationUrl) {
|
||||||
this.createAndRegisterMachineFromIsoIfNotAlreadyExists = CreateAndRegisterMachineFromIsoIfNotAlreadyExists;
|
this.createAndRegisterMachineFromIsoIfNotAlreadyExists = CreateAndRegisterMachineFromIsoIfNotAlreadyExists;
|
||||||
this.sshResponds = sshResponds;
|
this.sshResponds = sshResponds;
|
||||||
|
|
|
@ -42,10 +42,10 @@ import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import org.jclouds.Constants;
|
|
||||||
import org.jclouds.compute.domain.Image;
|
import org.jclouds.compute.domain.Image;
|
||||||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||||
import org.jclouds.logging.Logger;
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.rest.annotations.BuildVersion;
|
||||||
import org.jclouds.virtualbox.domain.HardDisk;
|
import org.jclouds.virtualbox.domain.HardDisk;
|
||||||
import org.jclouds.virtualbox.domain.IsoSpec;
|
import org.jclouds.virtualbox.domain.IsoSpec;
|
||||||
import org.jclouds.virtualbox.domain.Master;
|
import org.jclouds.virtualbox.domain.Master;
|
||||||
|
@ -104,7 +104,7 @@ public class MastersLoadingCache extends AbstractLoadingCache<Image, Master> {
|
||||||
private final String preconfigurationUrl;
|
private final String preconfigurationUrl;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public MastersLoadingCache(@Named(Constants.PROPERTY_BUILD_VERSION) String version,
|
public MastersLoadingCache(@BuildVersion String version,
|
||||||
@Named(VIRTUALBOX_INSTALLATION_KEY_SEQUENCE) String installationKeySequence,
|
@Named(VIRTUALBOX_INSTALLATION_KEY_SEQUENCE) String installationKeySequence,
|
||||||
@Named(VIRTUALBOX_PRECONFIGURATION_URL) String preconfigurationUrl,
|
@Named(VIRTUALBOX_PRECONFIGURATION_URL) String preconfigurationUrl,
|
||||||
@Named(VIRTUALBOX_WORKINGDIR) String workingDir, Function<MasterSpec, IMachine> masterLoader,
|
@Named(VIRTUALBOX_WORKINGDIR) String workingDir, Function<MasterSpec, IMachine> masterLoader,
|
||||||
|
|
Loading…
Reference in New Issue