[Kimchi-devel] [PATCH V4 1/3] network improvment: add vms field

Sheldon shaohef at linux.vnet.ibm.com
Tue Jan 7 09:23:47 UTC 2014


On 01/07/2014 04:27 PM, Royce Lv wrote:
> On 2014年01月06日 16:49, shaohef at linux.vnet.ibm.com wrote:
>> From: ShaoHe Feng <shaohef at 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 at 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.
Yes. Will be implement new api /vms?network='net1'  in next sprint to 
get vms attached to a network.
and will add more filter for vms. such as
/vms?graphics='vnc'
/vms?status="running"
...
>
>>                   '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"}
>>
>
>
>


-- 
Thanks and best regards!

Sheldon Feng(冯少合)<shaohef at linux.vnet.ibm.com>
IBM Linux Technology Center




More information about the Kimchi-devel mailing list