awscli 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
 - data/bin/awscli +7 -7
 - data/lib/awscli.rb +3 -1
 - data/lib/awscli/as.rb +56 -56
 - data/lib/awscli/cli.rb +1 -1
 - data/lib/awscli/cli/UsageExamples/emr +49 -0
 - data/lib/awscli/cli/emr.rb +157 -0
 - data/lib/awscli/cli/iam/user.rb +18 -7
 - data/lib/awscli/cli/s3/files.rb +43 -37
 - data/lib/awscli/connection.rb +34 -31
 - data/lib/awscli/ec2.rb +234 -234
 - data/lib/awscli/emr.rb +472 -0
 - data/lib/awscli/errors.rb +1 -1
 - data/lib/awscli/helper.rb +17 -0
 - data/lib/awscli/iam.rb +281 -218
 - data/lib/awscli/s3.rb +51 -39
 - data/lib/awscli/version.rb +1 -1
 - metadata +5 -2
 
    
        data/lib/awscli/cli/iam/user.rb
    CHANGED
    
    | 
         @@ -18,22 +18,29 @@ module AwsCli 
     | 
|
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                    desc 'create', 'create a user'
         
     | 
| 
       20 
20 
     | 
    
         
             
                    long_desc <<-DESC
         
     | 
| 
       21 
     | 
    
         
            -
                    Creates a new user in your AWS account. Optionally adds the user to  
     | 
| 
      
 21 
     | 
    
         
            +
                    Creates a new user in your AWS account. Optionally adds the user to a group, creates an access key for the user and puts default policy in place.
         
     | 
| 
       22 
22 
     | 
    
         
             
                    DESC
         
     | 
| 
       23 
23 
     | 
    
         
             
                    method_option :user_name, :aliases => '-u', :required => true, :desc => 'name of the user to create (do not include path)'
         
     | 
| 
       24 
     | 
    
         
            -
                    method_option :path, :aliases => '-p', : 
     | 
| 
      
 24 
     | 
    
         
            +
                    method_option :path, :aliases => '-p', :default => '/', :desc => 'optional path to group, defaults to "/"'
         
     | 
| 
       25 
25 
     | 
    
         
             
                    method_option :group, :aliases => '-g', :desc => 'name of a group you want to add the user to'
         
     | 
| 
       26 
     | 
    
         
            -
                    method_option :access_key, : 
     | 
| 
      
 26 
     | 
    
         
            +
                    method_option :access_key, :aliases => '-k', :type => :boolean, :default => false, :desc => 'if passed, optionally creates an access key for the user'
         
     | 
| 
      
 27 
     | 
    
         
            +
                    method_option :policy, :aliases => '-l', :type => :boolean, :default => false, :desc => 'if set will not create basic set of access rules for the user, should pass --policy-doc if set'
         
     | 
| 
      
 28 
     | 
    
         
            +
                    method_option :policy_doc, :aliases => '-d', :desc => 'path to the json policy document'
         
     | 
| 
      
 29 
     | 
    
         
            +
                    method_option :password, :aliases => '-a', :type => :boolean, :default => false, :desc => 'assign a generated password for the user'
         
     | 
| 
       27 
30 
     | 
    
         
             
                    def create
         
     | 
| 
      
 31 
     | 
    
         
            +
                      if options[:policy]
         
     | 
| 
      
 32 
     | 
    
         
            +
                        abort 'Required --policy-doc, if --policy is passed' unless options[:policy_doc]
         
     | 
| 
      
 33 
     | 
    
         
            +
                      end
         
     | 
| 
       28 
34 
     | 
    
         
             
                      create_iam_object
         
     | 
| 
       29 
     | 
    
         
            -
                      @iam.create options 
     | 
| 
      
 35 
     | 
    
         
            +
                      @iam.create options
         
     | 
| 
       30 
36 
     | 
    
         
             
                    end
         
     | 
| 
       31 
37 
     | 
    
         | 
| 
       32 
38 
     | 
    
         
             
                    desc 'delete', 'delete existing user'
         
     | 
| 
       33 
39 
     | 
    
         
             
                    method_option :user_name, :aliases => '-u', :required => true, :desc => 'name of the user to delete (dont include path)'
         
     | 
| 
      
 40 
     | 
    
         
            +
                    method_option :force, :aliases => '-f', :type => :boolean, :default => false, :decs => 'force deletes users login_profile, access_keys, policies if any'
         
     | 
| 
       34 
41 
     | 
    
         
             
                    def delete
         
     | 
| 
       35 
42 
     | 
    
         
             
                      create_iam_object
         
     | 
| 
       36 
     | 
    
         
            -
                      @iam.delete options 
     | 
| 
      
 43 
     | 
    
         
            +
                      @iam.delete options
         
     | 
| 
       37 
44 
     | 
    
         
             
                    end
         
     | 
| 
       38 
45 
     | 
    
         | 
| 
       39 
46 
     | 
    
         
             
                    desc 'cak', 'create access key for user'
         
     | 
| 
         @@ -100,14 +107,18 @@ module AwsCli 
     | 
|
| 
       100 
107 
     | 
    
         
             
                    desc 'passwd [OPTIONS]', 'add/change user password'
         
     | 
| 
       101 
108 
     | 
    
         
             
                    method_option :user_name, :aliases => '-u', :required => true, :desc => 'name of the user to change password for'
         
     | 
| 
       102 
109 
     | 
    
         
             
                    method_option :password, :alases => '-p', :desc => 'password for the user'
         
     | 
| 
       103 
     | 
    
         
            -
                    method_option : 
     | 
| 
      
 110 
     | 
    
         
            +
                    method_option :generate, :aliases => '-g', :type => :boolean, :default => false, :desc => 'generates the password'
         
     | 
| 
       104 
111 
     | 
    
         
             
                    method_option :remove, :aliases => '-r', :type => :boolean, :default => false, :desc => 'remove password for the user'
         
     | 
| 
       105 
112 
     | 
    
         
             
                    def passwd
         
     | 
| 
       106 
113 
     | 
    
         
             
                      create_iam_object
         
     | 
| 
       107 
114 
     | 
    
         
             
                      if options[:remove]
         
     | 
| 
       108 
115 
     | 
    
         
             
                        @iam.remove_password options[:user_name]
         
     | 
| 
       109 
116 
     | 
    
         
             
                      else
         
     | 
| 
       110 
     | 
    
         
            -
                         
     | 
| 
      
 117 
     | 
    
         
            +
                        if options[:generate]
         
     | 
| 
      
 118 
     | 
    
         
            +
                          @iam.assign_password options[:user_name], options[:password]
         
     | 
| 
      
 119 
     | 
    
         
            +
                        else
         
     | 
| 
      
 120 
     | 
    
         
            +
                          @iam.generate_password options[:user_name]
         
     | 
| 
      
 121 
     | 
    
         
            +
                        end
         
     | 
| 
       111 
122 
     | 
    
         
             
                      end
         
     | 
| 
       112 
123 
     | 
    
         
             
                    end
         
     | 
| 
       113 
124 
     | 
    
         | 
    
        data/lib/awscli/cli/s3/files.rb
    CHANGED
    
    | 
         @@ -4,76 +4,82 @@ module AwsCli 
     | 
|
| 
       4 
4 
     | 
    
         
             
                  require 'awscli/cli/s3'
         
     | 
| 
       5 
5 
     | 
    
         
             
                  class Files < Thor
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
                    desc  
     | 
| 
       8 
     | 
    
         
            -
                    method_option :bucket_name, :aliases =>  
     | 
| 
      
 7 
     | 
    
         
            +
                    desc 'list', 'list objects(files) in a bucket'
         
     | 
| 
      
 8 
     | 
    
         
            +
                    method_option :bucket_name, :aliases => '-b', :required => true, :desc => 'bucket name to print the contents from'
         
     | 
| 
      
 9 
     | 
    
         
            +
                    method_option :prefix, :aliases => '-p', :desc => 'Optionally specify a dir_name to narrow down results'
         
     | 
| 
       9 
10 
     | 
    
         
             
                    def list
         
     | 
| 
       10 
11 
     | 
    
         
             
                      create_s3_object
         
     | 
| 
       11 
     | 
    
         
            -
                      @s3.list options[:bucket_name]
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @s3.list options[:bucket_name], options[:prefix]
         
     | 
| 
       12 
13 
     | 
    
         
             
                    end
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
                    desc  
     | 
| 
       15 
     | 
    
         
            -
                    method_option :bucket_name, :aliases =>  
     | 
| 
       16 
     | 
    
         
            -
                    method_option :file_path, :aliases =>  
     | 
| 
      
 15 
     | 
    
         
            +
                    desc 'put', 'put a file into a bucket'
         
     | 
| 
      
 16 
     | 
    
         
            +
                    method_option :bucket_name, :aliases => '-b', :required => true, :desc => 'name of the bucket to upload the file to'
         
     | 
| 
      
 17 
     | 
    
         
            +
                    method_option :file_path, :aliases => '-p', :required => true, :desc => 'local file path'
         
     | 
| 
      
 18 
     | 
    
         
            +
                    method_option :dest_path, :aliases => '-d', :desc => 'optionally specify destination directory path to create'
         
     | 
| 
       17 
19 
     | 
    
         
             
                    def put
         
     | 
| 
       18 
20 
     | 
    
         
             
                      create_s3_object
         
     | 
| 
       19 
     | 
    
         
            -
                       
     | 
| 
      
 21 
     | 
    
         
            +
                      if options[:dest_path]
         
     | 
| 
      
 22 
     | 
    
         
            +
                        @s3.upload_file options[:bucket_name], options[:file_path], options[:dest_path]
         
     | 
| 
      
 23 
     | 
    
         
            +
                      else
         
     | 
| 
      
 24 
     | 
    
         
            +
                        @s3.upload_file options[:bucket_name], options[:file_path]
         
     | 
| 
      
 25 
     | 
    
         
            +
                      end
         
     | 
| 
       20 
26 
     | 
    
         
             
                    end
         
     | 
| 
       21 
27 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                    desc  
     | 
| 
       23 
     | 
    
         
            -
                    method_option :bucket_name, :aliases =>  
     | 
| 
       24 
     | 
    
         
            -
                    method_option :dir_path, :aliases =>  
     | 
| 
       25 
     | 
    
         
            -
                    method_option :dest_path, :aliases =>  
     | 
| 
       26 
     | 
    
         
            -
                    method_option :thread_count, :aliases =>  
     | 
| 
       27 
     | 
    
         
            -
                    method_option :public, :type => :boolean, :default => false, :desc =>  
     | 
| 
      
 28 
     | 
    
         
            +
                    desc 'put_rec', 'put a directory recursively into a specified bucket using multiple threads'
         
     | 
| 
      
 29 
     | 
    
         
            +
                    method_option :bucket_name, :aliases => '-b', :required => true, :desc => 'name of the bucket to upload the dir to'
         
     | 
| 
      
 30 
     | 
    
         
            +
                    method_option :dir_path, :aliases => '-p', :required => true, :desc => 'path of the dir to upload'
         
     | 
| 
      
 31 
     | 
    
         
            +
                    method_option :dest_path, :aliases => '-d', :desc => 'optionally specify destination directory path to create'
         
     | 
| 
      
 32 
     | 
    
         
            +
                    method_option :thread_count, :aliases => '-t', :type => :numeric, :default => 5, :desc => 'number of threads to use to upload files'
         
     | 
| 
      
 33 
     | 
    
         
            +
                    method_option :public, :type => :boolean, :default => false, :desc => 'set ACL of files to public'
         
     | 
| 
       28 
34 
     | 
    
         
             
                    def put_rec
         
     | 
| 
       29 
35 
     | 
    
         
             
                      create_s3_object
         
     | 
| 
       30 
36 
     | 
    
         
             
                      @s3.upload_file_rec options
         
     | 
| 
       31 
37 
     | 
    
         
             
                    end
         
     | 
| 
       32 
38 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                    desc  
     | 
| 
      
 39 
     | 
    
         
            +
                    desc 'put_big', 'uploads a file using multipart uploads'
         
     | 
| 
       34 
40 
     | 
    
         
             
                    long_desc <<-DESC
         
     | 
| 
       35 
     | 
    
         
            -
                    Takes in a larger file, split the file into chunks and uploads the parts using amazon multipart uploads and the parts are aggregated at the amazons end.
         
     | 
| 
      
 41 
     | 
    
         
            +
                    Takes in a larger file (> 100MB), split the file into chunks and uploads the parts using amazon multipart uploads and the parts are aggregated at the amazons end.
         
     | 
| 
       36 
42 
     | 
    
         
             
                    DESC
         
     | 
| 
       37 
     | 
    
         
            -
                    method_option :bucket_name, :aliases =>  
     | 
| 
       38 
     | 
    
         
            -
                    method_option :file_path, :aliases =>  
     | 
| 
       39 
     | 
    
         
            -
                    method_option :tmp_dir, :aliases =>  
     | 
| 
       40 
     | 
    
         
            -
                    method_option :acl, :aliases =>  
     | 
| 
       41 
     | 
    
         
            -
                    method_option :dest_path, :aliases =>  
     | 
| 
      
 43 
     | 
    
         
            +
                    method_option :bucket_name, :aliases => '-b', :required => true, :banner => 'NAME', :desc => 'name of the bucket to upload the parts to'
         
     | 
| 
      
 44 
     | 
    
         
            +
                    method_option :file_path, :aliases => '-p', :required => true, :banner => 'PATH', :desc => 'path of the file to upload'
         
     | 
| 
      
 45 
     | 
    
         
            +
                    method_option :tmp_dir, :aliases => '-t', :default => '/tmp', :desc => 'path to a temporary location where file will be split into chunks'
         
     | 
| 
      
 46 
     | 
    
         
            +
                    method_option :acl, :aliases => '-a', :default => 'private', :desc => 'ACL to apply, to the object that is created after completing multipart upload, valid options in private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control'
         
     | 
| 
      
 47 
     | 
    
         
            +
                    method_option :dest_path, :aliases => '-d', :desc => 'optionally specify destination directory path to create'
         
     | 
| 
       42 
48 
     | 
    
         
             
                    def put_big
         
     | 
| 
       43 
49 
     | 
    
         
             
                      create_s3_object
         
     | 
| 
       44 
50 
     | 
    
         
             
                      @s3.multipart_upload options
         
     | 
| 
       45 
51 
     | 
    
         
             
                    end
         
     | 
| 
       46 
52 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                    desc  
     | 
| 
       48 
     | 
    
         
            -
                    method_option :bucket_name, :aliases =>  
     | 
| 
       49 
     | 
    
         
            -
                    method_option :file_name, :aliases =>  
     | 
| 
       50 
     | 
    
         
            -
                    method_option :local_path, :aliases =>  
     | 
| 
      
 53 
     | 
    
         
            +
                    desc 'get', 'get a file from a bucket'
         
     | 
| 
      
 54 
     | 
    
         
            +
                    method_option :bucket_name, :aliases => '-b', :required => true, :banner => 'NAME', :desc => 'name of the bucket to download the file from'
         
     | 
| 
      
 55 
     | 
    
         
            +
                    method_option :file_name, :aliases => '-f', :required => true, :banner => 'NAME', :desc => 'name of file to download'
         
     | 
| 
      
 56 
     | 
    
         
            +
                    method_option :local_path, :aliases => '-p', :required => true, :banner => 'PATH', :desc => 'local fs path, where to download the file to'
         
     | 
| 
       51 
57 
     | 
    
         
             
                    def get
         
     | 
| 
       52 
58 
     | 
    
         
             
                      create_s3_object
         
     | 
| 
       53 
59 
     | 
    
         
             
                      @s3.download_file options[:bucket_name], options[:file_name], options[:local_path]
         
     | 
| 
       54 
60 
     | 
    
         
             
                    end
         
     | 
| 
       55 
61 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
                    desc  
     | 
| 
       57 
     | 
    
         
            -
                    method_option :bucket_name, :aliases =>  
     | 
| 
       58 
     | 
    
         
            -
                    method_option :file_name, :aliases =>  
     | 
| 
      
 62 
     | 
    
         
            +
                    desc 'delete', 'delete a file from a bucket'
         
     | 
| 
      
 63 
     | 
    
         
            +
                    method_option :bucket_name, :aliases => '-b', :required => true, :desc => 'name of the bucket to download the file from'
         
     | 
| 
      
 64 
     | 
    
         
            +
                    method_option :file_name, :aliases => '-f', :required => true, :desc => 'name of file to download'
         
     | 
| 
       59 
65 
     | 
    
         
             
                    def delete
         
     | 
| 
       60 
66 
     | 
    
         
             
                      create_s3_object
         
     | 
| 
       61 
67 
     | 
    
         
             
                      @s3.delete_file options[:bucket_name], options[:file_name]
         
     | 
| 
       62 
68 
     | 
    
         
             
                    end
         
     | 
| 
       63 
69 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
                    desc  
     | 
| 
       65 
     | 
    
         
            -
                    method_option :source_bucket, :aliases =>  
     | 
| 
       66 
     | 
    
         
            -
                    method_option :source_file, :aliases =>  
     | 
| 
       67 
     | 
    
         
            -
                    method_option :dest_bucket, :aliases =>  
     | 
| 
       68 
     | 
    
         
            -
                    method_option :dest_file, : 
     | 
| 
      
 70 
     | 
    
         
            +
                    desc 'copy', 'copy object from one bucket to another'
         
     | 
| 
      
 71 
     | 
    
         
            +
                    method_option :source_bucket, :aliases => '-s', :required => true, :banner => 'NAME', :desc => 'source bucket name from where to copy the file'
         
     | 
| 
      
 72 
     | 
    
         
            +
                    method_option :source_file, :aliases => '-f', :required => true, :banner => 'PATH', :desc => 'source file name to copy'
         
     | 
| 
      
 73 
     | 
    
         
            +
                    method_option :dest_bucket, :aliases => '-d', :required => true, :banner => 'NAME', :desc => 'destination bucket name to copy the file to'
         
     | 
| 
      
 74 
     | 
    
         
            +
                    method_option :dest_file, :aliases => '-r', :required => true, :banner => 'PATH', :desc => 'destination file name'
         
     | 
| 
       69 
75 
     | 
    
         
             
                    def copy
         
     | 
| 
       70 
76 
     | 
    
         
             
                      create_s3_object
         
     | 
| 
       71 
77 
     | 
    
         
             
                      @s3.copy_file options[:source_bucket], options[:source_file], options[:dest_bucket], options[:dest_file]
         
     | 
| 
       72 
78 
     | 
    
         
             
                    end
         
     | 
| 
       73 
79 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                    desc  
     | 
| 
       75 
     | 
    
         
            -
                    method_option :bucket_name, :aliases =>  
     | 
| 
       76 
     | 
    
         
            -
                    method_option :file_name, :aliases =>  
     | 
| 
      
 80 
     | 
    
         
            +
                    desc 'public_url', 'show the public url of a file'
         
     | 
| 
      
 81 
     | 
    
         
            +
                    method_option :bucket_name, :aliases => '-b', :required => true, :desc => 'name of the bucket to download the file from'
         
     | 
| 
      
 82 
     | 
    
         
            +
                    method_option :file_name, :aliases => '-f', :required => true, :desc => 'name of file to download'
         
     | 
| 
       77 
83 
     | 
    
         
             
                    def public_url
         
     | 
| 
       78 
84 
     | 
    
         
             
                      create_s3_object
         
     | 
| 
       79 
85 
     | 
    
         
             
                      @s3.get_public_url options[:bucket_name], options[:file_name]
         
     | 
| 
         @@ -83,13 +89,13 @@ module AwsCli 
     | 
|
| 
       83 
89 
     | 
    
         
             
                    private
         
     | 
| 
       84 
90 
     | 
    
         | 
| 
       85 
91 
     | 
    
         
             
                    def create_s3_object
         
     | 
| 
       86 
     | 
    
         
            -
                      puts  
     | 
| 
      
 92 
     | 
    
         
            +
                      puts 'S3 Establishing Connection...'
         
     | 
| 
       87 
93 
     | 
    
         
             
                      $s3_conn = if parent_options[:region]
         
     | 
| 
       88 
94 
     | 
    
         
             
                                    Awscli::Connection.new.request_s3(parent_options[:region])
         
     | 
| 
       89 
95 
     | 
    
         
             
                                  else
         
     | 
| 
       90 
96 
     | 
    
         
             
                                    Awscli::Connection.new.request_s3
         
     | 
| 
       91 
97 
     | 
    
         
             
                                  end
         
     | 
| 
       92 
     | 
    
         
            -
                      puts  
     | 
| 
      
 98 
     | 
    
         
            +
                      puts 'S3 Establishing Connection... OK'
         
     | 
| 
       93 
99 
     | 
    
         
             
                      @s3 = Awscli::S3::Files.new($s3_conn)
         
     | 
| 
       94 
100 
     | 
    
         
             
                    end
         
     | 
| 
       95 
101 
     | 
    
         | 
    
        data/lib/awscli/connection.rb
    CHANGED
    
    | 
         @@ -5,67 +5,70 @@ module Awscli 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
                def initialize
         
     | 
| 
       7 
7 
     | 
    
         
             
                  #load env variable AWSCLI_CONFIG_FILE
         
     | 
| 
       8 
     | 
    
         
            -
                   
     | 
| 
       9 
     | 
    
         
            -
                   
     | 
| 
       10 
     | 
    
         
            -
                    puts  
     | 
| 
      
 8 
     | 
    
         
            +
                  @aws_config_file = ENV['AWSCLI_CONFIG_FILE']
         
     | 
| 
      
 9 
     | 
    
         
            +
                  if @aws_config_file.nil?
         
     | 
| 
      
 10 
     | 
    
         
            +
                    puts 'Cannot find config file environment variable'
         
     | 
| 
       11 
11 
     | 
    
         
             
                    Awscli::Errors.missing_environment_variable
         
     | 
| 
       12 
12 
     | 
    
         
             
                  end
         
     | 
| 
       13 
     | 
    
         
            -
                   
     | 
| 
       14 
     | 
    
         
            -
                  unless File.exist?( 
     | 
| 
       15 
     | 
    
         
            -
                    puts "Cannot locate file #{ 
     | 
| 
      
 13 
     | 
    
         
            +
                  @aws_config_file_path = File.expand_path(@aws_config_file)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  unless File.exist?(@aws_config_file_path)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    puts "Cannot locate file #{@aws_config_file}"
         
     | 
| 
       16 
16 
     | 
    
         
             
                    Awscli::Errors.missing_config_file
         
     | 
| 
       17 
17 
     | 
    
         
             
                  end
         
     | 
| 
       18 
     | 
    
         
            -
                   
     | 
| 
       19 
     | 
    
         
            -
                  unless  
     | 
| 
       20 
     | 
    
         
            -
                    puts  
     | 
| 
      
 18 
     | 
    
         
            +
                  @config = YAML.load(File.read(@aws_config_file_path))
         
     | 
| 
      
 19 
     | 
    
         
            +
                  unless @config.kind_of?(Hash)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    puts 'Parse Error'
         
     | 
| 
       21 
21 
     | 
    
         
             
                    Awscli::Errors.missing_credentials
         
     | 
| 
       22 
22 
     | 
    
         
             
                  end
         
     | 
| 
       23 
23 
     | 
    
         
             
                end
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                def request_ec2 
     | 
| 
      
 25 
     | 
    
         
            +
                def request_ec2(region=nil)
         
     | 
| 
       26 
26 
     | 
    
         
             
                  # => returns AWS Compute connection object
         
     | 
| 
       27 
     | 
    
         
            -
                   
     | 
| 
      
 27 
     | 
    
         
            +
                  @config.merge!(:provider => 'AWS')
         
     | 
| 
       28 
28 
     | 
    
         
             
                  if region
         
     | 
| 
       29 
29 
     | 
    
         
             
                    #if user passes a region optionally
         
     | 
| 
       30 
30 
     | 
    
         
             
                    Awscli::Errors.invalid_region unless Awscli::Instances::REGIONS.include?(region)
         
     | 
| 
       31 
     | 
    
         
            -
                     
     | 
| 
       32 
     | 
    
         
            -
                     
     | 
| 
      
 31 
     | 
    
         
            +
                    @config.reject!{ |key| key == 'region' } if @config['region']
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @config.merge!(:region => region)
         
     | 
| 
       33 
33 
     | 
    
         
             
                  else
         
     | 
| 
       34 
     | 
    
         
            -
                    if  
     | 
| 
       35 
     | 
    
         
            -
                      Awscli::Errors.invalid_region unless Awscli::Instances::REGIONS.include?(@@config['region'])
         
     | 
| 
       36 
     | 
    
         
            -
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                    Awscli::Errors.invalid_region unless Awscli::Instances::REGIONS.include?(@config['region']) if @config['region']
         
     | 
| 
       37 
35 
     | 
    
         
             
                  end
         
     | 
| 
       38 
     | 
    
         
            -
                  Fog::Compute.new( 
     | 
| 
      
 36 
     | 
    
         
            +
                  Fog::Compute.new(@config)
         
     | 
| 
       39 
37 
     | 
    
         
             
                end
         
     | 
| 
       40 
38 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
                def request_s3 
     | 
| 
      
 39 
     | 
    
         
            +
                def request_s3(region=nil)
         
     | 
| 
       42 
40 
     | 
    
         
             
                  # => returns S3 connection object
         
     | 
| 
       43 
     | 
    
         
            -
                   
     | 
| 
       44 
     | 
    
         
            -
                  if  
     | 
| 
       45 
     | 
    
         
            -
                    #remove region
         
     | 
| 
       46 
     | 
    
         
            -
                    @@config.reject!{ |k| k == "region" }
         
     | 
| 
       47 
     | 
    
         
            -
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                  @config.merge!(:provider => 'AWS')
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @config.reject!{ |key| key == 'region' } if @config['region']
         
     | 
| 
       48 
43 
     | 
    
         
             
                  #parse optionally passing region
         
     | 
| 
       49 
44 
     | 
    
         
             
                  if region
         
     | 
| 
       50 
45 
     | 
    
         
             
                    Awscli::Errors.invalid_region unless Awscli::Instances::REGIONS.include?(region)
         
     | 
| 
       51 
     | 
    
         
            -
                     
     | 
| 
      
 46 
     | 
    
         
            +
                    @config.merge!(:region => region)
         
     | 
| 
       52 
47 
     | 
    
         
             
                  end
         
     | 
| 
       53 
     | 
    
         
            -
                  Fog::Storage.new( 
     | 
| 
      
 48 
     | 
    
         
            +
                  Fog::Storage.new(@config)
         
     | 
| 
       54 
49 
     | 
    
         
             
                end
         
     | 
| 
       55 
50 
     | 
    
         | 
| 
       56 
51 
     | 
    
         
             
                def request_as
         
     | 
| 
       57 
52 
     | 
    
         
             
                  # => returns AWS Auto Scaling connection object
         
     | 
| 
       58 
     | 
    
         
            -
                   
     | 
| 
       59 
     | 
    
         
            -
                  Fog::AWS::AutoScaling.new(@@config)
         
     | 
| 
      
 53 
     | 
    
         
            +
                  Fog::AWS::AutoScaling.new(@config)
         
     | 
| 
       60 
54 
     | 
    
         
             
                end
         
     | 
| 
       61 
55 
     | 
    
         | 
| 
       62 
56 
     | 
    
         
             
                def request_iam
         
     | 
| 
       63 
57 
     | 
    
         
             
                  # => returns AWS IAM object
         
     | 
| 
       64 
     | 
    
         
            -
                  if  
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
      
 58 
     | 
    
         
            +
                  @config.reject!{ |key| key == 'region' } if @config['region']
         
     | 
| 
      
 59 
     | 
    
         
            +
                  Fog::AWS::IAM.new(@config)
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                def request_emr(region=nil)
         
     | 
| 
      
 63 
     | 
    
         
            +
                  # => returns AWS EMR object
         
     | 
| 
      
 64 
     | 
    
         
            +
                  if region
         
     | 
| 
      
 65 
     | 
    
         
            +
                    Awscli::Errors.invalid_region unless Awscli::Instances::REGIONS.include?(region)
         
     | 
| 
      
 66 
     | 
    
         
            +
                    @config.reject!{ |key| key == 'region' } if @config['region']
         
     | 
| 
      
 67 
     | 
    
         
            +
                    @config.merge!(:region => region)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  else
         
     | 
| 
      
 69 
     | 
    
         
            +
                    Awscli::Errors.invalid_region unless Awscli::Instances::REGIONS.include?(@config['region']) if @config['region']
         
     | 
| 
       67 
70 
     | 
    
         
             
                  end
         
     | 
| 
       68 
     | 
    
         
            -
                  Fog::AWS:: 
     | 
| 
      
 71 
     | 
    
         
            +
                  Fog::AWS::EMR.new(@config)
         
     | 
| 
       69 
72 
     | 
    
         
             
                end
         
     | 
| 
       70 
73 
     | 
    
         | 
| 
       71 
74 
     | 
    
         
             
              end
         
     | 
    
        data/lib/awscli/ec2.rb
    CHANGED
    
    | 
         @@ -7,26 +7,26 @@ module Awscli 
     | 
|
| 
       7 
7 
     | 
    
         
             
                  # params:
         
     | 
| 
       8 
8 
     | 
    
         
             
                  #   connection: Awscli::Connection.new.request_ec2
         
     | 
| 
       9 
9 
     | 
    
         
             
                  #   extra options hash
         
     | 
| 
       10 
     | 
    
         
            -
                  def initialize 
     | 
| 
       11 
     | 
    
         
            -
                     
     | 
| 
      
 10 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       12 
12 
     | 
    
         
             
                  end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                  # list instances from a specified region in a tabular format
         
     | 
| 
       15 
15 
     | 
    
         
             
                  def list_instances
         
     | 
| 
       16 
     | 
    
         
            -
                     
     | 
| 
      
 16 
     | 
    
         
            +
                    @conn.servers.table([:id, :dns_name, :flavor_id, :groups, :image_id, :key_name, :private_ip_address,
         
     | 
| 
       17 
17 
     | 
    
         
             
                      :public_ip_address, :root_device_type, :security_group_ids, :state, :tags])
         
     | 
| 
       18 
18 
     | 
    
         
             
                  end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
                  # list available instance types
         
     | 
| 
       21 
21 
     | 
    
         
             
                  def list_flavors
         
     | 
| 
       22 
     | 
    
         
            -
                     
     | 
| 
      
 22 
     | 
    
         
            +
                    @conn.flavors.table
         
     | 
| 
       23 
23 
     | 
    
         
             
                  end
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                  # describe instance attributes - returns information about an attribute of an instance. You can get information
         
     | 
| 
       26 
26 
     | 
    
         
             
                  #   only one attribute per call.
         
     | 
| 
       27 
     | 
    
         
            -
                  #    
     | 
| 
      
 27 
     | 
    
         
            +
                  #   Available attributes to request: instanceType, kernel, ramdisk, userData, disableApiTermination, instanceInitiatedShutdownBehavior,
         
     | 
| 
       28 
28 
     | 
    
         
             
                  #     rootDeviceName, blockDeviceMapping, sourceDestCheck, groupSet
         
     | 
| 
       29 
     | 
    
         
            -
                  def describe_instance_attribute 
     | 
| 
      
 29 
     | 
    
         
            +
                  def describe_instance_attribute(instance_id, request)
         
     | 
| 
       30 
30 
     | 
    
         
             
                    valid_requests = %w(architecture ami_launch_index availability_zone block_device_mapping network_interfaces client_token
         
     | 
| 
       31 
31 
     | 
    
         
             
                      dns_name ebs_optimized groups flavor_id iam_instance_profile image_id instance_initiated_shutdown_behavior
         
     | 
| 
       32 
32 
     | 
    
         
             
                      kernel_id key_name created_at monitoring placement_group platform private_dns_name private_ip_address
         
     | 
| 
         @@ -34,14 +34,14 @@ module Awscli 
     | 
|
| 
       34 
34 
     | 
    
         
             
                      tenancy tags user_data vpc_id volumes username)
         
     | 
| 
       35 
35 
     | 
    
         
             
                    #more options
         
     | 
| 
       36 
36 
     | 
    
         
             
                    #:monitor=, :username=, :private_key=, :private_key_path=, :public_key=, :public_key_path=, :username, :private_key_path, :private_key, :public_key_path, :public_key, :scp, :scp_upload, :scp_download, :ssh, :ssh_port, :sshable?
         
     | 
| 
       37 
     | 
    
         
            -
                    response =  
     | 
| 
      
 37 
     | 
    
         
            +
                    response = @conn.servers.get(instance_id)
         
     | 
| 
       38 
38 
     | 
    
         
             
                    abort "Invalid Attribute, available attributes to request: #{valid_requests}" unless valid_requests.include?(request)
         
     | 
| 
       39 
     | 
    
         
            -
                    abort "InstanceId Not found :#{instance_id}, Available instnaces #{ 
     | 
| 
      
 39 
     | 
    
         
            +
                    abort "InstanceId Not found :#{instance_id}, Available instnaces #{@conn.servers.map { |x| x.id }}" unless response
         
     | 
| 
       40 
40 
     | 
    
         
             
                    puts "#{request}: #{response.send(request)}"
         
     | 
| 
       41 
41 
     | 
    
         
             
                  end
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
                  # modifies an attribute of an instance
         
     | 
| 
       44 
     | 
    
         
            -
                  def modify_instance_attribute 
     | 
| 
      
 44 
     | 
    
         
            +
                  def modify_instance_attribute(instance_id, attributename, attributevalue)
         
     | 
| 
       45 
45 
     | 
    
         
             
                    attrs_lookup = {
         
     | 
| 
       46 
46 
     | 
    
         
             
                      'isize' => 'InstanceType',
         
     | 
| 
       47 
47 
     | 
    
         
             
                      'kernel' => 'Kernel',
         
     | 
| 
         @@ -53,36 +53,36 @@ module Awscli 
     | 
|
| 
       53 
53 
     | 
    
         
             
                      'group_id' => 'GroupId'
         
     | 
| 
       54 
54 
     | 
    
         
             
                    }
         
     | 
| 
       55 
55 
     | 
    
         
             
                    valid_attributes = %w(InstanceType Kernel Ramdisk UserData DisableApiTermination InstanceInitiatedShutdownBehavior SourceDestCheck GroupId)
         
     | 
| 
       56 
     | 
    
         
            -
                    response =  
     | 
| 
       57 
     | 
    
         
            -
                    abort "InstanceId Not found :#{instance_id}, Available instnaces #{ 
     | 
| 
      
 56 
     | 
    
         
            +
                    response = @conn.servers.get(instance_id)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    abort "InstanceId Not found :#{instance_id}, Available instnaces #{@conn.servers.map { |x| x.id }}" unless response
         
     | 
| 
       58 
58 
     | 
    
         
             
                    abort "Instance should be in stopped state to modify its attributes" if response.state != 'stopped'
         
     | 
| 
       59 
59 
     | 
    
         
             
                    puts "#{instance_id}, #{attributename}, #{attributevalue}"
         
     | 
| 
       60 
60 
     | 
    
         
             
                    if attrs_lookup[attributename] == 'GroupId' #handle groupid which is array
         
     | 
| 
       61 
61 
     | 
    
         
             
                      puts "#{instance_id}, #{attrs_lookup[attributename]} => #{attributevalue}"
         
     | 
| 
       62 
     | 
    
         
            -
                       
     | 
| 
      
 62 
     | 
    
         
            +
                      @conn.modify_instance_attribute(instance_id, attrs_lookup[attributename] => attributevalue)
         
     | 
| 
       63 
63 
     | 
    
         
             
                    else
         
     | 
| 
       64 
64 
     | 
    
         
             
                      puts "#{instance_id}, #{attrs_lookup[attributename]}.Value => #{attributevalue}"
         
     | 
| 
       65 
     | 
    
         
            -
                       
     | 
| 
      
 65 
     | 
    
         
            +
                      @conn.modify_instance_attribute(instance_id, "#{attrs_lookup[attributename]}.Value" => attributevalue)
         
     | 
| 
       66 
66 
     | 
    
         
             
                    end
         
     | 
| 
       67 
67 
     | 
    
         
             
                  end
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
       69 
69 
     | 
    
         
             
                  # reset instance attribute
         
     | 
| 
       70 
     | 
    
         
            -
                  def reset_instance_attribute 
     | 
| 
       71 
     | 
    
         
            -
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
                  #def reset_instance_attribute(instance_id, attribute)
         
     | 
| 
      
 71 
     | 
    
         
            +
                  #end
         
     | 
| 
       72 
72 
     | 
    
         | 
| 
       73 
73 
     | 
    
         
             
                  #create a single instance with options passed
         
     | 
| 
       74 
     | 
    
         
            -
                  def create_instance 
     | 
| 
      
 74 
     | 
    
         
            +
                  def create_instance(options)
         
     | 
| 
       75 
75 
     | 
    
         
             
                    #validate required options
         
     | 
| 
       76 
     | 
    
         
            -
                    puts  
     | 
| 
       77 
     | 
    
         
            -
                    abort "Invalid Key: #{options[:key_name]}" unless  
     | 
| 
      
 76 
     | 
    
         
            +
                    puts 'Validating Options ...'
         
     | 
| 
      
 77 
     | 
    
         
            +
                    abort "Invalid Key: #{options[:key_name]}" unless @conn.key_pairs.get(options[:key_name])
         
     | 
| 
       78 
78 
     | 
    
         
             
                    options[:groups].each do |sg|
         
     | 
| 
       79 
     | 
    
         
            -
                      abort "Invalid Group: #{sg}" unless  
     | 
| 
      
 79 
     | 
    
         
            +
                      abort "Invalid Group: #{sg}" unless @conn.security_groups.get(sg)
         
     | 
| 
       80 
80 
     | 
    
         
             
                    end
         
     | 
| 
       81 
     | 
    
         
            -
                    abort "Invalid AMI: #{options[:image_id]}" unless  
     | 
| 
       82 
     | 
    
         
            -
                    abort "Invalid Instance Flavor: #{options[:flavor_id]}" unless  
     | 
| 
      
 81 
     | 
    
         
            +
                    abort "Invalid AMI: #{options[:image_id]}" unless @conn.images.get(options[:image_id])
         
     | 
| 
      
 82 
     | 
    
         
            +
                    abort "Invalid Instance Flavor: #{options[:flavor_id]}" unless @conn.flavors.get(options[:flavor_id])
         
     | 
| 
       83 
83 
     | 
    
         
             
                    #validate optional options
         
     | 
| 
       84 
84 
     | 
    
         
             
                    if options[:availability_zone]
         
     | 
| 
       85 
     | 
    
         
            -
                      available_zones =  
     | 
| 
      
 85 
     | 
    
         
            +
                      available_zones = @conn.describe_availability_zones.body['availabilityZoneInfo'].map { |az| az['zoneName'] }
         
     | 
| 
       86 
86 
     | 
    
         
             
                      abort "Invalid AvailabilityZone: #{options[:availability_zone]}" unless available_zones.include?(options[:availability_zone])
         
     | 
| 
       87 
87 
     | 
    
         
             
                    end
         
     | 
| 
       88 
88 
     | 
    
         
             
                    opts = Marshal.load(Marshal.dump(options))
         
     | 
| 
         @@ -109,7 +109,7 @@ module Awscli 
     | 
|
| 
       109 
109 
     | 
    
         
             
                          mapping['Ebs.VolumeSize'] = volume_size if !volume_size.nil? && !volume_size.empty?
         
     | 
| 
       110 
110 
     | 
    
         
             
                          mapping['Ebs.DeleteOnTermination'] = delete_on_termination if !delete_on_termination.nil? && !delete_on_termination.empty?
         
     | 
| 
       111 
111 
     | 
    
         
             
                        else
         
     | 
| 
       112 
     | 
    
         
            -
                          abort  
     | 
| 
      
 112 
     | 
    
         
            +
                          abort 'Cannot validate block_device'
         
     | 
| 
       113 
113 
     | 
    
         
             
                        end
         
     | 
| 
       114 
114 
     | 
    
         
             
                        block_device_mapping << mapping
         
     | 
| 
       115 
115 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -118,110 +118,110 @@ module Awscli 
     | 
|
| 
       118 
118 
     | 
    
         
             
                      opts.merge!(:block_device_mapping => block_device_mapping)
         
     | 
| 
       119 
119 
     | 
    
         
             
                    end
         
     | 
| 
       120 
120 
     | 
    
         
             
                    wait_for_server = options[:wait_for] && opts.reject! { |k| k == 'wait_for' }
         
     | 
| 
       121 
     | 
    
         
            -
                    puts  
     | 
| 
       122 
     | 
    
         
            -
                    puts  
     | 
| 
       123 
     | 
    
         
            -
                    server =  
     | 
| 
      
 121 
     | 
    
         
            +
                    puts 'Validating Options ... OK'
         
     | 
| 
      
 122 
     | 
    
         
            +
                    puts 'Creating Server'
         
     | 
| 
      
 123 
     | 
    
         
            +
                    server = @conn.servers.create(opts)
         
     | 
| 
       124 
124 
     | 
    
         
             
                    #wait for server to get created and return public_dns
         
     | 
| 
       125 
125 
     | 
    
         
             
                    if wait_for_server
         
     | 
| 
       126 
     | 
    
         
            -
                      print  
     | 
| 
      
 126 
     | 
    
         
            +
                      print 'Waiting for server to get created'
         
     | 
| 
       127 
127 
     | 
    
         
             
                      server.wait_for { print "."; ready? }
         
     | 
| 
       128 
128 
     | 
    
         
             
                      puts
         
     | 
| 
       129 
129 
     | 
    
         
             
                      puts "Server dns_name: #{server.dns_name}"
         
     | 
| 
       130 
130 
     | 
    
         
             
                    end
         
     | 
| 
       131 
131 
     | 
    
         
             
                  end
         
     | 
| 
       132 
132 
     | 
    
         | 
| 
       133 
     | 
    
         
            -
                   
     | 
| 
       134 
     | 
    
         
            -
                  def run_instances options
         
     | 
| 
       135 
     | 
    
         
            -
                  end
         
     | 
| 
      
 133 
     | 
    
         
            +
                  ## create a new instance(s)
         
     | 
| 
      
 134 
     | 
    
         
            +
                  #def run_instances options
         
     | 
| 
      
 135 
     | 
    
         
            +
                  #end
         
     | 
| 
       136 
136 
     | 
    
         | 
| 
       137 
     | 
    
         
            -
                  # describe  
     | 
| 
       138 
     | 
    
         
            -
                  def describe_instance_status 
     | 
| 
       139 
     | 
    
         
            -
                    response =  
     | 
| 
      
 137 
     | 
    
         
            +
                  # describe instance status
         
     | 
| 
      
 138 
     | 
    
         
            +
                  def describe_instance_status(instnace_id)
         
     | 
| 
      
 139 
     | 
    
         
            +
                    response = @conn.servers.get(instance_id)
         
     | 
| 
       140 
140 
     | 
    
         
             
                    abort "InstanceId Not found :#{instance_id}" unless response
         
     | 
| 
       141 
141 
     | 
    
         
             
                    puts "Instance #{instance_id} State: #{response.state}"
         
     | 
| 
       142 
142 
     | 
    
         
             
                  end
         
     | 
| 
       143 
143 
     | 
    
         | 
| 
       144 
     | 
    
         
            -
                   
     | 
| 
       145 
     | 
    
         
            -
                  def import_instance
         
     | 
| 
       146 
     | 
    
         
            -
                  end
         
     | 
| 
      
 144 
     | 
    
         
            +
                  ## import instance as vm
         
     | 
| 
      
 145 
     | 
    
         
            +
                  #def import_instance
         
     | 
| 
      
 146 
     | 
    
         
            +
                  #end
         
     | 
| 
       147 
147 
     | 
    
         | 
| 
       148 
     | 
    
         
            -
                   
     | 
| 
      
 148 
     | 
    
         
            +
                  #@conn.server.get(instanceid).(:reboot, :save, :setup, :start, :stop)
         
     | 
| 
       149 
149 
     | 
    
         
             
                  # reboot an instance
         
     | 
| 
       150 
     | 
    
         
            -
                  def reboot_instance 
     | 
| 
       151 
     | 
    
         
            -
                    response =  
     | 
| 
      
 150 
     | 
    
         
            +
                  def reboot_instance(instance_id)
         
     | 
| 
      
 151 
     | 
    
         
            +
                    response = @conn.servers.get(instance_id)
         
     | 
| 
       152 
152 
     | 
    
         
             
                    abort "InstanceId Not found :#{instance_id}" unless response
         
     | 
| 
       153 
153 
     | 
    
         
             
                    response.reboot
         
     | 
| 
       154 
154 
     | 
    
         
             
                    puts "Rebooting Instance: #{instance_id}"
         
     | 
| 
       155 
155 
     | 
    
         
             
                  end
         
     | 
| 
       156 
156 
     | 
    
         | 
| 
       157 
157 
     | 
    
         
             
                  # start a stopped instance
         
     | 
| 
       158 
     | 
    
         
            -
                  def stop_instance 
     | 
| 
       159 
     | 
    
         
            -
                    response =  
     | 
| 
      
 158 
     | 
    
         
            +
                  def stop_instance(instance_id)
         
     | 
| 
      
 159 
     | 
    
         
            +
                    response = @conn.servers.get(instance_id)
         
     | 
| 
       160 
160 
     | 
    
         
             
                    abort "InstanceId Not found :#{instance_id}" unless response
         
     | 
| 
       161 
     | 
    
         
            -
                    abort  
     | 
| 
      
 161 
     | 
    
         
            +
                    abort 'Instance should be in running to stop it' if response.state != 'running'
         
     | 
| 
       162 
162 
     | 
    
         
             
                    response.stop
         
     | 
| 
       163 
163 
     | 
    
         
             
                    puts "Stopped Instance: #{instance_id}"
         
     | 
| 
       164 
164 
     | 
    
         
             
                  end
         
     | 
| 
       165 
165 
     | 
    
         | 
| 
       166 
166 
     | 
    
         
             
                  # stop a running isntance
         
     | 
| 
       167 
     | 
    
         
            -
                  def start_instance 
     | 
| 
       168 
     | 
    
         
            -
                    response =  
     | 
| 
      
 167 
     | 
    
         
            +
                  def start_instance(instance_id)
         
     | 
| 
      
 168 
     | 
    
         
            +
                    response = @conn.servers.get(instance_id)
         
     | 
| 
       169 
169 
     | 
    
         
             
                    abort "InstanceId Not found :#{instance_id}" unless response
         
     | 
| 
       170 
     | 
    
         
            -
                    abort  
     | 
| 
      
 170 
     | 
    
         
            +
                    abort 'Instance should be stopped to start it' if response.state != 'stopped'
         
     | 
| 
       171 
171 
     | 
    
         
             
                    response.start
         
     | 
| 
       172 
172 
     | 
    
         
             
                    puts "Starting Instance: #{instance_id}"
         
     | 
| 
       173 
173 
     | 
    
         
             
                  end
         
     | 
| 
       174 
174 
     | 
    
         | 
| 
       175 
175 
     | 
    
         
             
                  # terminates an instance
         
     | 
| 
       176 
     | 
    
         
            -
                  def terminate_instance 
     | 
| 
       177 
     | 
    
         
            -
                    response =  
     | 
| 
      
 176 
     | 
    
         
            +
                  def terminate_instance(instance_id)
         
     | 
| 
      
 177 
     | 
    
         
            +
                    response = @conn.servers.get(instance_id)
         
     | 
| 
       178 
178 
     | 
    
         
             
                    abort "InstanceId Not found :#{instance_id}" unless response
         
     | 
| 
       179 
179 
     | 
    
         
             
                    unless response.state == 'terminated'
         
     | 
| 
       180 
180 
     | 
    
         
             
                      response.destroy
         
     | 
| 
       181 
181 
     | 
    
         
             
                      puts "Terminated Instance: #{instance_id}"
         
     | 
| 
       182 
182 
     | 
    
         
             
                    else
         
     | 
| 
       183 
     | 
    
         
            -
                      puts  
     | 
| 
      
 183 
     | 
    
         
            +
                      puts 'Instance is already in terminated state'
         
     | 
| 
       184 
184 
     | 
    
         
             
                    end
         
     | 
| 
       185 
185 
     | 
    
         
             
                  end
         
     | 
| 
       186 
186 
     | 
    
         | 
| 
       187 
     | 
    
         
            -
                  def get_console_output 
     | 
| 
       188 
     | 
    
         
            -
                    response =  
     | 
| 
      
 187 
     | 
    
         
            +
                  def get_console_output(instance_id)
         
     | 
| 
      
 188 
     | 
    
         
            +
                    response = @conn.get_console_output(instance_id)
         
     | 
| 
       189 
189 
     | 
    
         
             
                    puts response
         
     | 
| 
       190 
190 
     | 
    
         
             
                  end
         
     | 
| 
       191 
191 
     | 
    
         | 
| 
       192 
192 
     | 
    
         
             
                end # => EC2
         
     | 
| 
       193 
193 
     | 
    
         | 
| 
       194 
194 
     | 
    
         
             
                class KeyPairs
         
     | 
| 
       195 
     | 
    
         
            -
                  def initialize 
     | 
| 
       196 
     | 
    
         
            -
                     
     | 
| 
      
 195 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 196 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       197 
197 
     | 
    
         
             
                  end
         
     | 
| 
       198 
198 
     | 
    
         | 
| 
       199 
199 
     | 
    
         
             
                  def list_keypairs
         
     | 
| 
       200 
     | 
    
         
            -
                     
     | 
| 
      
 200 
     | 
    
         
            +
                    @conn.key_pairs.table
         
     | 
| 
       201 
201 
     | 
    
         
             
                  end
         
     | 
| 
       202 
202 
     | 
    
         | 
| 
       203 
     | 
    
         
            -
                  def create_keypair 
     | 
| 
      
 203 
     | 
    
         
            +
                  def create_keypair(options)
         
     | 
| 
       204 
204 
     | 
    
         
             
                    #validate keypair
         
     | 
| 
       205 
205 
     | 
    
         
             
                    Fog.credential = 'awscli'
         
     | 
| 
       206 
     | 
    
         
            -
                    abort "KeyPair '#{options[:name]}' already exists" if  
     | 
| 
       207 
     | 
    
         
            -
                    kp =  
     | 
| 
      
 206 
     | 
    
         
            +
                    abort "KeyPair '#{options[:name]}' already exists" if @conn.key_pairs.get(options[:name])
         
     | 
| 
      
 207 
     | 
    
         
            +
                    kp = @conn.key_pairs.create(options)
         
     | 
| 
       208 
208 
     | 
    
         
             
                    puts "Created keypair: #{options[:name]}"
         
     | 
| 
       209 
209 
     | 
    
         
             
                    p kp.write  #save the key to disk
         
     | 
| 
       210 
210 
     | 
    
         
             
                  end
         
     | 
| 
       211 
211 
     | 
    
         | 
| 
       212 
     | 
    
         
            -
                  def delete_keypair 
     | 
| 
       213 
     | 
    
         
            -
                    abort "KeyPair '#{keypair}' does not exist" unless  
     | 
| 
       214 
     | 
    
         
            -
                     
     | 
| 
      
 212 
     | 
    
         
            +
                  def delete_keypair(keypair)
         
     | 
| 
      
 213 
     | 
    
         
            +
                    abort "KeyPair '#{keypair}' does not exist" unless @conn.key_pairs.get(keypair)
         
     | 
| 
      
 214 
     | 
    
         
            +
                    @conn.key_pairs.get(keypair).destroy
         
     | 
| 
       215 
215 
     | 
    
         
             
                    puts "Deleted Keypair: #{keypair}"
         
     | 
| 
       216 
216 
     | 
    
         
             
                  end
         
     | 
| 
       217 
217 
     | 
    
         | 
| 
       218 
     | 
    
         
            -
                  def fingerprint 
     | 
| 
       219 
     | 
    
         
            -
                    response =  
     | 
| 
      
 218 
     | 
    
         
            +
                  def fingerprint(keypair)
         
     | 
| 
      
 219 
     | 
    
         
            +
                    response = @conn.key_pairs.get(keypair)
         
     | 
| 
       220 
220 
     | 
    
         
             
                    abort "Cannot find key pair: #{keypair}" unless response
         
     | 
| 
       221 
221 
     | 
    
         
             
                    puts "Fingerprint for the key (#{keypair}): #{response.fingerprint}"
         
     | 
| 
       222 
222 
     | 
    
         
             
                  end
         
     | 
| 
       223 
223 
     | 
    
         | 
| 
       224 
     | 
    
         
            -
                  def import_keypair 
     | 
| 
      
 224 
     | 
    
         
            +
                  def import_keypair(options)
         
     | 
| 
       225 
225 
     | 
    
         
             
                    #validate if the file exists
         
     | 
| 
       226 
226 
     | 
    
         
             
                    private_key_path = if options[:private_key_path]
         
     | 
| 
       227 
227 
     | 
    
         
             
                                        File.expand_path(options[:private_key_path])
         
     | 
| 
         @@ -237,7 +237,7 @@ module Awscli 
     | 
|
| 
       237 
237 
     | 
    
         
             
                    abort "Cannot find public_key_path: #{public_key_path}" unless File.exist?(public_key_path)
         
     | 
| 
       238 
238 
     | 
    
         
             
                    #validate if the key pair name exists
         
     | 
| 
       239 
239 
     | 
    
         
             
                    Fog.credentials = Fog.credentials.merge({ :private_key_path => private_key_path, :public_key_path => public_key_path })
         
     | 
| 
       240 
     | 
    
         
            -
                     
     | 
| 
      
 240 
     | 
    
         
            +
                    @conn.import_key_pair(options[:name], IO.read(public_key_path)) if @conn.key_pairs.get(options[:name]).nil?
         
     | 
| 
       241 
241 
     | 
    
         
             
                    puts "Imported KeyPair with name: #{options[:name]} sucessfully, using public_key: #{public_key_path} and private_key: #{private_key_path}"
         
     | 
| 
       242 
242 
     | 
    
         
             
                  end
         
     | 
| 
       243 
243 
     | 
    
         
             
                end # => KP
         
     | 
| 
         @@ -247,36 +247,36 @@ module Awscli 
     | 
|
| 
       247 
247 
     | 
    
         
             
                  #Limitations: Ec2-Classic: user can have upto 500 groups
         
     | 
| 
       248 
248 
     | 
    
         
             
                              # Ec2-VPC: user can have 50 group per VPC
         
     | 
| 
       249 
249 
     | 
    
         | 
| 
       250 
     | 
    
         
            -
                  def initialize 
     | 
| 
       251 
     | 
    
         
            -
                     
     | 
| 
      
 250 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 251 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       252 
252 
     | 
    
         
             
                  end
         
     | 
| 
       253 
253 
     | 
    
         | 
| 
       254 
     | 
    
         
            -
                  def list_secgroups 
     | 
| 
      
 254 
     | 
    
         
            +
                  def list_secgroups(options)
         
     | 
| 
       255 
255 
     | 
    
         
             
                    if options[:show_ip_permissions]
         
     | 
| 
       256 
     | 
    
         
            -
                      #  
     | 
| 
       257 
     | 
    
         
            -
                       
     | 
| 
      
 256 
     | 
    
         
            +
                      # @conn.security_groups.table([:name, :group_id, :ip_permissions])
         
     | 
| 
      
 257 
     | 
    
         
            +
                      @conn.security_groups.each do |sg|
         
     | 
| 
       258 
258 
     | 
    
         
             
                        id = sg.group_id
         
     | 
| 
       259 
259 
     | 
    
         
             
                        ip_permissions = sg.ip_permissions.to_yaml
         
     | 
| 
       260 
260 
     | 
    
         
             
                        Formatador.display_line("[green]#{id}[/]")
         
     | 
| 
       261 
261 
     | 
    
         
             
                        puts "#{ip_permissions}"
         
     | 
| 
       262 
     | 
    
         
            -
                        puts  
     | 
| 
      
 262 
     | 
    
         
            +
                        puts '================='
         
     | 
| 
       263 
263 
     | 
    
         
             
                      end
         
     | 
| 
       264 
264 
     | 
    
         
             
                    else
         
     | 
| 
       265 
     | 
    
         
            -
                       
     | 
| 
      
 265 
     | 
    
         
            +
                      @conn.security_groups.table([:name, :group_id, :description])
         
     | 
| 
       266 
266 
     | 
    
         
             
                    end
         
     | 
| 
       267 
267 
     | 
    
         
             
                  end
         
     | 
| 
       268 
268 
     | 
    
         | 
| 
       269 
     | 
    
         
            -
                  def authorize_securitygroup 
     | 
| 
      
 269 
     | 
    
         
            +
                  def authorize_securitygroup(options)
         
     | 
| 
       270 
270 
     | 
    
         
             
                    # => Ingress regular traffic -> this action applies to both EC2 and VPC Security Groups
         
     | 
| 
       271 
271 
     | 
    
         
             
                        # Each rule consists of the protocol, plus cidr range or a source group,
         
     | 
| 
       272 
272 
     | 
    
         
             
                          #for TCP/UDP protocols you must also specify the dest port or port range
         
     | 
| 
       273 
273 
     | 
    
         
             
                          #for ICMP, you must specify the icmp type and code (-1 means all types/codes)
         
     | 
| 
       274 
274 
     | 
    
         
             
                    abort "Expecting Security group id(s) of the form: 'sg-xxxxxx'" unless options[:group_id] =~ /sg-\S{8}/
         
     | 
| 
       275 
275 
     | 
    
         
             
                    abort "Invalid CIDR format" unless options[:cidr] =~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$/
         
     | 
| 
       276 
     | 
    
         
            -
                    sg =  
     | 
| 
      
 276 
     | 
    
         
            +
                    sg = @conn.security_groups.get_by_id(options[:group_id])
         
     | 
| 
       277 
277 
     | 
    
         
             
                    abort "Cannot find Security Group with Id: #{sg}" unless sg
         
     | 
| 
       278 
278 
     | 
    
         
             
                    begin
         
     | 
| 
       279 
     | 
    
         
            -
                       
     | 
| 
      
 279 
     | 
    
         
            +
                      @conn.authorize_security_group_ingress(
         
     | 
| 
       280 
280 
     | 
    
         
             
                        "GroupId" => options[:group_id],
         
     | 
| 
       281 
281 
     | 
    
         
             
                        "IpProtocol" => options[:protocol_type],
         
     | 
| 
       282 
282 
     | 
    
         
             
                        "FromPort" => options[:start_port],
         
     | 
| 
         @@ -290,12 +290,12 @@ module Awscli 
     | 
|
| 
       290 
290 
     | 
    
         
             
                    end
         
     | 
| 
       291 
291 
     | 
    
         
             
                  end
         
     | 
| 
       292 
292 
     | 
    
         | 
| 
       293 
     | 
    
         
            -
                  def revoke_securitygroup 
     | 
| 
      
 293 
     | 
    
         
            +
                  def revoke_securitygroup(options)
         
     | 
| 
       294 
294 
     | 
    
         
             
                    abort "Expecting Security group id(s) of the form: 'sg-xxxxxx'" unless options[:group_id] =~ /sg-\S{8}/
         
     | 
| 
       295 
     | 
    
         
            -
                    sg =  
     | 
| 
      
 295 
     | 
    
         
            +
                    sg = @conn.security_groups.get_by_id(options[:group_id])
         
     | 
| 
       296 
296 
     | 
    
         
             
                    abort "Cannot find Security Group with Id: #{sg}" unless sg
         
     | 
| 
       297 
297 
     | 
    
         
             
                    begin
         
     | 
| 
       298 
     | 
    
         
            -
                      response =  
     | 
| 
      
 298 
     | 
    
         
            +
                      response = @conn.revoke_security_group_ingress(
         
     | 
| 
       299 
299 
     | 
    
         
             
                        "GroupId" => options[:group_id],
         
     | 
| 
       300 
300 
     | 
    
         
             
                        "IpProtocol" => options[:protocol_type],
         
     | 
| 
       301 
301 
     | 
    
         
             
                        "FromPort" => options[:start_port],
         
     | 
| 
         @@ -308,14 +308,14 @@ module Awscli 
     | 
|
| 
       308 
308 
     | 
    
         
             
                    end
         
     | 
| 
       309 
309 
     | 
    
         
             
                  end
         
     | 
| 
       310 
310 
     | 
    
         | 
| 
       311 
     | 
    
         
            -
                  def create_securitygroup 
     | 
| 
       312 
     | 
    
         
            -
                    abort "Error: Security Group => #{options[:name]} already exists" if  
     | 
| 
       313 
     | 
    
         
            -
                     
     | 
| 
      
 311 
     | 
    
         
            +
                  def create_securitygroup(options)
         
     | 
| 
      
 312 
     | 
    
         
            +
                    abort "Error: Security Group => #{options[:name]} already exists" if @conn.security_groups.get(options[:name])
         
     | 
| 
      
 313 
     | 
    
         
            +
                    @conn.security_groups.create(options)
         
     | 
| 
       314 
314 
     | 
    
         
             
                    puts "Created Security Group: #{options[:name]}"
         
     | 
| 
       315 
315 
     | 
    
         
             
                  end
         
     | 
| 
       316 
316 
     | 
    
         | 
| 
       317 
     | 
    
         
            -
                  def delete_securitygroup 
     | 
| 
       318 
     | 
    
         
            -
                    sg =  
     | 
| 
      
 317 
     | 
    
         
            +
                  def delete_securitygroup(options)
         
     | 
| 
      
 318 
     | 
    
         
            +
                    sg = @conn.security_groups.get_by_id(options[:group_id])
         
     | 
| 
       319 
319 
     | 
    
         
             
                    abort "Error: Cannot find Security Group with Id: #{sg}" unless sg
         
     | 
| 
       320 
320 
     | 
    
         
             
                    begin
         
     | 
| 
       321 
321 
     | 
    
         
             
                      sg.destroy
         
     | 
| 
         @@ -328,32 +328,32 @@ module Awscli 
     | 
|
| 
       328 
328 
     | 
    
         
             
                end # => SG
         
     | 
| 
       329 
329 
     | 
    
         | 
| 
       330 
330 
     | 
    
         
             
                class Eip
         
     | 
| 
       331 
     | 
    
         
            -
                  def initialize 
     | 
| 
       332 
     | 
    
         
            -
                     
     | 
| 
      
 331 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 332 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       333 
333 
     | 
    
         
             
                  end
         
     | 
| 
       334 
334 
     | 
    
         | 
| 
       335 
335 
     | 
    
         
             
                  def list
         
     | 
| 
       336 
     | 
    
         
            -
                     
     | 
| 
      
 336 
     | 
    
         
            +
                    @conn.addresses.table
         
     | 
| 
       337 
337 
     | 
    
         
             
                  end
         
     | 
| 
       338 
338 
     | 
    
         | 
| 
       339 
339 
     | 
    
         
             
                  def create
         
     | 
| 
       340 
     | 
    
         
            -
                    eip =  
     | 
| 
      
 340 
     | 
    
         
            +
                    eip = @conn.addresses.create
         
     | 
| 
       341 
341 
     | 
    
         
             
                    puts "Created EIP: #{eip.public_ip}"
         
     | 
| 
       342 
342 
     | 
    
         
             
                  end
         
     | 
| 
       343 
343 
     | 
    
         | 
| 
       344 
     | 
    
         
            -
                  def delete 
     | 
| 
      
 344 
     | 
    
         
            +
                  def delete(options)
         
     | 
| 
       345 
345 
     | 
    
         
             
                    abort "Invalid IP Format" unless options[:eip] =~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/
         
     | 
| 
       346 
     | 
    
         
            -
                    eip =  
     | 
| 
      
 346 
     | 
    
         
            +
                    eip = @conn.addresses.get(options[:eip])
         
     | 
| 
       347 
347 
     | 
    
         
             
                    abort "Cannot find IP: #{options[:eip]}" unless eip
         
     | 
| 
       348 
348 
     | 
    
         
             
                    eip.destroy
         
     | 
| 
       349 
349 
     | 
    
         
             
                    puts "Deleted EIP: #{eip.public_ip}"
         
     | 
| 
       350 
350 
     | 
    
         
             
                  end
         
     | 
| 
       351 
351 
     | 
    
         | 
| 
       352 
     | 
    
         
            -
                  def associate 
     | 
| 
      
 352 
     | 
    
         
            +
                  def associate(options)
         
     | 
| 
       353 
353 
     | 
    
         
             
                    abort "Invalid IP Format" unless options[:eip] =~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/
         
     | 
| 
       354 
     | 
    
         
            -
                    eip =  
     | 
| 
      
 354 
     | 
    
         
            +
                    eip = @conn.addresses.get(options[:eip])
         
     | 
| 
       355 
355 
     | 
    
         
             
                    abort "Cannot find eip: #{options[:eip]}" unless eip
         
     | 
| 
       356 
     | 
    
         
            -
                    server =  
     | 
| 
      
 356 
     | 
    
         
            +
                    server = @conn.servers.get(options[:instance_id])
         
     | 
| 
       357 
357 
     | 
    
         
             
                    abort "Cannot find server with id: #{options[:instance_id]}" unless server
         
     | 
| 
       358 
358 
     | 
    
         
             
                    begin
         
     | 
| 
       359 
359 
     | 
    
         
             
                      eip.server = server
         
     | 
| 
         @@ -363,25 +363,25 @@ module Awscli 
     | 
|
| 
       363 
363 
     | 
    
         
             
                    end
         
     | 
| 
       364 
364 
     | 
    
         
             
                  end
         
     | 
| 
       365 
365 
     | 
    
         | 
| 
       366 
     | 
    
         
            -
                  def disassociate 
     | 
| 
      
 366 
     | 
    
         
            +
                  def disassociate(options)
         
     | 
| 
       367 
367 
     | 
    
         
             
                    abort "Invalid IP Format" unless options[:eip] =~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/
         
     | 
| 
       368 
     | 
    
         
            -
                    abort "Cannot find EIP: #{options[:eip]}" unless  
     | 
| 
       369 
     | 
    
         
            -
                     
     | 
| 
      
 368 
     | 
    
         
            +
                    abort "Cannot find EIP: #{options[:eip]}" unless @conn.addresses.get(options[:eip])
         
     | 
| 
      
 369 
     | 
    
         
            +
                    @conn.disassociate_address(options[:eip])
         
     | 
| 
       370 
370 
     | 
    
         
             
                    puts "Disassociated EIP: #{options[:eip]}"
         
     | 
| 
       371 
371 
     | 
    
         
             
                  end
         
     | 
| 
       372 
372 
     | 
    
         
             
                end # => Eip
         
     | 
| 
       373 
373 
     | 
    
         | 
| 
       374 
374 
     | 
    
         
             
                class Ami
         
     | 
| 
       375 
     | 
    
         
            -
                  def initialize 
     | 
| 
       376 
     | 
    
         
            -
                     
     | 
| 
      
 375 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 376 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       377 
377 
     | 
    
         
             
                  end
         
     | 
| 
       378 
378 
     | 
    
         | 
| 
       379 
     | 
    
         
            -
                  def list 
     | 
| 
      
 379 
     | 
    
         
            +
                  def list(filter)
         
     | 
| 
       380 
380 
     | 
    
         
             
                    puts filter
         
     | 
| 
       381 
381 
     | 
    
         
             
                    if filter.nil?
         
     | 
| 
       382 
     | 
    
         
            -
                       
     | 
| 
      
 382 
     | 
    
         
            +
                      @conn.images.all.table([:architecture, :id, :is_public, :platform, :root_device_type, :state])
         
     | 
| 
       383 
383 
     | 
    
         
             
                    else
         
     | 
| 
       384 
     | 
    
         
            -
                      data =  
     | 
| 
      
 384 
     | 
    
         
            +
                      data = @conn.images.all(filter)
         
     | 
| 
       385 
385 
     | 
    
         
             
                      data.empty? ? puts("No AMI's found for provided filters") : data.table([:architecture, :id, :is_public, :platform, :root_device_type, :state])
         
     | 
| 
       386 
386 
     | 
    
         
             
                    end
         
     | 
| 
       387 
387 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -420,17 +420,17 @@ module Awscli 
     | 
|
| 
       420 
420 
     | 
    
         
             
                  end
         
     | 
| 
       421 
421 
     | 
    
         | 
| 
       422 
422 
     | 
    
         
             
                  def list_amazon
         
     | 
| 
       423 
     | 
    
         
            -
                     
     | 
| 
      
 423 
     | 
    
         
            +
                    @conn.images.all('owner-alias' => 'amazon').table([:architecture, :id, :is_public, :platform, :root_device_type, :state])
         
     | 
| 
       424 
424 
     | 
    
         
             
                  end
         
     | 
| 
       425 
425 
     | 
    
         | 
| 
       426 
426 
     | 
    
         
             
                  def list_self
         
     | 
| 
       427 
     | 
    
         
            -
                    response =  
     | 
| 
      
 427 
     | 
    
         
            +
                    response = @conn.describe_images({'Owner' => 'self'}).body['imagesSet']
         
     | 
| 
       428 
428 
     | 
    
         
             
                    Formatador.display_table(response, ['architecture', 'imageId', 'isPublic', 'name', 'imageState', 'rootDeviceType', 'imageType'])
         
     | 
| 
       429 
429 
     | 
    
         
             
                  end
         
     | 
| 
       430 
430 
     | 
    
         | 
| 
       431 
     | 
    
         
            -
                  def create_image_from_instance 
     | 
| 
       432 
     | 
    
         
            -
                    abort "Invalid Instace: #{options[:instance_id]}" unless  
     | 
| 
       433 
     | 
    
         
            -
                     
     | 
| 
      
 431 
     | 
    
         
            +
                  def create_image_from_instance(options)
         
     | 
| 
      
 432 
     | 
    
         
            +
                    abort "Invalid Instace: #{options[:instance_id]}" unless @conn.servers.get(options[:instance_id])
         
     | 
| 
      
 433 
     | 
    
         
            +
                    @conn.create_image(
         
     | 
| 
       434 
434 
     | 
    
         
             
                        options[:instance_id],
         
     | 
| 
       435 
435 
     | 
    
         
             
                        options[:name],
         
     | 
| 
       436 
436 
     | 
    
         
             
                        options[:desc],
         
     | 
| 
         @@ -439,67 +439,67 @@ module Awscli 
     | 
|
| 
       439 
439 
     | 
    
         
             
                    puts "Created image from instance: #{options[:instance_id]}"
         
     | 
| 
       440 
440 
     | 
    
         
             
                  end
         
     | 
| 
       441 
441 
     | 
    
         | 
| 
       442 
     | 
    
         
            -
                  def deregister 
     | 
| 
       443 
     | 
    
         
            -
                    image =  
     | 
| 
      
 442 
     | 
    
         
            +
                  def deregister(image_id)
         
     | 
| 
      
 443 
     | 
    
         
            +
                    image = @conn.images.get(image_id)
         
     | 
| 
       444 
444 
     | 
    
         
             
                    abort "Cannot find image with id: #{image_id}" unless image
         
     | 
| 
       445 
     | 
    
         
            -
                     
     | 
| 
      
 445 
     | 
    
         
            +
                    @conn.deregister_image(image_id)
         
     | 
| 
       446 
446 
     | 
    
         
             
                    say "De-registerd image: <%= color('#{image_id}', :green) %>"
         
     | 
| 
       447 
447 
     | 
    
         
             
                  end
         
     | 
| 
       448 
448 
     | 
    
         | 
| 
       449 
449 
     | 
    
         
             
                end # => AMI
         
     | 
| 
       450 
450 
     | 
    
         | 
| 
       451 
451 
     | 
    
         
             
                class Ebs
         
     | 
| 
       452 
     | 
    
         
            -
                  def initialize 
     | 
| 
       453 
     | 
    
         
            -
                     
     | 
| 
      
 452 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 453 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       454 
454 
     | 
    
         
             
                  end
         
     | 
| 
       455 
455 
     | 
    
         | 
| 
       456 
     | 
    
         
            -
                  def list 
     | 
| 
      
 456 
     | 
    
         
            +
                  def list(options)
         
     | 
| 
       457 
457 
     | 
    
         
             
                    unless options[:snapshots]
         
     | 
| 
       458 
     | 
    
         
            -
                       
     | 
| 
      
 458 
     | 
    
         
            +
                      @conn.volumes.table([:availability_zone, :delete_on_termination, :device, :id, :server_id, :size, :snapshot_id, :state, :tags, :type])
         
     | 
| 
       459 
459 
     | 
    
         
             
                    else
         
     | 
| 
       460 
     | 
    
         
            -
                       
     | 
| 
      
 460 
     | 
    
         
            +
                      @conn.snapshots.table([:id, :owner_id, :volume_id, :state, :progress, :tags, :description])
         
     | 
| 
       461 
461 
     | 
    
         
             
                    end
         
     | 
| 
       462 
462 
     | 
    
         
             
                  end
         
     | 
| 
       463 
463 
     | 
    
         | 
| 
       464 
     | 
    
         
            -
                  def create 
     | 
| 
       465 
     | 
    
         
            -
                     
     | 
| 
      
 464 
     | 
    
         
            +
                  def create(options)
         
     | 
| 
      
 465 
     | 
    
         
            +
                    @conn.volumes.create(options)
         
     | 
| 
       466 
466 
     | 
    
         
             
                  end
         
     | 
| 
       467 
467 
     | 
    
         | 
| 
       468 
     | 
    
         
            -
                  def attach_volume 
     | 
| 
      
 468 
     | 
    
         
            +
                  def attach_volume(options)
         
     | 
| 
       469 
469 
     | 
    
         
             
                    #The volume and instance must be in the same Availability Zone.
         
     | 
| 
       470 
     | 
    
         
            -
                    volume =  
     | 
| 
      
 470 
     | 
    
         
            +
                    volume = @conn.volumes.get(options[:volume_id])
         
     | 
| 
       471 
471 
     | 
    
         
             
                    volume.merge_attributes(:device => options[:device])
         
     | 
| 
       472 
     | 
    
         
            -
                    server =  
     | 
| 
      
 472 
     | 
    
         
            +
                    server = @conn.servers.get(options[:instance_id])
         
     | 
| 
       473 
473 
     | 
    
         
             
                    abort "Cannot find volume: #{options[:volume_id]}" unless volume
         
     | 
| 
       474 
474 
     | 
    
         
             
                    abort "Cannot find instance: #{options[:instance_id]}" unless server
         
     | 
| 
       475 
475 
     | 
    
         
             
                    volume.server = server
         
     | 
| 
       476 
476 
     | 
    
         
             
                    puts "Attached volume: #{options[:volume_id]} to instance: #{options[:instance_id]}"
         
     | 
| 
       477 
477 
     | 
    
         
             
                  end
         
     | 
| 
       478 
478 
     | 
    
         | 
| 
       479 
     | 
    
         
            -
                  def detach_volume 
     | 
| 
      
 479 
     | 
    
         
            +
                  def detach_volume(options)
         
     | 
| 
       480 
480 
     | 
    
         
             
                    #Check if the volume is mounted and show warning regarding data loss
         
     | 
| 
       481 
     | 
    
         
            -
                    volume =  
     | 
| 
      
 481 
     | 
    
         
            +
                    volume = @conn.volumes.get(options[:volume_id])
         
     | 
| 
       482 
482 
     | 
    
         
             
                    abort "Cannot find volume: #{options[:volume_id]}" unless volume
         
     | 
| 
       483 
483 
     | 
    
         
             
                    if options[:force]
         
     | 
| 
       484 
484 
     | 
    
         
             
                      volume.force_detach
         
     | 
| 
       485 
485 
     | 
    
         
             
                    else
         
     | 
| 
       486 
     | 
    
         
            -
                       
     | 
| 
      
 486 
     | 
    
         
            +
                      @conn.detach_volume(options[:volume_id])
         
     | 
| 
       487 
487 
     | 
    
         
             
                    end
         
     | 
| 
       488 
488 
     | 
    
         
             
                    puts "Detached volume: #{options[:volume_id]}"
         
     | 
| 
       489 
489 
     | 
    
         
             
                  end
         
     | 
| 
       490 
490 
     | 
    
         | 
| 
       491 
     | 
    
         
            -
                  def delete_volume 
     | 
| 
       492 
     | 
    
         
            -
                    vol =  
     | 
| 
      
 491 
     | 
    
         
            +
                  def delete_volume(options)
         
     | 
| 
      
 492 
     | 
    
         
            +
                    vol = @conn.volumes.get(options[:volume_id])
         
     | 
| 
       493 
493 
     | 
    
         
             
                    abort "Cannot find volume #{options[:volume_id]}" unless vol
         
     | 
| 
       494 
494 
     | 
    
         
             
                    vol.destroy
         
     | 
| 
       495 
495 
     | 
    
         
             
                    puts "Deleted volume: #{options[:volume_id]}"
         
     | 
| 
       496 
496 
     | 
    
         
             
                  end
         
     | 
| 
       497 
497 
     | 
    
         | 
| 
       498 
498 
     | 
    
         
             
                  def delete_detached
         
     | 
| 
       499 
     | 
    
         
            -
                    vols  =  
     | 
| 
      
 499 
     | 
    
         
            +
                    vols  = @conn.volumes.all('status' => 'available')
         
     | 
| 
       500 
500 
     | 
    
         
             
                    unless vols.empty?
         
     | 
| 
       501 
     | 
    
         
            -
                      if agree( 
     | 
| 
       502 
     | 
    
         
            -
                        puts  
     | 
| 
      
 501 
     | 
    
         
            +
                      if agree('Are you sure want to delete all the all volumes that are not in use ?  ')
         
     | 
| 
      
 502 
     | 
    
         
            +
                        puts 'Deleting all volumes which are not in use ...'
         
     | 
| 
       503 
503 
     | 
    
         
             
                        vols.each do |vol|
         
     | 
| 
       504 
504 
     | 
    
         
             
                          vol.destroy
         
     | 
| 
       505 
505 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -509,20 +509,20 @@ module Awscli 
     | 
|
| 
       509 
509 
     | 
    
         
             
                    end
         
     | 
| 
       510 
510 
     | 
    
         
             
                  end
         
     | 
| 
       511 
511 
     | 
    
         | 
| 
       512 
     | 
    
         
            -
                  def create_snapshot 
     | 
| 
       513 
     | 
    
         
            -
                    abort "Cannot find volume: #{options[:volume_id]}" unless  
     | 
| 
       514 
     | 
    
         
            -
                     
     | 
| 
      
 512 
     | 
    
         
            +
                  def create_snapshot(options)
         
     | 
| 
      
 513 
     | 
    
         
            +
                    abort "Cannot find volume: #{options[:volume_id]}" unless @conn.volumes.get(options[:volume_id])
         
     | 
| 
      
 514 
     | 
    
         
            +
                    @conn.snapshots.create(options)
         
     | 
| 
       515 
515 
     | 
    
         
             
                    puts "Created snapshot"
         
     | 
| 
       516 
516 
     | 
    
         
             
                  end
         
     | 
| 
       517 
517 
     | 
    
         | 
| 
       518 
     | 
    
         
            -
                  def copy_snapshot 
     | 
| 
       519 
     | 
    
         
            -
                    # abort "Cannot find snapshot: #{options[:snapshot_id]}" unless  
     | 
| 
       520 
     | 
    
         
            -
                     
     | 
| 
      
 518 
     | 
    
         
            +
                  def copy_snapshot(options)
         
     | 
| 
      
 519 
     | 
    
         
            +
                    # abort "Cannot find snapshot: #{options[:snapshot_id]}" unless @conn.snapshots.get(options[:snapshot_id])
         
     | 
| 
      
 520 
     | 
    
         
            +
                    @conn.copy_snapshot(options[:snapshot_id], options[:source_region])
         
     | 
| 
       521 
521 
     | 
    
         
             
                    puts "Copied snapshot"
         
     | 
| 
       522 
522 
     | 
    
         
             
                  end
         
     | 
| 
       523 
523 
     | 
    
         | 
| 
       524 
     | 
    
         
            -
                  def delete_snapshot 
     | 
| 
       525 
     | 
    
         
            -
                    snap =  
     | 
| 
      
 524 
     | 
    
         
            +
                  def delete_snapshot(options)
         
     | 
| 
      
 525 
     | 
    
         
            +
                    snap = @conn.snapshots.get(options[:snapshot_id])
         
     | 
| 
       526 
526 
     | 
    
         
             
                    abort "Cannot find snapshot: #{options[:snapshot_id]}" unless snap
         
     | 
| 
       527 
527 
     | 
    
         
             
                    snap.destroy
         
     | 
| 
       528 
528 
     | 
    
         
             
                    puts "Deleted snapshot"
         
     | 
| 
         @@ -530,87 +530,87 @@ module Awscli 
     | 
|
| 
       530 
530 
     | 
    
         
             
                end # => EBS
         
     | 
| 
       531 
531 
     | 
    
         | 
| 
       532 
532 
     | 
    
         
             
                class Monitor
         
     | 
| 
       533 
     | 
    
         
            -
                  def initialize 
     | 
| 
       534 
     | 
    
         
            -
                     
     | 
| 
      
 533 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 534 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       535 
535 
     | 
    
         
             
                  end
         
     | 
| 
       536 
536 
     | 
    
         | 
| 
       537 
     | 
    
         
            -
                  def monitor 
     | 
| 
      
 537 
     | 
    
         
            +
                  def monitor(options)
         
     | 
| 
       538 
538 
     | 
    
         
             
                    options[:instance_ids].each do |instance|
         
     | 
| 
       539 
     | 
    
         
            -
                      abort "Invalid InstanceId: #{instance}" unless  
     | 
| 
      
 539 
     | 
    
         
            +
                      abort "Invalid InstanceId: #{instance}" unless @conn.servers.get(instance)
         
     | 
| 
       540 
540 
     | 
    
         
             
                    end
         
     | 
| 
       541 
     | 
    
         
            -
                     
     | 
| 
      
 541 
     | 
    
         
            +
                    @conn.monitor_instances(options[:instance_ids])
         
     | 
| 
       542 
542 
     | 
    
         
             
                    puts "Enabled monitoring for instnaces: #{options[:instance_ids].join(",")}"
         
     | 
| 
       543 
543 
     | 
    
         
             
                  end
         
     | 
| 
       544 
544 
     | 
    
         | 
| 
       545 
     | 
    
         
            -
                  def unmonitor 
     | 
| 
      
 545 
     | 
    
         
            +
                  def unmonitor(options)
         
     | 
| 
       546 
546 
     | 
    
         
             
                    options[:instance_ids].each do |instance|
         
     | 
| 
       547 
     | 
    
         
            -
                      abort "Invalid InstanceId: #{instance}" unless  
     | 
| 
      
 547 
     | 
    
         
            +
                      abort "Invalid InstanceId: #{instance}" unless @conn.servers.get(instance)
         
     | 
| 
       548 
548 
     | 
    
         
             
                    end
         
     | 
| 
       549 
     | 
    
         
            -
                     
     | 
| 
      
 549 
     | 
    
         
            +
                    @conn.unmonitor_instances(options[:instance_ids])
         
     | 
| 
       550 
550 
     | 
    
         
             
                    puts "Disabled monitoring for instnaces: #{options[:instance_ids].join(",")}"
         
     | 
| 
       551 
551 
     | 
    
         
             
                  end
         
     | 
| 
       552 
552 
     | 
    
         
             
                end # => Monitor
         
     | 
| 
       553 
553 
     | 
    
         | 
| 
       554 
554 
     | 
    
         
             
                class Tags
         
     | 
| 
       555 
     | 
    
         
            -
                  def initialize 
     | 
| 
       556 
     | 
    
         
            -
                     
     | 
| 
      
 555 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 556 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       557 
557 
     | 
    
         
             
                  end
         
     | 
| 
       558 
558 
     | 
    
         | 
| 
       559 
559 
     | 
    
         
             
                  def list
         
     | 
| 
       560 
     | 
    
         
            -
                     
     | 
| 
      
 560 
     | 
    
         
            +
                    @conn.tags.table
         
     | 
| 
       561 
561 
     | 
    
         
             
                  end
         
     | 
| 
       562 
562 
     | 
    
         | 
| 
       563 
     | 
    
         
            -
                  def create 
     | 
| 
       564 
     | 
    
         
            -
                     
     | 
| 
       565 
     | 
    
         
            -
                    puts  
     | 
| 
      
 563 
     | 
    
         
            +
                  def create(options)
         
     | 
| 
      
 564 
     | 
    
         
            +
                    @conn.tags.create(options)
         
     | 
| 
      
 565 
     | 
    
         
            +
                    puts 'Created Tag'
         
     | 
| 
       566 
566 
     | 
    
         
             
                  end
         
     | 
| 
       567 
567 
     | 
    
         | 
| 
       568 
     | 
    
         
            -
                  def delete 
     | 
| 
       569 
     | 
    
         
            -
                     
     | 
| 
       570 
     | 
    
         
            -
                    puts  
     | 
| 
      
 568 
     | 
    
         
            +
                  def delete(options)
         
     | 
| 
      
 569 
     | 
    
         
            +
                    @conn.tags.destroy(options)
         
     | 
| 
      
 570 
     | 
    
         
            +
                    puts 'Deleted Tag'
         
     | 
| 
       571 
571 
     | 
    
         
             
                  end
         
     | 
| 
       572 
572 
     | 
    
         
             
                end # => Tags
         
     | 
| 
       573 
573 
     | 
    
         | 
| 
       574 
574 
     | 
    
         
             
                class Placement
         
     | 
| 
       575 
     | 
    
         
            -
                  def initialize 
     | 
| 
       576 
     | 
    
         
            -
                     
     | 
| 
      
 575 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 576 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       577 
577 
     | 
    
         
             
                  end
         
     | 
| 
       578 
578 
     | 
    
         | 
| 
       579 
579 
     | 
    
         
             
                  def list
         
     | 
| 
       580 
     | 
    
         
            -
                     
     | 
| 
      
 580 
     | 
    
         
            +
                    @conn.describe_placement_groups
         
     | 
| 
       581 
581 
     | 
    
         
             
                  end
         
     | 
| 
       582 
582 
     | 
    
         | 
| 
       583 
     | 
    
         
            -
                  def create 
     | 
| 
       584 
     | 
    
         
            -
                     
     | 
| 
      
 583 
     | 
    
         
            +
                  def create(options)
         
     | 
| 
      
 584 
     | 
    
         
            +
                    @conn.create_placement_group(options[:name], options[:strategy])
         
     | 
| 
       585 
585 
     | 
    
         
             
                    puts "Created a new placement group: #{options[:name]}"
         
     | 
| 
       586 
586 
     | 
    
         
             
                  end
         
     | 
| 
       587 
587 
     | 
    
         | 
| 
       588 
     | 
    
         
            -
                  def delete 
     | 
| 
       589 
     | 
    
         
            -
                     
     | 
| 
      
 588 
     | 
    
         
            +
                  def delete(options)
         
     | 
| 
      
 589 
     | 
    
         
            +
                    @conn.delete_placement_group(options[:name])
         
     | 
| 
       590 
590 
     | 
    
         
             
                    puts "Deleted placement group: #{options[:name]}"
         
     | 
| 
       591 
591 
     | 
    
         
             
                  end
         
     | 
| 
       592 
592 
     | 
    
         
             
                end # => Placement
         
     | 
| 
       593 
593 
     | 
    
         | 
| 
       594 
594 
     | 
    
         
             
                class ReservedInstances
         
     | 
| 
       595 
     | 
    
         
            -
                  def initialize 
     | 
| 
       596 
     | 
    
         
            -
                     
     | 
| 
      
 595 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 596 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       597 
597 
     | 
    
         
             
                  end
         
     | 
| 
       598 
598 
     | 
    
         | 
| 
       599 
     | 
    
         
            -
                  def list 
     | 
| 
      
 599 
     | 
    
         
            +
                  def list(filters)
         
     | 
| 
       600 
600 
     | 
    
         
             
                    puts filters
         
     | 
| 
       601 
601 
     | 
    
         
             
                    if filters.nil?
         
     | 
| 
       602 
     | 
    
         
            -
                       
     | 
| 
      
 602 
     | 
    
         
            +
                      @conn.describe_reserved_instances.body['reservedInstancesSet']
         
     | 
| 
       603 
603 
     | 
    
         
             
                    else
         
     | 
| 
       604 
     | 
    
         
            -
                       
     | 
| 
      
 604 
     | 
    
         
            +
                      @conn.describe_reserved_instances(filters).body['reservedInstancesSet']
         
     | 
| 
       605 
605 
     | 
    
         
             
                    end
         
     | 
| 
       606 
606 
     | 
    
         
             
                  end
         
     | 
| 
       607 
607 
     | 
    
         | 
| 
       608 
     | 
    
         
            -
                  def list_offerings 
     | 
| 
      
 608 
     | 
    
         
            +
                  def list_offerings(filters)
         
     | 
| 
       609 
609 
     | 
    
         
             
                    puts filters
         
     | 
| 
       610 
610 
     | 
    
         
             
                    response =  if filters.nil?
         
     | 
| 
       611 
     | 
    
         
            -
                                   
     | 
| 
      
 611 
     | 
    
         
            +
                                  @conn.describe_reserved_instances_offerings.body['reservedInstancesOfferingsSet']
         
     | 
| 
       612 
612 
     | 
    
         
             
                                else
         
     | 
| 
       613 
     | 
    
         
            -
                                   
     | 
| 
      
 613 
     | 
    
         
            +
                                  @conn.describe_reserved_instances_offerings(filters).body['reservedInstancesOfferingsSet']
         
     | 
| 
       614 
614 
     | 
    
         
             
                                end
         
     | 
| 
       615 
615 
     | 
    
         
             
                    Formatador.display_table(response)
         
     | 
| 
       616 
616 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -633,30 +633,30 @@ module Awscli 
     | 
|
| 
       633 
633 
     | 
    
         
             
                    Formatador.display_table(filters, [:filter_name, :desc, :availability])
         
     | 
| 
       634 
634 
     | 
    
         
             
                  end
         
     | 
| 
       635 
635 
     | 
    
         | 
| 
       636 
     | 
    
         
            -
                  def purchase 
     | 
| 
       637 
     | 
    
         
            -
                     
     | 
| 
      
 636 
     | 
    
         
            +
                  def purchase(options)
         
     | 
| 
      
 637 
     | 
    
         
            +
                    @conn.purchase_reserved_instances_offering(options[:reserved_instances_offering_id], options[:instance_count])
         
     | 
| 
       638 
638 
     | 
    
         
             
                  end
         
     | 
| 
       639 
639 
     | 
    
         
             
                end # => ReservedInstances
         
     | 
| 
       640 
640 
     | 
    
         | 
| 
       641 
641 
     | 
    
         
             
                class Spot
         
     | 
| 
       642 
     | 
    
         
            -
                  def initialize 
     | 
| 
       643 
     | 
    
         
            -
                     
     | 
| 
      
 642 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 643 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       644 
644 
     | 
    
         
             
                  end
         
     | 
| 
       645 
645 
     | 
    
         | 
| 
       646 
646 
     | 
    
         
             
                  def describe_spot_requests
         
     | 
| 
       647 
     | 
    
         
            -
                     
     | 
| 
      
 647 
     | 
    
         
            +
                    @conn.spot_requests.table
         
     | 
| 
       648 
648 
     | 
    
         
             
                  end
         
     | 
| 
       649 
649 
     | 
    
         | 
| 
       650 
650 
     | 
    
         
             
                  def describe_spot_datafeed_subscription
         
     | 
| 
       651 
     | 
    
         
            -
                     
     | 
| 
      
 651 
     | 
    
         
            +
                    @conn.describe_spot_datafeed_subscription
         
     | 
| 
       652 
652 
     | 
    
         
             
                  end
         
     | 
| 
       653 
653 
     | 
    
         | 
| 
       654 
     | 
    
         
            -
                  def describe_spot_price_history 
     | 
| 
      
 654 
     | 
    
         
            +
                  def describe_spot_price_history(filters)
         
     | 
| 
       655 
655 
     | 
    
         
             
                    puts filters
         
     | 
| 
       656 
656 
     | 
    
         
             
                    response =  if filters.nil?
         
     | 
| 
       657 
     | 
    
         
            -
                                   
     | 
| 
      
 657 
     | 
    
         
            +
                                  @conn.describe_spot_price_history.body['spotPriceHistorySet']
         
     | 
| 
       658 
658 
     | 
    
         
             
                                else
         
     | 
| 
       659 
     | 
    
         
            -
                                   
     | 
| 
      
 659 
     | 
    
         
            +
                                  @conn.describe_spot_price_history(filters).body['spotPriceHistorySet']
         
     | 
| 
       660 
660 
     | 
    
         
             
                                end
         
     | 
| 
       661 
661 
     | 
    
         
             
                    Formatador.display_table(response)
         
     | 
| 
       662 
662 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -671,21 +671,21 @@ module Awscli 
     | 
|
| 
       671 
671 
     | 
    
         
             
                    Formatador.display_table(filters, [:filter_name, :desc])
         
     | 
| 
       672 
672 
     | 
    
         
             
                  end
         
     | 
| 
       673 
673 
     | 
    
         | 
| 
       674 
     | 
    
         
            -
                  def create_spot_datafeed_subsription 
     | 
| 
       675 
     | 
    
         
            -
                     
     | 
| 
      
 674 
     | 
    
         
            +
                  def create_spot_datafeed_subsription(bucket, prefix)
         
     | 
| 
      
 675 
     | 
    
         
            +
                    @conn.create_spot_datafeed_subscription(bucket, prefix)
         
     | 
| 
       676 
676 
     | 
    
         
             
                  end
         
     | 
| 
       677 
677 
     | 
    
         | 
| 
       678 
678 
     | 
    
         
             
                  def delete_spot_datafeed_subsription
         
     | 
| 
       679 
     | 
    
         
            -
                     
     | 
| 
      
 679 
     | 
    
         
            +
                    @conn.delete_spot_datafeed_subscription
         
     | 
| 
       680 
680 
     | 
    
         
             
                  end
         
     | 
| 
       681 
681 
     | 
    
         | 
| 
       682 
     | 
    
         
            -
                  def request_spot_instances 
     | 
| 
       683 
     | 
    
         
            -
                    sr =  
     | 
| 
      
 682 
     | 
    
         
            +
                  def request_spot_instances(options)
         
     | 
| 
      
 683 
     | 
    
         
            +
                    sr = @conn.spot_requests.create(options)
         
     | 
| 
       684 
684 
     | 
    
         
             
                    puts "Created spot request: #{sr.id}"
         
     | 
| 
       685 
685 
     | 
    
         
             
                  end
         
     | 
| 
       686 
686 
     | 
    
         | 
| 
       687 
     | 
    
         
            -
                  def cancel_spot_instance_requests 
     | 
| 
       688 
     | 
    
         
            -
                    sr =  
     | 
| 
      
 687 
     | 
    
         
            +
                  def cancel_spot_instance_requests(sid)
         
     | 
| 
      
 688 
     | 
    
         
            +
                    sr = @conn.spot_requests.get(sid)
         
     | 
| 
       689 
689 
     | 
    
         
             
                    abort "Cannot find spot request with id: #{sid}" unless sr
         
     | 
| 
       690 
690 
     | 
    
         
             
                    sr.destroy
         
     | 
| 
       691 
691 
     | 
    
         
             
                    puts "Deleted spot request: #{sid}"
         
     | 
| 
         @@ -693,21 +693,21 @@ module Awscli 
     | 
|
| 
       693 
693 
     | 
    
         
             
                end # => Spot
         
     | 
| 
       694 
694 
     | 
    
         | 
| 
       695 
695 
     | 
    
         
             
                class Vpc
         
     | 
| 
       696 
     | 
    
         
            -
                  def initialize 
     | 
| 
       697 
     | 
    
         
            -
                     
     | 
| 
      
 696 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 697 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       698 
698 
     | 
    
         
             
                  end
         
     | 
| 
       699 
699 
     | 
    
         | 
| 
       700 
700 
     | 
    
         
             
                  def list
         
     | 
| 
       701 
     | 
    
         
            -
                     
     | 
| 
      
 701 
     | 
    
         
            +
                    @conn.vpcs.table
         
     | 
| 
       702 
702 
     | 
    
         
             
                  end
         
     | 
| 
       703 
703 
     | 
    
         | 
| 
       704 
     | 
    
         
            -
                  def create 
     | 
| 
       705 
     | 
    
         
            -
                    vpc =  
     | 
| 
      
 704 
     | 
    
         
            +
                  def create(options)
         
     | 
| 
      
 705 
     | 
    
         
            +
                    vpc = @conn.vpcs.create(options)
         
     | 
| 
       706 
706 
     | 
    
         
             
                    puts "Created VPC: #{vpc.id}"
         
     | 
| 
       707 
707 
     | 
    
         
             
                  end
         
     | 
| 
       708 
708 
     | 
    
         | 
| 
       709 
     | 
    
         
            -
                  def delete 
     | 
| 
       710 
     | 
    
         
            -
                    vpc =  
     | 
| 
      
 709 
     | 
    
         
            +
                  def delete(vpc_id)
         
     | 
| 
      
 710 
     | 
    
         
            +
                    vpc = @conn.vpcs.get(vpc_id)
         
     | 
| 
       711 
711 
     | 
    
         
             
                    abort "cannot find vpc: #{vpc_id}" unless vpc
         
     | 
| 
       712 
712 
     | 
    
         
             
                    vpc.destroy
         
     | 
| 
       713 
713 
     | 
    
         
             
                    puts "Deleted VPC : #{vpc_id}"
         
     | 
| 
         @@ -715,21 +715,21 @@ module Awscli 
     | 
|
| 
       715 
715 
     | 
    
         
             
                end # => Vpc
         
     | 
| 
       716 
716 
     | 
    
         | 
| 
       717 
717 
     | 
    
         
             
                class Subnet
         
     | 
| 
       718 
     | 
    
         
            -
                  def initialize 
     | 
| 
       719 
     | 
    
         
            -
                     
     | 
| 
      
 718 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 719 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       720 
720 
     | 
    
         
             
                  end
         
     | 
| 
       721 
721 
     | 
    
         | 
| 
       722 
722 
     | 
    
         
             
                  def list
         
     | 
| 
       723 
     | 
    
         
            -
                     
     | 
| 
      
 723 
     | 
    
         
            +
                    @conn.subnets.table
         
     | 
| 
       724 
724 
     | 
    
         
             
                  end
         
     | 
| 
       725 
725 
     | 
    
         | 
| 
       726 
     | 
    
         
            -
                  def create 
     | 
| 
       727 
     | 
    
         
            -
                    subnet =  
     | 
| 
      
 726 
     | 
    
         
            +
                  def create(options)
         
     | 
| 
      
 727 
     | 
    
         
            +
                    subnet = @conn.subnets.create(options)
         
     | 
| 
       728 
728 
     | 
    
         
             
                    puts "Created Subnet: #{subnet.id}"
         
     | 
| 
       729 
729 
     | 
    
         
             
                  end
         
     | 
| 
       730 
730 
     | 
    
         | 
| 
       731 
     | 
    
         
            -
                  def delete 
     | 
| 
       732 
     | 
    
         
            -
                    subnet =  
     | 
| 
      
 731 
     | 
    
         
            +
                  def delete(subnet_id)
         
     | 
| 
      
 732 
     | 
    
         
            +
                    subnet = @conn.subnets.get(subnet_id)
         
     | 
| 
       733 
733 
     | 
    
         
             
                    abort "Cannot find subnet: #{subnet_id}" unless subnet
         
     | 
| 
       734 
734 
     | 
    
         
             
                    subnet.destroy
         
     | 
| 
       735 
735 
     | 
    
         
             
                    puts "Deleted subnet: #{subnet_id}"
         
     | 
| 
         @@ -737,57 +737,57 @@ module Awscli 
     | 
|
| 
       737 
737 
     | 
    
         
             
                end # => Subnet
         
     | 
| 
       738 
738 
     | 
    
         | 
| 
       739 
739 
     | 
    
         
             
                class NetworkAcl
         
     | 
| 
       740 
     | 
    
         
            -
                  def initialize 
     | 
| 
       741 
     | 
    
         
            -
                     
     | 
| 
      
 740 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 741 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       742 
742 
     | 
    
         
             
                  end
         
     | 
| 
       743 
743 
     | 
    
         | 
| 
       744 
744 
     | 
    
         
             
                  def list
         
     | 
| 
       745 
     | 
    
         
            -
                    puts  
     | 
| 
      
 745 
     | 
    
         
            +
                    puts 'Listing Network Acls'
         
     | 
| 
       746 
746 
     | 
    
         
             
                  end
         
     | 
| 
       747 
747 
     | 
    
         | 
| 
       748 
748 
     | 
    
         
             
                end # => NetworkAcl
         
     | 
| 
       749 
749 
     | 
    
         | 
| 
       750 
750 
     | 
    
         
             
                class NetworkInterfaces
         
     | 
| 
       751 
     | 
    
         
            -
                  def initialize 
     | 
| 
       752 
     | 
    
         
            -
                     
     | 
| 
      
 751 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 752 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       753 
753 
     | 
    
         
             
                  end
         
     | 
| 
       754 
754 
     | 
    
         | 
| 
       755 
755 
     | 
    
         
             
                  def list
         
     | 
| 
       756 
     | 
    
         
            -
                     
     | 
| 
      
 756 
     | 
    
         
            +
                    @conn.network_interfaces.table
         
     | 
| 
       757 
757 
     | 
    
         
             
                  end
         
     | 
| 
       758 
758 
     | 
    
         | 
| 
       759 
     | 
    
         
            -
                  def create 
     | 
| 
       760 
     | 
    
         
            -
                    nic =  
     | 
| 
      
 759 
     | 
    
         
            +
                  def create(options)
         
     | 
| 
      
 760 
     | 
    
         
            +
                    nic = @conn.network_interfaces.create(options)
         
     | 
| 
       761 
761 
     | 
    
         
             
                    puts "Create network interface #{nic.network_interface_id}"
         
     | 
| 
       762 
762 
     | 
    
         
             
                  end
         
     | 
| 
       763 
763 
     | 
    
         | 
| 
       764 
     | 
    
         
            -
                  def delete 
     | 
| 
       765 
     | 
    
         
            -
                    nic =  
     | 
| 
      
 764 
     | 
    
         
            +
                  def delete(nic_id)
         
     | 
| 
      
 765 
     | 
    
         
            +
                    nic = @conn.network_interfaces.get(nic_id)
         
     | 
| 
       766 
766 
     | 
    
         
             
                    abort "Cannot find nic with id: #{nic_id}" unless nic
         
     | 
| 
       767 
767 
     | 
    
         
             
                    nic.destroy
         
     | 
| 
       768 
768 
     | 
    
         
             
                    puts "Deleted network interface #{nic_id}"
         
     | 
| 
       769 
769 
     | 
    
         
             
                  end
         
     | 
| 
       770 
770 
     | 
    
         | 
| 
       771 
     | 
    
         
            -
                  def attach 
     | 
| 
       772 
     | 
    
         
            -
                     
     | 
| 
      
 771 
     | 
    
         
            +
                  def attach(nic_id, instance_id, device_index)
         
     | 
| 
      
 772 
     | 
    
         
            +
                    @conn.attach_network_interface(nic_id, instance_id, device_index)
         
     | 
| 
       773 
773 
     | 
    
         
             
                    puts "Attached Network Interface: #{nic_id} to instance: #{instance_id}"
         
     | 
| 
       774 
774 
     | 
    
         
             
                  end
         
     | 
| 
       775 
775 
     | 
    
         | 
| 
       776 
     | 
    
         
            -
                  def deattach 
     | 
| 
       777 
     | 
    
         
            -
                     
     | 
| 
       778 
     | 
    
         
            -
                    puts " 
     | 
| 
      
 776 
     | 
    
         
            +
                  def deattach(attachement_id, force)
         
     | 
| 
      
 777 
     | 
    
         
            +
                    @conn.detach_network_interface attachement_id, force
         
     | 
| 
      
 778 
     | 
    
         
            +
                    puts "Detached Network Interface with attachement_id: #{attachement_id}"
         
     | 
| 
       779 
779 
     | 
    
         
             
                  end
         
     | 
| 
       780 
780 
     | 
    
         | 
| 
       781 
     | 
    
         
            -
                  def modify_attribute 
     | 
| 
      
 781 
     | 
    
         
            +
                  def modify_attribute(options)
         
     | 
| 
       782 
782 
     | 
    
         
             
                    case options[:attribute]
         
     | 
| 
       783 
783 
     | 
    
         
             
                    when 'description'
         
     | 
| 
       784 
     | 
    
         
            -
                       
     | 
| 
      
 784 
     | 
    
         
            +
                      @conn.modify_network_interface_attribute(options[:network_interface_id], 'description', options[:description])
         
     | 
| 
       785 
785 
     | 
    
         
             
                    when 'groupSet'
         
     | 
| 
       786 
     | 
    
         
            -
                       
     | 
| 
      
 786 
     | 
    
         
            +
                      @conn.modify_network_interface_attribute(options[:network_interface_id], 'groupSet', options[:group_set])
         
     | 
| 
       787 
787 
     | 
    
         
             
                    when 'sourceDestCheck'
         
     | 
| 
       788 
     | 
    
         
            -
                       
     | 
| 
      
 788 
     | 
    
         
            +
                      @conn.modify_network_interface_attribute(options[:network_interface_id], 'sourceDestCheck', options[:source_dest_check])
         
     | 
| 
       789 
789 
     | 
    
         
             
                    when 'attachment'
         
     | 
| 
       790 
     | 
    
         
            -
                       
     | 
| 
      
 790 
     | 
    
         
            +
                      @conn.modify_network_interface_attribute(options[:network_interface_id], 'attachment', options[:attachment])
         
     | 
| 
       791 
791 
     | 
    
         
             
                    else
         
     | 
| 
       792 
792 
     | 
    
         
             
                      abort "Invalid attribute: #{options[:attribute]}"
         
     | 
| 
       793 
793 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -795,56 +795,56 @@ module Awscli 
     | 
|
| 
       795 
795 
     | 
    
         
             
                end # => NetworkInterfaces
         
     | 
| 
       796 
796 
     | 
    
         | 
| 
       797 
797 
     | 
    
         
             
                class InternetGateways
         
     | 
| 
       798 
     | 
    
         
            -
                  def initialize 
     | 
| 
       799 
     | 
    
         
            -
                     
     | 
| 
      
 798 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 799 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       800 
800 
     | 
    
         
             
                  end
         
     | 
| 
       801 
801 
     | 
    
         | 
| 
       802 
802 
     | 
    
         
             
                  def list
         
     | 
| 
       803 
     | 
    
         
            -
                     
     | 
| 
      
 803 
     | 
    
         
            +
                    @conn.internet_gateways.table
         
     | 
| 
       804 
804 
     | 
    
         
             
                  end
         
     | 
| 
       805 
805 
     | 
    
         | 
| 
       806 
806 
     | 
    
         
             
                  def create
         
     | 
| 
       807 
     | 
    
         
            -
                    gw =  
     | 
| 
      
 807 
     | 
    
         
            +
                    gw = @conn.internet_gateways.create
         
     | 
| 
       808 
808 
     | 
    
         
             
                    puts "Created Internet Gateway: #{gw.id}"
         
     | 
| 
       809 
809 
     | 
    
         
             
                  end
         
     | 
| 
       810 
810 
     | 
    
         | 
| 
       811 
     | 
    
         
            -
                  def delete 
     | 
| 
       812 
     | 
    
         
            -
                    gw =  
     | 
| 
      
 811 
     | 
    
         
            +
                  def delete(gwid)
         
     | 
| 
      
 812 
     | 
    
         
            +
                    gw = @conn.internet_gateways.get(gwid)
         
     | 
| 
       813 
813 
     | 
    
         
             
                    gw.destroy
         
     | 
| 
       814 
814 
     | 
    
         
             
                    puts "Deleted Internet Gateway: #{gwid}"
         
     | 
| 
       815 
815 
     | 
    
         
             
                  end
         
     | 
| 
       816 
816 
     | 
    
         | 
| 
       817 
     | 
    
         
            -
                  def attach 
     | 
| 
       818 
     | 
    
         
            -
                     
     | 
| 
      
 817 
     | 
    
         
            +
                  def attach(gwid, vpcid)
         
     | 
| 
      
 818 
     | 
    
         
            +
                    @conn.internet_gateways.attach(gwid, vpcid)
         
     | 
| 
       819 
819 
     | 
    
         
             
                    puts "Attached InternetGateway: #{gwid} to VPC: #{vpcid}"
         
     | 
| 
       820 
820 
     | 
    
         
             
                  end
         
     | 
| 
       821 
821 
     | 
    
         | 
| 
       822 
     | 
    
         
            -
                  def deattach 
     | 
| 
       823 
     | 
    
         
            -
                     
     | 
| 
       824 
     | 
    
         
            -
                    puts " 
     | 
| 
      
 822 
     | 
    
         
            +
                  def deattach(gwid, vpcid)
         
     | 
| 
      
 823 
     | 
    
         
            +
                    @conn.internet_gateways.deattach(gwid, vpcid)
         
     | 
| 
      
 824 
     | 
    
         
            +
                    puts "Detached InternetGateway: #{gwid} from VPC: #{vpcid}"
         
     | 
| 
       825 
825 
     | 
    
         
             
                  end
         
     | 
| 
       826 
826 
     | 
    
         
             
                end # => InternetGateways
         
     | 
| 
       827 
827 
     | 
    
         | 
| 
       828 
828 
     | 
    
         
             
                class Dhcp
         
     | 
| 
       829 
     | 
    
         
            -
                  def initialize 
     | 
| 
       830 
     | 
    
         
            -
                     
     | 
| 
      
 829 
     | 
    
         
            +
                  def initialize(connection)
         
     | 
| 
      
 830 
     | 
    
         
            +
                    @conn = connection
         
     | 
| 
       831 
831 
     | 
    
         
             
                  end
         
     | 
| 
       832 
832 
     | 
    
         | 
| 
       833 
833 
     | 
    
         
             
                  def list
         
     | 
| 
       834 
     | 
    
         
            -
                     
     | 
| 
      
 834 
     | 
    
         
            +
                    @conn.dhcp_options.table
         
     | 
| 
       835 
835 
     | 
    
         
             
                  end
         
     | 
| 
       836 
836 
     | 
    
         | 
| 
       837 
     | 
    
         
            -
                  def create 
     | 
| 
       838 
     | 
    
         
            -
                     
     | 
| 
      
 837 
     | 
    
         
            +
                  def create(options)
         
     | 
| 
      
 838 
     | 
    
         
            +
                    @conn.dhcp_options.create(options)
         
     | 
| 
       839 
839 
     | 
    
         
             
                  end
         
     | 
| 
       840 
840 
     | 
    
         | 
| 
       841 
     | 
    
         
            -
                  def delete 
     | 
| 
       842 
     | 
    
         
            -
                    dhcp =  
     | 
| 
      
 841 
     | 
    
         
            +
                  def delete(dhcp_id)
         
     | 
| 
      
 842 
     | 
    
         
            +
                    dhcp = @conn.dhcp_options(dhcp_id)
         
     | 
| 
       843 
843 
     | 
    
         
             
                    dhcp.destroy
         
     | 
| 
       844 
844 
     | 
    
         
             
                  end
         
     | 
| 
       845 
845 
     | 
    
         | 
| 
       846 
     | 
    
         
            -
                  def associate 
     | 
| 
       847 
     | 
    
         
            -
                     
     | 
| 
      
 846 
     | 
    
         
            +
                  def associate(dhcp_id, vpc_id)
         
     | 
| 
      
 847 
     | 
    
         
            +
                    @conn.dhcp_options.attach(dhcp_id, vpc_id)
         
     | 
| 
       848 
848 
     | 
    
         
             
                  end
         
     | 
| 
       849 
849 
     | 
    
         
             
                end # => Dhcp
         
     | 
| 
       850 
850 
     | 
    
         |