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:
Arvind Tiwari 2018-05-24 04:24:26 +05:30 committed by GitHub
commit ae911c8c21
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 76 additions and 16 deletions

View file

@ -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)

View file

@ -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
)

View file

@ -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

View file

@ -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()

View 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),
),
]

View file

@ -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

View file

@ -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: