Provided by: rex_1.3.3-1_all bug

NAME

       Rex::Commands::Cloud - Cloud Management Commands

DESCRIPTION

       With this Module you can manage different Cloud services. Currently it supports Amazon
       EC2, Jiffybox and OpenStack.

       Version <= 1.0: All these functions will not be reported.

SYNOPSIS

        use Rex::Commands::Cloud;

        cloud_service "Amazon";
        cloud_auth "your-access-key", "your-private-access-key";
        cloud_region "ec2.eu-west-1.amazonaws.com";

        task "list", sub {
          print Dumper cloud_instance_list;
          print Dumper cloud_volume_list;
        };

        task "create", sub {
          my $vol_id = cloud_volume create => { size => 1, zone => "eu-west-1a", };

          cloud_instance create => {
              image_id => "ami-xxxxxxx",
              name    => "test01",
              key    => "my-key",
              volume  => $vol_id,
              zone    => "eu-west-1a",
            };
        };

        task "destroy", sub {
          cloud_volume detach => "vol-xxxxxxx";
          cloud_volume delete => "vol-xxxxxxx";

          cloud_instance terminate => "i-xxxxxxx";
        };

EXPORTED FUNCTIONS

   cloud_service($cloud_service)
       Define which cloud service to use.

       Services
           Amazon
           Jiffybox
           OpenStack

   cloud_auth($param1, $param2, ...)
       Set the authentication for the cloudservice.

       For example for Amazon it is:

        cloud_auth($access_key, $secret_access_key);

       For JiffyBox:

        cloud_auth($auth_key);

       For OpenStack:

        cloud_auth(
         tenant_name => 'tenant',
         username    => 'user',
         password    => 'password',
        );

   cloud_region($region)
       Set the cloud region.

   cloud_instance_list
       Get all instances of a cloud service.

        task "list", sub {
          for my $instance (cloud_instance_list()) {
            say "Arch  : " . $instance->{"architecture"};
            say "IP   : " . $instance->{"ip"};
            say "ID   : " . $instance->{"id"};
            say "State : " . $instance->{"state"};
          }
        };

       There are some parameters for this function that can change the gathering of ip addresses
       for some cloud providers (like OpenStack).

        task "list", sub {
          my @instances = cloud_instance_list
                             private_network => 'private',
                             public_network  => 'public',
                             public_ip_type  => 'floating',
                             private_ip_type => 'fixed';
        };

   cloud_volume_list
       Get all volumes of a cloud service.

        task "list-volumes", sub {
          for my $volume (cloud_volume_list()) {
            say "ID     : " . $volume->{"id"};
            say "Zone    : " . $volume->{"zone"};
            say "State   : " . $volume->{"state"};
            say "Attached : " . $volume->{"attached_to"};
          }
        };

   cloud_network_list
       Get all networks of a cloud service.

        task "network-list", sub {
          for my $network (cloud_network_list()) {
            say "network  : " . $network->{network};
            say "name    : " . $network->{name};
            say "id     : " . $network->{id};
          }
        };

   cloud_image_list
       Get a list of all available cloud images.

   cloud_upload_key
       Upload public SSH key to cloud provider

        private_key '~/.ssh/mykey
        public_key  '~/.ssh/mykey.pub';

        task "cloudprovider", sub {
          cloud_upload_key;

          cloud_instance create => {
            ...
          };
        };

   get_cloud_instances_as_group
       Get a list of all running instances of a cloud service. This can be used for a group
       definition.

        group fe  => "fe01", "fe02", "fe03";
        group ec2 => get_cloud_instances_as_group();

   cloud_instance($action, $data)
       This function controls all aspects of a cloud instance.

   create
       Create a new instance.

        cloud_instance create => {
            image_id => "ami-xxxxxx",
            key    => "ssh-key",
            name    => "fe-ec2-01",  # name is not necessary
            volume  => "vol-yyyyy",  # volume is not necessary
            zone    => "eu-west-1a",  # zone is not necessary
            floating_ip  => "89.39.38.160" # floating_ip is not necessary
          };

   start
       Start an existing instance

        cloud_instance start => "instance-id";

   stop
       Stop an existing instance

        cloud_instance stop => "instance-id";

   terminate
       Terminate an instance. This will destroy all data and remove the instance.

        cloud_instance terminate => "i-zzzzzzz";

   get_cloud_regions
       Returns all regions as an array.

   cloud_volume($action , $data)
       This function controlls all aspects of a cloud volume.

   create
       Create a new volume. Size is in Gigabytes.

        task "create-vol", sub {
          my $vol_id = cloud_volume create => { size => 1, zone => "eu-west-1a", };
        };

   attach
       Attach a volume to an instance.

        task "attach-vol", sub {
          cloud_volume attach => "vol-xxxxxx", to => "server-id";
        };

   detach
       Detach a volume from an instance.

        task "detach-vol", sub {
          cloud_volume detach => "vol-xxxxxx", from => "server-id";
        };

   delete
       Delete a volume. This will destroy all data.

        task "delete-vol", sub {
          cloud_volume delete => "vol-xxxxxx";
        };

   get_cloud_floating_ip
       Returns first available floating IP

        task "get_floating_ip", sub {

          my $ip = get_cloud_floating_ip;

          my $instance = cloud_instance create => {
             image_id => 'edffd57d-82bf-4ffe-b9e8-af22563741bf',
             name => 'instance1',
             plan_id => 17,
             floating_ip => $ip
           };
        };

   cloud_network
   create
       Create a new network.

        task "create-net", sub {
          my $net_id = cloud_network create => { cidr => '192.168.0.0/24', name => "mynetwork", };
        };

   delete
       Delete a network.

        task "delete-net", sub {
          cloud_network delete => '18a4ccf8-f14a-a10d-1af4-4ac7fee08a81';
        };

   get_cloud_availability_zones
       Returns all availability zones of a cloud services. If available.

        task "get-zones", sub {
          print Dumper get_cloud_availability_zones;
        };

   get_cloud_plans
       Retrieve information of the available cloud plans. If supported.

   get_cloud_operating_systems
       Retrieve information of the available cloud plans. If supported.

   cloud_object
       Returns the cloud object itself.