hugo 0.1.11 → 0.2.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/lib/hugo/app.rb +104 -51
- data/lib/hugo/aws/ec2.rb +6 -3
- data/lib/hugo/aws/rds.rb +1 -1
- data/lib/hugo/balancer.rb +32 -0
- data/lib/hugo/cloud.rb +6 -6
- data/lib/hugo/database.rb +54 -2
- data/spec/lib/hugo/app_spec.rb +66 -2
- data/spec/lib/hugo/balancer_spec.rb +8 -0
- data/spec/lib/hugo/database_spec.rb +90 -25
- data/spec/lib/hugo_spec.rb +25 -0
- metadata +1 -1
    
        data/lib/hugo/app.rb
    CHANGED
    
    | @@ -3,9 +3,16 @@ module Hugo; end | |
| 3 3 | 
             
            class Hugo::App
         | 
| 4 4 | 
             
              include Singleton
         | 
| 5 5 | 
             
              include Hugo::Mixin::ParamsValidate
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              AMI = ENV['EC2_AMI_ID'] || 'ami-1515f67c'
         | 
| 8 | 
            +
              ZONE = "us-east-1c"
         | 
| 9 | 
            +
              TYPE = "m1.small"
         | 
| 10 | 
            +
              
         | 
| 6 11 |  | 
| 7 12 | 
             
              attr_accessor :dna
         | 
| 8 13 |  | 
| 14 | 
            +
              # How many servers do you want in your cloud
         | 
| 15 | 
            +
              # This function will give and take away servers
         | 
| 9 16 | 
             
              def servers(instances=1)
         | 
| 10 17 | 
             
                if lb
         | 
| 11 18 | 
             
                  if instances > lb.instances.length
         | 
| @@ -18,30 +25,50 @@ class Hugo::App | |
| 18 25 | 
             
                end
         | 
| 19 26 | 
             
              end
         | 
| 20 27 |  | 
| 28 | 
            +
              # Setup will install chef-solo on server instance
         | 
| 21 29 | 
             
              def setup
         | 
| 22 30 | 
             
                if lb
         | 
| 23 31 | 
             
                  lb.instances.each do |i|
         | 
| 24 32 | 
             
                    setup_ec2(i)
         | 
| 25 33 | 
             
                  end
         | 
| 26 34 | 
             
                else
         | 
| 27 | 
            -
                  puts instance
         | 
| 28 35 | 
             
                  setup_ec2(instance)
         | 
| 29 36 | 
             
                end
         | 
| 30 | 
            -
                puts "Setup Completed"
         | 
| 37 | 
            +
                # puts "Setup Completed"
         | 
| 31 38 | 
             
              end
         | 
| 32 39 |  | 
| 40 | 
            +
              # deploy will run you json with chef-sole against your cookbooks
         | 
| 33 41 | 
             
              def deploy
         | 
| 42 | 
            +
                raise ArgumentError, "app.key_name Required" unless key_name
         | 
| 43 | 
            +
                raise ArgumentError, "app.key_path Required" unless key_path
         | 
| 44 | 
            +
                raise ArgumentError, "app.cookbook Required" unless cookbook
         | 
| 45 | 
            +
                raise ArgumentError, "app.run_list Required" unless run_list
         | 
| 46 | 
            +
                
         | 
| 34 47 | 
             
                deploy_ec2
         | 
| 35 | 
            -
                puts "Deploy Completed"    
         | 
| 48 | 
            +
                #puts "Deploy Completed"    
         | 
| 36 49 | 
             
              end
         | 
| 37 50 |  | 
| 51 | 
            +
              # will kill all app servers
         | 
| 38 52 | 
             
              def destroy
         | 
| 39 | 
            -
                lb | 
| 40 | 
            -
                   | 
| 41 | 
            -
             | 
| 53 | 
            +
                if lb
         | 
| 54 | 
            +
                  lb.instances.each do |i|
         | 
| 55 | 
            +
                    Hugo::Aws::Ec2.find(i).destroy
         | 
| 56 | 
            +
                  end    
         | 
| 57 | 
            +
                else
         | 
| 58 | 
            +
                  Hugo::Aws::Ec2.find(instance).destroy
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
                
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
              
         | 
| 63 | 
            +
              def clear
         | 
| 64 | 
            +
                @key_name = nil
         | 
| 65 | 
            +
                @key_path = nil
         | 
| 66 | 
            +
                @cookbook = nil
         | 
| 67 | 
            +
                @run_list = nil
         | 
| 42 68 | 
             
              end
         | 
| 43 69 |  | 
| 44 70 |  | 
| 71 | 
            +
              # Dyanamically add recipes to your json
         | 
| 45 72 | 
             
              def add_recipe(name, options=nil)
         | 
| 46 73 | 
             
                run_list [] if run_list.nil?
         | 
| 47 74 | 
             
                run_list << "recipe[#{name}]"
         | 
| @@ -52,29 +79,34 @@ class Hugo::App | |
| 52 79 | 
             
                end
         | 
| 53 80 | 
             
              end
         | 
| 54 81 |  | 
| 82 | 
            +
              # Set the instance if you only are deploying one server
         | 
| 55 83 | 
             
              def instance(arg=nil)
         | 
| 56 84 | 
             
                set_or_return(:instance, arg, :kind_of => [String]) 
         | 
| 57 85 | 
             
              end
         | 
| 58 86 |  | 
| 87 | 
            +
              # Name of app - should relate to github repository
         | 
| 59 88 | 
             
              def name(arg=nil)
         | 
| 60 89 | 
             
                set_or_return(:name, arg, :kind_of => [String]) 
         | 
| 61 90 | 
             
              end
         | 
| 62 91 |  | 
| 92 | 
            +
              # Load Balancer Object
         | 
| 63 93 | 
             
              def lb(arg=nil)
         | 
| 64 94 | 
             
                set_or_return(:lb, arg, :kind_of => [Hugo::Aws::Elb]) 
         | 
| 65 95 | 
             
              end
         | 
| 66 96 |  | 
| 97 | 
            +
              # Database Object
         | 
| 67 98 | 
             
              def db(arg=nil)
         | 
| 68 | 
            -
                set_or_return(:db, arg, :kind_of => [Hugo:: | 
| 99 | 
            +
                set_or_return(:db, arg, :kind_of => [Hugo::Database]) 
         | 
| 69 100 | 
             
              end
         | 
| 70 101 |  | 
| 71 | 
            -
               | 
| 72 | 
            -
             | 
| 73 | 
            -
               | 
| 102 | 
            +
              # URI of 
         | 
| 103 | 
            +
              # def uri(arg=nil)
         | 
| 104 | 
            +
              #   set_or_return(:uri, arg, :kind_of => [String]) 
         | 
| 105 | 
            +
              # end
         | 
| 74 106 |  | 
| 75 | 
            -
              def type(arg=nil)
         | 
| 76 | 
            -
             | 
| 77 | 
            -
              end
         | 
| 107 | 
            +
              # def type(arg=nil)
         | 
| 108 | 
            +
              #   set_or_return(:type, arg, :kind_of => [String]) 
         | 
| 109 | 
            +
              # end
         | 
| 78 110 |  | 
| 79 111 | 
             
              def zone(arg=nil)
         | 
| 80 112 | 
             
                set_or_return(:zone, arg, :kind_of => [String]) 
         | 
| @@ -84,18 +116,10 @@ class Hugo::App | |
| 84 116 | 
             
                set_or_return(:image_id, arg, :kind_of => [String]) 
         | 
| 85 117 | 
             
              end
         | 
| 86 118 |  | 
| 87 | 
            -
              def application(arg=nil)
         | 
| 88 | 
            -
                set_or_return(:application, arg, :kind_of => [String]) 
         | 
| 89 | 
            -
              end
         | 
| 90 | 
            -
             | 
| 91 119 | 
             
              def security_group(arg=nil)
         | 
| 92 120 | 
             
                set_or_return(:security_group, arg, :kind_of => [String]) 
         | 
| 93 121 | 
             
              end
         | 
| 94 | 
            -
             | 
| 95 | 
            -
              def cloud_name(arg=nil)
         | 
| 96 | 
            -
                set_or_return(:cloud_name, arg, :kind_of => [String])
         | 
| 97 | 
            -
              end
         | 
| 98 | 
            -
              
         | 
| 122 | 
            +
                  
         | 
| 99 123 | 
             
              def key_name(arg=nil)
         | 
| 100 124 | 
             
                set_or_return(:key_name, arg, :kind_of => [String])
         | 
| 101 125 | 
             
              end
         | 
| @@ -105,19 +129,61 @@ class Hugo::App | |
| 105 129 | 
             
              end
         | 
| 106 130 |  | 
| 107 131 | 
             
              def key_path(arg=nil)
         | 
| 108 | 
            -
                set_or_return(: | 
| 132 | 
            +
                set_or_return(:key_path, arg, :kind_of => [String])    
         | 
| 109 133 | 
             
              end
         | 
| 110 134 |  | 
| 111 135 | 
             
              def run_list(arg=nil)
         | 
| 112 136 | 
             
                set_or_return(:run_list, arg, :kind_of => [Array])                
         | 
| 113 137 | 
             
              end
         | 
| 138 | 
            +
                
         | 
| 114 139 |  | 
| 115 | 
            -
              def  | 
| 116 | 
            -
                 | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 140 | 
            +
              def help
         | 
| 141 | 
            +
                x = <<HELP
         | 
| 142 | 
            +
             | 
| 143 | 
            +
            Hugo app 
         | 
| 144 | 
            +
            -----------------
         | 
| 145 | 
            +
            There are two ways to run hugo app, a single instance mode, or 
         | 
| 146 | 
            +
            with a balancer.  If you do not use a balancer, then after your 
         | 
| 147 | 
            +
            initial run, which creates the server instance, you need to enter
         | 
| 148 | 
            +
            the server instance into your config, so it will not create a new
         | 
| 149 | 
            +
            ec2 everytime
         | 
| 150 | 
            +
             | 
| 151 | 
            +
            Required attributes
         | 
| 152 | 
            +
            -----------------
         | 
| 153 | 
            +
            key_name
         | 
| 154 | 
            +
            key_path
         | 
| 155 | 
            +
            cookbook
         | 
| 156 | 
            +
            run_list
         | 
| 157 | 
            +
             | 
| 158 | 
            +
            Methods
         | 
| 159 | 
            +
            ------------------
         | 
| 160 | 
            +
            servers
         | 
| 161 | 
            +
             | 
| 162 | 
            +
            deploy
         | 
| 163 | 
            +
             | 
| 164 | 
            +
            add_recipe
         | 
| 165 | 
            +
             | 
| 166 | 
            +
            destroy
         | 
| 167 | 
            +
             | 
| 168 | 
            +
            help
         | 
| 169 | 
            +
             | 
| 170 | 
            +
            Optional Attributes
         | 
| 171 | 
            +
            -----------------
         | 
| 172 | 
            +
             | 
| 173 | 
            +
            instance
         | 
| 174 | 
            +
            lb
         | 
| 175 | 
            +
            db
         | 
| 176 | 
            +
            uri
         | 
| 177 | 
            +
            type
         | 
| 178 | 
            +
            zone
         | 
| 179 | 
            +
            image_id
         | 
| 180 | 
            +
             | 
| 181 | 
            +
             | 
| 182 | 
            +
             | 
| 183 | 
            +
            HELP
         | 
| 184 | 
            +
                puts x
         | 
| 185 | 
            +
                x
         | 
| 186 | 
            +
              end  
         | 
| 121 187 |  | 
| 122 188 |  | 
| 123 189 | 
             
            private
         | 
| @@ -133,9 +199,9 @@ private | |
| 133 199 | 
             
              end
         | 
| 134 200 |  | 
| 135 201 | 
             
              def create_ec2
         | 
| 136 | 
            -
                ec2 = Hugo::Aws::Ec2.new(:type => type, 
         | 
| 137 | 
            -
                                :zone => zone, 
         | 
| 138 | 
            -
                                :image_id => image_id,
         | 
| 202 | 
            +
                ec2 = Hugo::Aws::Ec2.new(:type => type || TYPE, 
         | 
| 203 | 
            +
                                :zone => zone || ZONE, 
         | 
| 204 | 
            +
                                :image_id => image_id || AMI,
         | 
| 139 205 | 
             
                                :key_name => key_name,
         | 
| 140 206 | 
             
                                :security_group => "default").create
         | 
| 141 207 |  | 
| @@ -169,7 +235,7 @@ private | |
| 169 235 | 
             
                commands << 'if [ -d "./hugo-repos" ]; then echo "setup already run"; else sudo gem install git --no-ri --no-rdoc; fi'
         | 
| 170 236 | 
             
                commands << "if [ -d \"./hugo-repos\" ]; then echo \"setup already run\"; else git clone #{self.cookbook} ~/hugo-repos; fi"
         | 
| 171 237 | 
             
                ec2 = Hugo::Aws::Ec2.find(instance_id)
         | 
| 172 | 
            -
                puts ec2.uri
         | 
| 238 | 
            +
                #puts ec2.uri
         | 
| 173 239 | 
             
                ec2.ssh(commands, nil, File.join(key_path, key_name))
         | 
| 174 240 | 
             
              end
         | 
| 175 241 |  | 
| @@ -179,25 +245,16 @@ private | |
| 179 245 | 
             
                commands << "cd hugo-repos && git reset --hard && git pull"
         | 
| 180 246 | 
             
                commands << 'sudo chef-solo -c /home/ubuntu/hugo-repos/config/solo.rb -j /home/ubuntu/dna.json'
         | 
| 181 247 |  | 
| 182 | 
            -
                database_info = { 
         | 
| 183 | 
            -
                  :uri => db.uri, 
         | 
| 184 | 
            -
                  :name => db.db,
         | 
| 185 | 
            -
                  :user => db.user, 
         | 
| 186 | 
            -
                  :password => db.password } unless db.nil?
         | 
| 187 248 |  | 
| 188 249 | 
             
                self.dna = {} if self.dna.nil?
         | 
| 189 | 
            -
                self.dna.merge!( | 
| 250 | 
            +
                self.dna.merge!(
         | 
| 251 | 
            +
                  :run_list => run_list,
         | 
| 190 252 | 
             
                  :git => cookbook,
         | 
| 191 253 | 
             
                  :access_key => Hugo::Aws::Ec2::ACCESS_KEY,
         | 
| 192 254 | 
             
                  :secret_key => Hugo::Aws::Ec2::SECRET_KEY,
         | 
| 193 | 
            -
                  :database =>  | 
| 194 | 
            -
                  
         | 
| 195 | 
            -
                  :application => name, 
         | 
| 196 | 
            -
                  :customer => cloud_name,
         | 
| 197 | 
            -
                  
         | 
| 198 | 
            -
                  :app => deploy_info
         | 
| 255 | 
            +
                  :database => db ? db.info : {} 
         | 
| 199 256 | 
             
                )
         | 
| 200 | 
            -
             | 
| 257 | 
            +
                      
         | 
| 201 258 | 
             
                if lb
         | 
| 202 259 | 
             
                  lb.instances.each do |i|
         | 
| 203 260 | 
             
                    Hugo::Aws::Ec2.find(i).ssh(commands, dna, File.join(key_path, key_name))
         | 
| @@ -216,10 +273,6 @@ private | |
| 216 273 |  | 
| 217 274 | 
             
                end  
         | 
| 218 275 | 
             
              end
         | 
| 219 | 
            -
             | 
| 220 | 
            -
              def get_instance(uri)
         | 
| 221 | 
            -
                nil
         | 
| 222 | 
            -
              end
         | 
| 223 | 
            -
              
         | 
| 276 | 
            +
                
         | 
| 224 277 |  | 
| 225 278 | 
             
            end
         | 
    
        data/lib/hugo/aws/ec2.rb
    CHANGED
    
    | @@ -21,16 +21,19 @@ module Hugo | |
| 21 21 |  | 
| 22 22 | 
             
                    if options["placement"] and options["placement"]["availabilityZone"]
         | 
| 23 23 | 
             
                      @zone = options["placement"]["availabilityZone"] 
         | 
| 24 | 
            +
                    elsif options[:zone]
         | 
| 25 | 
            +
                      @zone = option[:zone]
         | 
| 24 26 | 
             
                    else
         | 
| 25 27 | 
             
                      @zone = ZONE
         | 
| 26 28 | 
             
                    end
         | 
| 27 29 |  | 
| 28 30 | 
             
                    @uri = options["dnsName"] || ""
         | 
| 29 | 
            -
                    @type = options["instanceType"] | 
| 30 | 
            -
                    @image_id = options["imageId"] | 
| 31 | 
            +
                    @type = options[:type] || options["instanceType"]
         | 
| 32 | 
            +
                    @image_id = options[:image_id] || options["imageId"]
         | 
| 33 | 
            +
                    @key_name = options[:key_name] || options["keyName"]
         | 
| 34 | 
            +
             | 
| 31 35 | 
             
                    @create_time = options["launchTime"] || nil
         | 
| 32 36 |  | 
| 33 | 
            -
                    @key_name = options[:key_name] || options["keyName"] || KEY_NAME
         | 
| 34 37 | 
             
                    if options["instanceState"] and options["instanceState"]["name"]
         | 
| 35 38 | 
             
                      @status = options["instanceState"]["name"]
         | 
| 36 39 | 
             
                    else
         | 
    
        data/lib/hugo/aws/rds.rb
    CHANGED
    
    
    
        data/lib/hugo/balancer.rb
    CHANGED
    
    | @@ -28,6 +28,38 @@ class Hugo::Balancer | |
| 28 28 | 
             
                )
         | 
| 29 29 | 
             
              end
         | 
| 30 30 |  | 
| 31 | 
            +
              def help
         | 
| 32 | 
            +
                x = <<HELP
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            Hugo balancer 
         | 
| 35 | 
            +
            -----------------
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            optional attributes
         | 
| 38 | 
            +
            -----------------
         | 
| 39 | 
            +
            zone - zone
         | 
| 40 | 
            +
            port - app server port 
         | 
| 41 | 
            +
            web - balancer port
         | 
| 42 | 
            +
            ssl_port - ssl app server port
         | 
| 43 | 
            +
            ssl_web - ssl balancer port
         | 
| 44 | 
            +
            type - port type
         | 
| 45 | 
            +
             | 
| 46 | 
            +
             | 
| 47 | 
            +
            defaults
         | 
| 48 | 
            +
            -----------------
         | 
| 49 | 
            +
            DEFAULT_ZONE = 'us-east-1c'
         | 
| 50 | 
            +
            DEFAULT_PORT = '8080'
         | 
| 51 | 
            +
            DEFAULT_WEB = '80'
         | 
| 52 | 
            +
            DEFAULT_TYPE = 'http'
         | 
| 53 | 
            +
            DEFAULT_SSL_PORT = '8443'
         | 
| 54 | 
            +
            DEFAULT_SSL_WEB = '443'
         | 
| 55 | 
            +
             | 
| 56 | 
            +
             | 
| 57 | 
            +
             | 
| 58 | 
            +
            HELP
         | 
| 59 | 
            +
                puts x
         | 
| 60 | 
            +
                x
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
              
         | 
| 31 63 | 
             
              def name(arg=nil)
         | 
| 32 64 | 
             
                set_or_return(:name, arg, :kind_of => [String])     
         | 
| 33 65 | 
             
              end
         | 
    
        data/lib/hugo/cloud.rb
    CHANGED
    
    | @@ -9,7 +9,7 @@ class Hugo::Cloud | |
| 9 9 |  | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 | 
            -
              def database(db_name, &block)
         | 
| 12 | 
            +
              def database(db_name, &block)    
         | 
| 13 13 | 
             
                database = Hugo::Database.instance
         | 
| 14 14 |  | 
| 15 15 | 
             
                database.db_security_group name
         | 
| @@ -18,8 +18,7 @@ class Hugo::Cloud | |
| 18 18 |  | 
| 19 19 | 
             
                database.instance_eval(&block) if block_given? 
         | 
| 20 20 | 
             
                db database.deploy 
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                
         | 
| 21 | 
            +
              
         | 
| 23 22 | 
             
              end
         | 
| 24 23 |  | 
| 25 24 | 
             
              def balancer(&block)
         | 
| @@ -34,7 +33,7 @@ class Hugo::Cloud | |
| 34 33 | 
             
                app_info.name name
         | 
| 35 34 | 
             
                app_info.lb lb
         | 
| 36 35 | 
             
                app_info.db db
         | 
| 37 | 
            -
                app_info.cloud_name name
         | 
| 36 | 
            +
                #app_info.cloud_name name
         | 
| 38 37 | 
             
                app_info.instance_eval(&block) if block_given? 
         | 
| 39 38 | 
             
                cloud_app app_info
         | 
| 40 39 |  | 
| @@ -49,9 +48,10 @@ class Hugo::Cloud | |
| 49 48 | 
             
              end
         | 
| 50 49 |  | 
| 51 50 | 
             
              def delete
         | 
| 52 | 
            -
                [ | 
| 51 | 
            +
                [cloud_app, lb].each do |s|
         | 
| 53 52 | 
             
                  s.destroy if s
         | 
| 54 53 | 
             
                end
         | 
| 54 | 
            +
                db.rds.destroy
         | 
| 55 55 | 
             
              end
         | 
| 56 56 |  | 
| 57 57 |  | 
| @@ -108,7 +108,7 @@ REPORT | |
| 108 108 | 
             
              end
         | 
| 109 109 |  | 
| 110 110 | 
             
              def db(arg=nil)
         | 
| 111 | 
            -
                set_or_return(:db, arg, :kind_of => [Hugo:: | 
| 111 | 
            +
                set_or_return(:db, arg, :kind_of => [Hugo::Database])
         | 
| 112 112 | 
             
              end
         | 
| 113 113 |  | 
| 114 114 | 
             
              def lb(arg=nil)
         | 
    
        data/lib/hugo/database.rb
    CHANGED
    
    | @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            module Hugo; end
         | 
| 2 2 |  | 
| 3 | 
            +
            # Lauch Database Servers 
         | 
| 3 4 | 
             
            class Hugo::Database
         | 
| 4 5 | 
             
              include Singleton
         | 
| 5 6 | 
             
              include Hugo::Mixin::ParamsValidate
         | 
| @@ -8,16 +9,25 @@ class Hugo::Database | |
| 8 9 | 
             
              DEFAULT_SIZE = 5
         | 
| 9 10 | 
             
              DEFAULT_ZONE = 'us-east-1c'
         | 
| 10 11 |  | 
| 12 | 
            +
              attr_accessor :rds
         | 
| 11 13 |  | 
| 14 | 
            +
              # initialize defaults
         | 
| 12 15 | 
             
              def initialize
         | 
| 13 16 | 
             
                size DEFAULT_SIZE
         | 
| 14 17 | 
             
                zone DEFAULT_ZONE
         | 
| 15 18 | 
             
                server DEFAULT_SERVER
         | 
| 16 19 | 
             
                db_security_group "default"
         | 
| 17 20 | 
             
              end
         | 
| 18 | 
            -
             | 
| 21 | 
            +
             | 
| 22 | 
            +
              # deploy using AWS RDS
         | 
| 19 23 | 
             
              def deploy
         | 
| 20 | 
            -
                 | 
| 24 | 
            +
                raise ArgumentError, "database.name Required" unless name
         | 
| 25 | 
            +
                raise ArgumentError, "database.server Required" unless server
         | 
| 26 | 
            +
                raise ArgumentError, "database.user Required" unless user
         | 
| 27 | 
            +
                raise ArgumentError, "database.password Required" unless password
         | 
| 28 | 
            +
                
         | 
| 29 | 
            +
                
         | 
| 30 | 
            +
                @rds = Hugo::Aws::Rds.find_or_create( :name => name,
         | 
| 21 31 | 
             
                                          :server => server,
         | 
| 22 32 | 
             
                                          :user => user,
         | 
| 23 33 | 
             
                                          :password => password,
         | 
| @@ -25,8 +35,50 @@ class Hugo::Database | |
| 25 35 | 
             
                                          :zone => zone,
         | 
| 26 36 | 
             
                                          :db_security_group => db_security_group
         | 
| 27 37 | 
             
                                           )
         | 
| 38 | 
            +
                self
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
              
         | 
| 41 | 
            +
              # clear attributes of database object
         | 
| 42 | 
            +
              def clear
         | 
| 43 | 
            +
                @user = nil
         | 
| 44 | 
            +
                @password = nil
         | 
| 45 | 
            +
                @server = nil
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
              
         | 
| 48 | 
            +
              def help
         | 
| 49 | 
            +
                
         | 
| 50 | 
            +
                x = <<HELP
         | 
| 51 | 
            +
            Welcome to Hugo::Database
         | 
| 52 | 
            +
            -------------------------
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            Required Methods:
         | 
| 55 | 
            +
            -------------------------
         | 
| 56 | 
            +
            name - Name of Database
         | 
| 57 | 
            +
            server - Name of Server
         | 
| 58 | 
            +
            user - A Valid User of RDS Server
         | 
| 59 | 
            +
            password - A Valid Password of RDS Server    
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            Optional Methods:
         | 
| 62 | 
            +
            -------------------------
         | 
| 63 | 
            +
            size - Storage Size of you db server
         | 
| 64 | 
            +
            zone - Zone of the AWS:RDS
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            HELP
         | 
| 67 | 
            +
                puts x
         | 
| 68 | 
            +
                x
         | 
| 28 69 | 
             
              end
         | 
| 29 70 |  | 
| 71 | 
            +
              def info
         | 
| 72 | 
            +
                { 
         | 
| 73 | 
            +
                  :uri => @rds.uri, 
         | 
| 74 | 
            +
                  :name => @rds.db,
         | 
| 75 | 
            +
                  :user => @rds.user, 
         | 
| 76 | 
            +
                  :password => @rds.password 
         | 
| 77 | 
            +
                  } 
         | 
| 78 | 
            +
                
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
              
         | 
| 81 | 
            +
              
         | 
| 30 82 | 
             
              def name(arg=nil)
         | 
| 31 83 | 
             
                set_or_return(:name, arg, :kind_of => [String])     
         | 
| 32 84 | 
             
              end
         | 
    
        data/spec/lib/hugo/app_spec.rb
    CHANGED
    
    | @@ -9,10 +9,25 @@ describe "Hugo App" do | |
| 9 9 |  | 
| 10 10 | 
             
                block = lambda do
         | 
| 11 11 | 
             
                  cloud "my_cloud" do 
         | 
| 12 | 
            +
                    database "my_db" do
         | 
| 13 | 
            +
                      server "my_server"
         | 
| 14 | 
            +
                      user "hello"
         | 
| 15 | 
            +
                      password "world"
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                    
         | 
| 12 18 | 
             
                    balancer
         | 
| 19 | 
            +
                    
         | 
| 13 20 | 
             
                    app "testapp" do 
         | 
| 21 | 
            +
                      clear
         | 
| 22 | 
            +
                      
         | 
| 23 | 
            +
                      key_name "ec2-keypair"
         | 
| 24 | 
            +
                      key_path "~/.ec2"
         | 
| 25 | 
            +
                      cookbook "git@github.com:jackhq/hugo-cookbooks.git"
         | 
| 26 | 
            +
                      
         | 
| 14 27 | 
             
                      servers 0
         | 
| 15 28 | 
             
                    end
         | 
| 29 | 
            +
                    #deploy
         | 
| 30 | 
            +
                    #print
         | 
| 16 31 | 
             
                  end
         | 
| 17 32 | 
             
                end
         | 
| 18 33 |  | 
| @@ -21,6 +36,55 @@ describe "Hugo App" do | |
| 21 36 | 
             
                end.should_not raise_error
         | 
| 22 37 | 
             
              end
         | 
| 23 38 |  | 
| 39 | 
            +
              it "should raise error requiring key_name" do
         | 
| 40 | 
            +
                lambda do
         | 
| 41 | 
            +
                  Hugo do
         | 
| 42 | 
            +
                    cloud "my_cloud" do
         | 
| 43 | 
            +
                      app "testapp" do 
         | 
| 44 | 
            +
                        clear
         | 
| 45 | 
            +
                        key_path "~/.ec2"
         | 
| 46 | 
            +
                        cookbook "my_cookbook"
         | 
| 47 | 
            +
                        run_list ["role[base_rack_apache]"]
         | 
| 48 | 
            +
                      end 
         | 
| 49 | 
            +
                      deploy         
         | 
| 50 | 
            +
                    end        
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
                end.should raise_error('app.key_name Required')
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              it "should raise error requiring key_path" do
         | 
| 56 | 
            +
                lambda do
         | 
| 57 | 
            +
                  Hugo do
         | 
| 58 | 
            +
                    cloud "my_cloud" do
         | 
| 59 | 
            +
                      app "testapp" do 
         | 
| 60 | 
            +
                        clear
         | 
| 61 | 
            +
                        key_name "ec2-keypair"
         | 
| 62 | 
            +
                        cookbook "my_cookbook"
         | 
| 63 | 
            +
                        run_list ["role[base_rack_apache]"]
         | 
| 64 | 
            +
                      end 
         | 
| 65 | 
            +
                      deploy         
         | 
| 66 | 
            +
                    end        
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
                end.should raise_error('app.key_path Required')
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
              it "should raise error requiring cookbook" do
         | 
| 72 | 
            +
                lambda do
         | 
| 73 | 
            +
                  Hugo do
         | 
| 74 | 
            +
                    cloud "my_cloud" do
         | 
| 75 | 
            +
                      app "testapp" do 
         | 
| 76 | 
            +
                        clear
         | 
| 77 | 
            +
                        key_name "ec2-keypair"
         | 
| 78 | 
            +
                        key_path "~/.ec2"
         | 
| 79 | 
            +
                        run_list ["role[base_rack_apache]"]
         | 
| 80 | 
            +
                      end 
         | 
| 81 | 
            +
                      deploy         
         | 
| 82 | 
            +
                    end        
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
                end.should raise_error('app.cookbook Required')
         | 
| 85 | 
            +
              end
         | 
| 86 | 
            +
              
         | 
| 87 | 
            +
              
         | 
| 24 88 | 
             
              it "should save dna" do
         | 
| 25 89 | 
             
                block = lambda do
         | 
| 26 90 | 
             
                  cloud "my_cloud" do 
         | 
| @@ -28,8 +92,8 @@ describe "Hugo App" do | |
| 28 92 | 
             
                    app "testapp" do 
         | 
| 29 93 | 
             
                      add_recipe "s3fs", :s3 => {:bucket => "samIam"}
         | 
| 30 94 | 
             
                      servers 0
         | 
| 31 | 
            -
                      puts run_list
         | 
| 32 | 
            -
                      puts dna.inspect
         | 
| 95 | 
            +
                      #puts run_list
         | 
| 96 | 
            +
                      #puts dna.inspect
         | 
| 33 97 | 
             
                    end
         | 
| 34 98 | 
             
                  end
         | 
| 35 99 | 
             
                end
         | 
| @@ -16,6 +16,7 @@ describe "Hugo Balancer" do | |
| 16 16 | 
             
                  Hugo &block
         | 
| 17 17 | 
             
                end.should_not raise_error
         | 
| 18 18 | 
             
              end
         | 
| 19 | 
            +
              
         | 
| 19 20 |  | 
| 20 21 | 
             
              it "should raise error for balancer block not wrapped in cloud block" do
         | 
| 21 22 | 
             
                block = lambda do
         | 
| @@ -34,4 +35,11 @@ describe "Hugo Balancer" do | |
| 34 35 |  | 
| 35 36 | 
             
              end
         | 
| 36 37 |  | 
| 38 | 
            +
              it "should print help for balancer" do
         | 
| 39 | 
            +
                lb = Hugo::Balancer.instance
         | 
| 40 | 
            +
                lb.name "myserver"
         | 
| 41 | 
            +
                lb.help.should =~ /^Hugo balancer/
         | 
| 42 | 
            +
                
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 37 45 | 
             
            end
         | 
| @@ -5,46 +5,80 @@ describe "Hugo Database" do | |
| 5 5 | 
             
                mocks
         | 
| 6 6 | 
             
              end
         | 
| 7 7 |  | 
| 8 | 
            +
              it "should raise error requiring user" do
         | 
| 9 | 
            +
                lambda do
         | 
| 10 | 
            +
                  Hugo do
         | 
| 11 | 
            +
                    cloud "my_cloud" do
         | 
| 12 | 
            +
                      database "testapp" do 
         | 
| 13 | 
            +
                        clear
         | 
| 14 | 
            +
                        server "server"
         | 
| 15 | 
            +
                        password "test_password"
         | 
| 16 | 
            +
                      end          
         | 
| 17 | 
            +
                    end        
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
                end.should raise_error('database.user Required')
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              it "should raise error requiring password" do
         | 
| 23 | 
            +
                lambda do
         | 
| 24 | 
            +
                  Hugo do
         | 
| 25 | 
            +
                    cloud "my_cloud" do
         | 
| 26 | 
            +
                      database "testapp" do
         | 
| 27 | 
            +
                        clear
         | 
| 28 | 
            +
                        server "server"
         | 
| 29 | 
            +
                        user "test_user"
         | 
| 30 | 
            +
                      end          
         | 
| 31 | 
            +
                    end        
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                end.should raise_error('database.password Required')
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              it "should raise error requiring server" do
         | 
| 37 | 
            +
                lambda do
         | 
| 38 | 
            +
                  Hugo do
         | 
| 39 | 
            +
                    cloud "my_cloud" do
         | 
| 40 | 
            +
                      database "testapp" do
         | 
| 41 | 
            +
                        clear
         | 
| 42 | 
            +
                        password "test_password"
         | 
| 43 | 
            +
                        user "test_user"
         | 
| 44 | 
            +
                      end          
         | 
| 45 | 
            +
                    end        
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end.should raise_error('database.server Required')
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 8 50 | 
             
              it "should be valid" do
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                 | 
| 11 | 
            -
                   | 
| 12 | 
            -
                     | 
| 13 | 
            -
                       | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 51 | 
            +
                    
         | 
| 52 | 
            +
                lambda do
         | 
| 53 | 
            +
                  Hugo do
         | 
| 54 | 
            +
                    cloud "my_cloud" do 
         | 
| 55 | 
            +
                      database "testapp" do 
         | 
| 56 | 
            +
                        server "serverx"
         | 
| 57 | 
            +
                        user "test_user"
         | 
| 58 | 
            +
                        password "test_password"
         | 
| 59 | 
            +
                      end
         | 
| 16 60 | 
             
                    end
         | 
| 17 61 | 
             
                  end
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
                
         | 
| 20 | 
            -
                lambda do
         | 
| 21 | 
            -
                  Hugo &block
         | 
| 22 62 | 
             
                end.should_not raise_error
         | 
| 23 63 | 
             
              end
         | 
| 24 64 |  | 
| 25 65 | 
             
              it "should raise error for database block not wrapped in cloud block" do
         | 
| 26 | 
            -
                block = lambda do
         | 
| 27 | 
            -
                  database "mydb" do end
         | 
| 28 | 
            -
                end
         | 
| 29 | 
            -
                
         | 
| 30 66 | 
             
                lambda do
         | 
| 31 | 
            -
                  Hugo  | 
| 67 | 
            +
                  Hugo { database "mydb" }
         | 
| 32 68 | 
             
                end.should raise_error
         | 
| 33 69 | 
             
              end
         | 
| 34 70 |  | 
| 35 71 | 
             
              it "should not raise error for database block wrapped in cloud block" do
         | 
| 36 | 
            -
                block = lambda do
         | 
| 37 | 
            -
                  cloud "mycloud" do
         | 
| 38 | 
            -
                    database "mydb" do end
         | 
| 39 | 
            -
                  end
         | 
| 40 | 
            -
                end
         | 
| 41 | 
            -
                
         | 
| 42 72 | 
             
                lambda do
         | 
| 43 | 
            -
                  Hugo  | 
| 73 | 
            +
                  Hugo do
         | 
| 74 | 
            +
                    cloud "mycloud" do
         | 
| 75 | 
            +
                      database "mydb" do end
         | 
| 76 | 
            +
                    end      
         | 
| 77 | 
            +
                  end
         | 
| 44 78 | 
             
                end.should be_true
         | 
| 45 79 | 
             
              end
         | 
| 46 80 | 
             
            end
         | 
| 47 | 
            -
             | 
| 81 | 
            +
            # 
         | 
| 48 82 | 
             
            describe Hugo::Database do
         | 
| 49 83 | 
             
              before(:each) do
         | 
| 50 84 | 
             
                mocks
         | 
| @@ -58,9 +92,40 @@ describe Hugo::Database do | |
| 58 92 | 
             
                db.name "mydb"
         | 
| 59 93 | 
             
                db.user "admin"
         | 
| 60 94 | 
             
                db.password "test"
         | 
| 61 | 
            -
                db.deploy.should be_a_kind_of(Hugo:: | 
| 95 | 
            +
                db.deploy.should be_a_kind_of(Hugo::Database)
         | 
| 62 96 | 
             
              end
         | 
| 63 97 |  | 
| 98 | 
            +
              it "should clear required attributes" do
         | 
| 99 | 
            +
                db = Hugo::Database.instance
         | 
| 100 | 
            +
                db.server "myserver"
         | 
| 101 | 
            +
                db.name "mydb"
         | 
| 102 | 
            +
                db.user "admin"
         | 
| 103 | 
            +
                db.password "test"
         | 
| 104 | 
            +
                db.clear
         | 
| 105 | 
            +
                db.server.should be_nil
         | 
| 106 | 
            +
                db.user.should be_nil
         | 
| 107 | 
            +
                db.password.should be_nil
         | 
| 108 | 
            +
                
         | 
| 109 | 
            +
              end
         | 
| 110 | 
            +
              
         | 
| 111 | 
            +
              it "should print help for database" do
         | 
| 112 | 
            +
                db = Hugo::Database.instance
         | 
| 113 | 
            +
                db.name "myserver"
         | 
| 114 | 
            +
                db.help.should =~ /^Welcome to Hugo/
         | 
| 115 | 
            +
                
         | 
| 116 | 
            +
              end
         | 
| 117 | 
            +
              
         | 
| 118 | 
            +
              it "should return an info hash" do
         | 
| 119 | 
            +
                db = Hugo::Database.instance
         | 
| 120 | 
            +
                db.server "myserver"
         | 
| 121 | 
            +
                db.name "mydb"
         | 
| 122 | 
            +
                db.user "admin"
         | 
| 123 | 
            +
                db.password "test"
         | 
| 124 | 
            +
                db.deploy
         | 
| 125 | 
            +
                db.info.inspect.should == '{:user=>"user", :uri=>"test.cwrzj6lxowfj.us-east-1.rds.amazonaws.com", :password=>"test", :name=>"mydb"}'
         | 
| 126 | 
            +
              end
         | 
| 127 | 
            +
              
         | 
| 128 | 
            +
              
         | 
| 64 129 |  | 
| 65 130 | 
             
            end
         | 
| 66 131 |  | 
    
        data/spec/lib/hugo_spec.rb
    CHANGED
    
    | @@ -23,6 +23,31 @@ describe "Hugo DSL" do | |
| 23 23 | 
             
                end.should be_true
         | 
| 24 24 | 
             
              end
         | 
| 25 25 |  | 
| 26 | 
            +
              it "should deploy a single server app" do
         | 
| 27 | 
            +
                block = lambda do
         | 
| 28 | 
            +
                  cloud "my_cloud" do                         
         | 
| 29 | 
            +
                    database "db_name" do 
         | 
| 30 | 
            +
                      server     "db_server"
         | 
| 31 | 
            +
                      user       "admin"
         | 
| 32 | 
            +
                      password   "mypassword"  
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                    
         | 
| 35 | 
            +
                    balancer 
         | 
| 36 | 
            +
                    
         | 
| 37 | 
            +
                    app "app_name" do
         | 
| 38 | 
            +
                      
         | 
| 39 | 
            +
                                        
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
                
         | 
| 44 | 
            +
                lambda do
         | 
| 45 | 
            +
                  Hugo &block
         | 
| 46 | 
            +
                end.should be_true
         | 
| 47 | 
            +
             
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
              
         | 
| 50 | 
            +
              
         | 
| 26 51 |  | 
| 27 52 |  | 
| 28 53 | 
             
              it "should deploy infrastructure" do
         |