vi_cli 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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