Get public ip for vms
By using kamilas script we can get the ip from a vms mac address.
This commit is contained in:
		
					parent
					
						
							
								1ca884e1f6
							
						
					
				
			
			
				commit
				
					
						d13efd4527
					
				
			
		
					 1 changed files with 29 additions and 3 deletions
				
			
		|  | @ -1,4 +1,5 @@ | ||||||
| import oca | import oca | ||||||
|  | import ipaddress | ||||||
| 
 | 
 | ||||||
| from rest_framework import serializers | from rest_framework import serializers | ||||||
| 
 | 
 | ||||||
|  | @ -81,9 +82,7 @@ class VirtualMachineSerializer(serializers.Serializer): | ||||||
|      |      | ||||||
| 
 | 
 | ||||||
|     disk_size   = serializers.SerializerMethodField() |     disk_size   = serializers.SerializerMethodField() | ||||||
|     ip          = serializers.CharField(read_only=True, |     ip          = serializers.SerializerMethodField() | ||||||
|                                         source='user_template.ungleich_public_ip', |  | ||||||
|                                         default='-') |  | ||||||
|     vm_id       = serializers.IntegerField(read_only=True, source='id') |     vm_id       = serializers.IntegerField(read_only=True, source='id') | ||||||
|     state       = serializers.CharField(read_only=True, source='str_state') |     state       = serializers.CharField(read_only=True, source='str_state') | ||||||
|     price       = serializers.SerializerMethodField() |     price       = serializers.SerializerMethodField() | ||||||
|  | @ -147,3 +146,30 @@ class VirtualMachineSerializer(serializers.Serializer): | ||||||
|         template_id = obj.template.template_id |         template_id = obj.template.template_id | ||||||
|         template = OpenNebulaManager().get_template(template_id) |         template = OpenNebulaManager().get_template(template_id) | ||||||
|         return template.name |         return template.name | ||||||
|  | 
 | ||||||
|  |     def get_ip(self, obj): | ||||||
|  |         nic = obj.template.nics[0] | ||||||
|  |         if is_in_v4_range(nic.mac): | ||||||
|  |             return str(v4_from_mac(nic.mac)) | ||||||
|  |         else: | ||||||
|  |             return '-' | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def hexstr2int(string): | ||||||
|  |     return int(string.replace(':', ''), 16) | ||||||
|  | 
 | ||||||
|  | FIRST_MAC = hexstr2int('02:00:b3:39:79:4d') | ||||||
|  | FIRST_V4  = ipaddress.ip_address('185.203.112.2') | ||||||
|  | COUNT     = 1000 | ||||||
|  | 
 | ||||||
|  | def v4_from_mac(mac): | ||||||
|  |     """Calculates the IPv4 address from a MAC address. | ||||||
|  | 
 | ||||||
|  |     mac: string (the colon-separated representation) | ||||||
|  |     returns: ipaddress.ip_address object with the v4 address | ||||||
|  |     """ | ||||||
|  |     return FIRST_V4 + (hexstr2int(mac) - FIRST_MAC) | ||||||
|  | 
 | ||||||
|  | def is_in_v4_range(mac): | ||||||
|  |     return FIRST_MAC <= hexstr2int(mac) < FIRST_MAC + 1000 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue