Update get_ipv4 and get_ipv6 for multiple nics + Reformatted code

This commit is contained in:
PCoder 2017-08-19 02:28:48 +05:30
parent a80b0668a2
commit 819e798392

View file

@ -1,5 +1,6 @@
import ipaddress import ipaddress
from builtins import hasattr
from rest_framework import serializers from rest_framework import serializers
from oca import OpenNebulaException from oca import OpenNebulaException
@ -32,7 +33,7 @@ class VirtualMachineTemplateSerializer(serializers.Serializer):
return 0 return 0
def get_memory(self, obj): def get_memory(self, obj):
return int(obj.template.memory)/1024 return int(obj.template.memory) / 1024
def get_name(self, obj): def get_name(self, obj):
return obj.name.strip('public-') return obj.name.strip('public-')
@ -57,13 +58,13 @@ class VirtualMachineSerializer(serializers.Serializer):
configuration = serializers.SerializerMethodField() configuration = serializers.SerializerMethodField()
template_id = serializers.ChoiceField( template_id = serializers.ChoiceField(
choices=[(key.id, key.name) for key in choices=[(key.id, key.name) for key in
OpenNebulaManager().try_get_templates() OpenNebulaManager().try_get_templates()
], ],
source='template.template_id', source='template.template_id',
write_only=True, write_only=True,
default=[] default=[]
) )
def create(self, validated_data): def create(self, validated_data):
owner = validated_data['owner'] owner = validated_data['owner']
@ -74,10 +75,10 @@ class VirtualMachineSerializer(serializers.Serializer):
template_id = validated_data['template']['template_id'] template_id = validated_data['template']['template_id']
specs = { specs = {
'cpu': cores, 'cpu': cores,
'disk_size': disk, 'disk_size': disk,
'memory': memory, 'memory': memory,
} }
try: try:
manager = OpenNebulaManager(email=owner.email, manager = OpenNebulaManager(email=owner.email,
@ -92,7 +93,7 @@ class VirtualMachineSerializer(serializers.Serializer):
return manager.get_vm(opennebula_id) return manager.get_vm(opennebula_id)
def get_memory(self, obj): def get_memory(self, obj):
return int(obj.template.memory)/1024 return int(obj.template.memory) / 1024
def get_disk_size(self, obj): def get_disk_size(self, obj):
template = obj.template template = obj.template
@ -104,9 +105,9 @@ class VirtualMachineSerializer(serializers.Serializer):
def get_price(self, obj): def get_price(self, obj):
template = obj.template template = obj.template
price = float(template.vcpu) * 5.0 price = float(template.vcpu) * 5.0
price += (int(template.memory)/1024 * 2.0) price += (int(template.memory) / 1024 * 2.0)
for disk in template.disks: for disk in template.disks:
price += int(disk.size)/1024 * 0.6 price += int(disk.size) / 1024 * 0.6
return price return price
def get_configuration(self, obj): def get_configuration(self, obj):
@ -115,15 +116,30 @@ class VirtualMachineSerializer(serializers.Serializer):
return template.name.strip('public-') return template.name.strip('public-')
def get_ipv4(self, obj): def get_ipv4(self, obj):
nic = obj.template.nics[0] """
if 'vm-ipv6-nat64-ipv4' in nic.network and is_in_v4_range(nic.mac): Get the IPv4s from the given VM
return str(v4_from_mac(nic.mac))
:param obj: The VM in contention
:return: Returns csv string of all IPv4s added to this VM otherwise returns "-" if no IPv4 is available
"""
ipv4 = []
for nic in obj.template.nics:
if hasattr(nic, 'ip'):
ipv4.append(nic.ip)
if len(ipv4) > 0:
return ', '.join(ipv4)
else: else:
return '-' return '-'
def get_ipv6(self, obj): def get_ipv6(self, obj):
nic = obj.template.nics[0] ipv6 = []
return nic.ip6_global for nic in obj.template.nics:
if hasattr(nic, 'ip6_global'):
ipv6.append(nic.ip6_global)
if len(ipv6) > 0:
return ', '.join(ipv6)
else:
return '-'
def get_name(self, obj): def get_name(self, obj):
return obj.name.strip('public-') return obj.name.strip('public-')