On 04/29/2012 10:44 AM, Itzik Brown wrote:
I used the repository
git://gerrit.ovirt.org/ovirt-engine-sdk
Commit 3c721e60ab3af3ad07e1a20bc6fdbcdbc1344df0
The test script :
#!/usr/bin/python
import sys
from ovirtsdk.api import API
from ovirtsdk.xml import params
OVIRT_ENGINE_SERVER = 'server1'
OVIRT_ENGINE_PORT = '8080'
OVIRT_ENGINE_USER = 'admin@internal'
OVIRT_ENGINE_PASSWORD = 'password'
url = 'http://%s:%s' % (OVIRT_ENGINE_SERVER, OVIRT_ENGINE_PORT)
api = API(url = url, username = OVIRT_ENGINE_USER , password = OVIRT_ENGINE_PASSWORD)
host = 'host1'
if_name = 'eth4'
net_name = 'net1'
nic = api.hosts.get(name=host).nics.get(name=if_name)
net = params.Network(name=net_name)
act = params.Action(network=net)
nic.detach(act)
api.hosts.get(name=host).commitnetconfig()
Itzik, I think there is nothing wrong with the SDK or with your code.
The issue is deeper in the restapi or the backend (depends on how you
look at it). I compared what restapi and webadmin do:
* Both create an instance of the parameters using the constructor:
AttachNetworkToVdsParameters(Guid vdsId, network net,
VdsNetworkInterface iface)
* Webadmin passes an instance of the network class where the status is 0
(non operational), even if the status of the network is 1 (operational).
This might be a bug, but a bug that combined with the backend behavior
makes the operation work.
* The rest API passes an instance of the network class where the status
is 1 (operational). This, combined with the backend behavior, makes the
operation fail.
* In the backend, if the status of the network is operational, the
detach is performed only if the network is not in use in the cluster,
which will always be true.
I think that neither the webadmin nor the restapi should pass anything
but the network name (or id) and the backend should ignore any
additional information if passed. In addition the backend should allow
the detach operation even if the network is in use in the cluster.
Livnat, Michael, Einav, any comments?