egi-fedcloud-vmhound 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a7d2500d9814285384362ec97be8452dc5d93d0e
4
- data.tar.gz: 30e2f5b8618fdebff446a5b11c975d2c209e5c9a
3
+ metadata.gz: 318e4b960de7c33ef26bdc80d47b2549e7990540
4
+ data.tar.gz: 6443cbdf45d2a17a90a73a5b7a0c0419a1641247
5
5
  SHA512:
6
- metadata.gz: 3e04485f77b349d06f86276a2c3a7962608ca1b2a83843b570707c6bac429995d874ed8aaa47c7bf0cddbeb33ee2ee2892cddcd4fc5fe66c9afcbe81e1db6c73
7
- data.tar.gz: f0f1cbf2155b63877890a640bff420ccb4a8ccf0e079341916b029827033f09719c8735b96479366690b20a24c4528eb9419ec02382618f2af937bc467ff1c91
6
+ metadata.gz: eb7997567ebd5f0c68f917ee1d3503581dec6aa2fc0776f900eab238ef4048710ba04db6937788f3fcc80afbd4abb97867e61e2df6725af93878cc1df3a41d35
7
+ data.tar.gz: 7fdda488d9ce49582c2b114b7b9280f37601749d74069e2a5af406cf70c5ac60c91f8a8ff3fa1be2c99871841210ee73ba7327c4a4bcab6bcb231269f7a454eb
@@ -24,7 +24,7 @@ class EgiFedcloudVmhound < Thor
24
24
 
25
25
  desc "ip IP_ADDRESS", "Prints information based on the provided IP address or IP address range"
26
26
  method_option :cmf, :type => :string, :default => Egi::Fedcloud::Vmhound::Settings.cmf,
27
- :aliases => '-c', :desc => 'Type of the underlying CMF', :required => true
27
+ :aliases => '-c', :desc => 'Type of the underlying CMF'
28
28
  method_option :endpoint, :type => :string, :default => nil,
29
29
  :aliases => '-e', :desc => 'Endpoint of the CMF'
30
30
  method_option :username, :type => :string, :default => nil,
@@ -37,6 +37,8 @@ class EgiFedcloudVmhound < Thor
37
37
  :aliases => '-x', :desc => 'Directory path to all trusted CA certificates'
38
38
  method_option :insecure, :type => :boolean, :default => Egi::Fedcloud::Vmhound::Settings.insecure,
39
39
  :aliases => '-k', :desc => 'Enable insecure mode for SSL (no peer validation)'
40
+ method_option :details, :type => :boolean, :default => Egi::Fedcloud::Vmhound::Settings.details,
41
+ :aliases => '-l', :desc => 'Enable wide tables with more details (off by default)'
40
42
  method_option :debug, :type => :boolean, :default => Egi::Fedcloud::Vmhound::Settings.debug,
41
43
  :aliases => '-d', :desc => 'Enable debugging'
42
44
  def ip(ip_address)
@@ -46,13 +48,14 @@ class EgiFedcloudVmhound < Thor
46
48
  Egi::Fedcloud::Vmhound::Extractor.find_by_ip(
47
49
  ip_address,
48
50
  options
49
- )
51
+ ),
52
+ options
50
53
  )
51
54
  end
52
55
 
53
56
  desc "appuri URI", "Prints information based on the provided Appliance MPURI"
54
57
  method_option :cmf, :type => :string, :default => Egi::Fedcloud::Vmhound::Settings.cmf,
55
- :aliases => '-c', :desc => 'Type of the underlying CMF', :required => true
58
+ :aliases => '-c', :desc => 'Type of the underlying CMF'
56
59
  method_option :endpoint, :type => :string, :default => nil,
57
60
  :aliases => '-e', :desc => 'Endpoint of the CMF'
58
61
  method_option :username, :type => :string, :default => nil,
@@ -65,6 +68,8 @@ class EgiFedcloudVmhound < Thor
65
68
  :aliases => '-x', :desc => 'Directory path to all trusted CA certificates'
66
69
  method_option :insecure, :type => :boolean, :default => Egi::Fedcloud::Vmhound::Settings.insecure,
67
70
  :aliases => '-k', :desc => 'Enable insecure mode for SSL (no peer validation)'
71
+ method_option :details, :type => :boolean, :default => Egi::Fedcloud::Vmhound::Settings.details,
72
+ :aliases => '-l', :desc => 'Enable wide tables with more details (off by default)'
68
73
  method_option :debug, :type => :boolean, :default => Egi::Fedcloud::Vmhound::Settings.debug,
69
74
  :aliases => '-d', :desc => 'Enable debugging'
70
75
  def appuri(uri)
@@ -74,13 +79,14 @@ class EgiFedcloudVmhound < Thor
74
79
  Egi::Fedcloud::Vmhound::Extractor.find_by_appuri(
75
80
  uri,
76
81
  options
77
- )
82
+ ),
83
+ options
78
84
  )
79
85
  end
80
86
 
81
87
  desc "user ID", "Prints information based on the provided user identifier"
82
88
  method_option :cmf, :type => :string, :default => Egi::Fedcloud::Vmhound::Settings.cmf,
83
- :aliases => '-c', :desc => 'Type of the underlying CMF', :required => true
89
+ :aliases => '-c', :desc => 'Type of the underlying CMF'
84
90
  method_option :endpoint, :type => :string, :default => nil,
85
91
  :aliases => '-e', :desc => 'Endpoint of the CMF'
86
92
  method_option :username, :type => :string, :default => nil,
@@ -93,6 +99,8 @@ class EgiFedcloudVmhound < Thor
93
99
  :aliases => '-x', :desc => 'Directory path to all trusted CA certificates'
94
100
  method_option :insecure, :type => :boolean, :default => Egi::Fedcloud::Vmhound::Settings.insecure,
95
101
  :aliases => '-k', :desc => 'Enable insecure mode for SSL (no peer validation)'
102
+ method_option :details, :type => :boolean, :default => Egi::Fedcloud::Vmhound::Settings.details,
103
+ :aliases => '-l', :desc => 'Enable wide tables with more details (off by default)'
96
104
  method_option :debug, :type => :boolean, :default => Egi::Fedcloud::Vmhound::Settings.debug,
97
105
  :aliases => '-d', :desc => 'Enable debugging'
98
106
  def user(id)
@@ -102,7 +110,8 @@ class EgiFedcloudVmhound < Thor
102
110
  Egi::Fedcloud::Vmhound::Extractor.find_by_user(
103
111
  id,
104
112
  options
105
- )
113
+ ),
114
+ options
106
115
  )
107
116
  end
108
117
 
data/config/settings.yml CHANGED
@@ -3,16 +3,19 @@ production:
3
3
  cmf: opennebula
4
4
  ca_path: '/etc/grid-security/certificates'
5
5
  insecure: false
6
+ details: false
6
7
  debug: false
7
8
 
8
9
  development:
9
10
  cmf: opennebula
10
11
  ca_path: '/etc/grid-security/certificates'
11
12
  insecure: true
13
+ details: true
12
14
  debug: true
13
15
 
14
16
  test:
15
17
  cmf: dummy
16
18
  ca_path: '/etc/grid-security/certificates'
17
19
  insecure: true
20
+ details: true
18
21
  debug: true
@@ -7,6 +7,7 @@ class Egi::Fedcloud::Vmhound::Connectors::DummyConnector < Egi::Fedcloud::Vmhoun
7
7
  #
8
8
  # @return [Array<Hash>] List of instances, each represented as a hash
9
9
  def active_instances
10
+ Egi::Fedcloud::Vmhound::Log.info "[#{self.class}] Retrieving active instances"
10
11
  []
11
12
  end
12
13
 
@@ -15,6 +16,7 @@ class Egi::Fedcloud::Vmhound::Connectors::DummyConnector < Egi::Fedcloud::Vmhoun
15
16
  #
16
17
  # @return [Array<Hash>] List of instances, each represented as a hash
17
18
  def running_instances
19
+ Egi::Fedcloud::Vmhound::Log.info "[#{self.class}] Retrieving running instances"
18
20
  []
19
21
  end
20
22
 
@@ -13,8 +13,10 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
13
13
  super
14
14
 
15
15
  secret = if opts[:username] && opts[:password]
16
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Using provided plain credentials"
16
17
  "#{opts[:username]}:#{opts[:password]}"
17
18
  else
19
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Falling back to file and environment credentials"
18
20
  opts[:auth_file] ? File.read(opts[:auth_file]) : nil
19
21
  end
20
22
  secret.strip! if secret
@@ -43,6 +45,7 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
43
45
  #
44
46
  # @return [Array<Hash>] List of instances, each represented as a hash
45
47
  def active_instances
48
+ Egi::Fedcloud::Vmhound::Log.info "[#{self.class}] Retrieving active instances"
46
49
  instances
47
50
  end
48
51
 
@@ -51,6 +54,7 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
51
54
  #
52
55
  # @return [Array<Hash>] List of instances, each represented as a hash
53
56
  def running_instances
57
+ Egi::Fedcloud::Vmhound::Log.info "[#{self.class}] Retrieving running instances"
54
58
  instances ['ACTIVE']
55
59
  end
56
60
 
@@ -62,6 +66,9 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
62
66
  # @param reject_states [Array<String>] a list of states to be rejected
63
67
  # @return [Array<Hash>] a list of instances matching given criteria
64
68
  def instances(allow_states = nil, reject_states = nil)
69
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Retrieving instances: " \
70
+ "allow_states=#{allow_states.inspect} & " \
71
+ "reject_states=#{reject_states.inspect}"
65
72
  return if allow_states && allow_states.empty?
66
73
  reject_states ||= []
67
74
 
@@ -69,7 +76,12 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
69
76
 
70
77
  vms = []
71
78
  @vm_pool_ary.each do |vm|
72
- next if reject_states.include? vm.state_str
79
+ if reject_states.include? vm.state_str
80
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Rejecting VM #{vm['ID']} " \
81
+ "-- #{vm.state_str}"
82
+ next
83
+ end
84
+
73
85
  vms << canonical_instance(vm) if (allow_states.nil? || (allow_states && allow_states.include?(vm.state_str)))
74
86
  end
75
87
 
@@ -84,17 +96,21 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
84
96
  # @return [Array<OpenNebula::VirtualMachine>] a list of VM instances
85
97
  def instances_batch_pool(vm_pool)
86
98
  fail 'Pool object not provided!' unless vm_pool
99
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Iterating over the VM " \
100
+ "pool with batch size #{VM_POOL_BATCH_SIZE}"
87
101
 
88
102
  batch_start = 0
89
103
  batch_stop = VM_POOL_BATCH_SIZE - 1
90
104
  vm_pool_ary = []
91
105
 
92
106
  begin
107
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Getting #{batch_start} to #{batch_stop}"
93
108
  check_retval vm_pool.info(
94
109
  OpenNebula::VirtualMachinePool::INFO_ALL,
95
110
  batch_start, batch_stop,
96
111
  OpenNebula::VirtualMachinePool::INFO_NOT_DONE
97
112
  )
113
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Got #{vm_pool.count.inspect} VMs from pool"
98
114
  vm_pool_ary.concat vm_pool.to_a unless vm_pool.count < 1
99
115
 
100
116
  batch_start = batch_stop + 1
@@ -110,6 +126,7 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
110
126
  # @return [Array<Hash>] a list of images
111
127
  def images
112
128
  return @canonical_image_pool if @canonical_image_pool
129
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Retrieving all images"
113
130
  check_retval @image_pool.info_all!
114
131
 
115
132
  @canonical_image_pool = []
@@ -122,6 +139,7 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
122
139
  # @param image_id [String,Integer] native image ID
123
140
  # @return [Hash,NilClass] canonical image structure
124
141
  def image_by_id(image_id)
142
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Picking image ID #{image_id.inspect} from pool"
125
143
  images.select { |image| image[:id] == image_id.to_i }.first
126
144
  end
127
145
 
@@ -130,6 +148,7 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
130
148
  # @return [Array<Hash>] a list of users
131
149
  def users
132
150
  return @canonical_user_pool if @canonical_user_pool
151
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Retrieving all users"
133
152
  check_retval @user_pool.info!
134
153
 
135
154
  @canonical_user_pool = []
@@ -142,6 +161,7 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
142
161
  # @param user_id [String,Integer] native user ID
143
162
  # @return [Hash,NilClass] canonical user structure
144
163
  def user_by_id(user_id)
164
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Picking user ID #{user_id.inspect} from pool"
145
165
  users.select { |user| user[:id] == user_id.to_i }.first
146
166
  end
147
167
 
@@ -175,6 +195,8 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
175
195
  opennebula_instance.each('TEMPLATE/NIC') { |nic| ips << nic['IP'] }
176
196
  ips.compact!
177
197
 
198
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Assigning IPs #{ips.inspect} " \
199
+ "to #{opennebula_instance['ID'].inspect}"
178
200
  ips
179
201
  end
180
202
 
@@ -191,6 +213,8 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
191
213
  identifiers << opennebula_instance['ID'].to_s
192
214
  identifiers.compact!
193
215
 
216
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Assigning instance IDs " \
217
+ "#{identifiers.inspect} to #{opennebula_instance['ID'].inspect}"
194
218
  identifiers
195
219
  end
196
220
 
@@ -205,6 +229,8 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
205
229
  opennebula_instance.each('HISTORY_RECORDS/HISTORY') { |history| hosts << history['HOSTNAME'] }
206
230
  hosts.compact!
207
231
 
232
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Assigning hosts #{hosts.inspect} " \
233
+ "to #{opennebula_instance['ID'].inspect}"
208
234
  hosts.last
209
235
  end
210
236
 
@@ -242,6 +268,8 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
242
268
  identifiers << opennebula_image['ID'].to_s
243
269
  identifiers.compact!
244
270
 
271
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Assigning IDs #{identifiers.inspect} " \
272
+ "to image #{opennebula_image['ID'].inspect}"
245
273
  identifiers
246
274
  end
247
275
 
@@ -277,6 +305,8 @@ class Egi::Fedcloud::Vmhound::Connectors::OpennebulaConnector < Egi::Fedcloud::V
277
305
  identities.flatten!
278
306
  identities.compact!
279
307
 
308
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self.class}] Assigning identities #{identities.inspect} " \
309
+ "to user #{opennebula_user['ID'].inspect}"
280
310
  identities
281
311
  end
282
312
 
@@ -12,6 +12,7 @@ class Egi::Fedcloud::Vmhound::Extractor
12
12
  return if defined?(@@connector)
13
13
 
14
14
  connector_name = "#{options[:cmf].camelize}Connector"
15
+ Egi::Fedcloud::Vmhound::Log.debug "[#{self}] Getting #{connector_name} for #{options[:cmf]}"
15
16
  @@connector = Egi::Fedcloud::Vmhound::Connectors.const_get(connector_name).new(options)
16
17
 
17
18
  connector_name
@@ -5,30 +5,38 @@ class Egi::Fedcloud::Vmhound::Formatter
5
5
 
6
6
  class << self
7
7
  #
8
- def as_table(data)
8
+ def as_table(data, opts = {})
9
9
  data ||= []
10
10
  Egi::Fedcloud::Vmhound::Log.debug "[#{self}] Transforming #{data.inspect} into a table"
11
11
  table = Terminal::Table.new
12
12
 
13
- table.add_row [
14
- ' >>> VM ID <<< ', ' >>> Owner <<< ', ' >>> VO/Group <<< ',
15
- ' >>> IPs <<< ', ' >>> Phys. location <<< ', ' >>> State <<< ',
16
- ' >>> Contact <<< '
13
+ thead = [
14
+ ' >>> VM ID <<< ', ' >>> Contact <<< ',
15
+ ' >>> Location <<< ', ' >>> State <<< '
17
16
  ]
17
+ thead.concat [
18
+ ' >>> Owner Identity <<< ', ' >>> Group <<< ', ' >>> IPs <<< '
19
+ ] if opts[:details]
20
+
21
+ table.add_row thead
18
22
  table.add_separator
19
23
  data.each do |vm|
20
24
  table.add_separator
21
- table.add_row [
22
- vm[:id], vm[:owner][:identities].join("\n"), vm[:group],
23
- vm[:ips].join("\n"), vm[:host], vm[:state], vm[:owner][:email]
25
+ tbody = [
26
+ vm[:id], vm[:owner][:email], vm[:host], vm[:state]
24
27
  ]
28
+ tbody.concat [
29
+ vm[:owner][:identities].join("\n"),
30
+ vm[:group], vm[:ips].join("\n")
31
+ ] if opts[:details]
32
+ table.add_row tbody
25
33
  end
26
34
 
27
35
  table
28
36
  end
29
37
 
30
38
  #
31
- def as_json(data)
39
+ def as_json(data, opts = {})
32
40
  data ||= []
33
41
  data ? JSON.generate(data) : '{}'
34
42
  end
@@ -2,7 +2,7 @@ module Egi
2
2
  module Fedcloud
3
3
  module Vmhound
4
4
  # Versioning constant
5
- VERSION = "0.0.1" unless defined?(::Egi::Fedcloud::Vmhound::VERSION)
5
+ VERSION = "0.0.2" unless defined?(::Egi::Fedcloud::Vmhound::VERSION)
6
6
  end
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: egi-fedcloud-vmhound
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Boris Parak
@@ -249,7 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
249
249
  version: '0'
250
250
  requirements: []
251
251
  rubyforge_project:
252
- rubygems_version: 2.2.2
252
+ rubygems_version: 2.4.4
253
253
  signing_key:
254
254
  specification_version: 4
255
255
  summary: A proof-of-concept utility for locating VM instances in EGI Federated Cloud