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.extensions import PageExtensionAdmin
 | 
			
		||||
from .cms_models import CMSIntegration, CMSFaviconExtension
 | 
			
		||||
from .models import VMPricing
 | 
			
		||||
from .models import VMPricing, VMTemplate
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CMSIntegrationAdmin(PlaceholderAdminMixin, admin.ModelAdmin):
 | 
			
		||||
| 
						 | 
				
			
			@ -16,3 +16,4 @@ class CMSFaviconExtensionAdmin(PageExtensionAdmin):
 | 
			
		|||
admin.site.register(CMSIntegration, CMSIntegrationAdmin)
 | 
			
		||||
admin.site.register(CMSFaviconExtension, CMSFaviconExtensionAdmin)
 | 
			
		||||
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.image import FilerImageField
 | 
			
		||||
 | 
			
		||||
from datacenterlight.models import VMPricing
 | 
			
		||||
from datacenterlight.models import VMPricing, VMTemplate
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CMSIntegration(models.Model):
 | 
			
		||||
| 
						 | 
				
			
			@ -299,3 +299,7 @@ class DCLCalculatorPluginModel(CMSPlugin):
 | 
			
		|||
        help_text='Choose a pricing that will be associated with this '
 | 
			
		||||
                  '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, instance, placeholder
 | 
			
		||||
        )
 | 
			
		||||
        context['templates'] = VMTemplate.objects.all()
 | 
			
		||||
        context['templates'] = VMTemplate.objects.filter(
 | 
			
		||||
            vm_type=instance.vm_type
 | 
			
		||||
        )
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,16 +10,28 @@ 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()
 | 
			
		||||
            templates = manager.get_templates()
 | 
			
		||||
            dcl_vm_templates = []
 | 
			
		||||
            for template in templates:
 | 
			
		||||
                template_name = template.name.lstrip('public-')
 | 
			
		||||
                template_id = template.id
 | 
			
		||||
                dcl_vm_template = VMTemplate.create(template_name, template_id)
 | 
			
		||||
                dcl_vm_templates.append(dcl_vm_template)
 | 
			
		||||
            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()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										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):
 | 
			
		||||
    PUBLIC = 'public'
 | 
			
		||||
    IPV6 = 'ipv6only'
 | 
			
		||||
    VM_TYPE_CHOICES = (
 | 
			
		||||
        (PUBLIC, PUBLIC.title()),
 | 
			
		||||
        (IPV6, IPV6.title()),
 | 
			
		||||
    )
 | 
			
		||||
    name = models.CharField(max_length=50)
 | 
			
		||||
    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
 | 
			
		||||
    def create(cls, name, opennebula_vm_template_id):
 | 
			
		||||
    def create(cls, name, opennebula_vm_template_id, vm_type):
 | 
			
		||||
        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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -362,12 +362,12 @@ class OpenNebulaManager():
 | 
			
		|||
        except:
 | 
			
		||||
            raise ConnectionRefusedError
 | 
			
		||||
 | 
			
		||||
    def get_templates(self):
 | 
			
		||||
    def get_templates(self, prefix='public-'):
 | 
			
		||||
        try:
 | 
			
		||||
            public_templates = [
 | 
			
		||||
                template
 | 
			
		||||
                for template in self._get_template_pool()
 | 
			
		||||
                if template.name.startswith('public-')
 | 
			
		||||
                if template.name.startswith(prefix)
 | 
			
		||||
            ]
 | 
			
		||||
            return public_templates
 | 
			
		||||
        except ConnectionRefusedError:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue