在 google 计算引擎上启动和停止实例
Starting and stopping instances on google compute engine
我想在 google 计算引擎上 start/resume 和 stop/suspend 实例,但它给出了 "java.lang.UnsupportedOperationException"。有没有其他方法
执行这些操作?
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";
String groupName = "newgroup";
credential = getCredentialFromJsonKeyFile(credential);
Iterable<Module> modules = ImmutableSet.<Module> of(
new SshjSshClientModule(),
new SLF4JLoggingModule(),
new EnterpriseConfigurationModule());
ContextBuilder builder = ContextBuilder.newBuilder(provider)
.credentials(identity, credential)
.modules(modules);
ComputeService compute=builder.buildView(ComputeServiceContext.class).getComputeService();
compute.suspendNode("Instance id");
//compute.suspendNodesMatching(Predicates.<NodeMetadata> and(inGroup(groupName)));
System.out.println("suspended");
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;
}
}
}
输出:
suspending node(node id)
Exception in thread "main" java.lang.UnsupportedOperationException: suspend is not supported by GCE
at org.jclouds.googlecomputeengine.compute.GoogleComputeEngineServiceAdapter.suspendNode(GoogleComputeEngineServiceAdapter.java:251)
at org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.suspendNode(AdaptingComputeServiceStrategies.java:171)
at org.jclouds.compute.internal.BaseComputeService.suspendNode(BaseComputeService.java:503)
at org.jclouds.examples.compute.basics.Example.main(Example.java:79)
您可以停止来自 API 的实例。
POST https://www.googleapis.com/compute/v1/projects/<project>/zones/<zone>/instances/<instance>/stop
其中:
- project in URL 是你的项目id。
- zone in URL 是请求的区域名称。
- instance in URL 是要停止的实例名称。
这是docs
便携式 jclouds ComputeService 不直接支持它,但您可以从 ComputeServiceContext 获取 GoogleComputeEngineApi 和 InstanceApi,并使用其中的 start/stop 方法。
仅供参考,有一个正在进行的补丁,用于在 ComputeService 中添加对 start/stop 操作的支持:https://github.com/jclouds/jclouds-labs-google/pull/141
我想在 google 计算引擎上 start/resume 和 stop/suspend 实例,但它给出了 "java.lang.UnsupportedOperationException"。有没有其他方法 执行这些操作?
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";
String groupName = "newgroup";
credential = getCredentialFromJsonKeyFile(credential);
Iterable<Module> modules = ImmutableSet.<Module> of(
new SshjSshClientModule(),
new SLF4JLoggingModule(),
new EnterpriseConfigurationModule());
ContextBuilder builder = ContextBuilder.newBuilder(provider)
.credentials(identity, credential)
.modules(modules);
ComputeService compute=builder.buildView(ComputeServiceContext.class).getComputeService();
compute.suspendNode("Instance id");
//compute.suspendNodesMatching(Predicates.<NodeMetadata> and(inGroup(groupName)));
System.out.println("suspended");
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;
}
}
}
输出:
suspending node(node id)
Exception in thread "main" java.lang.UnsupportedOperationException: suspend is not supported by GCE
at org.jclouds.googlecomputeengine.compute.GoogleComputeEngineServiceAdapter.suspendNode(GoogleComputeEngineServiceAdapter.java:251)
at org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.suspendNode(AdaptingComputeServiceStrategies.java:171)
at org.jclouds.compute.internal.BaseComputeService.suspendNode(BaseComputeService.java:503)
at org.jclouds.examples.compute.basics.Example.main(Example.java:79)
您可以停止来自 API 的实例。
POST https://www.googleapis.com/compute/v1/projects/<project>/zones/<zone>/instances/<instance>/stop
其中:
- project in URL 是你的项目id。
- zone in URL 是请求的区域名称。
- instance in URL 是要停止的实例名称。
这是docs
便携式 jclouds ComputeService 不直接支持它,但您可以从 ComputeServiceContext 获取 GoogleComputeEngineApi 和 InstanceApi,并使用其中的 start/stop 方法。
仅供参考,有一个正在进行的补丁,用于在 ComputeService 中添加对 start/stop 操作的支持:https://github.com/jclouds/jclouds-labs-google/pull/141