rig 0.4.5 → 0.5.0
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.
- data/Gemfile +1 -0
- data/conf/accounts/default.yml +3 -3
- data/conf/config.yml +33 -6
- data/conf/plugins/chef.rb +105 -0
- data/conf/plugins/mongo.rb +135 -0
- data/{lib/rig/command/database.rb → conf/plugins/mysql.rb} +12 -8
- data/conf/plugins/scout.rb +81 -0
- data/conf/userdata/chef/userdata.sh.erb +7 -1
- data/lib/rig.rb +11 -1
- data/lib/rig/account.rb +43 -0
- data/lib/rig/command.rb +92 -41
- data/lib/rig/command/abstract.rb +1 -2
- data/lib/rig/command/balancer.rb +102 -0
- data/lib/rig/command/dns.rb +47 -0
- data/lib/rig/command/environment.rb +67 -0
- data/lib/rig/command/keypair.rb +15 -0
- data/lib/rig/command/server.rb +181 -0
- data/lib/rig/config.rb +35 -105
- data/lib/rig/log.rb +66 -0
- data/lib/rig/model/account.rb +1 -1
- data/lib/rig/model/connection.rb +13 -6
- data/lib/rig/model/environment.rb +12 -8
- data/lib/rig/model/instance.rb +3 -8
- data/lib/rig/model/template.rb +1 -1
- data/lib/rig/model/userdata.rb +1 -1
- data/lib/rig/plugin.rb +61 -0
- data/lib/rig/version.rb +2 -2
- metadata +15 -35
- data/lib/rig/chef.rb +0 -59
- data/lib/rig/command/balancer/destroy.rb +0 -16
- data/lib/rig/command/balancer/list.rb +0 -30
- data/lib/rig/command/balancer/listener.rb +0 -31
- data/lib/rig/command/balancer/main.rb +0 -40
- data/lib/rig/command/balancer/view.rb +0 -19
- data/lib/rig/command/dns/create.rb +0 -19
- data/lib/rig/command/dns/destroy.rb +0 -16
- data/lib/rig/command/dns/edit.rb +0 -20
- data/lib/rig/command/dns/list.rb +0 -21
- data/lib/rig/command/dns/main.rb +0 -13
- data/lib/rig/command/environment/create.rb +0 -21
- data/lib/rig/command/environment/destroy.rb +0 -18
- data/lib/rig/command/environment/list.rb +0 -31
- data/lib/rig/command/environment/main.rb +0 -15
- data/lib/rig/command/environment/protect.rb +0 -22
- data/lib/rig/command/instance/create.rb +0 -60
- data/lib/rig/command/instance/destroy.rb +0 -19
- data/lib/rig/command/instance/list.rb +0 -26
- data/lib/rig/command/instance/main.rb +0 -16
- data/lib/rig/command/instance/tag/get.rb +0 -20
- data/lib/rig/command/instance/tag/main.rb +0 -14
- data/lib/rig/command/instance/tag/remove.rb +0 -44
- data/lib/rig/command/instance/tag/set.rb +0 -46
- data/lib/rig/command/instance/view.rb +0 -20
- data/lib/rig/command/keypair/list.rb +0 -14
- data/lib/rig/command/keypair/main.rb +0 -11
- data/lib/rig/command/main.rb +0 -90
- data/lib/rig/model/database.rb +0 -23
- data/lib/rig/model/database/base.rb +0 -11
- data/lib/rig/model/database/mongodb.rb +0 -70
- data/lib/rig/model/database/mysql.rb +0 -12
| @@ -1,19 +0,0 @@ | |
| 1 | 
            -
            require 'rig'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Rig
         | 
| 4 | 
            -
              module Command
         | 
| 5 | 
            -
                module Instance
         | 
| 6 | 
            -
                class Destroy < Abstract
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                  parameter "NAME", "the name of the instance to connect to"
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                  def execute
         | 
| 11 | 
            -
                    list = Rig::Model::Instance.find(name)
         | 
| 12 | 
            -
                    Rig::Model::Instance.destroy(list)
         | 
| 13 | 
            -
                  end
         | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
                end
         | 
| 16 | 
            -
              end
         | 
| 17 | 
            -
            end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            Rig::Command::Instance::Main.subcommand 'destroy', 'destroy (terminate) instance', Rig::Command::Instance::Destroy
         | 
| @@ -1,26 +0,0 @@ | |
| 1 | 
            -
            require 'rig'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Rig
         | 
| 4 | 
            -
              module Command
         | 
| 5 | 
            -
                module Instance
         | 
| 6 | 
            -
                  class List < Abstract
         | 
| 7 | 
            -
                    include Options::ShowAll
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                    option %w{-l --long}, :flag, "show more information in table"
         | 
| 10 | 
            -
                    parameter "[ENV]", "environment"
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                    def execute
         | 
| 13 | 
            -
                      connection = Rig::Connection.compute
         | 
| 14 | 
            -
                      filters = {}
         | 
| 15 | 
            -
                      filters["instance-state-name"] = "running" unless showall?
         | 
| 16 | 
            -
                      filters["tag:Environment"] = env if env
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                      list = connection.servers.all(filters)
         | 
| 19 | 
            -
                      instance_list(list, long?)
         | 
| 20 | 
            -
                    end
         | 
| 21 | 
            -
                  end
         | 
| 22 | 
            -
                end
         | 
| 23 | 
            -
              end
         | 
| 24 | 
            -
            end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
            Rig::Command::Instance::Main.subcommand 'list', 'List instances', Rig::Command::Instance::List
         | 
| @@ -1,16 +0,0 @@ | |
| 1 | 
            -
            module Rig
         | 
| 2 | 
            -
              module Command
         | 
| 3 | 
            -
                module Instance
         | 
| 4 | 
            -
                  class Main < Abstract
         | 
| 5 | 
            -
                    #subcommand 'list', 'List instances', InstanceList
         | 
| 6 | 
            -
                    #subcommand 'create', 'Create an instance', InstanceCreate
         | 
| 7 | 
            -
                    #subcommand 'ssh', 'Connect to instance', InstanceSsh
         | 
| 8 | 
            -
                    #subcommand 'tag', 'Manage tags on instance', InstanceTag
         | 
| 9 | 
            -
                    self.default_subcommand = "list"
         | 
| 10 | 
            -
                  end
         | 
| 11 | 
            -
                end
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
            end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            Rig::Command::Main.subcommand 'instance', 'Commands related to instances', Rig::Command::Instance::Main
         | 
| 16 | 
            -
             | 
| @@ -1,20 +0,0 @@ | |
| 1 | 
            -
            module Rig
         | 
| 2 | 
            -
              module Command
         | 
| 3 | 
            -
                module Instance
         | 
| 4 | 
            -
                  module Tag
         | 
| 5 | 
            -
                    class Get < Abstract
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                      parameter "NAME", "the name of the instance to get tags for"
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                      def execute
         | 
| 10 | 
            -
                        instance = Rig::Model::Instance.find(name)
         | 
| 11 | 
            -
                        raise "instance not found #{name}" unless instance
         | 
| 12 | 
            -
                        puts "#{instance.tags.inspect}"
         | 
| 13 | 
            -
                      end
         | 
| 14 | 
            -
                    end
         | 
| 15 | 
            -
                  end
         | 
| 16 | 
            -
                end
         | 
| 17 | 
            -
              end
         | 
| 18 | 
            -
            end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
            Rig::Command::Instance::Tag::Main.subcommand 'get', 'get tag(s) for this instance', Rig::Command::Instance::Tag::Get
         | 
| @@ -1,44 +0,0 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            module Rig
         | 
| 3 | 
            -
              module Command
         | 
| 4 | 
            -
                module Instance
         | 
| 5 | 
            -
                  module Tag
         | 
| 6 | 
            -
                    class Remove < Abstract
         | 
| 7 | 
            -
                      include Options::Instance
         | 
| 8 | 
            -
                      include Options::InstanceName
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                      parameter "TAG", "tag key to remove", :attribute_name => :raw_tag
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                      # TODO: fix this to use Model instead
         | 
| 13 | 
            -
                      def execute
         | 
| 14 | 
            -
                        unless iname || iid
         | 
| 15 | 
            -
                          raise "Must set either instance name or instance id (-iname or -iid)"
         | 
| 16 | 
            -
                        end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                        connection = Rig::Connection.compute
         | 
| 19 | 
            -
                        if iid
         | 
| 20 | 
            -
                          instance = connection.servers.get(iid)
         | 
| 21 | 
            -
                        else
         | 
| 22 | 
            -
                          list = connection.servers.all({"tag:Name" => iname})
         | 
| 23 | 
            -
                          if list.count > 1
         | 
| 24 | 
            -
                            puts "there is more than one instance that matches:"
         | 
| 25 | 
            -
                            instance_list(list)
         | 
| 26 | 
            -
                            return
         | 
| 27 | 
            -
                          end
         | 
| 28 | 
            -
                          instance = list.first
         | 
| 29 | 
            -
                        end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                        unless instance
         | 
| 32 | 
            -
                          puts "could not find instance"
         | 
| 33 | 
            -
                          return
         | 
| 34 | 
            -
                        end
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                        ap connection.delete_tags(instance.id, raw_tag => instance.tags[raw_tag])
         | 
| 37 | 
            -
                      end
         | 
| 38 | 
            -
                    end
         | 
| 39 | 
            -
                  end
         | 
| 40 | 
            -
                end
         | 
| 41 | 
            -
              end
         | 
| 42 | 
            -
            end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
            Rig::Command::Instance::Tag::Main.subcommand 'rm', 'remove tag(s) for this instance', Rig::Command::Instance::Tag::Remove
         | 
| @@ -1,46 +0,0 @@ | |
| 1 | 
            -
            module Rig
         | 
| 2 | 
            -
              module Command
         | 
| 3 | 
            -
                module Instance
         | 
| 4 | 
            -
                  module Tag
         | 
| 5 | 
            -
                    class Set < Abstract
         | 
| 6 | 
            -
                      include Options::Instance
         | 
| 7 | 
            -
                      include Options::InstanceName
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                      parameter "TAGS ...", "tags of the form key:value", :attribute_name => :raw_tags
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                      def execute
         | 
| 12 | 
            -
                        unless iname || iid
         | 
| 13 | 
            -
                          raise "Must set either instance name or instance id (-iname or -iid)"
         | 
| 14 | 
            -
                        end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                        connection = Rig::Connection.compute
         | 
| 17 | 
            -
                        if iid
         | 
| 18 | 
            -
                          instance = connection.servers.get(iid)
         | 
| 19 | 
            -
                        else
         | 
| 20 | 
            -
                          list = connection.servers.all({"tag:Name" => iname})
         | 
| 21 | 
            -
                          if list.count > 1
         | 
| 22 | 
            -
                            puts "there is more than one instance that matches:"
         | 
| 23 | 
            -
                            instance_list(list)
         | 
| 24 | 
            -
                            return
         | 
| 25 | 
            -
                          end
         | 
| 26 | 
            -
                          instance = list.first
         | 
| 27 | 
            -
                        end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                        unless instance
         | 
| 30 | 
            -
                          puts "could not find instance"
         | 
| 31 | 
            -
                          return
         | 
| 32 | 
            -
                        end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                        raw_tags.each do |s|
         | 
| 35 | 
            -
                          (k,v) = s.split(':',2)
         | 
| 36 | 
            -
                          #tags[k] = v if k && v
         | 
| 37 | 
            -
                          connection.create_tags(instance.id, k => v)
         | 
| 38 | 
            -
                        end
         | 
| 39 | 
            -
                      end
         | 
| 40 | 
            -
                    end
         | 
| 41 | 
            -
                  end
         | 
| 42 | 
            -
                end
         | 
| 43 | 
            -
              end
         | 
| 44 | 
            -
            end
         | 
| 45 | 
            -
             | 
| 46 | 
            -
            Rig::Command::Instance::Tag::Main.subcommand 'set', 'set tag(s) for this instance', Rig::Command::Instance::Tag::Set
         | 
| @@ -1,20 +0,0 @@ | |
| 1 | 
            -
            module Rig
         | 
| 2 | 
            -
              module Command
         | 
| 3 | 
            -
                module Instance
         | 
| 4 | 
            -
                  class View < Abstract
         | 
| 5 | 
            -
                    include Options::ShowAll
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                    # TODO: something wrong here, view is showing all instances
         | 
| 8 | 
            -
                    parameter "NAME", "name of instance"
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                    def execute
         | 
| 11 | 
            -
                      list = Rig::Model::Instance.find(name)
         | 
| 12 | 
            -
                      list.each do |item|
         | 
| 13 | 
            -
                        ap item.attributes
         | 
| 14 | 
            -
                      end
         | 
| 15 | 
            -
                    end
         | 
| 16 | 
            -
                  end
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
              end
         | 
| 19 | 
            -
            end
         | 
| 20 | 
            -
            Rig::Command::Instance::Main.subcommand 'view', 'view instances', Rig::Command::Instance::View
         | 
| @@ -1,14 +0,0 @@ | |
| 1 | 
            -
            module Rig
         | 
| 2 | 
            -
              module Command
         | 
| 3 | 
            -
                module Keypair
         | 
| 4 | 
            -
                  class List < Abstract
         | 
| 5 | 
            -
                    def execute
         | 
| 6 | 
            -
                      connection = Rig::Connection.compute
         | 
| 7 | 
            -
                      list = connection.key_pairs.all
         | 
| 8 | 
            -
                      puts list.inspect
         | 
| 9 | 
            -
                    end
         | 
| 10 | 
            -
                  end
         | 
| 11 | 
            -
                end
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
            end
         | 
| 14 | 
            -
            Rig::Command::Keypair::Main.subcommand 'list', 'list keypairs', Rig::Command::Keypair::List
         | 
    
        data/lib/rig/command/main.rb
    DELETED
    
    | @@ -1,90 +0,0 @@ | |
| 1 | 
            -
            require 'awesome_print'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Rig
         | 
| 4 | 
            -
              module Command
         | 
| 5 | 
            -
                class Main < Abstract
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                  subcommand "chef", "test chef configuration" do
         | 
| 8 | 
            -
                    def execute
         | 
| 9 | 
            -
                      raise "chef not configured" unless Rig.config[:chef]
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                      list = Rig::Chef.client_list
         | 
| 12 | 
            -
                      rows = []
         | 
| 13 | 
            -
                      list.each do |c|
         | 
| 14 | 
            -
                        rows << c
         | 
| 15 | 
            -
                      end
         | 
| 16 | 
            -
                      print_table(%w{Name Location}, rows)
         | 
| 17 | 
            -
                    end
         | 
| 18 | 
            -
                  end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                  def merge_file(src, dest)
         | 
| 21 | 
            -
                    old = YAML.load_file(dest)
         | 
| 22 | 
            -
                    FileUtils.mv(dest, "#{dest}.bak.#{Time.now.to_i}")
         | 
| 23 | 
            -
                    new = YAML.load_file(src)
         | 
| 24 | 
            -
                    new.merge!(old)
         | 
| 25 | 
            -
                    File.open(dest, "w") {|f| f.write(new.to_yaml)}
         | 
| 26 | 
            -
                  end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                  subcommand "userdata", "test userdata" do
         | 
| 29 | 
            -
                    parameter "NAME", "name of server"
         | 
| 30 | 
            -
                    parameter "ROLE", "role of server"
         | 
| 31 | 
            -
                    parameter "ENVIRONMENT", "environment of server"
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                    def execute
         | 
| 34 | 
            -
                      userdata = Rig::Model::Userdata.create(name, role, environment)
         | 
| 35 | 
            -
                      puts "USERDATA:\n#{userdata}"
         | 
| 36 | 
            -
                    end
         | 
| 37 | 
            -
                  end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                  subcommand "init", "initialize configuration directory" do
         | 
| 40 | 
            -
                    option %w{-f --force}, :flag, "force creation of files", :default => false
         | 
| 41 | 
            -
                    option %w{-d --directory}, "DIRECTORY", "configuration directory", :default => "~/.rig"
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                    def execute
         | 
| 44 | 
            -
                      dir = File.expand_path(ENV['RIG_CONFIG'] ? ENV['RIG_CONFIG'] : directory)
         | 
| 45 | 
            -
                      back = "#{dir}.bak.#{Time.now.to_i}"
         | 
| 46 | 
            -
                      conf = File.expand_path("../../../../conf", __FILE__)
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                      files = %w{
         | 
| 49 | 
            -
                        config.yml
         | 
| 50 | 
            -
                        accounts/default.yml
         | 
| 51 | 
            -
                        templates/solo.yml
         | 
| 52 | 
            -
                        templates/multi.yml
         | 
| 53 | 
            -
                        userdata/default/userdata.sh.erb
         | 
| 54 | 
            -
                        userdata/default/userdata.yml
         | 
| 55 | 
            -
                        userdata/chef/userdata.sh.erb
         | 
| 56 | 
            -
                        userdata/chef/userdata.yml
         | 
| 57 | 
            -
                        userdata/chef/validation.pem
         | 
| 58 | 
            -
                      }
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                      unless dir
         | 
| 61 | 
            -
                        puts "directory could not be found: tried environment variables RIG_CONFIG (#{ENV['RIG_CONFIG']}) and HOME (#{ENV['HOME']}"
         | 
| 62 | 
            -
                        exit(1)
         | 
| 63 | 
            -
                      end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                      if File.exists?(dir)
         | 
| 66 | 
            -
                        unless File.directory?(dir)
         | 
| 67 | 
            -
                          puts "moving old config #{dir} to #{back}"
         | 
| 68 | 
            -
                          FileUtils.mv(dir, new)
         | 
| 69 | 
            -
                        end
         | 
| 70 | 
            -
                      end
         | 
| 71 | 
            -
             | 
| 72 | 
            -
                      puts "[create] #{dir}/"
         | 
| 73 | 
            -
                      FileUtils.mkdir_p(dir)
         | 
| 74 | 
            -
             | 
| 75 | 
            -
                      files.each do |file|
         | 
| 76 | 
            -
                        src  = "#{conf}/#{file}"
         | 
| 77 | 
            -
                        dest = "#{dir}/#{file}"
         | 
| 78 | 
            -
                        FileUtils.mkdir_p(File.dirname(dest))
         | 
| 79 | 
            -
                        if File.exists?(dest) && !force?
         | 
| 80 | 
            -
                          puts "[skip] #{dest}"
         | 
| 81 | 
            -
                        else
         | 
| 82 | 
            -
                          puts "[create] #{dest}"
         | 
| 83 | 
            -
                          FileUtils.copy(src, dest)
         | 
| 84 | 
            -
                        end
         | 
| 85 | 
            -
                      end
         | 
| 86 | 
            -
                    end
         | 
| 87 | 
            -
                  end
         | 
| 88 | 
            -
                end
         | 
| 89 | 
            -
              end
         | 
| 90 | 
            -
            end
         | 
    
        data/lib/rig/model/database.rb
    DELETED
    
    | @@ -1,23 +0,0 @@ | |
| 1 | 
            -
            require 'rig/model/database/base'
         | 
| 2 | 
            -
            require 'rig/model/database/mongodb'
         | 
| 3 | 
            -
            require 'rig/model/database/mysql'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            module Rig
         | 
| 6 | 
            -
              module Model
         | 
| 7 | 
            -
                module Database
         | 
| 8 | 
            -
                  class << self
         | 
| 9 | 
            -
                    def new(opts)
         | 
| 10 | 
            -
                      provider = opts.delete(:provider)
         | 
| 11 | 
            -
                      case provider.downcase
         | 
| 12 | 
            -
                        when 'mongodb'
         | 
| 13 | 
            -
                          Rig::Model::Database::MongoDB.new(opts)
         | 
| 14 | 
            -
                        when 'mysql'
         | 
| 15 | 
            -
                          Rig::Model::Database::MySQL.new(opts)
         | 
| 16 | 
            -
                        else
         | 
| 17 | 
            -
                          raise "unknown database #{provider.inspect}"
         | 
| 18 | 
            -
                      end
         | 
| 19 | 
            -
                    end
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
              end
         | 
| 23 | 
            -
            end
         | 
| @@ -1,70 +0,0 @@ | |
| 1 | 
            -
            require 'rubygems'
         | 
| 2 | 
            -
            require 'mongo'
         | 
| 3 | 
            -
            require 'bson'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            module Rig
         | 
| 6 | 
            -
              module Model
         | 
| 7 | 
            -
                module Database
         | 
| 8 | 
            -
                  class MongoDB
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                    def initialize(opts)
         | 
| 11 | 
            -
                      @options = {
         | 
| 12 | 
            -
                          :host => "localhost",
         | 
| 13 | 
            -
                          :port => 27017,
         | 
| 14 | 
            -
                          :user => nil,
         | 
| 15 | 
            -
                          :pass => nil,
         | 
| 16 | 
            -
                          :admin_user => nil,
         | 
| 17 | 
            -
                          :admin_pass => nil
         | 
| 18 | 
            -
                      }.merge(opts)
         | 
| 19 | 
            -
                      connect
         | 
| 20 | 
            -
                    end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                    # accessors
         | 
| 23 | 
            -
                    def user; @options[:user]; end
         | 
| 24 | 
            -
                    def host; @options[:host]; end
         | 
| 25 | 
            -
                    def port; @options[:port]; end
         | 
| 26 | 
            -
                    def pass; @options[:pass]; end
         | 
| 27 | 
            -
                    def password; @options[:pass]; end
         | 
| 28 | 
            -
                    def admin_user; @options[:admin_user]; end
         | 
| 29 | 
            -
                    def admin_pass; @options[:admin_pass]; end
         | 
| 30 | 
            -
                    def admin_password; @options[:admin_pass]; end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                    def connect
         | 
| 33 | 
            -
                      @cxn ||= begin
         | 
| 34 | 
            -
                        Mongo::Connection.new(@options[:host], @options[:port])
         | 
| 35 | 
            -
                      end
         | 
| 36 | 
            -
                    end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                    def auth_admin
         | 
| 39 | 
            -
                      db = @cxn.db("admin")
         | 
| 40 | 
            -
                      db.authenticate(@options[:admin_user], @options[:admin_pass])
         | 
| 41 | 
            -
                    end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                    def all
         | 
| 44 | 
            -
                      begin
         | 
| 45 | 
            -
                        connect.database_info
         | 
| 46 | 
            -
                      rescue Mongo::OperationFailure => e
         | 
| 47 | 
            -
                        raise unless e.message =~ /need to login/
         | 
| 48 | 
            -
                        raise unless auth_admin
         | 
| 49 | 
            -
                        connect.database_info
         | 
| 50 | 
            -
                      rescue => e
         | 
| 51 | 
            -
                        puts "exception: <#{e.class}> #{e.message} at #{e.backtrace.first}"
         | 
| 52 | 
            -
                      end
         | 
| 53 | 
            -
                    end
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                    def create_database(name, user, pass)
         | 
| 56 | 
            -
                      db = connect.db("admin")
         | 
| 57 | 
            -
                      raise "failed to authenticate" unless db.authenticate(@options[:admin_user], @options[:admin_pass])
         | 
| 58 | 
            -
                      newdb = connect.db(name)
         | 
| 59 | 
            -
                      newdb.add_user(user, pass)
         | 
| 60 | 
            -
                    end
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                    def destroy_database(name)
         | 
| 63 | 
            -
                      db = connect.db("admin")
         | 
| 64 | 
            -
                      raise "failed to authenticate" unless db.authenticate(@options[:admin_user], @options[:admin_pass])
         | 
| 65 | 
            -
                      connect.drop_database(name)
         | 
| 66 | 
            -
                    end
         | 
| 67 | 
            -
                  end
         | 
| 68 | 
            -
                end
         | 
| 69 | 
            -
              end
         | 
| 70 | 
            -
            end
         |