[Kimchi-devel] [PATCH V3 0/4] support create/delete VMIface
Aline Manera
alinefm at linux.vnet.ibm.com
Fri Jan 24 16:23:10 UTC 2014
The result when I tried to attach a network:
alinefm at alinefm:~/mail-patches$ curl -u <user:password> -H
'Content-type: application/json' -H 'Accept: application/json
http://localhost:8000/vms/Fedora19/ifaces -X POST -d'{"type": "network",
"network": "for_test"}'
{}
And when I tried to get them:
alinefm at alinefm:~/mail-patches$ curl -u <user:password> -H
'Content-type: application/json' -H 'Accept: application/json'
http://localhost:8000/vms/Fedora19/ifaces -X GET -d'{}'
[
{
"mac":"52:54:00:a9:74:9d",
"type":"network",
"model":"virtio",
"network":"default"
},
{},
{},
{},
{}
]
But looking inside the VM xml, I noticed all the interfaces were added
successfully.
<interface type='network'>
<mac address='52:54:00:a9:74:9d'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/>
</interface>
<interface type='network'>
<mac address='52:54:00:4a:50:fb'/>
<source network='default'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a'
function='0x0'/>
</interface>
<interface type='network'>
<mac address='52:54:00:3d:3e:9b'/>
<source network='default'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0b'
function='0x0'/>
</interface>
<interface type='network'>
<mac address='52:54:00:69:7d:48'/>
<source network='default'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0c'
function='0x0'/>
</interface>
<interface type='network'>
<mac address='52:54:00:67:18:12'/>
<source network='for_test'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0d'
function='0x0'/>
</interface>
The problem is with the API
Seems the problem is in vmiface_lookup()
def vmiface_lookup(self, vm, mac):
info = {}
iface = self._get_vmiface(vm, mac)
if iface is None:
raise NotFoundError('iface: "%s"' % mac)
info['type'] = iface.attrib['type']
info['mac'] = iface.mac.get('address')
info['model'] = iface.model.get('type')
if info['type'] == 'network':
info['network'] = iface.source.get('network')
if info['type'] == 'bridge':
info['bridge'] = iface.source.get('bridge')
return info
As the vm is powered off, there is no <model> tag on xml
libvirt will get the default model type only when starting the vm
So we need to do something like:
# it is a mock code. I don't know how objectify works for that
if iface.model:
info['model'] = iface.model.get('type')
On 01/24/2014 12:24 AM, shaohef at linux.vnet.ibm.com wrote:
> From: ShaoHe Feng <shaohef at linux.vnet.ibm.com>
>
> V2 -> V3
> rebase
>
> V1 -> V2
> do not support hot plugging attach/detach interface
> we will support this feature after we implement events.
>
>
> 1. get all vms:
> $ curl -u <user> -H 'Accept: application/json' -H 'Content-type:
> application/json' http://localhost:8000/vms
>
> 2. get all networks:
> $ curl -u <user> -H 'Accept: application/json' -H 'Content-type:
> application/json' http://localhost:8000/networks
>
> 3. get all ifaces of a vm
> $ curl -u <user> -H 'Accept: application/json' -H 'Content-type:
> application/json' http://localhost:8000/vms/test-vm-0/ifaces/
> [
> {
> "mac":"52:54:00:00:00:01",
> "model":"virtio",
> "type":"network",
> "network":"default"
> }
> ]
>
> 4. attach a new iface to vm
> $ curl -u <user> -H 'Accept: application/json' -H 'Content-type:
> application/json' http://localhost:8000/vms/test-vm-8/ifaces -X POST -d '
> {
> "type":"network",
> "network":"test-network-0"
> }
> '
>
> {
> "mac":"52:54:00:00:00:0d",
> "model":"virtio",
> "type":"network",
> "network":"test-network-0"
> }
>
> 5. detach a iface from vm
> $ curl -u <user> -H 'Accept: application/json' -H 'Content-type:
> application/json' http://localhost:8000/vms/test-vm-8/ifaces/52:54:00:00:00:0d -X DELETE
>
>
> ShaoHe Feng (4):
> support create/delete VMIface: update model
> support create/delete VMIface: update mockmodel
> support create/delete VMIface: update API.json
> support create/delete VMIface: update testcase
>
> src/kimchi/API.json | 21 +++++++++++++++++++
> src/kimchi/mockmodel.py | 21 +++++++++++++++++++
> src/kimchi/model.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++-
> tests/test_model.py | 22 +++++++++++++++++++
> tests/test_rest.py | 27 ++++++++++++++++++++++++
> 5 files changed, 146 insertions(+), 1 deletion(-)
>
More information about the Kimchi-devel
mailing list