# File lib/chef/knife/rackspace_server_create.rb, line 64
      def run 
        require 'fog'
        require 'highline'
        require 'net/ssh/multi'
        require 'readline'

        connection = Fog::Rackspace::Servers.new(
          :rackspace_api_key => Chef::Config[:knife][:rackspace_api_key],
          :rackspace_username => Chef::Config[:knife][:rackspace_api_username] 
        )

        server = connection.servers.new
       
        server.flavor_id = config[:flavor]
        server.image_id = config[:image]
        server.name = config[:server_name]
        server.personality = [
          { 
            'path' => '/etc/install-chef',
            'contents' => "#!/bin/bash\n# Customized rc.local for chef installation\n\nif [ ! -f /usr/bin/chef-client ]; then\napt-get update\napt-get install -y ruby ruby1.8-dev build-essential wget libruby-extras libruby1.8-extras\ncd /tmp\nwget http://rubyforge.org/frs/download.php/69365/rubygems-1.3.6.tgz\ntar xvf rubygems-1.3.6.tgz\ncd rubygems-1.3.6\nruby setup.rb\ncp /usr/bin/gem1.8 /usr/bin/gem\ngem install chef ohai --no-rdoc --no-ri --verbose\nfi\n\nexit 0\n"
          },
          { 
            'path' => "/etc/chef/validation.pem",
            'contents' => IO.read(Chef::Config[:validation_key])
          },
          { 
            'path' => "/etc/chef/client.rb",
            'contents' => "log_level        :info\nlog_location     STDOUT\nchef_server_url  \"\#{Chef::Config[:chef_server_url]}\"\nvalidation_client_name \"\#{Chef::Config[:validation_client_name]}\"\n"
          },
          {
            'path' => "/etc/chef/first-boot.json",
            'contents' => { "run_list" => @name_args }.to_json
          },
        ]

        server.save

        $stdout.sync = true

        puts "#{h.color("Name", :cyan)}: #{server.name}"
        puts "#{h.color("Flavor", :cyan)}: #{server.flavor_id}"
        puts "#{h.color("Image", :cyan)}: #{server.image_id}"
        puts "#{h.color("Public Address", :cyan)}: #{server.addresses["public"]}"
        puts "#{h.color("Private Address", :cyan)}: #{server.addresses["private"]}"
        puts "#{h.color("Password", :cyan)}: #{server.password}"
     
        print "\n#{h.color("Requesting server", :magenta)}"
        saved_password = server.password

        # wait for it to be ready to do stuff
        server.wait_for { print "."; ready? }

        puts "\nServer ready, waiting 15 seconds to bootstrap."
        sleep 15

        puts "\nBootstrapping #{h.color(server.name, :bold)}..."

        ssh = Chef::Knife::Ssh.new
        ssh.name_args = [ server.addresses["public"][0], "/bin/bash /etc/install-chef && /usr/bin/chef-client -j /etc/chef/first-boot.json" ]
        ssh.config[:ssh_user] = "root"
        ssh.config[:manual] = true
        ssh.config[:ssh_password] = saved_password
        ssh.password = saved_password
        ssh.run

      end