lib/rudy/cli/aws/ec2/images.rb in solutious-rudy-0.8.5 vs lib/rudy/cli/aws/ec2/images.rb in solutious-rudy-0.9.0

- old
+ new

@@ -3,177 +3,49 @@ module Rudy; module CLI; module AWS; module EC2; class Images < Rudy::CLI::CommandBase - #def print_header - # puts @global.print_header, @@global.print_header - #end - - def images_valid? if @option.owner == 'self' raise "AWS_ACCOUNT_NUMBER not set" unless @@global.accountnum @option.owner = @@global.accountnum end true end def images - rimages = Rudy::AWS::EC2::Images.new(@@global.accesskey, @@global.secretkey, @@global.region) unless @option.all @option.owner ||= 'amazon' puts "Images owned by #{@option.owner.bright}" unless @argv.awsid end - images = rimages.list(@option.owner, @argv) || [] + images = Rudy::AWS::EC2::Images.list(@option.owner, @argv) || [] images.each do |img| puts @@global.verbose > 0 ? img.inspect : img.dump(@@global.format) end puts "No images" if images.empty? end - - ##def prepare_images_valid? - ## true - ##end - ##def prepare_images - ## opts = {} - ## opts[:id] = @option.instid if @option.instid - ## - ## puts "This will do the following:" - ## puts "- Clear bash history" - ## # NOTE: We can't delete the host keys here. Otherwise we can't create the image. - ## #puts "- Delete host SSH keys (this is permanent!)" - ## puts "" - ## - ## ## TODO: - ## ## ~/.rudy, /etc/motd, history -c, /etc/hosts, /var/log/rudy* - ## - ## execute_check(:medium) - ## - ## - ## # Options to be sent to Net::SSH - ## ssh_opts = { :user => @global.user || Rudy.sysinfo.user, :debug => STDERR } - ## if @@global.pkey - ## raise "Cannot find file #{@@global.pkey}" unless File.exists?(@@global.pkey) - ## raise InsecureKeyPermissions, @@global.pkey unless File.stat(@@global.pkey).mode == 33152 - ## ssh_opts[:keys] = @@global.pkey - ## end - ## - ## - ## rudy = Rudy::AWS::EC2::Instances.new(@@global.accesskey, @@global.secretkey, @@global.region) - ## lt = rudy.list_group(nil, :running, opts[:id]) do |inst| - ## - ## puts "Preparing #{inst.dns_public}..." - ## - ## # Open the connection and run the command - ## rbox = Rye::Box.new(inst.dns_public, ssh_opts) - ## - ## # We need to explicitly add the rm command for rbox so we - ## # can delete the SSH host keys. This is will force the instance - ## # to re-create it's SSH keys on first boot. - ## def rbox.rm(*args); cmd('rm', args); end - ## p ret = rbox.history(:c) - ## p ret.exit_code - ## p ret.stderr - ## p ret.stdout - ## - ## end - ## - ## puts "done" - ##end - def create_images_valid? - raise "No account number" unless @@global.accountnum - raise "No Amazon cert-***.pem" unless @@global.cert - raise "No Amazon pk-***.pem" unless @@global.privatekey - raise "You must supply a root keypair path" unless @@global.pkey - - @rinst = Rudy::AWS::EC2::Instances.new(@@global.accesskey, @@global.secretkey, @@global.region) - @rimages = Rudy::AWS::EC2::Images.new(@@global.accesskey, @@global.secretkey, @@global.region) - @s3 = Rudy::AWS::S3.new(@@global.accesskey, @@global.secretkey, @@global.region) - raise "No instances" unless @rinst.any? - raise "You must supply an S3 bucket name. See: 'rudy-s3 buckets'" unless @option.bucket - raise "You must supply an image name" unless @option.name - raise "The bucket '#{@option.bucket}' does not exist" unless @s3.bucket_exists?(@option.bucket) - true - end - - def create_images - opts = {} - opts[:id] = @option.instid if @option.instid - - @@global.user = 'root' - - puts "You may want to run rudy-ec2 #{@alias} --prepare first".bright - puts "NOTE 1: This process is currently Linux-only" - puts "NOTE 2: If you plan to create a public machine image, there are " - puts "additional steps to take to remove any sensitive information" - puts "before creating the image. See:" - puts "http://docs.amazonwebservices.com/AWSEC2/latest/DeveloperGuide/AESDG-chapter-sharingamis.html" - exit unless Annoy.pose_question(" Continue?\a ", /yes|y|ya|sure|you bet!/i, STDERR) - - # Options to be sent to Net::SSH - ssh_opts = { :user => @@global.user || Rudy.sysinfo.user, :debug => nil } - if @@global.pkey - raise "Cannot find file #{@@global.pkey}" unless File.exists?(@@global.pkey) - raise InsecureKeyPermissions, @@global.pkey unless File.stat(@@global.pkey).mode == 33152 - ssh_opts[:keys] = @@global.pkey - end - - lt = @rinst.list_group(nil, :running, opts[:id]) do |inst| - - puts inst.to_s - - # Open the connection and run the command - rbox = Rye::Box.new(inst.dns_public, ssh_opts) - def rbox.bundle_vol(*args); cmd('ec2-bundle-vol', args); end - def rbox.upload_vol(*args); cmd('ec2-upload-bundle', args); end - - rbox.upload(@@global.cert, @@global.privatekey, "/mnt") - rbox.touch("/root/firstrun") - - ## TODO: - ## We have to delete the host keys just before we run the bundle command. - ## The problem is that if we lose the connection we won't be able to connect - ## to the instance again. A better solution is to add the keys to the ignore - ## list for the bundle command. - ##ret = rbox.rm('/etc/ssh/ssh_host_*_key*') - - puts "Starting bundling process..." - - pkeyfile = File.basename(@@global.privatekey) - certfile = File.basename(@@global.cert) - - rbox.bundle_vol(:r, "i386", :p, @option.name, :k, "/mnt/#{pkeyfile}", :c, "/mnt/#{certfile}", :u, @@global.accountnum) - rbox.upload_vol(:b, @option.bucket, :m, "/tmp/#{@option.name}.manifest.xml", :a, @@global.accesskey, :s, @@global.secretkey) - - @rimages.register("#{@option.bucket}/#{@option.name}.manifest.xml") - - break - end - - end - def destroy_images_valid? unless @argv.ami && Rudy::Utils.is_id?(:image, @argv.ami) raise "Must supply an AMI ID (ami-XXXXXXX)" end - @rimages = Rudy::AWS::EC2::Images.new(@@global.accesskey, @@global.secretkey, @@global.region) + true end def destroy_images - puts @rimages.deregister(@argv.ami) ? "Done" : "Unknown error" + puts Rudy::AWS::EC2::Images.deregister(@argv.ami) ? "Done" : "Unknown error" end def register_images_valid? unless @argv.first raise "Must supply a valid manifest path (bucket/ami-name.manifest.xml)" end - @rimages = Rudy::AWS::EC2::Images.new(@@global.accesskey, @@global.secretkey, @@global.region) + true end def register_images - puts @rimages.register(@argv.first) + puts Rudy::AWS::EC2::Images.register(@argv.first) end end