Sha256: f65ec7e3ba77c8cabe56c716efb08b9ba524a25d16f6ef07ca19e11e1d8fe4ab

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

require 'fog/core/model'
require 'fog/qingcloud/core'

module Fog
  module QingCloud
    class Model < Fog::Model

      # Define a common modify_attributes method for some resources
      def self.inherited(child)
        resource_type = Fog::QingCloud.underscore_string(child.to_s.split(':').last)
        aliased_resource_type = {
          'server' => 'instance',
          'address' => 'eip',
          'key_pair' => 'keypair'
        }
        resource_type = aliased_resource_type.fetch(resource_type, resource_type)

        attributes_modifable_resources = ['instance', 'volume', 'vxnet', 'eip', 
          'security_group', 'keypair', 'image']
        if attributes_modifable_resources.include?(resource_type)
          child.class_eval <<-EOS, __FILE__, __LINE__
            def modify_attributes(name, description)
              requires :id
              raise Fog::QingCloud::Errors::CommonClientError, "name or description must be specified" unless name || description
              service.modify_resource_attributes(id, '#{resource_type}', name, description)
              merge_attributes('#{resource_type}_name' => name, 'description' => description)
              true
            end
          EOS
        end
      end

      def wait_for(&block)
        wait_policy = lambda { |retries| retries < 8 ? 9 - retries : 1 }
        timeout = 80
        super(timeout, wait_policy, &block)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ns-fog-1.22.2 lib/fog/qingcloud/model.rb