Class: Misty::Cloud

Inherits:
Object
  • Object
show all
Defined in:
lib/misty/cloud.rb

Defined Under Namespace

Classes: Options, Setup

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {:auth => {}}) ⇒ Cloud

Returns a new instance of Cloud.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/misty/cloud.rb', line 14

def initialize(options = {:auth => {}})
  @cloud = Setup.new
  @cloud.auth = Misty::Auth.factory(options[:auth])
  @cloud.content_type = options[:content_type] ? options[:content_type] : nil
  @cloud.log = Logger.new(options[:log_file] ? options[:log_file] : Misty::LOG_FILE)
  @cloud.log.level = options[:log_level] ? options[:log_level] : Misty::LOG_LEVEL

  @options = Options.new
  Misty.services.each do |service|
    @options.send("#{service.name}=".to_sym, options[service.name] ? options[service.name] : {})
  end

  @services = setup_services(@options)
end

Instance Attribute Details

#servicesObject (readonly)

Returns the value of attribute services.



12
13
14
# File 'lib/misty/cloud.rb', line 12

def services
  @services
end

Class Method Details

.dot_to_underscore(val) ⇒ Object



51
52
53
# File 'lib/misty/cloud.rb', line 51

def self.dot_to_underscore(val)
  val.gsub(/\./,'_')
end

Instance Method Details

#alarmingObject



55
56
57
# File 'lib/misty/cloud.rb', line 55

def alarming
  @alarming ||= build_service(:alarming)
end

#baremetalObject



59
60
61
# File 'lib/misty/cloud.rb', line 59

def baremetal
  @baremetal ||= build_service(:baremetal)
end

#block_storageObject Also known as: volume



63
64
65
# File 'lib/misty/cloud.rb', line 63

def block_storage
  @block_storage ||= build_service(:block_storage)
end

#build_service(service_name) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/misty/cloud.rb', line 43

def build_service(service_name)
  project = @services[service_name].keys[0]
  version = @services[service_name].fetch(project)
  version = self.class.dot_to_underscore(version)
  klass = Object.const_get("Misty::Openstack::#{project.capitalize}::#{version.capitalize}")
  klass.new(@cloud, @options[service_name])
end

#clusteringObject



69
70
71
# File 'lib/misty/cloud.rb', line 69

def clustering
  @clustering ||= build_service(:clustering)
end

#computeObject



73
74
75
# File 'lib/misty/cloud.rb', line 73

def compute
  @compute ||= build_service(:compute)
end

#containerObject



77
78
79
# File 'lib/misty/cloud.rb', line 77

def container
  @container ||= build_service(:container)
end

#data_processingObject



81
82
83
# File 'lib/misty/cloud.rb', line 81

def data_processing
  @data_processing ||= build_service(:data_processing)
end

#data_protectionObject



85
86
87
# File 'lib/misty/cloud.rb', line 85

def data_protection
  @data_protection ||= build_service(:data_protection)
end

#databaseObject



89
90
91
# File 'lib/misty/cloud.rb', line 89

def database
  @database ||= build_service(:database)
end

#dnsObject



93
94
95
# File 'lib/misty/cloud.rb', line 93

def dns
  @dns ||= build_service(:dns)
end

#identityObject



97
98
99
# File 'lib/misty/cloud.rb', line 97

def identity
  @identity ||= build_service(:identity)
end

#imageObject



101
102
103
# File 'lib/misty/cloud.rb', line 101

def image
  @image ||= build_service(:image)
end

#messagingObject



105
106
107
# File 'lib/misty/cloud.rb', line 105

def messaging
  @messaging ||= build_service(:messaging)
end

#meteringObject



109
110
111
# File 'lib/misty/cloud.rb', line 109

def metering
  @metering ||= build_service(:metering)
end

#networkObject



113
114
115
# File 'lib/misty/cloud.rb', line 113

def network
  @network ||= build_service(:network)
end

#object_storageObject



117
118
119
# File 'lib/misty/cloud.rb', line 117

def object_storage
  @object_storage ||= build_service(:object_storage)
end

#orchestrationObject



121
122
123
# File 'lib/misty/cloud.rb', line 121

def orchestration
  @orchestration ||= build_service(:orchestration)
end

#searchObject



125
126
127
# File 'lib/misty/cloud.rb', line 125

def search
  @search ||= build_service(:search)
end

#setup_services(options) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/misty/cloud.rb', line 29

def setup_services(options)
  services = {}
  Misty.services.each do |service|
    if options[service.name] && options[service.name][:api_version] \
      && service.versions.include?(options[service.name][:api_version])
      services.merge!(service.name => {service.project => options[service.name][:api_version]})
    else
      # Highest version is used by default!
      services.merge!(service.name => {service.project => service.versions.sort[-1]})
    end
  end
  services
end

#shared_file_systemsObject



129
130
131
# File 'lib/misty/cloud.rb', line 129

def shared_file_systems
  @shared_file_systems ||= build_service(:shared_file_systems)
end