|
NAMERex::Commands::Cloud - Cloud Management CommandsDESCRIPTIONWith 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. SYNOPSISuse 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 FUNCTIONScloud_service($cloud_service)Define which cloud service to use.
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_listGet 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_listGet 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_listGet 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_listGet a list of all available cloud images.cloud_upload_keyUpload public SSH key to cloud providerprivate_key '~/.ssh/mykey public_key '~/.ssh/mykey.pub'; task "cloudprovider", sub { cloud_upload_key; cloud_instance create => { ... }; }; get_cloud_instances_as_groupGet 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.createCreate 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 }; startStart an existing instancecloud_instance start => "instance-id"; stopStop an existing instancecloud_instance stop => "instance-id"; terminateTerminate an instance. This will destroy all data and remove the instance.cloud_instance terminate => "i-zzzzzzz"; get_cloud_regionsReturns all regions as an array.cloud_volume($action , $data)This function controlls all aspects of a cloud volume.createCreate a new volume. Size is in Gigabytes.task "create-vol", sub { my $vol_id = cloud_volume create => { size => 1, zone => "eu-west-1a", }; }; attachAttach a volume to an instance.task "attach-vol", sub { cloud_volume attach => "vol-xxxxxx", to => "server-id"; }; detachDetach a volume from an instance.task "detach-vol", sub { cloud_volume detach => "vol-xxxxxx", from => "server-id"; }; deleteDelete a volume. This will destroy all data.task "delete-vol", sub { cloud_volume delete => "vol-xxxxxx"; }; get_cloud_floating_ipReturns first available floating IPtask "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_networkcreateCreate a new network.task "create-net", sub { my $net_id = cloud_network create => { cidr => '192.168.0.0/24', name => "mynetwork", }; }; deleteDelete a network.task "delete-net", sub { cloud_network delete => '18a4ccf8-f14a-a10d-1af4-4ac7fee08a81'; }; get_cloud_availability_zonesReturns all availability zones of a cloud services. If available.task "get-zones", sub { print Dumper get_cloud_availability_zones; }; get_cloud_plansRetrieve information of the available cloud plans. If supported.get_cloud_operating_systemsRetrieve information of the available cloud plans. If supported.cloud_objectReturns the cloud object itself.
Visit the GSP FreeBSD Man Page Interface. |