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 <[email protected]>
Authored: Fri Jan 16 20:56:37 2015 -0600
Committer: Everett Toews <[email protected]>
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);
+   }
+}

Reply via email to