Revision 1b696c26

b/snf-cyclades-app/synnefo/api/flavors.py
56 56

  
57 57
def flavor_to_dict(flavor, detail=True):
58 58
    d = {'id': flavor.id, 'name': flavor.name}
59
    d['links'] = util.flavor_to_links(flavor.id)
59 60
    if detail:
60 61
        d['ram'] = flavor.ram
61 62
        d['disk'] = flavor.disk
b/snf-cyclades-app/synnefo/api/networks.py
85 85

  
86 86
def network_to_dict(network, user_id, detail=True):
87 87
    d = {'id': str(network.id), 'name': network.name}
88
    d['links'] = util.network_to_links(network.id)
88 89
    if detail:
89 90
        d['cidr'] = network.subnet
90 91
        d['cidr6'] = network.subnet6
b/snf-cyclades-app/synnefo/api/servers.py
126 126

  
127 127
def vm_to_dict(vm, detail=False):
128 128
    d = dict(id=vm.id, name=vm.name)
129
    d['links'] = util.vm_to_links(vm.id)
129 130
    if detail:
130 131
        d['status'] = get_rsapi_state(vm)
131 132
        d['progress'] = 100 if get_rsapi_state(vm) == 'ACTIVE' \
......
133 134
        d['hostId'] = vm.hostid
134 135
        d['updated'] = utils.isoformat(vm.updated)
135 136
        d['created'] = utils.isoformat(vm.created)
136
        d['flavor'] = vm.flavor.id
137
        d['image'] = vm.imageid
137
        d['flavor'] = {"id": vm.flavor.id,
138
                       "links": util.flavor_to_links(vm.flavor.id)}
139
        d['image'] = {"id": vm.imageid,
140
                      "links": util.image_to_links(vm.imageid)}
138 141
        d['suspended'] = vm.suspended
139 142

  
140 143
        metadata = dict((m.meta_key, m.meta_value) for m in vm.metadata.all())
141
        if metadata:
142
            d['metadata'] = metadata
144
        d['metadata'] = metadata
143 145

  
144 146
        vm_nics = vm.nics.filter(state="ACTIVE").order_by("index")
145 147
        attachments = map(nic_to_dict, vm_nics)
......
149 151
        diagnostic = vm.get_last_diagnostic()
150 152
        if diagnostic:
151 153
            d['diagnostics'] = diagnostics_to_dict([diagnostic])
154
        else:
155
            d['diagnostics'] = []
152 156

  
153 157
    return d
154 158

  
b/snf-cyclades-app/synnefo/api/test/servers.py
90 90
        self.assertSuccess(response)
91 91
        servers = json.loads(response.content)['servers']
92 92
        db_server = self.vm1
93
        self.assertEqual(servers, [{'name': db_server.name,
94
                                    'id': db_server.id}])
93
        server = servers[0]
94
        self.assertEqual(server["name"], db_server.name)
95
        self.assertEqual(server["id"], db_server.id)
95 96

  
96 97
    def test_server_list_detail(self):
97 98
        """Test if the servers list details are returned."""
......
104 105
        self.assertEqual(len(servers), len(user_vms))
105 106
        for api_vm in servers:
106 107
            db_vm = user_vms[api_vm['id']]
107
            self.assertEqual(api_vm['flavor'], db_vm.flavor.id)
108
            self.assertEqual(api_vm['flavor']["id"], db_vm.flavor.id)
108 109
            self.assertEqual(api_vm['hostId'], db_vm.hostid)
109 110
            self.assertEqual(api_vm['id'], db_vm.id)
110
            self.assertEqual(api_vm['image'], db_vm.imageid)
111
            self.assertEqual(api_vm['image']["id"], db_vm.imageid)
111 112
            self.assertEqual(api_vm['name'], db_vm.name)
112 113
            self.assertEqual(api_vm['status'], get_rsapi_state(db_vm))
113 114
            self.assertSuccess(response)
......
124 125
        response = self.myget('servers/%d' % db_vm.id, user)
125 126
        server = json.loads(response.content)['server']
126 127

  
127
        self.assertEqual(server['flavor'], db_vm.flavor.id)
128
        self.assertEqual(server['flavor']["id"], db_vm.flavor.id)
128 129
        self.assertEqual(server['hostId'], db_vm.hostid)
129 130
        self.assertEqual(server['id'], db_vm.id)
130
        self.assertEqual(server['image'], db_vm.imageid)
131
        self.assertEqual(server['image']["id"], db_vm.imageid)
131 132
        self.assertEqual(server['name'], db_vm.name)
132 133
        self.assertEqual(server['status'], get_rsapi_state(db_vm))
133 134
        api_nic = server['attachments'][0]
b/snf-cyclades-app/synnefo/api/util.py
66 66
from synnefo.plankton.utils import image_backend
67 67
from synnefo.settings import MAX_CIDR_BLOCK
68 68

  
69
from synnefo.cyclades_settings import cyclades_services, BASE_HOST
70
from synnefo.lib.services import get_service_path
71
from synnefo.lib import join_urls
72

  
73
COMPUTE_URL = \
74
    join_urls(BASE_HOST,
75
              get_service_path(cyclades_services, "compute", version="v2.0"))
76
SERVERS_URL = join_urls(COMPUTE_URL, "servers/")
77
NETWORKS_URL = join_urls(COMPUTE_URL, "networks/")
78
FLAVORS_URL = join_urls(COMPUTE_URL, "flavors/")
79
IMAGES_URL = join_urls(COMPUTE_URL, "images/")
80
PLANKTON_URL = \
81
    join_urls(BASE_HOST,
82
              get_service_path(cyclades_services, "image", version="v1.0"))
83
IMAGES_PLANKTON_URL = join_urls(PLANKTON_URL, "images/")
84

  
69 85

  
70 86
log = getLogger('synnefo.api')
71 87

  
......
454 470

  
455 471
    return set(list(keypairusernames) + list(serverusernames) +
456 472
               list(networkusernames))
473

  
474

  
475
def vm_to_links(vm_id):
476
    link = join_urls(SERVERS_URL, str(vm_id))
477
    return [{"ref": rel, "link": link} for rel in ("self", "bookmark")]
478

  
479

  
480
def network_to_links(network_id):
481
    link = join_urls(NETWORKS_URL, str(network_id))
482
    return [{"ref": rel, "link": link} for rel in ("self", "bookmark")]
483

  
484

  
485
def flavor_to_links(flavor_id):
486
    link = join_urls(FLAVORS_URL, str(flavor_id))
487
    return [{"ref": rel, "link": link} for rel in ("self", "bookmark")]
488

  
489

  
490
def image_to_links(image_id):
491
    link = join_urls(IMAGES_URL, str(image_id))
492
    links = [{"ref": rel, "link": link} for rel in ("self", "bookmark")]
493
    links.append({"rel": "alternate",
494
                  "link": join_urls(IMAGES_PLANKTON_URL, str(image_id))})
495
    return links

Also available in: Unified diff