def delete(self, id): cmdline = create_cmdline(Id=id) result = powershell.execute('Get-Tag %s' ' | Tee-Object -Variable tag' % cmdline) if not result: raise KeyError, 'Tag not found' powershell.execute('Remove-Tag -TagObject $tag')
def delete(self, id): filter = create_filter(datacenterid=id) result = powershell.execute('Select-DataCenter | %s' ' | Tee-Object -Variable dc' % filter) if len(result) != 1: raise KeyError powershell.execute('Remove-DataCenter -DataCenterId $dc.DataCenterId')
def delete(self, id): filter = create_filter(vmid=id) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: raise KeyError powershell.execute('Remove-Vm -VmId $vm.VmId')
def template_object(name): """Return the template ID for a template name.""" filter = create_filter(name=name) result = powershell.execute('Select-Template | %s' % filter) if len(result) != 1: raise KeyError, 'Template not found' powershell.execute('$template = Select-Template | %s' % filter) return '$template'
def update(self, id, input): cmdline = create_cmdline(Id=id) result = powershell.execute('Get-Tag %s' ' | Tee-Object -Variable tag' % cmdline) if not result: raise KeyError, 'Tag not found' setattr = create_setattr('tag', **input) result = powershell.execute('%s; Update-Tag -TagObject $tag' % setattr) return result[0]
def list(self, vm, **args): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: return filter = create_filter(**args) result = powershell.execute('$vm.GetDiskImages() | %s' % filter) return result
def list(self, vm, **args): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: return filter = create_filter(**args) result = powershell.execute('$vm.GetNetworkAdapters() | %s' % filter) return result
def update(self, id, input): filter = create_filter(vmid=id) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: raise KeyError updates = create_setattr('vm', **input) powershell.execute(updates) result = powershell.execute('Update-Vm -VmObject $vm') return result[0]
def create(self, vm, input): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: return cmdline = create_cmdline(**input) powershell.execute('Set-VmTicket -VmObject $vm %s' % cmdline) url = mapper.url_for(collection='vm', action='show', id=vm) return url
def update(self, id, input): filter = create_filter(datacenterid=id) result = powershell.execute('Select-DataCenter | %s' ' | Tee-Object -Variable dc' % filter) if len(result) != 1: raise KeyError updates = create_setattr('dc', **input) powershell.execute(updates) result = powershell.execute('Update-DataCenter -DataCenterObject $dc') return result[0]
def create(self, input): props = ('Name', 'TemplateObject', 'HostClusterId', 'VmType') args = dict(((prop, input.pop(prop)) for prop in props)) cmdline = create_cmdline(**args) result = powershell.execute('$vm = Add-VM %s' % cmdline) updates = create_setattr('vm', **input) powershell.execute(updates) result = powershell.execute('Update-Vm -VmObject $vm') url = mapper.url_for(collection=self.name, action='show', id=result[0]['VmId']) return url, result[0]
def show(self, vm, id): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: return filter = create_filter(snapshotid=id) result = powershell.execute('$vm.GetDiskImages() | %s' % filter) if not result: return return result[0]
def show(self, vm, id): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: return filter = create_filter(id=id) result = powershell.execute('$vm.GetNetworkAdapters() | %s' % filter) if len(result) != 1: return return result[0]
def delete(self, vm, id): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: raise KeyError filter = create_filter(snapshotid=id) result = powershell.execute('$vm.GetDiskImages() | %s' ' | Tee-Object -Variable disk' % filter) if len(result) != 1: raise KeyError powershell.execute('Remove-Disk -DiskId $disk.SnapshotId -VmId $vm.VmId')
def delete(self, vm, id): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: raise KeyError filter = create_filter(id=id) result = powershell.execute('$vm.GetNetworkAdapters() | %s' ' | Tee-Object -Variable nic' % filter) if len(result) != 1: raise KeyError powershell.execute('Remove-NetworkAdapter -VmObject $vm ' ' -NetworkAdapter $nic')
def delete(self, vm, id): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: raise KeyError filter = create_filter(snapshotid=id) result = powershell.execute('$vm.GetDiskImages() | %s' ' | Tee-Object -Variable disk' % filter) if len(result) != 1: raise KeyError powershell.execute( 'Remove-Disk -DiskId $disk.SnapshotId -VmId $vm.VmId')
def create_powershell(username, password, domain): """Create a powershell object.""" powershell = PowerShell() auth = { 'username': username, 'domain': domain, 'password': password } if hasattr(sys, 'isapidllhandle'): powershell.start(**auth) powershell.execute('Login-User') else: powershell.start() powershell.execute('Login-User %s' % create_cmdline(**auth)) result = powershell.execute('Get-Version') version = tuple(map(int, (result[0][i] for i in ( 'Major', 'Minor', 'Build', 'Revision')))) powershell.version = version return powershell
def cluster_name(id): """Retur the cluster name for a given ID.""" filter = create_filter(clusterid=id) result =powershell.execute('Select-Cluster | %s' % filter) if len(result) != 1: raise KeyError, 'Cluster not found.' return result[0]['Name']
def create(self, input): cmdline = create_cmdline(**input) result = powershell.execute('Add-Tag %s' % cmdline) url = mapper.url_for(collection='tags', action='show', id=result[0]['TagID']) return url, result[0]
def list(self, dc, **args): filter = create_filter(DataCenterId=dc) result = powershell.execute("Get-ISOImages -DataCenterId %s" % dc) isos = [] for iso in result: isos.append({"name": iso}) return isos
def template_name(id): """Retur the template name for a given ID.""" filter = create_filter(templateid=id) result =powershell.execute('Select-Template | %s' % filter) if len(result) != 1: raise KeyError, 'Template not found.' return result[0]['Name']
def cluster_id(name): """Return the cluster ID for a cluster name.""" filter = create_filter(name=name) result =powershell.execute('Select-Cluster | %s' % filter) if len(result) != 1: raise KeyError, 'Cluster not found.' return result[0]['ClusterID']
def host_id(name): """Return the host ID for a host name.""" filter = create_filter(name=name) result = powershell.execute('Select-Host | %s' % filter) if len(result) != 1: raise KeyError, 'Host not found.' return result[0]['HostID']
def list(self, dc, **args): filter = create_filter(DataCenterId=dc) result = powershell.execute('Get-ISOImages -DataCenterId %s' % dc) isos = [] for iso in result: isos.append({'name': iso}) return isos
def pool_id(name): """Return the pool ID for a pool name.""" filter = create_filter(name=name) result = powershell.execute('Select-VmPool | %s' % filter) if len(result) != 1: raise KeyError, 'Pool not found.' return result[0]['PoolID']
def create(self, vm, input): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: raise KeyError cmdline = create_cmdline(**input) result = powershell.execute('Add-NetworkAdapter -VmObject $vm %s' % cmdline) # On RHEV-M 2.1, i get weird output from Add-NetworkAdapter.. This is # not equal to the output of $vm.GetNetworkAdapters(). Re-fetch the # object again. filter = create_filter(name=input['InterfaceName']) # This is unique result = powershell.execute('$vm.GetNetworkAdapters() | %s' % filter) url = mapper.url_for(collection=self.name, action='show', id=result[0]['Id'],vm=vm) return url, result[0]
def show(self, id): cmdline = create_cmdline(CommandTaskIdList=id) # XXX: this does not work yet. Finding out more info on # Get-TasksStatus. result = powershell.execute('Get-TasksStatus %s' % cmdline) if len(result) != 1: raise KeyError return result[0]
def detach_from_object(self, type, id, tag): if type == 'vms': cmdline = create_cmdline(VmId=id) elif type == 'hosts': cmdline = create_cmdline(HostId=id) elif type == 'users': cmdline = create_cmdline(UserId=id) elif type == 'clusters': cmdline = create_cmdline(ClusterId=id) else: return filter = create_filter(TagId=tag) result = powershell.execute('Get-Tags %s | %s | Tee-Object' ' -Variable tag' % (cmdline, filter)) if not result: raise KeyError, 'No such tag' powershell.execute('Detach-Tag -TagObject $tag %s' % cmdline)
def attach_to_object(self, type, id, input): cmdline = create_cmdline(**input) result = powershell.execute('Get-Tag %s | Tee-Object -Variable tag' % cmdline) if not result: raise KeyError if type == 'vms': cmdline = create_cmdline(VmId=id) elif type == 'hosts': cmdline = create_cmdline(HostId=id) elif type == 'users': cmdline = create_cmdline(UserId=id) elif type == 'clusters': cmdline = create_cmdline(ClusterId=id) else: return result = powershell.execute('Attach-Tag -TagObject $tag %s' % cmdline) return result[0]
def host_name(id, cluster): """Retur the host name for a given ID.""" if id in ('-1', None): return filter = create_filter(hostid=id, hostclusterid=cluster) result = powershell.execute('Select-Host | %s' % filter) if len(result) != 1: return return result[0]['Name']
def pool_name(id): """Retur the pool name for a given ID.""" if id == -1: return None filter = create_filter(poolid=id) result =powershell.execute('Select-VmPool | %s' % filter) if len(result) != 1: raise KeyError, 'Pool not found.' return result[0]['Name']
def create(self, vm, input): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: raise KeyError cmdline = create_cmdline(**input) result = powershell.execute('Add-NetworkAdapter -VmObject $vm %s' % cmdline) # On RHEV-M 2.1, i get weird output from Add-NetworkAdapter.. This is # not equal to the output of $vm.GetNetworkAdapters(). Re-fetch the # object again. filter = create_filter(name=input['InterfaceName']) # This is unique result = powershell.execute('$vm.GetNetworkAdapters() | %s' % filter) url = mapper.url_for(collection=self.name, action='show', id=result[0]['Id'], vm=vm) return url, result[0]
def create(self, vm, input): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: raise KeyError # With RHEVM-2.1, when adding a disk with Add-Disk, the new SnapshotId # is not returned. Therefore we need to compare disk images before and # after to conclude what our new SnapshotId is. On RHEVM-2.2 the # SnapshotId seems to be returned. result = powershell.execute('$vm.GetDiskImages()') old = set((disk['SnapshotId'] for disk in result)) create = {'DiskSize': input.pop('DiskSize')} cmdline = create_cmdline(**create) updates = create_setattr('disk', **input) powershell.execute('$disk = New-Disk %s; %s' % (cmdline, updates)) if powershell.version >= (2, 2): vmref = '-VmObject $vm' else: vmref = '-VmId $vm.VmId' if input.get('VolumeType') == 'Preallocated': result = powershell.execute( 'Add-Disk -DiskObject $disk %s -Async' % vmref) tasks = powershell.execute('Get-LastCommandTasks') async = True else: result = powershell.execute('Add-Disk -DiskObject $disk %s' % vmref) async = False result = powershell.execute('$vm.GetDiskImages()') new = set((disk['SnapshotId'] for disk in result)) diskid = (new - old).pop() filter = create_filter(snapshotid=diskid) result = powershell.execute('$vm.GetDiskImages() | %s' % filter) if async: response.status = http.ACCEPTED url = mapper.url_for(collection='tasks', action='show', id=tasks[0]['TaskId']) response.set_header('Link', '<%s>; rel=status' % url) url = mapper.url_for(collection=self.name, action='show', id=result[0]['SnapshotId'], vm=vm) return url, result[0]
def show_for_object(self, type, id): if type == 'vms': cmdline = create_cmdline(VmId=id) elif type == 'hosts': cmdline = create_cmdline(HostId=id) elif type == 'users': cmdline = create_cmdline(UserId=id) elif type == 'clusters': cmdline = create_cmdline(ClusterId=id) else: raise KeyError result = powershell.execute('Get-Tags %s' % cmdline) return result
def create(self, vm, input): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: return command = input.pop('command') if command == 'start': cmdline = create_cmdline(**input) result = powershell.execute('Start-Vm -VmId $vm.VmId %s' % cmdline) elif command == 'stop': powershell.execute('Stop-Vm -VmObject $vm') elif command == 'shutdown': powershell.execute('Shutdown-Vm -VmObject $vm') elif command == 'suspend': powershell.execute('Suspend-Vm -VmObject $vm') elif command == 'migrate': cmdline = create_cmdline(**input) powershell.execute('Migrate-Vm -VmObject $vm %s' % cmdline) url = mapper.url_for(collection=self.name, action='show', id=result[0]['VmId']) return url, result[0]
def create(self, vm, input): filter = create_filter(vmid=vm) result = powershell.execute('Select-Vm | %s' ' | Tee-Object -Variable vm' % filter) if len(result) != 1: raise KeyError # With RHEVM-2.1, when adding a disk with Add-Disk, the new SnapshotId # is not returned. Therefore we need to compare disk images before and # after to conclude what our new SnapshotId is. On RHEVM-2.2 the # SnapshotId seems to be returned. result = powershell.execute('$vm.GetDiskImages()') old = set((disk['SnapshotId'] for disk in result)) create = { 'DiskSize': input.pop('DiskSize') } cmdline = create_cmdline(**create) updates = create_setattr('disk', **input) powershell.execute('$disk = New-Disk %s; %s' % (cmdline, updates)) if powershell.version >= (2, 2): vmref = '-VmObject $vm' else: vmref = '-VmId $vm.VmId' if input.get('VolumeType') == 'Preallocated': result = powershell.execute('Add-Disk -DiskObject $disk %s -Async' % vmref) tasks = powershell.execute('Get-LastCommandTasks') async = True else: result = powershell.execute('Add-Disk -DiskObject $disk %s' % vmref) async = False result = powershell.execute('$vm.GetDiskImages()') new = set((disk['SnapshotId'] for disk in result)) diskid = (new - old).pop() filter = create_filter(snapshotid=diskid) result = powershell.execute('$vm.GetDiskImages() | %s' % filter) if async: response.status = http.ACCEPTED url = mapper.url_for(collection='tasks', action='show', id=tasks[0]['TaskId']) response.set_header('Link', '<%s>; rel=status' % url) url = mapper.url_for(collection=self.name, action='show', id=result[0]['SnapshotId'], vm=vm) return url, result[0]