Управление экземплярами облака Google с помощью jcloud api
Я хочу добавить и перечислить все экземпляры / ВМ в моем проекте в облаке Google с помощью API-интерфейса Jcloud. В этом коде я предполагаю, что узел является экземпляром. Я установил все необходимые переменные и извлек секретный ключ из файла json. Построение контекста происходит успешно.
images = compute.listImages () => перечисляет все изображения, предоставленные Google.
node = compute.listNodes() => должен перечислять узлы, но вместо этого давать исключение нулевого указателя.
Выход =>
Нет изображений 246
Исключение в потоке "основной") в org.jclouds.compute.internal.FormatSharedNamesAndAppendUniqueStringToThoseWhichRepeat.sharedNameForGroup(FormatSharedNamesAndAppendUniqueStringToThoseWhichRepeat.java:120) compute.functions. Functions.java:211) на com.google.common.collect.Iterators$8.transform(Iterators.java:794) на com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) на com.google.common.collect.Iterators$7.computeNext(Iterators.java:646) на com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) на странице com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) на странице com.google.common.collect.Iterators.addAll(Iterators.java:356) на странице com.google.common.collect.Iterables.addAll(Iterables.java:350) в com.google.common.collect.Sets.newLinkedHashSet(Sets.java:328) в org.jclouds.compute.internal.BaseComputeService.listNodes(BaseComputeService.java:335) в org.jclouds.examples.compute.basics.Example.main(Example.java:54)
package org.jclouds.examples.compute.basics;
import static com.google.common.base.Charsets.UTF_8;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.jclouds.ContextBuilder;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.domain.ComputeMetadata;
import org.jclouds.compute.domain.Image;
import org.jclouds.domain.Credentials;
import org.jclouds.enterprise.config.EnterpriseConfigurationModule;
import org.jclouds.googlecloud.GoogleCredentialsFromJson;
import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
import org.jclouds.sshj.config.SshjSshClientModule;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableSet;
import com.google.common.io.Files;
import com.google.inject.Module;
public class Example {
public static void main(String[] args)
{
String provider = "google-compute-engine";
String identity = "***@developer.gserviceaccount.com";
String credential = "path to private key file ";
credential = getCredentialFromJsonKeyFile(credential);
Properties properties = new Properties();
long scriptTimeout = TimeUnit.MILLISECONDS.convert(20, TimeUnit.MINUTES);
properties.setProperty(TIMEOUT_SCRIPT_COMPLETE, scriptTimeout + "");
Iterable<Module> modules = ImmutableSet.<Module> of(
new SshjSshClientModule(),new SLF4JLoggingModule(),
new EnterpriseConfigurationModule());
ContextBuilder builder = ContextBuilder.newBuilder(provider)
.credentials(identity, credential)
.modules(modules)
.overrides(properties);
ComputeService compute=builder.buildView(ComputeServiceContext.class).getComputeService();
Set<? extends Image> images = compute.listImages();
System.out.printf(">> No of images %d%n", images.size());
Set<? extends ComputeMetadata> nodes = compute.listNodes();
System.out.printf(">> No of nodes/instances %d%n", nodes.size());
compute.getContext().close();
}
private static String getCredentialFromJsonKeyFile(String filename) {
try {
String fileContents = Files.toString(new File(filename), UTF_8);
Supplier<Credentials> credentialSupplier = new GoogleCredentialsFromJson(fileContents);
String credential = credentialSupplier.get().credential;
return credential;
} catch (IOException e) {
System.err.println("Exception reading private key from '%s': " + filename);
e.printStackTrace();
System.exit(1);
return null;
}
}
}