package se.kth.karamel.backend.launcher.nova;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Module;
import org.jclouds.ContextBuilder;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.enterprise.config.EnterpriseConfigurationModule;
import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
import org.jclouds.openstack.nova.v2_0.NovaApi;
import org.jclouds.openstack.nova.v2_0.config.NovaProperties;
import org.jclouds.openstack.nova.v2_0.extensions.KeyPairApi;
import org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupApi;
import org.jclouds.sshj.config.SshjSshClientModule;
import se.kth.karamel.common.util.NovaCredentials;
import java.util.Properties;
/**
* Nova Context
* Created by Alberto on 2015-05-16.
*/
public class NovaContext {
private final NovaCredentials novaCredentials;
private final ComputeService computeService;
private final NovaApi novaApi;
private final SecurityGroupApi securityGroupApi;
private final KeyPairApi keyPairApi;
public NovaContext(NovaCredentials credentials, ContextBuilder builder) {
this.novaCredentials = credentials;
ComputeServiceContext context = builder.credentials(credentials.getAccountName(),credentials.getAccountPass())
.endpoint(credentials.getEndpoint())
.buildView(ComputeServiceContext.class);
this.computeService = context.getComputeService();
this.novaApi = computeService.getContext().unwrapApi(NovaApi.class);
this.securityGroupApi = novaApi.getSecurityGroupApi(credentials.getRegion()).get();
this.keyPairApi = novaApi.getKeyPairApi(credentials.getRegion()).get();
}
public static ContextBuilder buildContext(NovaCredentials credentials) {
Properties properties = new Properties();
properties.setProperty(NovaProperties.AUTO_ALLOCATE_FLOATING_IPS, "true");
Iterable<Module> modules = ImmutableSet.<Module>of(
new SshjSshClientModule(),
new SLF4JLoggingModule(),
new EnterpriseConfigurationModule());
ContextBuilder build = ContextBuilder.newBuilder("aws-ec2")
.credentials(credentials.getAccountName(), credentials.getAccountPass())
.endpoint(credentials.getEndpoint())
.modules(modules)
.overrides(properties);
return build;
}
public NovaCredentials getNovaCredentials() {
return novaCredentials;
}
public ComputeService getComputeService() {
return computeService;
}
public NovaApi getNovaApi() {
return novaApi;
}
public SecurityGroupApi getSecurityGroupApi() {
return securityGroupApi;
}
public KeyPairApi getKeyPairApi() {
return keyPairApi;
}
}