org.jclouds.examples.rackspace.DeleteAll.java Source code

Java tutorial

Introduction

Here is the source code for org.jclouds.examples.rackspace.DeleteAll.java

Source

/*
 * 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 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;

import java.io.IOException;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.TimeoutException;

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 com.google.common.collect.Iterables;
import com.google.common.io.Closeables;

/**
 * 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 region : cinderApi.getConfiguredRegions()) {
            try {
                System.out.format("Delete Snapshots in %s%n", region);
                SnapshotApi snapshotApi = cinderApi.getSnapshotApi(region);

                for (Snapshot snapshot : snapshotApi.list()) {
                    System.out.format("  %s%n", snapshot.getName());
                    snapshotApi.delete(snapshot.getId());
                }

                System.out.format("Delete Volumes in %s%n", region);
                VolumeApi volumeApi = cinderApi.getVolumeApi(region);

                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 region : novaApi.getConfiguredRegions()) {
            try {
                System.out.format("Delete Key Pairs in %s%n", region);
                KeyPairApi keyPairApi = novaApi.getKeyPairApi(region).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", region);
                VolumeAttachmentApi volumeAttachmentApi = novaApi.getVolumeAttachmentApi(region).get();
                ServerApi serverApi = novaApi.getServerApi(region);

                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 region : troveApi.getConfiguredRegions()) {
            try {
                System.out.format("Delete Database Instances of DBs and Users in %s%n", region);
                InstanceApi instanceApi = troveApi.getInstanceApi(region);

                for (Instance instance : instanceApi.list()) {
                    System.out.format("  %s%n", instance.getName());
                    DatabaseApi databaseApi = troveApi.getDatabaseApi(region, instance.getId());

                    for (String database : databaseApi.list()) {
                        System.out.format("    %s%n", database);
                        databaseApi.delete(database);
                    }

                    UserApi userApi = troveApi.getUserApi(region, instance.getId());

                    for (User user : userApi.list()) {
                        System.out.format("    %s%n", user.getName());
                        userApi.delete(user.getName());
                    }
                    instanceApi.delete(instance.getId());
                }
            } 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 region : clbApi.getConfiguredRegions()) {
            try {
                System.out.format("Delete Load Balancers in %s%n", region);
                LoadBalancerApi lbApi = clbApi.getLoadBalancerApi(region);

                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 region : marconiApi.getConfiguredRegions()) {
            try {
                System.out.format("Delete Queues in %s%n", region);
                QueueApi queueApi = marconiApi.getQueueApi(region, 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 region : autoscaleApi.getConfiguredRegions()) {
            try {
                System.out.format("Delete Autoscale Groups in %s%n", region);
                GroupApi groupApi = autoscaleApi.getGroupApi(region);

                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);
    }
}