summaryrefslogtreecommitdiffstats
path: root/gvnfmadapter/driver/interfaces/serializers/grant.py
blob: 4fa5335f27bd2acdd7f4e41455511beb9f47d221 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
# Copyright 2018 ZTE Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from driver.interfaces.serializers.link import LinkSerializer

from rest_framework import serializers


class VimConnectionInfoSerializer(serializers.Serializer):
    id = serializers.CharField(
        help_text="The identifier of the VIM Connection. This identifier is managed by the NFVO.",
        required=True
    )
    vimId = serializers.CharField(
        help_text="The identifier of the VIM instance. This identifier is managed by the NFVO.",
        required=False
    )
    vimType = serializers.CharField(
        help_text="Discriminator for the different types of the VIM information.",
        required=False
    )
    interfaceInfo = serializers.DictField(
        help_text="Information about the interface or interfaces to the VIM.",
        child=serializers.CharField(help_text="Interface Info", allow_blank=True),
        required=False
    )
    accessInfo = serializers.DictField(
        help_text="Authentication credentials for accessing the VIM.",
        child=serializers.CharField(help_text="Access Info", allow_blank=True),
        required=False
    )
    extra = serializers.DictField(
        help_text="VIM type specific additional information.",
        child=serializers.CharField(help_text="Extra", allow_blank=True),
        required=False
    )

class ZoneInfoSerializer(serializers.Serializer):
    id = serializers.CharField(
        help_text="The identifier of this ZoneInfo instance, for the purpose of referencing it from other structures in the Grant structure.",
        required=True
    )
    zoneId = serializers.CharField(
        help_text="The identifier of the resource zone, as managed by the resource management layer(typically, the VIM).",
        required=False
    )
    vimConnectionId = serializers.CharField(
        help_text="Identifier of the connection to the VIM that manages the resource zone.",
        required=False
    )
    resourceProviderId = serializers.CharField(
        help_text="Identifies the entity responsible for the management the resource zone.",
        required=False
    )


class ZoneGroupInfoSerializer(serializers.Serializer):
    zoneId = serializers.ListSerializer(
        help_text="References of identifiers of ZoneInfo structures.",
        child=serializers.CharField(help_text="IdentifierLocal", allow_blank=True),
        required=False
    )


class GrantInfoSerializer(serializers.Serializer):
    resourceDefinitionId = serializers.CharField(
        help_text="Identifier of the related ResourceDefinition from the related GrantRequest.",
        required=True
    )
    reservationId = serializers.CharField(
        help_text="The reservation identifier applicable to the VNFC/VirtualLink/VirtualStorage.",
        required=False
    )
    vimConnectionId = serializers.CharField(
        help_text="Identifier of the VIM connection to be used to manage this resource.",
        required=False,
    )
    resourceProviderId = serializers.CharField(
        help_text="Identifies the entity responsible for the management of the virtualised resource.",
        required=False
    )
    zoneId = serializers.CharField(
        help_text="Reference to the identifier of the ZoneInfo in the Grant.",
        required=False
    )
    resourceGroupId = serializers.CharField(
        help_text="Identifier of the infrastructure resource group.",
        required=False
    )


class VimComputeResourceFlavourSerializer(serializers.Serializer):
    vimConnectionId = serializers.CharField(
        help_text="Identifier of the VIM connection to access the flavour referenced in this structure.",
        required=False
    )
    resourceProviderId = serializers.CharField(
        help_text="Identifies the entity responsible for the management of the virtualised resource.",
        required=False,
    )
    vnfdVirtualComputeDescId = serializers.CharField(
        help_text="Identifier which references the virtual compute descriptor in the VNFD that maps to this flavour.",
        required=False
    )
    vimFlavourId = serializers.CharField(
        help_text="Identifier of the compute resource flavour in the resource management layer (i.e. VIM).",
        required=False
    )


class VimSoftwareImageSerializer(serializers.Serializer):
    vimConnectionId = serializers.CharField(
        help_text="Identifier of the VIM connection to access the flavour referenced in this structure.",
        required=False
    )
    resourceProviderId = serializers.CharField(
        help_text="Identifies the entity responsible for the management of the virtualised resource.",
        required=False
    )
    vnfdSoftwareImageId = serializers.CharField(
        help_text="Identifier which references the software image descriptor in the VNFD.",
        required=False
    )
    vimSoftwareImageId = serializers.CharField(
        help_text="Identifier of the software image in the resource management layer (i.e. VIM).",
        required=False
    )


class VimAssetsSerializer(serializers.Serializer):
    computeResourceFlavours = VimComputeResourceFlavourSerializer(
        help_text="Mappings between virtual compute descriptors defined in the VNFD and compute resource flavours managed in the VIM.",
        many=True,
        required=False
    )
    softwareImages = VimSoftwareImageSerializer(
        help_text="Mappings between software images defined in the VNFD and software images managed in the VIM.",
        many=True,
        required=False
    )


class AddressRangeSerializer(serializers.Serializer):
    minAddress = serializers.CharField(
        help_text="Lowest IP address belonging to the range.",
        required=True
    )
    maxAddress = serializers.CharField(
        help_text="Highest IP address belonging to the range.",
        required=True
    )


class IpAddresseSerializer(serializers.Serializer):
    type = serializers.ChoiceField(
        help_text="The type of the IP addresses.",
        choices=["IPV4", "IPV6"],
        required=True
    )
    fixedAddresses = serializers.ListSerializer(
        help_text="Fixed addresses to assign.",
        child=serializers.CharField(help_text="IpAddress"),
        required=False
    )
    numDynamicAddresses = serializers.IntegerField(
        help_text="Number of dynamic addresses to assign.",
        required=True
    )
    addressRange = AddressRangeSerializer(
        help_text="An IP address range to be used, e.g. in case of egress connections.",
        required=False
    )
    subnetId = serializers.CharField(
        help_text="Subnet defined by the identifier of the subnet resource in the VIM.",
        required=False
    )


class IpOverEthernetAddressDataSerializer(serializers.Serializer):
    macAddress = serializers.CharField(
        help_text="MAC address.",
        required=False
    )
    ipAddresses = IpAddresseSerializer(
        help_text="List of IP addresses to assign to the CP instance.",
        many=True,
        required=False
    )


class CpProtocolDataSerializer(serializers.Serializer):
    layerProtocol = serializers.ChoiceField(
        help_text="Identifier of layer(s) and protocol(s).",
        choices=["IP_OVER_ETHERNET"],
        required=True
    )
    ipOverEthernet = IpOverEthernetAddressDataSerializer(
        help_text="Network address data for IP over Ethernet to assign to the extCP instance.",
        required=False,
    )


class VnfExtCpConfigSerializer(serializers.Serializer):
    cpInstanceId = serializers.CharField(
        help_text="Identifier of the external CP instance to which this set of configuration parameters is requested to be applied.",
        required=False
    )
    linkPortId = serializers.CharField(
        help_text="Identifier of a pre-configured link port to which the external CP will be associated.",
        required=False
    )
    cpProtocolData = CpProtocolDataSerializer(
        help_text="Parameters for configuring the network protocols on the link port that connects the CP to a VL.",
        many=True
    )


class VnfExtCpDataSerializer(serializers.Serializer):
    cpdId = serializers.CharField(
        help_text="The identifier of the CPD in the VNFD.",
        required=True
    )
    cpConfig = VnfExtCpConfigSerializer(
        help_text="List of instance data that need to be configured on the CP instances created from the respective CPD.",
        many=True,
        required=False
    )


class ExtLinkPortDataSerializer(serializers.Serializer):
    id = serializers.CharField(
        help_text="Identifier of this link port as provided by the entity that has created the link port.",
        required=True
    )
    resourceHandle = serializers.CharField(
        help_text="Reference to the virtualised resource realizing this link port.",
        required=True
    )


class ExtVirtualLinkDataSerializer(serializers.Serializer):
    id = serializers.CharField(
        help_text="The identifier of the external VL instance.",
        required=True
    )
    vimConnectionId = serializers.CharField(
        help_text="Identifier of the VIM connection to manage this resource.",
        required=False
    )
    resourceProviderId = serializers.CharField(
        help_text="Identifies the entity responsible for the management of this resource.",
        required=False
    )
    resourceId = serializers.CharField(
        help_text="The identifier of the resource in the scope of the VIM or the resource provider.",
        required=True
    )
    extCps = VnfExtCpDataSerializer(
        help_text="External CPs of the VNF to be connected to this external VL.",
        many=True,
        required=False
    )
    extLinkPorts = ExtLinkPortDataSerializer(
        help_text="Externally provided link ports to be used to connect external connection points to this external VL.",
        many=True,
        required=False
    )


class ExtManagedVirtualLinkDataSerializer(serializers.Serializer):
    id = serializers.CharField(
        help_text="The identifier of the externally-managed internal VL instance.",
        required=True
    )
    virtualLinkDescId = serializers.CharField(
        help_text="The identifier of the VLD in the VNFD for this VL.",
        required=True
    )
    vimConnectionId = serializers.CharField(
        help_text="Identifier of the VIM connection to manage this resource.",
        required=False
    )
    resourceProviderId = serializers.CharField(
        help_text="Identifies the entity responsible for the management of this resource.",
        required=False
    )
    resourceId = serializers.CharField(
        help_text="The identifier of the resource in the scope of the VIM or the resource provider.",
        required=True
    )


class GrantLinksSerializer(serializers.Serializer):
    self = LinkSerializer(
        help_text="URI of this resource.",
        required=True
    )
    vnfLcmOpOcc = LinkSerializer(
        help_text="Related VNF lifecycle management operation occurrence.",
        required=True
    )
    vnfInstance = LinkSerializer(
        help_text="Related VNF instance.",
        required=True
    )


class GrantSerializer(serializers.Serializer):
    id = serializers.CharField(
        help_text="Identifier of the grant.",
        required=True
    )
    vnfInstanceId = serializers.CharField(
        help_text="Identifier of the related VNF instance.",
        required=True
    )
    vnfLcmOpOccId = serializers.CharField(
        help_text="Identifier of the related VNF lifecycle management operation occurrence.",
        required=True,
    )
    vimConnections = VimConnectionInfoSerializer(
        help_text="Provides information regarding VIM connections that are approved to be used by the VNFM to allocate resources.",
        many=True,
        required=False
    )
    zones = ZoneInfoSerializer(
        help_text="Identifies resource zones where the resources are approved to be allocated by the VNFM.",
        many=True,
        required=False
    )
    zoneGroups = ZoneGroupInfoSerializer(
        help_text="Information about groups of resource zones.",
        many=True,
        required=False
    )
    computeReservationId = serializers.CharField(
        help_text="Information that identifies a reservation applicable to the compute resource requirements.",
        required=False,
    )
    networkReservationId = serializers.CharField(
        help_text="Information that identifies a reservation applicable to the network resource requirements.",
        required=False,
    )
    storageReservationId = serializers.CharField(
        help_text="Information that identifies a reservation applicable to the storage resource requirements.",
        required=False,
    )
    addResources = GrantInfoSerializer(
        help_text="List of resources that are approved to be added.",
        many=True,
        required=False
    )
    tempResources = GrantInfoSerializer(
        help_text="List of resources that are approved to be temporarily instantiated during the runtime of the lifecycle operation.",
        many=True,
        required=False
    )
    removeResources = GrantInfoSerializer(
        help_text="List of resources that are approved to be removed.",
        many=True,
        required=False
    )
    updateResources = GrantInfoSerializer(
        help_text="List of resources that are approved to be modified.",
        many=True,
        required=False
    )
    vimAssets = VimAssetsSerializer(
        help_text="Information about assets for the VNF that are managed by the NFVO in the VIM.",
        required=False,
    )
    extVirtualLinks = ExtVirtualLinkDataSerializer(
        help_text="Information about external VLs to connect the VNF to.",
        many=True,
        required=False
    )
    extManagedVirtualLinks = ExtManagedVirtualLinkDataSerializer(
        help_text="Information about internal VLs that are managed by other entities than the VNFM.",
        many=True,
        required=False
    )
    additionalParams = serializers.DictField(
        help_text="Additional parameters passed by the NFVO, \
        specific to the VNF and the LCM operation.",
        child=serializers.CharField(help_text="KeyValue Pairs", allow_blank=True),
        required=False,
    )
    _links = GrantLinksSerializer(
        help_text="Links to resources related to this resource.",
        required=True
    )