Revision 1f638a85

b/snf-cyclades-app/synnefo/api/servers.py
124 124
    return d
125 125

  
126 126

  
127
def nics_to_addresses(nics):
128
    addresses = {}
129
    for nic in nics:
130
        net_nics = []
131
        net_nics.append({"version": 4, "addr": nic.ipv4})
132
        if nic.ipv6:
133
            net_nics.append({"version": 6, "addr": nic.ipv6})
134
        addresses[nic.network.id] = net_nics
135
    return addresses
136

  
137

  
127 138
def vm_to_dict(vm, detail=False):
128 139
    d = dict(id=vm.id, name=vm.name)
129 140
    d['links'] = util.vm_to_links(vm.id)
......
148 159
        vm_nics = vm.nics.filter(state="ACTIVE").order_by("index")
149 160
        attachments = map(nic_to_dict, vm_nics)
150 161
        d['attachments'] = attachments
162
        d['addresses'] = nics_to_addresses(vm_nics)
151 163

  
152 164
        # include the latest vm diagnostic, if set
153 165
        diagnostic = vm.get_last_diagnostic()
......
299 311

  
300 312
@transaction.commit_manually
301 313
def do_create_server(userid, name, password, flavor, image, metadata={},
302
                  personality=[], network=None, backend=None):
314
                     personality=[], network=None, backend=None):
303 315
    if backend is None:
304 316
        # Allocate backend to host the server. Commit after allocation to
305 317
        # release the locks hold by the backend allocator.
......
544 556

  
545 557
    log.debug('list_addresses %s', server_id)
546 558
    vm = util.get_vm(server_id, request.user_uniq)
547
    addresses = [nic_to_dict(nic) for nic in vm.nics.all()]
559
    attachments = [nic_to_dict(nic) for nic in vm.nics.all()]
560
    addresses = nics_to_addresses(vm.nics.all())
548 561

  
549 562
    if request.serialization == 'xml':
550 563
        data = render_to_string('list_addresses.xml', {'addresses': addresses})
551 564
    else:
552
        data = json.dumps({'addresses': addresses})
565
        data = json.dumps({'addresses': addresses, 'attachments': attachments})
553 566

  
554 567
    return HttpResponse(data, status=200)
555 568

  
......
567 580
    log.debug('list_addresses_by_network %s %s', server_id, network_id)
568 581
    machine = util.get_vm(server_id, request.user_uniq)
569 582
    network = util.get_network(network_id, request.user_uniq)
570
    nic = util.get_nic(machine, network)
571
    address = nic_to_dict(nic)
583
    nics = machine.nics.filter(network=network).all()
584
    addresses = nics_to_addresses(nics)
572 585

  
573 586
    if request.serialization == 'xml':
574
        data = render_to_string('address.xml', {'address': address})
587
        data = render_to_string('address.xml', {'addresses': addresses})
575 588
    else:
576
        data = json.dumps({'network': address})
589
        data = json.dumps({'network': addresses})
577 590

  
578 591
    return HttpResponse(data, status=200)
579 592

  
b/snf-cyclades-app/synnefo/api/test/servers.py
118 118
        db_vm = self.vm2
119 119
        user = self.vm2.userid
120 120
        net = mfactory.NetworkFactory()
121
        nic = mfactory.NetworkInterfaceFactory(machine=self.vm2, network=net)
121
        nic = mfactory.NetworkInterfaceFactory(machine=self.vm2, network=net,
122
                                              ipv6="::babe")
122 123

  
123 124
        db_vm_meta = mfactory.VirtualMachineMetadataFactory(vm=db_vm)
124 125

  
......
138 139
        self.assertEqual(api_nic['ipv4'], nic.ipv4)
139 140
        self.assertEqual(api_nic['ipv6'], nic.ipv6)
140 141
        self.assertEqual(api_nic['id'], 'nic-%s-%s' % (db_vm.id, nic.index))
142
        api_address = server["addresses"]
143
        self.assertEqual(api_address[str(net.id)],
144
                          [{"version": 4, "addr": nic.ipv4},
145
                           {"version": 6, "addr": nic.ipv6}])
141 146

  
142 147
        metadata = server['metadata']
143 148
        self.assertEqual(len(metadata), 1)

Also available in: Unified diff