Updated Branches: refs/heads/master 6875cb8da -> 68f2a1458
JCLOUDS-215 Add autoscale examples Project: http://git-wip-us.apache.org/repos/asf/jclouds-examples/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-examples/commit/68f2a145 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-examples/tree/68f2a145 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-examples/diff/68f2a145 Branch: refs/heads/master Commit: 68f2a14584a097be0eb6279775fa8273000ba955 Parents: 6875cb8 Author: Zack Shoylev <[email protected]> Authored: Tue Nov 12 14:17:15 2013 -0600 Committer: Zack Shoylev <[email protected]> Committed: Tue Dec 10 11:11:18 2013 -0600 ---------------------------------------------------------------------- rackspace/pom.xml | 12 ++ .../jclouds/examples/rackspace/SmokeTest.java | 7 + .../rackspace/autoscale/AutoscaleCleanup.java | 133 ++++++++++++++++++ .../examples/rackspace/autoscale/Constants.java | 34 +++++ .../rackspace/autoscale/CreatePolicy.java | 137 +++++++++++++++++++ .../rackspace/autoscale/CreateWebhook.java | 100 ++++++++++++++ .../rackspace/autoscale/ExecuteWebhook.java | 116 ++++++++++++++++ .../rackspace/autoscale/UpdatePolicy.java | 106 ++++++++++++++ .../examples/rackspace/autoscale/Utils.java | 53 +++++++ 9 files changed, 698 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/68f2a145/rackspace/pom.xml ---------------------------------------------------------------------- diff --git a/rackspace/pom.xml b/rackspace/pom.xml index 705bec6..a23d96a 100644 --- a/rackspace/pom.xml +++ b/rackspace/pom.xml @@ -106,6 +106,18 @@ <version>${jclouds.version}</version> </dependency> <dependency> + <groupId>org.apache.jclouds.labs</groupId> + <artifactId>rackspace-autoscale</artifactId> + <!-- <version>${jclouds.version}</version> --> + <version>1.7.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.labs</groupId> + <artifactId>rackspace-autoscale-us</artifactId> + <!-- <version>${jclouds.version}</version> --> + <version>1.7.0-SNAPSHOT</version> + </dependency> + <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.25</version> http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/68f2a145/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java ---------------------------------------------------------------------- diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java index d78741e..e711831 100644 --- a/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java +++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java @@ -26,6 +26,7 @@ import org.jclouds.examples.rackspace.cloudfiles.*; import org.jclouds.examples.rackspace.cloudloadbalancers.*; import org.jclouds.examples.rackspace.cloudservers.*; import org.jclouds.examples.rackspace.clouddatabases.*; +import org.jclouds.examples.rackspace.autoscale.*; /** * This example smoke tests all of the other examples in these packages. @@ -104,5 +105,11 @@ public class SmokeTest { DeleteDatabase.main(args); DeleteUser.main(args); DeleteInstance.main(args); + + CreatePolicy.main(args); + UpdatePolicy.main(args); + CreateWebhook.main(args); + ExecuteWebhook.main(args); + AutoscaleCleanup.main(args); } } http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/68f2a145/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/AutoscaleCleanup.java ---------------------------------------------------------------------- diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/AutoscaleCleanup.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/AutoscaleCleanup.java new file mode 100644 index 0000000..7e069cd --- /dev/null +++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/AutoscaleCleanup.java @@ -0,0 +1,133 @@ +/* + * 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.examples.rackspace.autoscale; + +import static org.jclouds.examples.rackspace.autoscale.Constants.NAME; +import static org.jclouds.examples.rackspace.autoscale.Constants.PROVIDER; +import static org.jclouds.examples.rackspace.autoscale.Constants.ZONE; + +import java.io.Closeable; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +import org.jclouds.ContextBuilder; +import org.jclouds.rackspace.autoscale.v1.AutoscaleApi; +import org.jclouds.rackspace.autoscale.v1.domain.GroupState; +import org.jclouds.rackspace.autoscale.v1.domain.ScalingPolicy; +import org.jclouds.rackspace.autoscale.v1.domain.ScalingPolicy.ScalingPolicyTargetType; +import org.jclouds.rackspace.autoscale.v1.domain.ScalingPolicy.ScalingPolicyType; +import org.jclouds.rackspace.autoscale.v1.domain.ScalingPolicyResponse; +import org.jclouds.rackspace.autoscale.v1.features.GroupApi; +import org.jclouds.rackspace.autoscale.v1.features.PolicyApi; + +import com.google.common.io.Closeables; +import com.google.common.util.concurrent.Uninterruptibles; + +/** + * This code cleans up the autoscale examples and can be used as an example for cleanup and delete. + * Note that you need to cleanup the group before you can delete it. + * + * @author Zack Shoylev + */ +public class AutoscaleCleanup implements Closeable { + private final AutoscaleApi autoscaleApi; + private final GroupApi groupApi; + + /** + * To get a username and API key see + * http://www.jclouds.org/documentation/quickstart/rackspace/ + * + * The first argument (args[0]) must be your username + * The second argument (args[1]) must be your API key + */ + public static void main(String[] args) throws IOException { + AutoscaleCleanup autoscaleCleanup = new AutoscaleCleanup(args[0], args[1]); + + try { + autoscaleCleanup.autoscaleCleanup(); + } + catch (Exception e) { + e.printStackTrace(); + } + finally { + autoscaleCleanup.close(); + } + } + + public AutoscaleCleanup(String username, String apiKey) { + autoscaleApi = ContextBuilder.newBuilder(PROVIDER) + .credentials(username, apiKey) + .buildApi(AutoscaleApi.class); + + groupApi = autoscaleApi.getGroupApiForZone(ZONE); + } + + private void autoscaleCleanup() { + System.out.format("Cleanup autoscale %n"); + + // Remove ALL policies and groups with that name + for (GroupState g : groupApi.listGroupStates()) { + PolicyApi pa = autoscaleApi.getPolicyApiForZoneAndGroup(ZONE, g.getId()); + for(ScalingPolicyResponse p : pa.list()) { + if(p.getName().equals(NAME)) { + System.out.format("Found matching policy: %s with cooldown %s%n", p.getId(), p.getCooldown()); + String policyId = p.getId(); + + if (!(p.getTarget().equals("0") && p.getTargetType().equals(ScalingPolicyTargetType.DESIRED_CAPACITY))) { + System.out.format("Removing servers %n"); + + // Update policy to 0 servers + ScalingPolicy scalingPolicy = ScalingPolicy.builder() + .cooldown(3) + .type(ScalingPolicyType.WEBHOOK) + .name(NAME) + .targetType(ScalingPolicyTargetType.DESIRED_CAPACITY) + .target("0") + .build(); + + pa.update(policyId, scalingPolicy); + Uninterruptibles.sleepUninterruptibly(5, TimeUnit.SECONDS); + + try { + pa.execute(policyId); + } catch (Exception e) { + // This will fail to execute when the number of servers is already zero (no change). + } + } + Uninterruptibles.sleepUninterruptibly(5, TimeUnit.SECONDS); + pa.delete(policyId); + groupApi.delete(g.getId()); + } else { + System.out.format("Found another policy: %s - %s with cooldown %s%n", p.getName(), p.getId(), p.getCooldown()); + } + } + } + + } + + /** + * Always close your service when you're done with it. + * + * Note that closing quietly like this is not necessary in Java 7. + * You would use try-with-resources in the main method instead. + */ + public void close() throws IOException { + Closeables.close(autoscaleApi, true); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/68f2a145/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/Constants.java ---------------------------------------------------------------------- diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/Constants.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/Constants.java new file mode 100644 index 0000000..8d6413f --- /dev/null +++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/Constants.java @@ -0,0 +1,34 @@ +/* + * 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.examples.rackspace.autoscale; + +/** + * Constants used by the Rackspace Examples. + * + * @author Zack Shoylev + */ +public interface Constants { + // The provider configures jclouds to use the Rackspace Cloud (US). + // To use the Rackspace Cloud (UK) set the system property or default value to "rackspace-autoscale-uk". + // Note that autoscale is not yet supported for the UK. + public static final String PROVIDER = System.getProperty("provider.autoscale", "rackspace-autoscale-us"); + public static final String ZONE = System.getProperty("zone", "DFW"); + + public static final String NAME = "jclouds-example"; +} http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/68f2a145/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/CreatePolicy.java ---------------------------------------------------------------------- diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/CreatePolicy.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/CreatePolicy.java new file mode 100644 index 0000000..c277e40 --- /dev/null +++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/CreatePolicy.java @@ -0,0 +1,137 @@ +/* + * 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.examples.rackspace.autoscale; + +import static org.jclouds.examples.rackspace.autoscale.Constants.NAME; +import static org.jclouds.examples.rackspace.autoscale.Constants.PROVIDER; +import static org.jclouds.examples.rackspace.autoscale.Constants.ZONE; + +import java.io.Closeable; +import java.io.IOException; +import java.util.List; + +import org.jclouds.ContextBuilder; +import org.jclouds.rackspace.autoscale.v1.AutoscaleApi; +import org.jclouds.rackspace.autoscale.v1.domain.Group; +import org.jclouds.rackspace.autoscale.v1.domain.GroupConfiguration; +import org.jclouds.rackspace.autoscale.v1.domain.LaunchConfiguration; +import org.jclouds.rackspace.autoscale.v1.domain.LaunchConfiguration.LaunchConfigurationType; +import org.jclouds.rackspace.autoscale.v1.domain.LoadBalancer; +import org.jclouds.rackspace.autoscale.v1.domain.Personality; +import org.jclouds.rackspace.autoscale.v1.domain.ScalingPolicy; +import org.jclouds.rackspace.autoscale.v1.domain.ScalingPolicy.ScalingPolicyTargetType; +import org.jclouds.rackspace.autoscale.v1.domain.ScalingPolicy.ScalingPolicyType; +import org.jclouds.rackspace.autoscale.v1.features.GroupApi; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; +import com.google.common.io.Closeables; + +/** + * This example creates a Scaling Policy in a Scaling Group. + * + * The scaling group contains a set of scaling policies. + * Each scaling policy can have webhooks associated to it. + * Webhooks can be used to execute scaling policies. + * + * @author Zack Shoylev + */ +public class CreatePolicy implements Closeable { + private final AutoscaleApi autoscaleApi; + private final GroupApi groupApi; + + /** + * To get a username and API key see + * http://www.jclouds.org/documentation/quickstart/rackspace/ + * + * The first argument (args[0]) must be your username + * The second argument (args[1]) must be your API key + */ + public static void main(String[] args) throws IOException { + CreatePolicy createPolicy = new CreatePolicy(args[0], args[1]); + + try { + createPolicy.createPolicy(); + } + catch (Exception e) { + e.printStackTrace(); + } + finally { + createPolicy.close(); + } + } + + public CreatePolicy(String username, String apiKey) { + autoscaleApi = ContextBuilder.newBuilder(PROVIDER) + .credentials(username, apiKey) + .buildApi(AutoscaleApi.class); + + groupApi = autoscaleApi.getGroupApiForZone(ZONE); + } + + private void createPolicy() { + System.out.format("Create Autoscale Group%n"); + + GroupConfiguration groupConfiguration = GroupConfiguration.builder() + .maxEntities(5) + .cooldown(2) + .name(NAME) + .minEntities(0) + .metadata(ImmutableMap.of("notes","This is an autoscale group for examples")) + .build(); + + LaunchConfiguration launchConfiguration = LaunchConfiguration.builder() + .loadBalancers(ImmutableList.of(LoadBalancer.builder().port(8080).id(9099).build())) + .serverName(NAME) + .serverImageRef("0d589460-f177-4b0f-81c1-8ab8903ac7d8") + .serverFlavorRef("2") + .serverDiskConfig("AUTO") + .serverMetadata(ImmutableMap.of("notes","Server examples notes")) + .networks(ImmutableList.<String>of("internal", "public")) + .personalities(ImmutableList.of(Personality.builder().path("filepath").contents("VGhpcyBpcyBhIHRlc3QgZmlsZS4=").build())) + .type(LaunchConfigurationType.LAUNCH_SERVER) + .build(); + + List<ScalingPolicy> scalingPolicies = Lists.newArrayList(); + + ScalingPolicy scalingPolicy = ScalingPolicy.builder() + .cooldown(0) + .type(ScalingPolicyType.WEBHOOK) + .name(NAME) + .targetType(ScalingPolicyTargetType.PERCENT_CHANGE) + .target("1") + .build(); + scalingPolicies.add(scalingPolicy); + + Group g = groupApi.create(groupConfiguration, launchConfiguration, scalingPolicies); + + System.out.format(" %s%n", g.toString()); + } + + /** + * Always close your service when you're done with it. + * + * Note that closing quietly like this is not necessary in Java 7. + * You would use try-with-resources in the main method instead. + */ + public void close() throws IOException { + Closeables.close(autoscaleApi, true); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/68f2a145/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/CreateWebhook.java ---------------------------------------------------------------------- diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/CreateWebhook.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/CreateWebhook.java new file mode 100644 index 0000000..4a19def --- /dev/null +++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/CreateWebhook.java @@ -0,0 +1,100 @@ +/* + * 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.examples.rackspace.autoscale; + +import static org.jclouds.examples.rackspace.autoscale.Constants.NAME; +import static org.jclouds.examples.rackspace.autoscale.Constants.PROVIDER; +import static org.jclouds.examples.rackspace.autoscale.Constants.ZONE; + +import java.io.Closeable; +import java.io.IOException; + +import org.jclouds.ContextBuilder; +import org.jclouds.rackspace.autoscale.v1.AutoscaleApi; +import org.jclouds.rackspace.autoscale.v1.domain.WebhookResponse; +import org.jclouds.rackspace.autoscale.v1.features.GroupApi; +import org.jclouds.rackspace.autoscale.v1.features.PolicyApi; +import org.jclouds.rackspace.autoscale.v1.features.WebhookApi; + +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableMap; +import com.google.common.io.Closeables; + +/** + * This example creates a webhook for the Scaling Policy. + * + * @author Zack Shoylev + */ +public class CreateWebhook implements Closeable { + private final AutoscaleApi autoscaleApi; + private final GroupApi groupApi; + private final PolicyApi policyApi; + private final WebhookApi webhookApi; + + /** + * To get a username and API key see + * http://www.jclouds.org/documentation/quickstart/rackspace/ + * + * The first argument (args[0]) must be your username + * The second argument (args[1]) must be your API key + */ + public static void main(String[] args) throws IOException { + CreateWebhook createWebhook = new CreateWebhook(args[0], args[1]); + + try { + createWebhook.createWebhook(); + } + catch (Exception e) { + e.printStackTrace(); + } + finally { + createWebhook.close(); + } + } + + public CreateWebhook(String username, String apiKey) { + autoscaleApi = ContextBuilder.newBuilder(PROVIDER) + .credentials(username, apiKey) + .buildApi(AutoscaleApi.class); + + groupApi = autoscaleApi.getGroupApiForZone(ZONE); + String groupId = Utils.getGroupId(groupApi); + policyApi = autoscaleApi.getPolicyApiForZoneAndGroup(groupId, ZONE); + String policyId = Utils.getPolicyId(policyApi); + webhookApi = autoscaleApi.getWebhookApiForZoneAndGroupAndPolicy(ZONE, groupId, policyId); + } + + private void createWebhook() { + System.out.format("Create Webhook%n"); + + FluentIterable<WebhookResponse> result = webhookApi.create(NAME, ImmutableMap.<String, Object>of()); + + System.out.format(" %s%n", result.first().get()); + } + + /** + * Always close your service when you're done with it. + * + * Note that closing quietly like this is not necessary in Java 7. + * You would use try-with-resources in the main method instead. + */ + public void close() throws IOException { + Closeables.close(autoscaleApi, true); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/68f2a145/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/ExecuteWebhook.java ---------------------------------------------------------------------- diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/ExecuteWebhook.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/ExecuteWebhook.java new file mode 100644 index 0000000..8f68398 --- /dev/null +++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/ExecuteWebhook.java @@ -0,0 +1,116 @@ +/* + * 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.examples.rackspace.autoscale; + +import static org.jclouds.examples.rackspace.autoscale.Constants.PROVIDER; +import static org.jclouds.examples.rackspace.autoscale.Constants.ZONE; + +import java.io.Closeable; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +import org.jclouds.ContextBuilder; +import org.jclouds.rackspace.autoscale.v1.AutoscaleApi; +import org.jclouds.rackspace.autoscale.v1.domain.WebhookResponse; +import org.jclouds.rackspace.autoscale.v1.features.GroupApi; +import org.jclouds.rackspace.autoscale.v1.features.PolicyApi; +import org.jclouds.rackspace.autoscale.v1.features.WebhookApi; +import org.jclouds.rackspace.autoscale.v1.utils.AutoscaleUtils; + +import com.google.common.io.Closeables; +import com.google.common.util.concurrent.Uninterruptibles; + +/** + * This example executes a scaling policy in two ways: + * - Authenticated API call using jclouds. + * - Anonymously using just the webhook URL. + * + * @author Zack Shoylev + */ +public class ExecuteWebhook implements Closeable { + private final AutoscaleApi autoscaleApi; + private final GroupApi groupApi; + private final PolicyApi policyApi; + private final WebhookApi webhookApi; + + /** + * To get a username and API key see + * http://www.jclouds.org/documentation/quickstart/rackspace/ + * + * The first argument (args[0]) must be your username + * The second argument (args[1]) must be your API key + */ + public static void main(String[] args) throws IOException { + ExecuteWebhook executeWebhook = new ExecuteWebhook(args[0], args[1]); + + try { + executeWebhook.executeWebhook(); + } + catch (Exception e) { + e.printStackTrace(); + } + finally { + executeWebhook.close(); + } + } + + public ExecuteWebhook(String username, String apiKey) { + autoscaleApi = ContextBuilder.newBuilder(PROVIDER) + .credentials(username, apiKey) + .buildApi(AutoscaleApi.class); + + groupApi = autoscaleApi.getGroupApiForZone(ZONE); + String groupId = Utils.getGroupId(groupApi); + policyApi = autoscaleApi.getPolicyApiForZoneAndGroup(ZONE, groupId); + String policyId = Utils.getPolicyId(policyApi); + webhookApi = autoscaleApi.getWebhookApiForZoneAndGroupAndPolicy(ZONE, groupId, policyId); + } + + private void executeWebhook() { + System.out.format("Execute Webhook%n"); + + String policyId = Utils.getPolicyId(policyApi); + + Uninterruptibles.sleepUninterruptibly(10, TimeUnit.SECONDS); + boolean result = policyApi.execute(policyId); + + System.out.format(" %s%n", result); + + System.out.format("Execute Webhook - again, anonymously%n"); + + WebhookResponse webhook = webhookApi.list().first().get(); + try { + result = AutoscaleUtils.execute(webhook.getAnonymousExecutionURI().get()); + } catch (IOException e) { + e.printStackTrace(); + } + + System.out.format(" %s%n", result); + } + + /** + * Always close your service when you're done with it. + * + * Note that closing quietly like this is not necessary in Java 7. + * You would use try-with-resources in the main method instead. + */ + public void close() throws IOException { + Closeables.close(autoscaleApi, true); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/68f2a145/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/UpdatePolicy.java ---------------------------------------------------------------------- diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/UpdatePolicy.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/UpdatePolicy.java new file mode 100644 index 0000000..0d94097 --- /dev/null +++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/UpdatePolicy.java @@ -0,0 +1,106 @@ +/* + * 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.examples.rackspace.autoscale; + +import static org.jclouds.examples.rackspace.autoscale.Constants.NAME; +import static org.jclouds.examples.rackspace.autoscale.Constants.PROVIDER; +import static org.jclouds.examples.rackspace.autoscale.Constants.ZONE; + +import java.io.Closeable; +import java.io.IOException; + +import org.jclouds.ContextBuilder; +import org.jclouds.rackspace.autoscale.v1.AutoscaleApi; +import org.jclouds.rackspace.autoscale.v1.domain.ScalingPolicy; +import org.jclouds.rackspace.autoscale.v1.domain.ScalingPolicy.ScalingPolicyTargetType; +import org.jclouds.rackspace.autoscale.v1.domain.ScalingPolicy.ScalingPolicyType; +import org.jclouds.rackspace.autoscale.v1.features.GroupApi; +import org.jclouds.rackspace.autoscale.v1.features.PolicyApi; + +import com.google.common.io.Closeables; + +/** + * This example updates a Scaling Policy in a Scaling Group. + * + * @author Zack Shoylev + */ +public class UpdatePolicy implements Closeable { + private final AutoscaleApi autoscaleApi; + private final GroupApi groupApi; + private final PolicyApi policyApi; + + /** + * To get a username and API key see + * http://www.jclouds.org/documentation/quickstart/rackspace/ + * + * The first argument (args[0]) must be your username + * The second argument (args[1]) must be your API key + */ + public static void main(String[] args) throws IOException { + UpdatePolicy updatePolicy = new UpdatePolicy(args[0], args[1]); + + try { + updatePolicy.updatePolicy(); + } + catch (Exception e) { + e.printStackTrace(); + } + finally { + updatePolicy.close(); + } + } + + public UpdatePolicy(String username, String apiKey) { + autoscaleApi = ContextBuilder.newBuilder(PROVIDER) + .credentials(username, apiKey) + .buildApi(AutoscaleApi.class); + + groupApi = autoscaleApi.getGroupApiForZone(ZONE); + String groupId = Utils.getGroupId(groupApi); + policyApi = autoscaleApi.getPolicyApiForZoneAndGroup(ZONE, groupId); + } + + private void updatePolicy() { + System.out.format("Update autoscale policy%n"); + + String policyId = policyApi.list().first().get().getId(); + + ScalingPolicy scalingPolicy = ScalingPolicy.builder() + .cooldown(3) + .type(ScalingPolicyType.WEBHOOK) + .name(NAME) + .targetType(ScalingPolicyTargetType.INCREMENTAL) + .target("1") + .build(); + + boolean result = policyApi.update(policyId, scalingPolicy); + + System.out.format(" %s%n", result); + } + + /** + * Always close your service when you're done with it. + * + * Note that closing quietly like this is not necessary in Java 7. + * You would use try-with-resources in the main method instead. + */ + public void close() throws IOException { + Closeables.close(autoscaleApi, true); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/68f2a145/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/Utils.java ---------------------------------------------------------------------- diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/Utils.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/Utils.java new file mode 100644 index 0000000..3e6e8af --- /dev/null +++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/autoscale/Utils.java @@ -0,0 +1,53 @@ +/* + * 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.examples.rackspace.autoscale; + +import static org.jclouds.examples.rackspace.autoscale.Constants.NAME; + +import org.jclouds.rackspace.autoscale.v1.domain.Group; +import org.jclouds.rackspace.autoscale.v1.domain.GroupState; +import org.jclouds.rackspace.autoscale.v1.domain.ScalingPolicyResponse; +import org.jclouds.rackspace.autoscale.v1.features.GroupApi; +import org.jclouds.rackspace.autoscale.v1.features.PolicyApi; + +/** + * Helper methods for autoscale examples + * + * @author Zack Shoylev + */ +public class Utils { + public static String getGroupId(GroupApi groupApi) { + for ( GroupState state : groupApi.listGroupStates() ) { + Group g = groupApi.get(state.getId()); + for ( ScalingPolicyResponse policy : g.getScalingPolicies() ) { + if (policy.getName().equals(NAME)) return g.getId(); + } + } + + throw new IllegalArgumentException("Group not found"); + } + + public static String getPolicyId(PolicyApi policyApi) { + for ( ScalingPolicyResponse policy : policyApi.list() ) { + if (policy.getName().equals(NAME)) return policy.getId(); + } + + throw new IllegalArgumentException("Policy not found"); + } +}
