vi_cli 0.1.1 → 0.1.2

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/History.txt CHANGED
@@ -1,3 +1,14 @@
1
+ === 0.1.2 / 2009-06-15
2
+
3
+ * 1 bug fix
4
+ * Pause getchar thread when showing dialogs
5
+ * 1 major enhancement
6
+ * Cache arguments used in tasks
7
+ * 3 minor enhancements
8
+ * Cache virtual machine summary and hardware
9
+ * Show progress for running tasks
10
+ * Add power on specific host to virtual machine tasks
11
+
1
12
  === 0.1.1 / 2009-06-08
2
13
 
3
14
  * 1 bug fix
data/lib/VM.rb CHANGED
@@ -5,6 +5,7 @@ class VM
5
5
  @ref = ref
6
6
  @session = session
7
7
  @name = name
8
+ @cached_state = Hash[ :state => [], :hw => [] ]
8
9
  end
9
10
  def name
10
11
  @name.strip
@@ -95,7 +96,10 @@ class VM
95
96
  res << [first ? 'notes' : '',a]
96
97
  first = false
97
98
  end
98
- Hash[ :state => res, :hw => get_hw_info.compact ]
99
+ @cached_state = Hash[ :state => res, :hw => get_hw_info.compact ]
100
+ end
101
+ def cached_state
102
+ @cached_state
99
103
  end
100
104
  def execute_task task, *args
101
105
  @ref.send task.to_sym, *args
data/lib/VMFolder.rb CHANGED
@@ -26,6 +26,9 @@ class VMFolder
26
26
  def state
27
27
  Hash[ :state => [], :hw => [] ]
28
28
  end
29
+ def cached_state
30
+ state
31
+ end
29
32
  def execute_task task, *args
30
33
  self.send task.to_sym, *args if has_task? task
31
34
  true
data/lib/VcData.rb CHANGED
@@ -20,11 +20,15 @@ class VcData
20
20
  @session = $mock || VMware::Session.new(@connection)
21
21
  @vm_folder = $mock || @session.root_folder.children[0].vm_folder
22
22
  @refs = []
23
+ @entities = {}
23
24
  @save_data = save_data
24
25
  @tree_changed = false
25
26
  end
26
27
  def find_entities type
27
- @session.find_entities(type).collect {|ref| { :ref => ref, :name => @session.wrap(ref)['name'].to_s } }
28
+ return @entities[type] unless @entities[type].nil?
29
+ @entities[type] = @session.find_entities(type).collect do |ref|
30
+ { :ref => ref, :name => @session.wrap(ref)['name'].to_s }
31
+ end
28
32
  end
29
33
  def collect folder, save_data, indent=''
30
34
  if folder.class.to_s == "VMware::Folder"
@@ -84,8 +88,10 @@ class VcData
84
88
  desc = t['name'] || t['descriptionId'] # TODO use task descriptions form TaskManager
85
89
  target = t['entityName']
86
90
  cancelled = t['cancelled'].to_s
87
- status = t['state']
88
- status = t['error']['localizedMessage'] if status == 'error'
91
+ status = t['state'].to_s
92
+ status = t['error']['localizedMessage'].to_s if status == 'error'
93
+ status = t['progress'].to_s+'%' if status == 'running'
94
+ status = 'running' if status == '%'
89
95
  user = t['reason']
90
96
  user = user['userName'] || user['name'] || user['alarmName'] || '<System>'
91
97
  start = t['startTime']
data/lib/ViCli.rb CHANGED
@@ -32,7 +32,7 @@ class ViCli
32
32
  def on_focus_callback index
33
33
  add_tasks index
34
34
  #TODO needs cached data for state and hardware
35
- draw_state Hash[ :state => [], :hw => [] ]
35
+ draw_state @model.get :cached_state, index
36
36
  @gui.refresh
37
37
  @watcher.refresh_queue.push @gui.current_list_index
38
38
  end
@@ -45,7 +45,9 @@ class ViCli
45
45
  entities = @model.find_entities arg
46
46
  return nil if entities.empty?
47
47
  return entities.first[:ref] if entities.length == 1
48
+ @watcher.pause :getchar
48
49
  selected = @gui.select entities.collect {|e| e[:name] }
50
+ @watcher.resume :getchar
49
51
  entities.each {|e| return e[:ref] if e[:name] == selected }
50
52
  end
51
53
  def on_fire_callback index, key
@@ -64,6 +66,8 @@ class ViCli
64
66
  end
65
67
  def load_folders
66
68
  @gui.set_status "Loading VM Folders ..."
69
+ args = @config.keys.values.collect { |i| i['args'] }
70
+ args.compact.flatten.uniq.each { |i| @model.find_entities i }
67
71
  @model.refresh_list
68
72
  @gui.draw_list @model.vm_list
69
73
  @watcher.refresh_queue.push @gui.current_list_index
@@ -102,7 +106,15 @@ class ViCli
102
106
  end
103
107
  def setup_queues
104
108
  #@watcher.register(:resize) { |q| loop { q.push sleep 5 } }
105
- @watcher.register(:getchar) { |q| loop { q.push @gui.getchar } }
109
+ @watcher.register(:getchar) do |q|
110
+ loop do
111
+ begin
112
+ loop { q.push @gui.getchar }
113
+ rescue => ex
114
+ Thread.stop
115
+ end
116
+ end
117
+ end
106
118
  @watcher.register(:sleep) do |q|
107
119
  loop do
108
120
  start = Time.now
data/lib/ViCliConfig.rb CHANGED
@@ -27,6 +27,7 @@ class ViCliConfig
27
27
  return @config['keys'] unless @config['keys'].nil?
28
28
  @config['keys'] = {
29
29
  '&power on' => {'action' => 'powerOnVM_Task', 'check' => {'vm_on' => false, 'is_templ' => false} },
30
+ 'power on specific host' => {'action' => 'powerOnVM_Task', 'args' => ['HostSystem'], 'check' => {'vm_on' => false, 'is_templ' => false} },
30
31
  '&unfold' => {'action' => 'unfold', 'check' => {'collapsed' => true} },
31
32
  'f&old' => {'action' => 'fold', 'check' => {'collapsed' => false} },
32
33
  '&reboot guest' => {'action' => 'rebootGuest', 'check' => {'vm_on' => true} },
data/lib/Watcher.rb CHANGED
@@ -8,6 +8,7 @@ class Watcher
8
8
  def initialize
9
9
  @queue = Queue.new
10
10
  @queues = {}
11
+ @threads = {}
11
12
  @refresh_queue = LastQueue.new
12
13
  end
13
14
  def update
@@ -17,11 +18,17 @@ class Watcher
17
18
  @queue.pop
18
19
  end
19
20
  def [] key
20
- @queues[key.to_s]
21
+ @queues[key]
21
22
  end
22
23
  def register name, &block
23
- q = @queues[name.to_s] = ObservedQueue.new(self)
24
- Thread.new q, &block
24
+ q = @queues[name] = ObservedQueue.new(self)
25
+ @threads[name] = Thread.new q, &block
26
+ end
27
+ def pause name
28
+ @threads[name].raise "sleep!"
29
+ end
30
+ def resume name
31
+ @threads[name].wakeup
25
32
  end
26
33
  end
27
34
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vi_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - SebDE
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-08 00:00:00 +02:00
12
+ date: 2009-06-15 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency