43 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from django.core.management.base import BaseCommand
 | 
						|
from opennebula_api.models import OpenNebulaManager
 | 
						|
from datacenterlight.models import VMTemplate
 | 
						|
import logging
 | 
						|
 | 
						|
logger = logging.getLogger(__name__)
 | 
						|
 | 
						|
 | 
						|
class Command(BaseCommand):
 | 
						|
    help = '''Fetches the VM templates from OpenNebula and populates the dcl
 | 
						|
            VMTemplate model'''
 | 
						|
 | 
						|
    def get_templates(self, manager, prefix):
 | 
						|
        templates = manager.get_templates('%s-' % prefix)
 | 
						|
        dcl_vm_templates = []
 | 
						|
        for template in templates:
 | 
						|
            template_name = template.name.lstrip('%s-' % prefix)
 | 
						|
            template_id = template.id
 | 
						|
            dcl_vm_template = VMTemplate.create(
 | 
						|
                template_name, template_id, prefix
 | 
						|
            )
 | 
						|
            dcl_vm_templates.append(dcl_vm_template)
 | 
						|
        return dcl_vm_templates
 | 
						|
 | 
						|
    def handle(self, *args, **options):
 | 
						|
        try:
 | 
						|
            manager = OpenNebulaManager()
 | 
						|
            dcl_vm_templates = []
 | 
						|
            dcl_vm_templates.extend(
 | 
						|
                self.get_templates(manager, VMTemplate.PUBLIC)
 | 
						|
            )
 | 
						|
            dcl_vm_templates.extend(
 | 
						|
                self.get_templates(manager, VMTemplate.IPV6)
 | 
						|
            )
 | 
						|
 | 
						|
            old_vm_templates = VMTemplate.objects.all()
 | 
						|
            old_vm_templates.delete()
 | 
						|
 | 
						|
            for dcl_vm_template in dcl_vm_templates:
 | 
						|
                dcl_vm_template.save()
 | 
						|
        except Exception as e:
 | 
						|
            logger.error('Error connecting to OpenNebula. Error Details: '
 | 
						|
                         '{err}'.format(err=str(e)))
 |