Merge pull request #635 from tiwariav/patch/vm_template_patch
add vm_type option to vm_template and dcl calculator
This commit is contained in:
		
				commit
				
					
						ae911c8c21
					
				
			
		
					 7 changed files with 76 additions and 16 deletions
				
			
		| 
						 | 
					@ -2,7 +2,7 @@ from django.contrib import admin
 | 
				
			||||||
from cms.admin.placeholderadmin import PlaceholderAdminMixin
 | 
					from cms.admin.placeholderadmin import PlaceholderAdminMixin
 | 
				
			||||||
from cms.extensions import PageExtensionAdmin
 | 
					from cms.extensions import PageExtensionAdmin
 | 
				
			||||||
from .cms_models import CMSIntegration, CMSFaviconExtension
 | 
					from .cms_models import CMSIntegration, CMSFaviconExtension
 | 
				
			||||||
from .models import VMPricing
 | 
					from .models import VMPricing, VMTemplate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CMSIntegrationAdmin(PlaceholderAdminMixin, admin.ModelAdmin):
 | 
					class CMSIntegrationAdmin(PlaceholderAdminMixin, admin.ModelAdmin):
 | 
				
			||||||
| 
						 | 
					@ -16,3 +16,4 @@ class CMSFaviconExtensionAdmin(PageExtensionAdmin):
 | 
				
			||||||
admin.site.register(CMSIntegration, CMSIntegrationAdmin)
 | 
					admin.site.register(CMSIntegration, CMSIntegrationAdmin)
 | 
				
			||||||
admin.site.register(CMSFaviconExtension, CMSFaviconExtensionAdmin)
 | 
					admin.site.register(CMSFaviconExtension, CMSFaviconExtensionAdmin)
 | 
				
			||||||
admin.site.register(VMPricing)
 | 
					admin.site.register(VMPricing)
 | 
				
			||||||
 | 
					admin.site.register(VMTemplate)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@ from djangocms_text_ckeditor.fields import HTMLField
 | 
				
			||||||
from filer.fields.file import FilerFileField
 | 
					from filer.fields.file import FilerFileField
 | 
				
			||||||
from filer.fields.image import FilerImageField
 | 
					from filer.fields.image import FilerImageField
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from datacenterlight.models import VMPricing
 | 
					from datacenterlight.models import VMPricing, VMTemplate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CMSIntegration(models.Model):
 | 
					class CMSIntegration(models.Model):
 | 
				
			||||||
| 
						 | 
					@ -299,3 +299,7 @@ class DCLCalculatorPluginModel(CMSPlugin):
 | 
				
			||||||
        help_text='Choose a pricing that will be associated with this '
 | 
					        help_text='Choose a pricing that will be associated with this '
 | 
				
			||||||
                  'Calculator'
 | 
					                  'Calculator'
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					    vm_type = models.CharField(
 | 
				
			||||||
 | 
					        max_length=50, choices=VMTemplate.VM_TYPE_CHOICES,
 | 
				
			||||||
 | 
					        default=VMTemplate.PUBLIC
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,7 +88,9 @@ class DCLCalculatorPlugin(CMSPluginBase):
 | 
				
			||||||
        context = super(DCLCalculatorPlugin, self).render(
 | 
					        context = super(DCLCalculatorPlugin, self).render(
 | 
				
			||||||
            context, instance, placeholder
 | 
					            context, instance, placeholder
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        context['templates'] = VMTemplate.objects.all()
 | 
					        context['templates'] = VMTemplate.objects.filter(
 | 
				
			||||||
 | 
					            vm_type=instance.vm_type
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        return context
 | 
					        return context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,16 +10,28 @@ class Command(BaseCommand):
 | 
				
			||||||
    help = '''Fetches the VM templates from OpenNebula and populates the dcl
 | 
					    help = '''Fetches the VM templates from OpenNebula and populates the dcl
 | 
				
			||||||
            VMTemplate model'''
 | 
					            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):
 | 
					    def handle(self, *args, **options):
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            manager = OpenNebulaManager()
 | 
					            manager = OpenNebulaManager()
 | 
				
			||||||
            templates = manager.get_templates()
 | 
					 | 
				
			||||||
            dcl_vm_templates = []
 | 
					            dcl_vm_templates = []
 | 
				
			||||||
            for template in templates:
 | 
					            dcl_vm_templates.extend(
 | 
				
			||||||
                template_name = template.name.lstrip('public-')
 | 
					                self.get_templates(manager, VMTemplate.PUBLIC)
 | 
				
			||||||
                template_id = template.id
 | 
					            )
 | 
				
			||||||
                dcl_vm_template = VMTemplate.create(template_name, template_id)
 | 
					            dcl_vm_templates.extend(
 | 
				
			||||||
                dcl_vm_templates.append(dcl_vm_template)
 | 
					                self.get_templates(manager, VMTemplate.IPV6)
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            old_vm_templates = VMTemplate.objects.all()
 | 
					            old_vm_templates = VMTemplate.objects.all()
 | 
				
			||||||
            old_vm_templates.delete()
 | 
					            old_vm_templates.delete()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										25
									
								
								datacenterlight/migrations/0023_auto_20180524_0349.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								datacenterlight/migrations/0023_auto_20180524_0349.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					# Generated by Django 1.9.4 on 2018-05-23 22:19
 | 
				
			||||||
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.db import migrations, models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ('datacenterlight', '0022_auto_20180506_1950'),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.AddField(
 | 
				
			||||||
 | 
					            model_name='dclcalculatorpluginmodel',
 | 
				
			||||||
 | 
					            name='vm_type',
 | 
				
			||||||
 | 
					            field=models.CharField(choices=[('public', 'Public'), ('ipv6only', 'Ipv6Only')], default='public', max_length=50),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					        migrations.AddField(
 | 
				
			||||||
 | 
					            model_name='vmtemplate',
 | 
				
			||||||
 | 
					            name='vm_type',
 | 
				
			||||||
 | 
					            field=models.CharField(choices=[('public', 'Public'), ('ipv6only', 'Ipv6Only')], default='public', max_length=50),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
| 
						 | 
					@ -6,13 +6,29 @@ logger = logging.getLogger(__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class VMTemplate(models.Model):
 | 
					class VMTemplate(models.Model):
 | 
				
			||||||
 | 
					    PUBLIC = 'public'
 | 
				
			||||||
 | 
					    IPV6 = 'ipv6only'
 | 
				
			||||||
 | 
					    VM_TYPE_CHOICES = (
 | 
				
			||||||
 | 
					        (PUBLIC, PUBLIC.title()),
 | 
				
			||||||
 | 
					        (IPV6, IPV6.title()),
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
    name = models.CharField(max_length=50)
 | 
					    name = models.CharField(max_length=50)
 | 
				
			||||||
    opennebula_vm_template_id = models.IntegerField()
 | 
					    opennebula_vm_template_id = models.IntegerField()
 | 
				
			||||||
 | 
					    vm_type = models.CharField(
 | 
				
			||||||
 | 
					        max_length=50, choices=VM_TYPE_CHOICES, default=PUBLIC
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __str__(self):
 | 
				
			||||||
 | 
					        return '%s - %s - %s' % (
 | 
				
			||||||
 | 
					            self.opennebula_vm_template_id, self.vm_type, self.name
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def create(cls, name, opennebula_vm_template_id):
 | 
					    def create(cls, name, opennebula_vm_template_id, vm_type):
 | 
				
			||||||
        vm_template = cls(
 | 
					        vm_template = cls(
 | 
				
			||||||
            name=name, opennebula_vm_template_id=opennebula_vm_template_id)
 | 
					            name=name, opennebula_vm_template_id=opennebula_vm_template_id,
 | 
				
			||||||
 | 
					            vm_type=vm_type
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        return vm_template
 | 
					        return vm_template
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -362,12 +362,12 @@ class OpenNebulaManager():
 | 
				
			||||||
        except:
 | 
					        except:
 | 
				
			||||||
            raise ConnectionRefusedError
 | 
					            raise ConnectionRefusedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_templates(self):
 | 
					    def get_templates(self, prefix='public-'):
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            public_templates = [
 | 
					            public_templates = [
 | 
				
			||||||
                template
 | 
					                template
 | 
				
			||||||
                for template in self._get_template_pool()
 | 
					                for template in self._get_template_pool()
 | 
				
			||||||
                if template.name.startswith('public-')
 | 
					                if template.name.startswith(prefix)
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
            return public_templates
 | 
					            return public_templates
 | 
				
			||||||
        except ConnectionRefusedError:
 | 
					        except ConnectionRefusedError:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue