Use admin.vm.CurrentState method for power state and memory
Depends on the method introduced in QubesOS/qubes-core-admin#307. Adding the get_mem() method using the same CurrentState admin method also fixes the bug with qvm-ls not showing memory, see QubesOS/qubes-issues#5166.
This commit is contained in:
		
							parent
							
								
									1b53de8365
								
							
						
					
					
						commit
						d5c9328a8c
					
				| @ -1,4 +1,4 @@ | |||||||
| # -*- encoding: utf8 -*- | # -*- encoding: utf-8 -*- | ||||||
| # | # | ||||||
| # The Qubes OS Project, http://www.qubes-os.org | # The Qubes OS Project, http://www.qubes-os.org | ||||||
| # | # | ||||||
| @ -182,19 +182,20 @@ class QubesVM(qubesadmin.base.PropertyHolder): | |||||||
|         ''' |         ''' | ||||||
| 
 | 
 | ||||||
|         try: |         try: | ||||||
|             vm_list_info = [line |             return self._get_current_state()['power_state'] | ||||||
|                 for line in self.qubesd_call( |  | ||||||
|                     self._method_dest, 'admin.vm.List', None, None |  | ||||||
|                 ).decode('ascii').split('\n') |  | ||||||
|                 if line.startswith(self._method_dest+' ')] |  | ||||||
|         except qubesadmin.exc.QubesDaemonNoResponseError: |         except qubesadmin.exc.QubesDaemonNoResponseError: | ||||||
|             return 'NA' |             return 'NA' | ||||||
|         assert len(vm_list_info) == 1 |  | ||||||
|         #  name class=... state=... other=... |  | ||||||
|         # NOTE: when querying dom0, we get whole list |  | ||||||
|         vm_state = vm_list_info[0].strip().partition('state=')[2].split(' ')[0] |  | ||||||
|         return vm_state |  | ||||||
| 
 | 
 | ||||||
|  |     def get_mem(self): | ||||||
|  |         return int(self._get_current_state()['mem']) | ||||||
|  | 
 | ||||||
|  |     def _get_current_state(self): | ||||||
|  |         state = {} | ||||||
|  |         response = self.qubesd_call(self._method_dest, 'admin.vm.CurrentState') | ||||||
|  |         for part in response.decode('ascii').split(): | ||||||
|  |             name, value = part.split('=', 1) | ||||||
|  |             state[name] = value | ||||||
|  |         return state | ||||||
| 
 | 
 | ||||||
|     def is_halted(self): |     def is_halted(self): | ||||||
|         ''' Check whether this domain's state is 'Halted' |         ''' Check whether this domain's state is 'Halted' | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Pawel Marczewski
						Pawel Marczewski