Bug 681457

Summary: vdsClient: usage not printed for vdsClient upgradeStoragePool command
Product: Red Hat Enterprise Linux 6 Reporter: Avi Tal <atal>
Component: vdsmAssignee: Yotam Oron <yoron>
Status: CLOSED ERRATA QA Contact: Yaniv Kaul <ykaul>
Severity: low Docs Contact:
Priority: unspecified    
Version: 6.1CC: abaron, bazulay, danken, iheim, ilvovsky, jkt, pstehlik, sgrinber, srevivo, syeghiay, tdosek, yeylon, ykaul
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: vdsm-4.9-72.el6 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2011-12-06 07:08:11 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Avi Tal 2011-03-02 09:08:12 UTC
Description of problem:
vdsm-4.9-51.el6.x86_64
libvirt-0.8.7-8.el6.x86_64


[root@south-01 ~]# vdsClient -s 0 upgradeStoragePool
General Exception: ('method upgradeStoragePool args: (), error: public_upgradeStoragePool() takes exactly 3 arguments (1 given)',)

Steps to Reproduce:
1.vdsClient -s 0 upgradeStoragePool

  
Actual results:


Expected results:


Additional info:

Comment 1 Dan Kenigsberg 2011-03-03 12:53:57 UTC
proper usage information should be printed when validateArgTypes fails.

Comment 2 Yotam Oron 2011-03-28 14:10:07 UTC
Verified on:
vdsm-cli-4.9-42.el6.x86_64
vdsm-4.9-56.el6.x86_64
libvirt-client-0.8.7-7.el6.x86_64
libvirt-0.8.7-7.el6.x86_64
libvirt-python-0.8.7-7.el6.x86_64

Output:
[root@grey-vdse yoron]# vdsClient -s 0 upgradeStoragePool 
ERROR - Unknown command
Usage:  vdsClient <server> [OPTIONS] <command> [Command parameters]

Options
-h	Display this help
-m	List supported methods and their params (Short help)
-s [--truststore path]	Connect to server with SSL.
	If truststore path is not specified, use defaults.

Commands
acquireDomainLock
	<spUUID> <sdUUID>
	acquire storage domain lock
activateStorageDomain
	<domain UUID> <pool UUID>
	Activate a storage domain that is already a member in a storage pool.
addNetwork
	bridge=<bridge> [vlan=<number>] [bond=<bond>] nics=nic[,nic]
	Add a new network to this vds.
attachStorageDomain
	<domain UUID> <pool UUID>
	Attach a storage domain to a storage pool.
changeCD
	<vmId> <fileName|drivespec>
	Changes the iso image of the cdrom
changeFloppy
	<vmId> <fileName|drivespec>
	Changes the image of the floppy drive
checkDomain
	<spUUID><sdUUID>...
	check Image(s)
checkImage
	<spUUID> <sdUUID> <imgUUID>...
	check Image(s)
checkPool
	<spUUID>...
	check Image(s)
cleanupUnusedConnections
	
	Clean up unused iSCSI storage connections
clearAsyncTask
	<Task name> <spUUID>
	Clear asynchronous task
clearTask
	<TaskID>
	clear async task
connectStoragePool
	<spUUID> <id> <scsi-key> [masterUUID] [masterVer]
	Connect a Host to specific storage pool
connectStorageServer
	<server type> <spUUID> <conList (id=...,connection=server:/export_path,portal=...,port=...,iqn=...,user=...,password=...)>
	Connect to a storage low level entity (server)
continue
	<vmId>
	Continues execution after of a paused machine
copyImage
	<sdUUID> <spUUID> <vmUUID> <srcImgUUID> <srcVolUUID> <dstImgUUID> <dstVolUUID> <dstDescr> <dstSdUUID> <volType> <volFormat> <preallocate> [<postZero>] [<force>]
	Create new template/volume from VM.
	Do it by collapse and copy the whole chain (baseVolUUID->srcVolUUID)
create
	<configFile> [parameter=value, parameter=value, ......]
	Creates new machine with the paremeters givven in the command line overriding the ones in the config file
	Example with config file: vdsClient someServer create myVmConfigFile
	Example with no file    : vdsClient someServer create /dev/null vmId=<uuid> memSize=256 imageFile=someImage display=<vnc|local|qxl|qxlnc>
	Parameters list: r=required, o=optional
	r   vmId=<uuid> : Unique identification for the created VM. Any additional operation on the VM must refer to this ID
	o   vmType=<qemu/kvm> : Virtual machine technology - if not givven kvm is default
	o   kvmEnable=<true/false> : run in KVM enabled mode or full emulation - default is according to the VDS capabilities
	r   memSize=<int> : Memory to allocate for this machine
	r   macAddr=<aa:bb:cc:dd:ee:ff> : MAC address of the machine
	r   display=<vnc|local|qxl|qxlnc> : send the machine display to vnc, local host, spice, or spice with no image compression
	o   drive=pool:poolID,domain:domainID,image:imageID,volume:volumeID[,boot:true,format:cow] : disk image by UUIDs
	o   (deprecated) hda/b/c/d=<path> : Disk drive images
	o   floppy=<image> : Mount the specified Image as floppy
	o   cdrom=<path> : ISO image file to be mounted as the powerup cdrom
	o   boot=<c/d/n> : boot device - drive C or cdrom or network
	o   sysprepInf=/path/to/file: Launch with the specified file as sysprep.inf in floppy
	o   acpiEnable : If present will remove the default -no-acpi switch
	o   tdf : If present will add the -rtc-td-hack switch
	o   irqChip : If false, add the -no-kvm-irqchip switch
	o   spiceSecureChannels : comma-separated list of spice channel that will be encrypted
	o   spiceMonitors : number of emulated screen heads
	o   soundDevice : emulated sound device
	o   launchPaused : If "true", start qemu paused
	o   vmName : human-readable name of new VM
	o   tabletEnable : If "true", enable tablet input
	o   timeOffset : guest's start date, relative to host's time, in seconds
	o   smp : number of vcpus
	o   smpCoresPerSocket, smpThreadsPerCore : vcpu topology
	o   keyboardLayout : language code of client keyboard
	o   cpuType : emulated cpu (with optional flags)
	o   emulatedMachine : passed as qemu's -M
createStorageDomain
	<storage type> <domain UUID> <domain name> <param> <domType>
	Creates new storage domain
createStoragePool
	<storage type> <spUUID> <poolName> <masterDom> <domList>(sdUUID1,sdUUID2,...) <masterVersion>, [<lockPolicy> <lockRenewalIntervalSec> <leaseTimeSec> <ioOpTimeoutSec> <leaseRetries>]
	Create new storage pool with single/multiple image data domain
createVG
	<sdUUID> <devlist>
	Create a new VG from devices devlist (list of dev GUIDs)
createVolume
	<sdUUID> <spUUID> <imgUUID> <size> <volFormat> <preallocate> <diskType> <newVolUUID> <descr> <srcImgUUID> <srcVolUUID>
	Creates new volume or snapshot
deactivateStorageDomain
	<domain UUID> <pool UUID> <new master domain UUID> <masterVer>
	Deactivate a storage domain. 
delNetwork
	bridge=<bridge> [vlan=<number>] [bond=<bond>] nics=nic[,nic]
	Remove a network (and parts thereof) from this vds.
deleteImage
	<sdUUID> <spUUID> <imgUUID> [<postZero>] [<force>]
	Delete Image folder with all volumes.
deleteVolume
	<sdUUID> <spUUID> <imgUUID> <volUUID>,...,<volUUID> <postZero> [<force>]
	Deletes an volume if its a leaf. Else returns error
deleteVolumeByDescr
	<part of description> <sdUUID> <spUUID> <imgUUID>
	Deletes list of volumes(only leafs) according to their description
desktopLock
	<vmId>
	Logoff current user
desktopLogin
	<vmId> <domain> <user> <password>
	Login to vmId desktop using the supplied credentials
desktopLogoff
	<vmId> <force>
	Lock user session. force should be set to true/false
destroy
	<vmId>
	Stops the emulation and destroys the virtual machine. This is not a shutdown.
destroyStoragePool
	<spUUID> <id> <scsi-key>
	Destroy storage pool
detachStorageDomain
	<domain UUID> <pool UUID> <new master domain UUID> <masterVer>
	Detach a storage domain from a storage pool.
disconnectStoragePool
	<spUUID> <id> <scsi-key>
	Disconnect a Host from the specific storage pool
disconnectStorageServer
	<server type> <spUUID> <conList (id=...,connection=server:/export_path,portal=...,port=...,iqn=...,user=...,password=...)>
	Disconnect from a storage low level entity (server)
discoverST
	ip[:port] [username password]
	Discover the available iSCSI targetnames on a specified iSCSI portal
editNetwork
	oldBridge=<bridge> newBridge=<bridge> [vlan=<number>] [bond=<bond>] nics=nic[,nic]
	Replace a network with a new one.
extendStorageDomain
	<sdUUID> <spUUID> <devlist>
	Extend the Storage Domain by adding devices devlist (list of dev GUIDs)
extendVolume
	<sdUUID> <spUUID> <imgUUID> <volUUID> <new disk size>
	Extend volume (SAN only)
fenceNode
	<addr> <port> <agent> <user> <passwd> <action> [<secure> [<options>]] 
	<action> is one of (status, on, off, reboot),
	<agent> is one of (rsa, ilo, ipmilan, drac5, etc)
	<secure> (true|false) may be passed to some agents
	send a fencing command to a remote node
fenceSpmStorage
	<spUUID> <prevID> <prevLVER> 
	fence SPM storage state
flushSDC
	
	Force SD Cache in SD Factory to be flushed.
forcedDetachStorageDomain
	<domain UUID> <pool UUID>
	Forced detach a storage domain from a storage pool.
formatStorageDomain
	<domain UUID> [<autoDetach>]
	Format detached storage domain.
getAllTasksInfo
	
	get info of all async tasks
getAllTasksStatuses
	
	list statuses of all async tasks
getAllVmStats
	
	Get Statistics info for all existing VMs
getConnectedStoragePoolsList
	
	Get storage pools list
getDeviceInfo
	<dev-guid>
	Get block storage device info.
getDeviceList
	[storageType]
	List of all block devices (optionally - mathing storageType).
getFloppyList
	<spUUID>
	Returns list of all .vfd images in ISO domain
getImageDomainsList
	<spUUID> <imgUUID> [datadomain=True]
	Get list of all data domains in the pool that contains imgUUID
getImagesList
	<sdUUID>
	Get list of all images of specific domain
getIsoList
	<spUUID>
	Returns list of all .iso images in ISO domain
getParent
	<sdUUID> <spUUID> <imgUUID> <Disk Image uuid>
	Returns the parent of the volume. Error if no parent exists
getSessionList
	
	Collect the list of active SAN storage sessions
getSpmStatus
	<spUUID>
	Get SPM status
getStorageDomainInfo
	<domain UUID>
	Get storage domain info.
getStorageDomainStats
	<domain UUID>
	Get storage domain statistics.
getStorageDomainsList
	<pool UUID>
	Get storage domains list of pool or all domains if pool omitted.
getStoragePoolInfo
	<spUUID>
	Get storage pool info
getTaskInfo
	<TaskID>
	get async task info
getTaskStatus
	<TaskID>
	get task status
getVGInfo
	<vgUUID>
	Get info of VG
getVGList
	storageType
	List of all VGs.
getVdsCapabilities
	
	Get Capabilities info of the VDS
getVdsCaps
	
	Get Capabilities info of the VDS
getVdsStats
	
	Get Statistics info on the VDS
getVmStats
	<vmId>
	Get Statistics info on the VM
getVmsInfo
	<Import path> <Import type> <VM type>
	Return list of import candidates with their info
getVmsList
	<spUUID> [sdUUID]
	Get list of VMs from the pool or domain if sdUUID given
getVolumeInfo
	<sdUUID> <spUUID> <imgUUID> <volUUID>
	Returns all the volume details
getVolumePath
	<sdUUID> <spUUID> <imgUUID> <volume uuid>
	Returns the path to the requested uuid
getVolumeSize
	<sdUUID> <spUUID> <imgUUID> <volUUID>
	Returns the apparent size and the true size of the volume (in bytes)
getVolumesList
	<sdUUID> <spUUID> [imgUUID]
	Returns list of volumes of imgUUID or sdUUID if imgUUID absent
hibernate
	<vmId>
	Hibernates the desktop
list
	[table]
	Lists all available machines on the specified server and all available configuration info
	If table modifier added then show table with the fields: vmId vmName Status IP
listNames
	Lists all available machines on the specified server
	
mergeSnapshots
	<sdUUID> <spUUID> <vmUUID> <imgUUID> <Ancestor Image uuid> <Successor Image uuid> [<postZero>]
	Merge images from successor to ancestor.
	The result is a image named as successor image and contents the data of whole successor->ancestor chain
migrate
	vmId=<id> method=<offline|online> src=<host:[port]> dst=<host:[port]>
	Migrate a desktop from src machine to dst host using the specified ports
migrateCancel
	<vmId>
	(not implemented) cancel machine migration
migrateStatus
	<vmId>
	Check the progress of current outgoing migration
monitorCommand
	<vmId> <string>
	Send a string containing monitor command to the desktop
moveImage
	<spUUID> <srcDomUUID> <dstDomUUID> <imgUUID> <vmUUID> <op = COPY_OP/MOVE_OP> [<postZero>] [ <force>]
	Move/Copy image between storage domains within same storage pool
moveMultiImage
	<spUUID> <srcDomUUID> <dstDomUUID> <imgList>({imgUUID=postzero,imgUUID=postzero,...}) <vmUUID> [<force>]
	Move multiple images between storage domains within same storage pool
pause
	<vmId>
	Pauses the execution of the virtual machine without termination
prepareForShutdown
	
	
reconstructMaster
	<spUUID> <poolName> <masterDom> <domDict>({sdUUID1=status,sdUUID2=status,...}) <masterVersion>, [<lockPolicy> <lockRenewalIntervalSec> <leaseTimeSec> <ioOpTimeoutSec> <leaseRetries>]
	Reconstruct master domain
refreshStoragePool
	<spUUID> <masterDom> <masterVersion>
	Refresh storage pool
releaseDomainLock
	<spUUID> <sdUUID>
	release storage domain lock
removeVG
	<vgUUID>
	remove the VG identified by its UUID
removeVM
	<spUUID> <vmList> (vmUUID1,vmUUID2,...) [sdUUID]
	Remove VM from pool or Backup domain
repoStats
	
	Get the the health status of the active domains
reset
	<vmId>
	Sends reset signal to the vm
revertTask
	<TaskID>
	revert async task
sendHcCmd
	<vmId> <message>
	Sends a message to a specific VM through Hypercall channel
sendkeys
	<vmId> <key1> ...... <keyN>
	Send the key sequence to the vm
setLogLevel
	<level> [logName][,logName]...
	set log verbosity level (10=DEBUG, 50=CRITICAL
setSafeNetworkConfig
	
	declare current network configuration as "safe"
setStorageDomainDescription
	<domain UUID> <descr>
	Set storage domain description
setStoragePoolDescription
	<spUUID> <descr>
	Set storage pool description
setVmTicket
	<vmId> <password> <sec> [disconnect|keep|fail]
	Set the password to the vm display for the next <sec> seconds.
	Optional argument instructs spice regarding currently-connected client.
setVolumeDescription
	<sdUUID> <spUUID> <imgUUID> <volUUID> <Description>
	Sets a new description to the volume
setVolumeLegality
	<sdUUID> <spUUID> <imgUUID> <volUUID> <Legality>
	Set volume legality (ILLEGAL/LEGAL).
shutdown
	<vmId> <timeout> <message>
	Stops the emulation and graceful shutdown the virtual machine.
spmStart
	<spUUID> <prevID> <prevLVER> <recoveryMode> <scsiFencing>
	Start SPM functionality
spmStop
	<spUUID>
	Stop SPM functionality
stopAllCopies
	
	
stopTask
	<TaskID>
	stop async task
updateVM
	<spUUID> <vmList> ('vm'=vmUUID,'ovf'='...','imglist'='imgUUID1+imgUUID2+...') [sdUUID]
	Update VM on pool or Backup domain
uploadVolume
	<sdUUID> <spUUID> <imgUUID> <volUUID> <srcPath> <size>
	Upload volume file into existing volume
validateStorageDomain
	<domain UUID>
	Validate storage domain
validateStorageServerConnection
	<server type> <spUUID> <conList (id=...,connection=server:/export_path,portal=...,port=...,iqn=...,user=...,password=...)>
	Validate that we can connect to a storage server

Comment 3 Avi Tal 2011-03-29 12:20:20 UTC
sorry but having the same problem on vdsm 56


[root@navy-vds3 ~]# rpm -qa vdsm-cli vdsm
vdsm-4.9-56.el6.x86_64
vdsm-cli-4.9-56.el6.x86_64
[root@navy-vds3 ~]# vdsClient -s 0 upgradeStoragePool 
General Exception: ('method upgradeStoragePool args: (), error: public_upgradeStoragePool() takes exactly 3 arguments (1 given)',)

Comment 4 RHEL Program Management 2011-04-04 01:47:10 UTC
Since RHEL 6.1 External Beta has begun, and this bug remains
unresolved, it has been rejected as it is not proposed as
exception or blocker.

Red Hat invites you to ask your support representative to
propose this request, if appropriate and relevant, in the
next release of Red Hat Enterprise Linux.

Comment 5 Yotam Oron 2011-04-05 14:49:03 UTC
Added verification for number of arguments (the command was invoked with no arguments while it expects 2 arguments)

Comment 6 Tomas Dosek 2011-04-11 08:37:27 UTC
vdsm-4.9-58.el6:

[root@srh-06 ~]# vdsClient -s 0 upgradeStoragePool
Traceback (most recent call last):
  File "/usr/share/vdsm/vdsClient.py", line 1998, in <module>
    code, message = commands[command][0](commandArgs)
  File "/usr/share/vdsm/vdsClient.py", line 680, in upgradeStoragePool
    validateArgTypes(args, [str, int], True)
  File "/usr/share/vdsm/vdsClient.py", line 42, in validateArgTypes
    raise Exception("Wrong number of arguments provided, expecting %d got %d", len(conv), len(args))
Exception: ('Wrong number of arguments provided, expecting %d got %d', 2, 0)

Should this be the result? I assume Avi wanted it to show something like 
wrong usage: vdsclient ... upgradeStoragePool <spUUID>

Comment 7 Tomas Dosek 2011-04-12 08:43:00 UTC
Reopening - only exception of vdsClient.py is shown instead of right usage message.

Comment 8 Dan Kenigsberg 2011-05-25 15:52:38 UTC
Tomas, you are right: http://gerrit.usersys.redhat.com/471
would fix that.

Comment 10 Dan Kenigsberg 2011-05-31 12:26:59 UTC
I hate vdsClient.

http://gerrit.usersys.redhat.com/504

Comment 13 errata-xmlrpc 2011-12-06 07:08:11 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

http://rhn.redhat.com/errata/RHEA-2011-1782.html