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

View File

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

View File

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

View File

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

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

View File

@ -61,7 +61,7 @@ class OpenNebulaManager():
domain=settings.OPENNEBULA_DOMAIN, domain=settings.OPENNEBULA_DOMAIN,
port=settings.OPENNEBULA_PORT, port=settings.OPENNEBULA_PORT,
endpoint=settings.OPENNEBULA_ENDPOINT endpoint=settings.OPENNEBULA_ENDPOINT
)) ))
def _get_opennebula_client(self, username, password): def _get_opennebula_client(self, username, password):
return oca.Client("{0}:{1}".format( return oca.Client("{0}:{1}".format(
@ -73,7 +73,7 @@ class OpenNebulaManager():
domain=settings.OPENNEBULA_DOMAIN, domain=settings.OPENNEBULA_DOMAIN,
port=settings.OPENNEBULA_PORT, port=settings.OPENNEBULA_PORT,
endpoint=settings.OPENNEBULA_ENDPOINT endpoint=settings.OPENNEBULA_ENDPOINT
)) ))
def _get_user(self, user): def _get_user(self, user):
"""Get the corresponding opennebula user for a CustomUser object """Get the corresponding opennebula user for a CustomUser object
@ -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:
@ -439,7 +439,7 @@ class OpenNebulaManager():
def delete_template(self, template_id): def delete_template(self, template_id):
self.oneadmin_client.call(oca.VmTemplate.METHODS[ self.oneadmin_client.call(oca.VmTemplate.METHODS[
'delete'], template_id, False) 'delete'], template_id, False)
def change_user_password(self, passwd_hash): def change_user_password(self, passwd_hash):
self.oneadmin_client.call( self.oneadmin_client.call(