Class: RbVmomi::VIM::VirtualApp
- Inherits:
-
Object
- Object
- RbVmomi::VIM::VirtualApp
- Defined in:
- lib/vmonkey/vim/VirtualApp.rb
Instance Method Summary collapse
- #_clone_params(vapp_name, dest, opts) ⇒ Object
- #annotation ⇒ Object
- #annotation=(value) ⇒ Object
- #clone_to(path, opts = {}) ⇒ Object
- #clone_to!(path, opts = {}) ⇒ Object
- #destroy ⇒ Object
- #find_property(name) ⇒ Object
- #find_vm(vm_name) ⇒ Object
- #find_vm!(vm_name) ⇒ Object
- #move_to(path) ⇒ Object
- #move_to!(path) ⇒ Object
- #network=(network_name) ⇒ Object
- #path_with_name ⇒ Object
- #port_ready?(port, timeout = 5) ⇒ Boolean
- #properties ⇒ Object
- #property(*args) ⇒ Object
- #property!(name) ⇒ Object
- #read_property(name) ⇒ Object
- #set_properties(props) ⇒ Object
- #set_property(name, value, requested_opts = {}) ⇒ Object
- #start ⇒ Object
- #stop ⇒ Object
- #vapp_state?(state) ⇒ Boolean
- #vm_folder ⇒ Object
- #vm_pool ⇒ Object
- #wait_for(max = 600, interval = 2, &block) ⇒ Object
- #wait_for_port(port) ⇒ Object
Instance Method Details
#_clone_params(vapp_name, dest, opts) ⇒ Object
212 213 214 215 216 217 218 219 220 221 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 212 def _clone_params(vapp_name, dest, opts) { name: vapp_name, target: monkey.cluster.resourcePool, spec: RbVmomi::VIM.VAppCloneSpec( location: opts[:datastore], vmFolder: dest ) } end |
#annotation ⇒ Object
44 45 46 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 44 def annotation vAppConfig.annotation end |
#annotation=(value) ⇒ Object
48 49 50 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 48 def annotation=(value) self.UpdateVAppConfig(spec: {annotation: value}) end |
#clone_to(path, opts = {}) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 71 def clone_to(path, opts = {}) dest = opts[:vmFolder] || monkey.get(path.parent) unless dest.is_a? RbVmomi::VIM::Folder or dest.is_a? RbVmomi::VIM::VirtualApp raise "Cannot clone_to [#{path.parent}] - destination must specify a Folder or VirtualApp" end if opts[:datastore].nil? opts[:datastore] = datastore.first #take the first datastore on the vApp to be cloned end params = _clone_params(path.basename, dest, opts) self.CloneVApp_Task(params).wait_for_completion end |
#clone_to!(path, opts = {}) ⇒ Object
86 87 88 89 90 91 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 86 def clone_to!(path, opts = {}) dest_vapp = monkey.vapp(path) dest_vapp.destroy if dest_vapp clone_to(path) end |
#destroy ⇒ Object
5 6 7 8 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 5 def destroy self.PowerOffVApp_Task( force: true ).wait_for_completion unless vapp_state? 'stopped' self.Destroy_Task( force: true ).wait_for_completion end |
#find_property(name) ⇒ Object
93 94 95 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 93 def find_property(name) vAppConfig.property.find { |p| p.props[:id] == name.to_s } end |
#find_vm(vm_name) ⇒ Object
36 37 38 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 36 def find_vm(vm_name) vm.find { |vm| vm.name == vm_name } end |
#find_vm!(vm_name) ⇒ Object
40 41 42 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 40 def find_vm!(vm_name) find_vm(vm_name) || raise("VM not found. [#{vm_name}]") end |
#move_to(path) ⇒ Object
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 183 def move_to(path) monkey.vapp(path) && raise("VirtualApp already exists. [#{path}]") rename = self.name != path.basename to_folder = monkey.folder! path.parent reparent = parent != to_folder if reparent self.Rename_Task(newName: "#{path.basename}-tmp").wait_for_completion if rename to_folder.MoveIntoFolder_Task(list: [self]).wait_for_completion self.Rename_Task(newName: path.basename).wait_for_completion if rename else self.Rename_Task(newName: path.basename).wait_for_completion end end |
#move_to!(path) ⇒ Object
199 200 201 202 203 204 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 199 def move_to!(path) dest_vapp = monkey.vapp(path) dest_vapp.destroy if dest_vapp move_to(path) end |
#network=(network_name) ⇒ Object
206 207 208 209 210 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 206 def network=(network_name) self.vm.each do |vm| vm.network = network_name end end |
#path_with_name ⇒ Object
28 29 30 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 28 def path_with_name "#{vm_folder.name}/#{self.name}" end |
#port_ready?(port, timeout = 5) ⇒ Boolean
157 158 159 160 161 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 157 def port_ready?(port, timeout=5) return false if vapp_state? 'stopped' ready=self.vm.all? { |vm| vm.port_ready?(port, 2) } ready end |
#properties ⇒ Object
52 53 54 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 52 def properties vAppConfig.property end |
#property(*args) ⇒ Object
56 57 58 59 60 61 62 63 64 65 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 56 def property(*args) case args.size when 1 read_property(*args) when 2, 3 set_property(*args) else raise ArgumentError.new("wrong number of arguments (#{args.size} for 1, 2 or 3)") end end |
#property!(name) ⇒ Object
67 68 69 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 67 def property!(name) read_property(name) || raise("vApp Property not found. [#{name}]") end |
#read_property(name) ⇒ Object
97 98 99 100 101 102 103 104 105 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 97 def read_property(name) p = find_property(name) value = nil unless p.nil? value = p[:value] value = p[:defaultValue] if value.empty? end value end |
#set_properties(props) ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 143 def set_properties(props) props.each do |key, v| if v.is_a?(Hash) value = v.delete :value opts = v else value = v opts = {} end set_property key, value, opts end end |
#set_property(name, value, requested_opts = {}) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 107 def set_property(name, value, requested_opts={}) default_opts = { type: 'string', userConfigurable: true } existing_opts = {} if vAppConfig.property existing_property = find_property(name) end if existing_property operation = 'edit' existing_opts = existing_property.props property_key = existing_property.props[:key] else operation = 'add' property_key = name.object_id end opts = default_opts.merge(existing_opts).merge(requested_opts) vapp_config_spec = RbVmomi::VIM.VAppConfigSpec( property: [ RbVmomi::VIM.VAppPropertySpec( operation: operation, info: opts.merge({ key: property_key, id: name.to_s, value: value.to_s }))]) self.UpdateVAppConfig( spec: vapp_config_spec ) end |
#start ⇒ Object
14 15 16 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 14 def start self.PowerOnVApp_Task().wait_for_completion unless vapp_state? 'started' end |
#stop ⇒ Object
18 19 20 21 22 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 18 def stop return if vapp_state? 'stopped' self.PowerOffVApp_Task( force: true ) sleep 2 until vapp_state? 'stopped' end |
#vapp_state?(state) ⇒ Boolean
10 11 12 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 10 def vapp_state?(state) summary.vAppState.downcase == state end |
#vm_folder ⇒ Object
32 33 34 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 32 def vm_folder parentVApp.nil? ? parentFolder : self.parentVApp.vm_folder end |
#vm_pool ⇒ Object
24 25 26 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 24 def vm_pool self end |
#wait_for(max = 600, interval = 2, &block) ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 163 def wait_for(max=600, interval=2, &block) elapsed = 0 start = Time.now until (result = yield) || (elapsed > max) sleep interval elapsed = Time.now - start end unless result raise "Waited #{max} seconds, giving up." end true end |
#wait_for_port(port) ⇒ Object
179 180 181 |
# File 'lib/vmonkey/vim/VirtualApp.rb', line 179 def wait_for_port(port) wait_for { port_ready?(port) } end |