You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ev...@apache.org on 2015/01/21 18:29:52 UTC
jclouds-examples git commit: Delete all resources in all regions of
an account
Repository: jclouds-examples
Updated Branches:
refs/heads/master 18fd5f015 -> 31a7cab78
Delete all resources in all regions of an account
Project: http://git-wip-us.apache.org/repos/asf/jclouds-examples/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-examples/commit/31a7cab7
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-examples/tree/31a7cab7
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-examples/diff/31a7cab7
Branch: refs/heads/master
Commit: 31a7cab789ab90e0d58fa9c7e2db34fc8b75d800
Parents: 18fd5f0
Author: Everett Toews <ev...@apache.org>
Authored: Fri Jan 16 20:56:37 2015 -0600
Committer: Everett Toews <ev...@apache.org>
Committed: Wed Jan 21 11:29:47 2015 -0600
----------------------------------------------------------------------
.../jclouds/examples/rackspace/DeleteAll.java | 323 +++++++++++++++++++
1 file changed, 323 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/31a7cab7/rackspace/src/main/java/org/jclouds/examples/rackspace/DeleteAll.java
----------------------------------------------------------------------
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/DeleteAll.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/DeleteAll.java
new file mode 100644
index 0000000..1e97258
--- /dev/null
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/DeleteAll.java
@@ -0,0 +1,323 @@
+/*
+ * 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;
+
+import com.google.common.collect.Iterables;
+import com.google.common.io.Closeables;
+import org.jclouds.ContextBuilder;
+import org.jclouds.openstack.cinder.v1.CinderApi;
+import org.jclouds.openstack.cinder.v1.domain.Snapshot;
+import org.jclouds.openstack.cinder.v1.domain.Volume;
+import org.jclouds.openstack.cinder.v1.features.SnapshotApi;
+import org.jclouds.openstack.cinder.v1.features.VolumeApi;
+import org.jclouds.openstack.marconi.v1.MarconiApi;
+import org.jclouds.openstack.marconi.v1.domain.Queue;
+import org.jclouds.openstack.marconi.v1.features.QueueApi;
+import org.jclouds.openstack.nova.v2_0.NovaApi;
+import org.jclouds.openstack.nova.v2_0.domain.KeyPair;
+import org.jclouds.openstack.nova.v2_0.domain.Server;
+import org.jclouds.openstack.nova.v2_0.domain.VolumeAttachment;
+import org.jclouds.openstack.nova.v2_0.extensions.KeyPairApi;
+import org.jclouds.openstack.nova.v2_0.extensions.VolumeAttachmentApi;
+import org.jclouds.openstack.nova.v2_0.features.ServerApi;
+import org.jclouds.openstack.swift.v1.domain.Container;
+import org.jclouds.openstack.swift.v1.domain.ObjectList;
+import org.jclouds.openstack.swift.v1.domain.SwiftObject;
+import org.jclouds.openstack.swift.v1.features.ContainerApi;
+import org.jclouds.openstack.swift.v1.features.ObjectApi;
+import org.jclouds.openstack.trove.v1.TroveApi;
+import org.jclouds.openstack.trove.v1.domain.Instance;
+import org.jclouds.openstack.trove.v1.domain.User;
+import org.jclouds.openstack.trove.v1.features.DatabaseApi;
+import org.jclouds.openstack.trove.v1.features.InstanceApi;
+import org.jclouds.openstack.trove.v1.features.UserApi;
+import org.jclouds.rackspace.autoscale.v1.AutoscaleApi;
+import org.jclouds.rackspace.autoscale.v1.domain.GroupState;
+import org.jclouds.rackspace.autoscale.v1.features.GroupApi;
+import org.jclouds.rackspace.clouddns.v1.CloudDNSApi;
+import org.jclouds.rackspace.clouddns.v1.domain.Domain;
+import org.jclouds.rackspace.cloudfiles.v1.CloudFilesApi;
+import org.jclouds.rackspace.cloudloadbalancers.v1.CloudLoadBalancersApi;
+import org.jclouds.rackspace.cloudloadbalancers.v1.domain.LoadBalancer;
+import org.jclouds.rackspace.cloudloadbalancers.v1.features.LoadBalancerApi;
+
+import java.io.IOException;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.TimeoutException;
+
+import static org.jclouds.examples.rackspace.clouddns.Constants.GET_DOMAIN_ID;
+import static org.jclouds.examples.rackspace.clouddns.Constants.IS_DOMAIN;
+import static org.jclouds.rackspace.clouddns.v1.predicates.JobPredicates.awaitComplete;
+
+/**
+ * Indiscriminately delete all resources in all regions of an account.
+ */
+public class DeleteAll {
+ private final String username;
+ private final String apiKey;
+
+ /**
+ * To get a username and API key see http://jclouds.apache.org/guides/rackspace/
+ *
+ * The first argument (args[0]) must be your username
+ * The second argument (args[1]) must be your API key or password
+ */
+ public static void main(String[] args) {
+ DeleteAll deleteAll = new DeleteAll(args);
+
+ try {
+ deleteAll.deleteCloudFiles();
+ deleteAll.deleteCloudServers();
+ deleteAll.deleteCloudBlockStorage();
+ deleteAll.deleteCloudDatabases();
+ deleteAll.deleteCloudDNS();
+ deleteAll.deleteLoadBalancers();
+ deleteAll.deleteQueues();
+ deleteAll.deleteAutoscale();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public DeleteAll(String[] args) {
+ username = args[0];
+ apiKey = args[1];
+ }
+
+ private void deleteCloudFiles() throws IOException {
+ CloudFilesApi cloudFilesApi = ContextBuilder.newBuilder(System.getProperty("provider.cf", "rackspace-cloudfiles-us"))
+ .credentials(username, apiKey)
+ .buildApi(CloudFilesApi.class);
+
+ for (String region : cloudFilesApi.getConfiguredRegions()) {
+ try {
+ System.out.format("Delete Containers of Objects in %s%n", region);
+ ContainerApi containerApi = cloudFilesApi.getContainerApi(region);
+
+ for (Container container : containerApi.list()) {
+ System.out.format(" %s%n", container.getName());
+
+ ObjectApi objectApi = cloudFilesApi.getObjectApi(region, container.getName());
+ ObjectList objects = objectApi.list();
+
+ for (SwiftObject object : objects) {
+ System.out.format(" %s%n", object.getName());
+ objectApi.delete(object.getName());
+ }
+
+ cloudFilesApi.getContainerApi(region).deleteIfEmpty(container.getName());
+ }
+ } catch (IllegalStateException e) {
+ e.printStackTrace();
+ }
+ }
+
+ Closeables.close(cloudFilesApi, true);
+ }
+
+ private void deleteCloudBlockStorage() throws IOException {
+ CinderApi cinderApi = ContextBuilder.newBuilder(System.getProperty("provider.cbs", "rackspace-cloudblockstorage-us"))
+ .credentials(username, apiKey)
+ .buildApi(CinderApi.class);
+
+ for (String zone : cinderApi.getConfiguredZones()) {
+ try {
+ System.out.format("Delete Snapshots in %s%n", zone);
+ SnapshotApi snapshotApi = cinderApi.getSnapshotApiForZone(zone);
+
+ for (Snapshot snapshot : snapshotApi.list()) {
+ System.out.format(" %s%n", snapshot.getName());
+ snapshotApi.delete(snapshot.getId());
+ }
+
+ System.out.format("Delete Volumes in %s%n", zone);
+ VolumeApi volumeApi = cinderApi.getVolumeApiForZone(zone);
+
+ for (Volume volume : volumeApi.list()) {
+ System.out.format(" %s%n", volume.getName());
+ volumeApi.delete(volume.getId());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ Closeables.close(cinderApi, true);
+ }
+
+ private void deleteCloudServers() throws IOException {
+ NovaApi novaApi = ContextBuilder.newBuilder(System.getProperty("provider.cs", "rackspace-cloudservers-us"))
+ .credentials(username, apiKey)
+ .buildApi(NovaApi.class);
+
+ for (String zone : novaApi.getConfiguredZones()) {
+ try {
+ System.out.format("Delete Key Pairs in %s%n", zone);
+ KeyPairApi keyPairApi = novaApi.getKeyPairExtensionForZone(zone).get();
+
+ for (KeyPair keyPair : keyPairApi.list()) {
+ System.out.format(" %s%n", keyPair.getName());
+ keyPairApi.delete(keyPair.getName());
+ }
+
+ System.out.format("Delete Servers in %s%n", zone);
+ VolumeAttachmentApi volumeAttachmentApi = novaApi.getVolumeAttachmentExtensionForZone(zone).get();
+ ServerApi serverApi = novaApi.getServerApiForZone(zone);
+
+ for (Server server : serverApi.listInDetail().concat().toList()) {
+ for (VolumeAttachment volumeAttachment : volumeAttachmentApi.listAttachmentsOnServer(server.getId())) {
+ volumeAttachmentApi.detachVolumeFromServer(volumeAttachment.getId(), server.getId());
+ }
+
+ System.out.format(" %s%n", server.getName());
+ serverApi.delete(server.getId());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ Closeables.close(novaApi, true);
+ }
+
+ private void deleteCloudDatabases() throws IOException {
+ TroveApi troveApi = ContextBuilder.newBuilder(System.getProperty("provider.cdb", "rackspace-clouddatabases-us"))
+ .credentials(username, apiKey)
+ .buildApi(TroveApi.class);
+
+ for (String zone : troveApi.getConfiguredZones()) {
+ try {
+ System.out.format("Delete Database Instances of DBs and Users in %s%n", zone);
+ InstanceApi instanceApi = troveApi.getInstanceApiForZone(zone);
+
+ for (Instance instance : instanceApi.list()) {
+ System.out.format(" %s%n", instance.getName());
+ DatabaseApi databaseApi = troveApi.getDatabaseApiForZoneAndInstance(zone, instance.getId());
+
+ for (String database : databaseApi.list()) {
+ System.out.format(" %s%n", database);
+ databaseApi.delete(database);
+ }
+
+ UserApi userApi = troveApi.getUserApiForZoneAndInstance(zone, instance.getId());
+
+ for (User user : userApi.list()) {
+ System.out.format(" %s%n", user.getName());
+ userApi.delete(user.getName());
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ Closeables.close(troveApi, true);
+ }
+
+ private void deleteCloudDNS() throws IOException, TimeoutException {
+ System.out.format("Delete DNS Domains%n");
+
+ CloudDNSApi cloudDNSApi = ContextBuilder.newBuilder(System.getProperty("provider.cdns", "rackspace-clouddns-us"))
+ .credentials(username, apiKey)
+ .buildApi(CloudDNSApi.class);
+
+ try {
+ Set<Domain> allDomains = cloudDNSApi.getDomainApi().list().concat().toSet();
+ Iterable<Domain> topLevelDomains = Iterables.filter(allDomains, IS_DOMAIN);
+ Iterable<Integer> topLevelDomainIds = Iterables.transform(topLevelDomains, GET_DOMAIN_ID);
+
+ if (!allDomains.isEmpty()) {
+ awaitComplete(cloudDNSApi, cloudDNSApi.getDomainApi().delete(topLevelDomainIds, true));
+ System.out.format(" Deleted %s domains%n", Iterables.size(topLevelDomainIds));
+ }
+ } catch (TimeoutException e) {
+ e.printStackTrace();
+ }
+
+ Closeables.close(cloudDNSApi, true);
+ }
+
+ private void deleteLoadBalancers() throws IOException {
+ CloudLoadBalancersApi clbApi = ContextBuilder.newBuilder(System.getProperty("provider.clb", "rackspace-cloudloadbalancers-us"))
+ .credentials(username, apiKey)
+ .buildApi(CloudLoadBalancersApi.class);
+
+ for (String zone : clbApi.getConfiguredZones()) {
+ try {
+ System.out.format("Delete Load Balancers in %s%n", zone);
+ LoadBalancerApi lbApi = clbApi.getLoadBalancerApiForZone(zone);
+
+ for (LoadBalancer loadBalancer : lbApi.list().concat()) {
+ System.out.format(" %s%n", loadBalancer.getName());
+ lbApi.delete(loadBalancer.getId());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ Closeables.close(clbApi, true);
+ }
+
+ private void deleteQueues() throws IOException {
+ MarconiApi marconiApi = ContextBuilder.newBuilder(System.getProperty("provider.cq", "rackspace-cloudqueues-us"))
+ .credentials(username, apiKey)
+ .buildApi(MarconiApi.class);
+ UUID uuid = UUID.randomUUID(); // any UUID can be used to list all queues
+
+ for (String zone : marconiApi.getConfiguredZones()) {
+ try {
+ System.out.format("Delete Queues in %s%n", zone);
+ QueueApi queueApi = marconiApi.getQueueApiForZoneAndClient(zone, uuid);
+
+ for (Queue queue : queueApi.list(false).concat()) {
+ System.out.format(" %s%n", queue.getName());
+ queueApi.delete(queue.getName());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ Closeables.close(marconiApi, true);
+ }
+
+ private void deleteAutoscale() throws IOException {
+ AutoscaleApi autoscaleApi = ContextBuilder.newBuilder(System.getProperty("provider.cq", "rackspace-autoscale-us"))
+ .credentials(username, apiKey)
+ .buildApi(AutoscaleApi.class);
+
+ for (String zone : autoscaleApi.getConfiguredZones()) {
+ try {
+ System.out.format("Delete Autoscale Groups in %s%n", zone);
+ GroupApi groupApi = autoscaleApi.getGroupApiForZone(zone);
+
+ for (GroupState groupState : groupApi.listGroupStates()) {
+ System.out.format(" %s%n", groupState.getId());
+ groupApi.delete(groupState.getId());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ Closeables.close(autoscaleApi, true);
+ }
+}