fog-serverlove 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.hound.yml +20 -0
- data/.rubocop.yml +20 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +17 -0
- data/CONTRIBUTING.md +18 -0
- data/CONTRIBUTORS.md +7 -0
- data/Gemfile +4 -0
- data/LICENSE.md +20 -0
- data/README.md +38 -0
- data/Rakefile +18 -0
- data/fog-serverlove.gemspec +35 -0
- data/gemfiles/Gemfile.1.9.2- +8 -0
- data/gemfiles/Gemfile.1.9.3+ +7 -0
- data/lib/fog/compute/serverlove.rb +95 -0
- data/lib/fog/compute/serverlove/models/image.rb +52 -0
- data/lib/fog/compute/serverlove/models/images.rb +19 -0
- data/lib/fog/compute/serverlove/models/server.rb +67 -0
- data/lib/fog/compute/serverlove/models/servers.rb +19 -0
- data/lib/fog/compute/serverlove/password_generator.rb +11 -0
- data/lib/fog/compute/serverlove/requests/create_image.rb +28 -0
- data/lib/fog/compute/serverlove/requests/create_server.rb +30 -0
- data/lib/fog/compute/serverlove/requests/destroy_image.rb +11 -0
- data/lib/fog/compute/serverlove/requests/destroy_server.rb +11 -0
- data/lib/fog/compute/serverlove/requests/get_image.rb +11 -0
- data/lib/fog/compute/serverlove/requests/get_images.rb +11 -0
- data/lib/fog/compute/serverlove/requests/get_server.rb +11 -0
- data/lib/fog/compute/serverlove/requests/get_servers.rb +11 -0
- data/lib/fog/compute/serverlove/requests/load_standard_image.rb +11 -0
- data/lib/fog/compute/serverlove/requests/reset_server.rb +11 -0
- data/lib/fog/compute/serverlove/requests/shutdown_server.rb +11 -0
- data/lib/fog/compute/serverlove/requests/start_server.rb +11 -0
- data/lib/fog/compute/serverlove/requests/stop_server.rb +11 -0
- data/lib/fog/compute/serverlove/requests/update_image.rb +13 -0
- data/lib/fog/compute/serverlove/requests/update_server.rb +13 -0
- data/lib/fog/serverlove.rb +15 -0
- data/lib/fog/serverlove/compute.rb +0 -0
- data/lib/fog/serverlove/version.rb +5 -0
- data/spec/minitest_helper.rb +31 -0
- data/tests/compute/password_generator_tests.rb +15 -0
- data/tests/compute/requests/image_tests.rb +59 -0
- data/tests/compute/requests/server_tests.rb +92 -0
- data/tests/helper.rb +34 -0
- data/tests/helpers/collection_helper.rb +97 -0
- data/tests/helpers/flavors_helper.rb +32 -0
- data/tests/helpers/formats_helper.rb +98 -0
- data/tests/helpers/formats_helper_tests.rb +110 -0
- data/tests/helpers/model_helper.rb +29 -0
- data/tests/helpers/responds_to_helper.rb +11 -0
- data/tests/helpers/schema_validator_tests.rb +107 -0
- data/tests/helpers/server_helper.rb +25 -0
- data/tests/helpers/servers_helper.rb +10 -0
- data/tests/helpers/succeeds_helper.rb +9 -0
- metadata +227 -0
| @@ -0,0 +1,67 @@ | |
| 1 | 
            +
            module Fog
         | 
| 2 | 
            +
              module Compute
         | 
| 3 | 
            +
                class Serverlove
         | 
| 4 | 
            +
                  class Server < Fog::Model
         | 
| 5 | 
            +
                    identity :id, :aliases => 'server'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                    attribute :name
         | 
| 8 | 
            +
                    attribute :cpu
         | 
| 9 | 
            +
                    attribute :mem
         | 
| 10 | 
            +
                    attribute :smp
         | 
| 11 | 
            +
                    attribute :ide_0_0, :aliases => 'ide:0:0'
         | 
| 12 | 
            +
                    attribute :ide_0_1, :aliases => 'ide:0:1'
         | 
| 13 | 
            +
                    attribute :ide_1_0, :aliases => 'ide:1:0'
         | 
| 14 | 
            +
                    attribute :ide_1_1, :aliases => 'ide:1:1'
         | 
| 15 | 
            +
                    attribute :boot
         | 
| 16 | 
            +
                    attribute :persistent
         | 
| 17 | 
            +
                    attribute :vnc
         | 
| 18 | 
            +
                    attribute :vnc_password, :aliases => 'vnc:password'
         | 
| 19 | 
            +
                    attribute :status
         | 
| 20 | 
            +
                    attribute :user
         | 
| 21 | 
            +
                    attribute :started
         | 
| 22 | 
            +
                    attribute :nic_0_model, :aliases => 'nic:0:model'
         | 
| 23 | 
            +
                    attribute :nic_0_dhcp,  :aliases => 'nic:0:dhcp'
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    def save
         | 
| 26 | 
            +
                      attributes = {}
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                      if(identity)
         | 
| 29 | 
            +
                        attributes = service.update_server(identity, allowed_attributes).body
         | 
| 30 | 
            +
                      else
         | 
| 31 | 
            +
                        requires :name
         | 
| 32 | 
            +
                        requires :cpu
         | 
| 33 | 
            +
                        attributes = service.create_server(self.class.defaults.merge(allowed_attributes)).body
         | 
| 34 | 
            +
                      end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                      merge_attributes(attributes)
         | 
| 37 | 
            +
                      self
         | 
| 38 | 
            +
                    end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                    def destroy
         | 
| 41 | 
            +
                      requires :identity
         | 
| 42 | 
            +
                      service.destroy_server(identity)
         | 
| 43 | 
            +
                      self
         | 
| 44 | 
            +
                    end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                    def allowed_attributes
         | 
| 47 | 
            +
                      allowed = [
         | 
| 48 | 
            +
                                  :name, :cpu, :smp, :mem, :persistent,
         | 
| 49 | 
            +
                                  :vnc_password, :vnc,
         | 
| 50 | 
            +
                                  :ide_0_0, :ide_0_1, :ide_1_0, :ide_1_1,
         | 
| 51 | 
            +
                                  :boot, :nic_0_model, :nic_0_dhcp
         | 
| 52 | 
            +
                                ]
         | 
| 53 | 
            +
                      attributes.select {|k,v| allowed.include? k}
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    def self.defaults
         | 
| 57 | 
            +
                      # TODO: Document default settings.
         | 
| 58 | 
            +
                      # Note that VNC password standards are strict (need explaining)
         | 
| 59 | 
            +
                      { 'nic:0:model' => 'e1000', 'nic:0:dhcp' => 'auto',
         | 
| 60 | 
            +
                        'smp' => 'auto', 'vnc' => 'auto',
         | 
| 61 | 
            +
                        'vnc:password' => Fog::Compute::Serverlove::PasswordGenerator.generate
         | 
| 62 | 
            +
                      }
         | 
| 63 | 
            +
                    end
         | 
| 64 | 
            +
                  end
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
            end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            module Fog
         | 
| 2 | 
            +
              module Compute
         | 
| 3 | 
            +
                class Serverlove
         | 
| 4 | 
            +
                  class Servers < Fog::Collection
         | 
| 5 | 
            +
                    model Fog::Compute::Serverlove::Server
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                    def all
         | 
| 8 | 
            +
                      data = service.get_servers.body
         | 
| 9 | 
            +
                      load(data)
         | 
| 10 | 
            +
                    end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    def get(server_id)
         | 
| 13 | 
            +
                      data = service.get_server(server_id).body
         | 
| 14 | 
            +
                      new(data)
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            module Fog
         | 
| 2 | 
            +
              module Compute
         | 
| 3 | 
            +
                class Serverlove
         | 
| 4 | 
            +
                  class Real
         | 
| 5 | 
            +
                    def create_image(options)
         | 
| 6 | 
            +
                      return nil if options.empty? || options.nil?
         | 
| 7 | 
            +
                      request(:method => "post", :path => "/drives/create", :expects => 200, :options => options)
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  class Mock
         | 
| 12 | 
            +
                    def create_image(options = {})
         | 
| 13 | 
            +
                      response = Excon::Response.new
         | 
| 14 | 
            +
                      response.status = 200
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                      data = {
         | 
| 17 | 
            +
                        'drive'     => Fog::Mock.random_numbers(1000000).to_s,
         | 
| 18 | 
            +
                        'name'      => options['name'] || 'Test',
         | 
| 19 | 
            +
                        'size'      => options['size'] || 12345
         | 
| 20 | 
            +
                      }
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                      response.body = data
         | 
| 23 | 
            +
                      response
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            module Fog
         | 
| 2 | 
            +
              module Compute
         | 
| 3 | 
            +
                class Serverlove
         | 
| 4 | 
            +
                  class Real
         | 
| 5 | 
            +
                    def create_server(options)
         | 
| 6 | 
            +
                      return nil if options.empty? || options.nil?
         | 
| 7 | 
            +
                      request(:method => "post", :path => "/servers/create/stopped", :expects => 200, :options => options)
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  class Mock
         | 
| 12 | 
            +
                    def create_server(options = {})
         | 
| 13 | 
            +
                      response = Excon::Response.new
         | 
| 14 | 
            +
                      response.status = 200
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                      data = {
         | 
| 17 | 
            +
                        'server'       => Fog::Mock.random_numbers(1000000).to_s,
         | 
| 18 | 
            +
                        'name'         => options['name'] || 'Test',
         | 
| 19 | 
            +
                        'cpu'          => options['cpu'] || 1000,
         | 
| 20 | 
            +
                        'persistent'   => options['persistent'] || false,
         | 
| 21 | 
            +
                        'vnc:password' => options['vnc:password'] || 'T35tServER!'
         | 
| 22 | 
            +
                      }
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                      response.body = data
         | 
| 25 | 
            +
                      response
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            module Fog
         | 
| 2 | 
            +
              module Compute
         | 
| 3 | 
            +
                class Serverlove
         | 
| 4 | 
            +
                  class Real
         | 
| 5 | 
            +
                    def load_standard_image(destination_image, source_image)
         | 
| 6 | 
            +
                      request(:method => "post", :path => "/drives/#{destination_image}/image/#{source_image}/gunzip", :expects => 204)
         | 
| 7 | 
            +
                    end
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            module Fog
         | 
| 2 | 
            +
              module Compute
         | 
| 3 | 
            +
                class Serverlove
         | 
| 4 | 
            +
                  class Real
         | 
| 5 | 
            +
                    def update_image(identifier, options)
         | 
| 6 | 
            +
                      return nil if identifier.nil? || identifier == ""
         | 
| 7 | 
            +
                      return nil if options.empty? || options.nil?
         | 
| 8 | 
            +
                      request(:method => "post", :path => "/drives/#{identifier}/set", :expects => 200, :options => options)
         | 
| 9 | 
            +
                    end
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            module Fog
         | 
| 2 | 
            +
              module Compute
         | 
| 3 | 
            +
                class Serverlove
         | 
| 4 | 
            +
                  class Real
         | 
| 5 | 
            +
                    def update_server(identifier, options)
         | 
| 6 | 
            +
                      return nil if identifier.nil? || identifier == ""
         | 
| 7 | 
            +
                      return nil if options.empty? || options.nil?
         | 
| 8 | 
            +
                      request(:method => "post", :path => "/servers/#{identifier}/set", :expects => 200, :options => options)
         | 
| 9 | 
            +
                    end
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            require 'fog/serverlove/version'
         | 
| 2 | 
            +
            require 'fog/core'
         | 
| 3 | 
            +
            require 'fog/json'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Fog
         | 
| 6 | 
            +
              module Compute
         | 
| 7 | 
            +
                autoload :Serverlove, 'fog/compute/serverlove'
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              module Serverlove
         | 
| 11 | 
            +
                extend Fog::Provider
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                service(:compute, 'Compute')
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| 
            File without changes
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            require 'minitest/spec'
         | 
| 2 | 
            +
            require 'minitest/autorun'
         | 
| 3 | 
            +
            require 'turn'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Turn.config do |c|
         | 
| 6 | 
            +
              # use one of output formats:
         | 
| 7 | 
            +
              # :outline  - turn's original case/test outline mode [default]
         | 
| 8 | 
            +
              # :progress - indicates progress with progress bar
         | 
| 9 | 
            +
              # :dotted   - test/unit's traditional dot-progress mode
         | 
| 10 | 
            +
              # :pretty   - new pretty reporter
         | 
| 11 | 
            +
              # :marshal  - dump output as YAML (normal run mode only)
         | 
| 12 | 
            +
              # :cue      - interactive testing
         | 
| 13 | 
            +
              # c.format  = :outline
         | 
| 14 | 
            +
              # turn on invoke/execute tracing, enable full backtrace
         | 
| 15 | 
            +
              c.trace   = 20
         | 
| 16 | 
            +
              # use humanized test names (works only with :outline format)
         | 
| 17 | 
            +
              c.natural = true
         | 
| 18 | 
            +
            end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            if ENV['COVERAGE']
         | 
| 21 | 
            +
              require 'coveralls'
         | 
| 22 | 
            +
              require 'simplecov'
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              SimpleCov.start do
         | 
| 25 | 
            +
                add_filter '/spec/'
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            require File.join(File.dirname(__FILE__), '../lib/fog/serverlove')
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            Coveralls.wear! if ENV['COVERAGE']
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            Shindo.tests('Fog::Compute::Serverlove::PasswordGenerator | generate password', ['serverlove']) do
         | 
| 2 | 
            +
              @password = Fog::Compute::Serverlove::PasswordGenerator.generate
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              tests("@password.length").returns(8) do
         | 
| 5 | 
            +
                @password.length
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              tests("@password contains one capital letter").returns(true) do
         | 
| 9 | 
            +
                @password.match(/[A-Z]/) && true
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              tests("@password contains one lower case letter").returns(true) do
         | 
| 13 | 
            +
                @password.match(/[a-z]/) && true
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| @@ -0,0 +1,59 @@ | |
| 1 | 
            +
            Shindo.tests('Fog::Compute[:serverlove] | drive requests', ['serverlove']) do
         | 
| 2 | 
            +
              @image_format = {
         | 
| 3 | 
            +
                  'drive'             => String,
         | 
| 4 | 
            +
                  'name'              => String,
         | 
| 5 | 
            +
                  'user'              => String,
         | 
| 6 | 
            +
                  'size'              => Integer,
         | 
| 7 | 
            +
                  'claimed'           => Fog::Nullable::String,
         | 
| 8 | 
            +
                  'status'            => String,
         | 
| 9 | 
            +
                  'encryption:cipher' => String,
         | 
| 10 | 
            +
                  'read:bytes'        => String,
         | 
| 11 | 
            +
                  'write:bytes'       => String,
         | 
| 12 | 
            +
                  'read:requests'     => String,
         | 
| 13 | 
            +
                  'write:requests'    => String
         | 
| 14 | 
            +
              }
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              tests('success') do
         | 
| 17 | 
            +
                attributes = { 'name' => 'Test', 'size' => '24234567890' }
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                tests("#create_image").formats(@image_format) do
         | 
| 20 | 
            +
                  pending
         | 
| 21 | 
            +
                  @image = Fog::Compute[:serverlove].create_image(attributes).body
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                tests("#list_images").succeeds do
         | 
| 25 | 
            +
                  pending
         | 
| 26 | 
            +
                  Fog::Compute[:serverlove].images
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                tests("#update_image").returns(true) do
         | 
| 30 | 
            +
                  pending
         | 
| 31 | 
            +
                  @image['name'] = "Diff"
         | 
| 32 | 
            +
                  Fog::Compute[:serverlove].update_image(@image['drive'], { :name => @image['name'], :size => @image['size']})
         | 
| 33 | 
            +
                  Fog::Compute[:serverlove].images.get(@image['drive']).name == "Diff"
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                tests("#load_standard_image").returns(true) do
         | 
| 37 | 
            +
                  pending
         | 
| 38 | 
            +
                  # Load centos
         | 
| 39 | 
            +
                  Fog::Compute[:serverlove].load_standard_image(@image['drive'], '88ed067f-d2b8-42ce-a25f-5297818a3b6f')
         | 
| 40 | 
            +
                  Fog::Compute[:serverlove].images.get(@image['drive']).imaging != "" # This will be "x%" when imaging
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                tests("waits for imaging...").returns(true) do
         | 
| 44 | 
            +
                  pending
         | 
| 45 | 
            +
                  while(percent_complete = Fog::Compute[:serverlove].images.get(@image['drive']).imaging)
         | 
| 46 | 
            +
                    sleep(1)
         | 
| 47 | 
            +
                    STDERR.print "#{percent_complete} "
         | 
| 48 | 
            +
                    break if percent_complete.include?("100")
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
                  STDERR.print "100% "
         | 
| 51 | 
            +
                  true
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                tests("#destroy_image").succeeds do
         | 
| 55 | 
            +
                  pending
         | 
| 56 | 
            +
                  Fog::Compute[:serverlove].destroy_image(@image['drive'])
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
            end
         |