On 01/08/2014 02:24 AM, Aline Manera
wrote:
On 01/07/2014 06:27 AM, Royce Lv wrote:
On 2014年01月06日 16:49,
shaohef@linux.vnet.ibm.com wrote:
From: ShaoHe Feng
<shaohef@linux.vnet.ibm.com>
Add vms field for network GET method
update API.md
add a function to get all vms attach to a network
update model
add vms field for Network Resource property
update controller
Now get the info of default network:
$ curl -u <user>:<password> -H 'Content-type:
application/json' -H 'Accept:
application/json' -X GET
http://localhost:8000/networks/default
{
"subnet":"192.168.122.0/24",
"connection":"nat",
"name":"default",
"autostart":true,
"state":"active",
"interface":"virbr0",
"dhcp":{
"start":"192.168.122.2",
"end":"192.168.122.254"
},
"vms":[
"rhel6",
"opensuse12"
]
}
we can see, there are two vms attched to this network
Signed-off-by: ShaoHe Feng <shaohef@linux.vnet.ibm.com>
---
docs/API.md | 1 +
src/kimchi/control/networks.py | 1 +
src/kimchi/model.py | 15 +++++++++++++++
3 files changed, 17 insertions(+)
diff --git a/docs/API.md b/docs/API.md
index 0013e86..32045ac 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -364,6 +364,7 @@ A interface represents available interface
on host.
* active: The Network is ready for use
* inactive: The Network is not available
* autostart: Network autostart onboot
+ * vms: all vms attached to this network
* subnet: Network segment in slash-separated format with
ip address and prefix
* dhcp: DHCP services on the virtual network is enabled.
* start: start boundary of a pool of addresses to be
provided to DHCP clients.
diff --git a/src/kimchi/control/networks.py
b/src/kimchi/control/networks.py
index ad95d69..f3f0b41 100644
--- a/src/kimchi/control/networks.py
+++ b/src/kimchi/control/networks.py
@@ -40,6 +40,7 @@ class Network(Resource):
@property
def data(self):
return {'name': self.ident,
+ 'vms': self.info['vms'],
Shuming suggested to use /vms?network='net1' to query vm
attatched to a network instead of using /networks/net1/vms
Personally, previous URI is clearer and also can be integrated
to vm query.
I'd like we have some discussion with guys about which URL is to
use.
I also prefer to use /vms?network='net1' to query which vms are
using network 'net1'
yes.
this patch set is the first step.
/vms?network='net1' is the next step.
let us discuss details of the next step in next sprint as it is an
advanced feature.
But we will know the network is not a VM's attribute, it is just a
VM's interface kind.
Not sure it is good as a query param.
step 1:
I have discussed with Yu Xin before. And at the beginning, Yu Xin
and I think just need to show the numbers of vms.
it is a quite light-weight field with only numbers of vms there.
This is the first UI design of network. but for let last release,
backend do not support VMS numbers, so yuxing remove the it.
--------------------------------------------------------------------------------------------------------------------------------
| default | 254
| o | NAT | virbr | 192.168.122.0/24 | Actions
|
--------------------------------------------------------------------------------------------------------------------------------
| net1 | 0
| o
| NAT | virbr | 192.168.122.0/24 | Actions
|
--------------------------------------------------------------------------------------------------------------------------------
The number of vms is a quite intuitive view of the network
environment and user can do some convenient operation directly.
For example, if a user wants to delete a network, it is easy to do
his choice by checking the number of this network.
The vms of net1 is "0", user can delete this network safely.
Also the vms of default
is "254", if user just can choose net1 attached to his VM.
Also a VMs number greatly decrease complexity at client side and
improve performance.
After add this vms muber filed, UI can just get /networks once to
finish network web page.
step 2:
we will draw a network topology with a switch in center and vms
around with all available information(name, interface, ip
address...) of vm that is helpful.
by this way, user can have a quite intuitive view of the network
environment and do some convenient operation directly there.
--------- --------- ---------
---------
| vm1 | | vm2 | | vm3 | | vm4|
--------- --------- ---------
---------
| |
| |
| |
| |
----------------------------------------------------------------
|
|
| network1
|
|
|
----------------------------------------------------------------
| |
| |
| |
| |
--------- --------- ---------
---------
| vm5 | | vm6 | | vm7 | | vm8|
--------- --------- ---------
---------
And the user click the vm5, the details will display:
----------------------------------------------------------------
| name | CPUS | memory | status | ... |
----------------------------------------------------------------
| VM1 | 1 | 1G | o |
... |
----------------------------------------------------------------
summary:
we can design our URL by:
a)
1. get the VMS numbers and network topology by:
get /networks/
[
{''net1": {bridge: brg1, vms: [vm1, vm2]},
{''net2": {bridge: brg2, vms: [vm3, vm4, vm5]}
]
The numbers field is: len(net1.vms)
The network topology is: net1.vms
2. get the vms info
get /vms/vm1
get /vms/vm2
b)get the VMS numbers
1.
get /networks/
[
{''net1": {bridge: brg1, vms: 2},
{''net2": {bridge: brg2, vms: 3}
]
2. get the network topology and vms info:
/vms?network='net1'
[
"vm1": {"CPUS": 1, "memory": 1G, "status": "running"},
"vm2": {"CPUS": 1, "memory": 1G, "status": "running"},
]
the network topology is net1.keys()
/vms?network='net2'
[
"vm3": {"CPUS": 1, "memory": 1G, "status": "running"},
"vm4": {"CPUS": 1, "memory": 1G, "status": "running"},
"vm5": {"CPUS": 1, "memory": 1G, "status": "running"},
]
the network topology is net2.keys()
But we will know the network is not a VM's attribute, it is just a
VM's interface kind.
'autostart':
self.info['autostart'],
'connection': self.info['connection'],
'interface': self.info['interface'],
diff --git a/src/kimchi/model.py b/src/kimchi/model.py
index a21fcf7..3e61390 100644
--- a/src/kimchi/model.py
+++ b/src/kimchi/model.py
@@ -547,6 +547,11 @@ class Model(object):
xpath =
"/domain/devices/disk[@device='disk']/source/@file"
return xmlutils.xpath_get_text(xml, xpath)
+ def _vm_get_networks(self, dom):
+ xml = dom.XMLDesc(0)
+ xpath =
"/domain/devices/interface[@type='network']/source/@network"
+ return xmlutils.xpath_get_text(xml, xpath)
+
def vm_delete(self, name):
if self._vm_exists(name):
conn = self.conn.get()
@@ -859,6 +864,15 @@ class Model(object):
conn = self.conn.get()
return sorted(conn.listNetworks() +
conn.listDefinedNetworks())
+ def _get_vms_attach_to_a_network(self, network):
+ vms = []
+ conn = self.conn.get()
+ for dom in conn.listAllDomains(0):
+ networks = self._vm_get_networks(dom)
+ if network in networks:
+ vms.append(dom.name())
+ return vms
+
def network_lookup(self, name):
network = self._get_network(name)
xml = network.XMLDesc(0)
@@ -887,6 +901,7 @@ class Model(object):
'interface': interface,
'subnet': subnet,
'dhcp': dhcp,
+ 'vms':
self._get_vms_attach_to_a_network(name),
'autostart': network.autostart() == 1,
'state': network.isActive() and "active" or
"inactive"}
_______________________________________________
Kimchi-devel mailing list
Kimchi-devel@ovirt.org
http://lists.ovirt.org/mailman/listinfo/kimchi-devel
--
Thanks and best regards!
Sheldon Feng(冯少合)<shaohef@linux.vnet.ibm.com>
IBM Linux Technology Center