Added commands:

    updateVmwareDc (Updates a VMware datacenter details for a zone)

    listManagementServers (Lists management servers.)

    archiveSnapshot (Archives (moves) a snapshot on primary storage to secondary storage)

    getSolidFireVolumeAccessGroupIds (Get the SF Volume Access Group IDs)

    runDiagnostics (Execute network-utility command (ping/arping/tracert) on system VMs remotely)

    moveNetworkAclItem (Move an ACL rule to a position bettwen two other ACL rules of the same ACL network list)

Removed commands:

	listVolumesOnFiler (List Volumes)

	getSolidFireVolumeAccessGroupId (Get the SF Volume Access Group ID)

	destroyVolumeOnFiler (Destroy a Volume)

	deletePool (Delete a pool)

	destroyLunOnFiler (Destroy a LUN)

	associateLun (Associate a LUN with a guest IQN)

	dissociateLun (Dissociate a LUN)

	createLunOnFiler (Create a LUN from a pool)

	createPool (Create a pool)

	listLunsOnFiler (List LUN)

	createVolumeOnFiler (Create a volume)

	modifyPool (Modify pool)

	listPools (List Pool)

Changes in command type (sync versus async)


Changes in commands arguments:

	copyIso

		Response:

			New parameters: requireshvm

	listNetworks

		Response:

			New parameters: redundantrouter

	updateNetworkACLList

		Request:

			New parameters: description (optional), name (optional)

	listTemplates

		Response:

			New parameters: requireshvm

	updateDiskOffering

		Response:

			New parameters: diskBytesReadRateMax, diskBytesReadRateMaxLength, diskBytesWriteRateMax, diskBytesWriteRateMaxLength, diskIopsReadRateMax, diskIopsReadRateMaxLength, diskIopsWriteRateMax, diskIopsWriteRateMaxLength

	updateIso

		Request:

			New parameters: sshkeyenabled (optional)

		Response:

			New parameters: requireshvm

	prepareTemplate

		Response:

			New parameters: requireshvm

	listAsyncJobs

		Response:

			New parameters: completed

	restartNetwork

		Request:

			New parameters: makeredundant (optional)

	listNetworkACLs

		Response:

			New parameters: reason

	copyTemplate

		Response:

			New parameters: requireshvm

	createServiceOffering

		Request:

			New parameters: bytesreadratemax (optional), bytesreadratemaxlength (optional), byteswriteratemax (optional), byteswriteratemaxlength (optional), iopsreadratemax (optional), iopsreadratemaxlength (optional), iopswriteratemax (optional), iopswriteratemaxlength (optional)

		Response:

			New parameters: diskBytesReadRateMax, diskBytesReadRateMaxLength, diskBytesWriteRateMax, diskBytesWriteRateMaxLength, diskIopsReadRateMax, diskIopsReadRateMaxLength, diskIopsWriteRateMax, diskIopsWriteRateMaxLength

	listNiciraNvpDeviceNetworks

		Response:

			New parameters: redundantrouter

	updateTemplate

		Request:

			New parameters: sshkeyenabled (optional)

		Response:

			New parameters: requireshvm

	listPaloAltoFirewallNetworks

		Response:

			New parameters: redundantrouter

	updateAccount

		Request:

			New parameters: roleid (optional)

			Changed parameters: newname (old version - required, new version - optional)

	updateVirtualMachine

		Request:

			New parameters: extraconfig (optional)

	updateNetwork

		Response:

			New parameters: redundantrouter

	createTemplate

		Request:

			New parameters: sshkeyenabled (optional)

		Response:

			New parameters: requireshvm

	createNetworkACL

		Request:

			New parameters: reason (optional)

		Response:

			New parameters: reason

	listSrxFirewallNetworks

		Response:

			New parameters: redundantrouter

	listDiskOfferings

		Response:

			New parameters: diskBytesReadRateMax, diskBytesReadRateMaxLength, diskBytesWriteRateMax, diskBytesWriteRateMaxLength, diskIopsReadRateMax, diskIopsReadRateMaxLength, diskIopsWriteRateMax, diskIopsWriteRateMaxLength

	registerIso

		Request:

			New parameters: passwordenabled (optional)

		Response:

			New parameters: requireshvm

	deployVirtualMachine

		Request:

			New parameters: extraconfig (optional)

	createDiskOffering

		Request:

			New parameters: bytesreadratemax (optional), bytesreadratemaxlength (optional), byteswriteratemax (optional), byteswriteratemaxlength (optional), iopsreadratemax (optional), iopsreadratemaxlength (optional), iopswriteratemax (optional), iopswriteratemaxlength (optional)

		Response:

			New parameters: diskBytesReadRateMax, diskBytesReadRateMaxLength, diskBytesWriteRateMax, diskBytesWriteRateMaxLength, diskIopsReadRateMax, diskIopsReadRateMaxLength, diskIopsWriteRateMax, diskIopsWriteRateMaxLength

	createNetwork

		Response:

			New parameters: redundantrouter

	updateUser

		Request:

			New parameters: currentpassword (optional)

	listIsos

		Response:

			New parameters: requireshvm

	updateRole

		Response:

			New parameters: id, description, name, type

			Removed parameters: displaytext, success

	listNetscalerLoadBalancerNetworks

		Response:

			New parameters: redundantrouter

	migrateVolume

		Request:

			New parameters: newdiskofferingid (optional)

	updateNetworkACLItem

		Request:

			New parameters: partialupgrade (optional), reason (optional)

		Response:

			New parameters: reason

	listBrocadeVcsDeviceNetworks

		Response:

			New parameters: redundantrouter

	listInfrastructure

		Response:

			New parameters: managementservers

	migrateNetwork

		Request:

			Changed parameters: networkofferingid (old version - optional, new version - required)

		Response:

			New parameters: redundantrouter

	registerTemplate

		Response:

			New parameters: requireshvm

	listF5LoadBalancerNetworks

		Response:

			New parameters: redundantrouter

	queryAsyncJobResult

		Response:

			New parameters: completed

	destroyVirtualMachine

		Request:

			New parameters: volumeids (optional)

	listServiceOfferings

		Response:

			New parameters: diskBytesReadRateMax, diskBytesReadRateMaxLength, diskBytesWriteRateMax, diskBytesWriteRateMaxLength, diskIopsReadRateMax, diskIopsReadRateMaxLength, diskIopsWriteRateMax, diskIopsWriteRateMaxLength

	updateServiceOffering

		Response:

			New parameters: diskBytesReadRateMax, diskBytesReadRateMaxLength, diskBytesWriteRateMax, diskBytesWriteRateMaxLength, diskIopsReadRateMax, diskIopsReadRateMaxLength, diskIopsWriteRateMax, diskIopsWriteRateMaxLength
