commit
				
					
						646f73763e
					
				
			
		
					 5 changed files with 36 additions and 16 deletions
				
			
		|  | @ -4,15 +4,21 @@ from django.core.urlresolvers import reverse | ||||||
| from opennebula_api.serializers import VirtualMachineTemplateSerializer | from opennebula_api.serializers import VirtualMachineTemplateSerializer | ||||||
| from opennebula_api.models import OpenNebulaManager | from opennebula_api.models import OpenNebulaManager | ||||||
| 
 | 
 | ||||||
|  | from .models import HostingPlan | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class ProcessVMSelectionMixin(object): | class ProcessVMSelectionMixin(object): | ||||||
| 
 | 
 | ||||||
|     def post(self, request, *args, **kwargs): |     def post(self, request, *args, **kwargs): | ||||||
| 
 | 
 | ||||||
|         template_id = int(request.POST.get('vm_template_id')) |         template_id = int(request.POST.get('vm_template_id')) | ||||||
|  |         configuration_id = int(request.POST.get('configuration')) | ||||||
|         template = OpenNebulaManager().get_template(template_id) |         template = OpenNebulaManager().get_template(template_id) | ||||||
|         data = VirtualMachineTemplateSerializer(template).data |         data = VirtualMachineTemplateSerializer(template).data | ||||||
|  |         configuration = HostingPlan.objects.get(id=configuration_id) | ||||||
|  | 
 | ||||||
|         request.session['template'] = data |         request.session['template'] = data | ||||||
|  |         request.session['specs'] = configuration.serialize() | ||||||
| 
 | 
 | ||||||
|         if not request.user.is_authenticated(): |         if not request.user.is_authenticated(): | ||||||
|             request.session['next'] = reverse('hosting:payment') |             request.session['next'] = reverse('hosting:payment') | ||||||
|  |  | ||||||
|  | @ -18,13 +18,13 @@ | ||||||
|       <div class="row text-center"> |       <div class="row text-center"> | ||||||
| 
 | 
 | ||||||
|         <div class="block col-md-offset-3"> |         <div class="block col-md-offset-3"> | ||||||
|           {% for vm in vm_types %} |           {% for vm in configuration_options %} | ||||||
|             <div class="col-xs-12 col-sm-6 col-md-4"> |             <div class="col-xs-12 col-sm-6 col-md-4"> | ||||||
|               <form class="form-inline" method="POST" action="{{request.path}}"> |               <form class="form-inline" method="POST" action="{{request.path}}"> | ||||||
|                 {% csrf_token %} |                 {% csrf_token %} | ||||||
|                 <input type="hidden" name="hosting_company" value="{{vm.hosting_company}}"> |                 <input type="hidden" name="hosting_company" value="{{vm.hosting_company}}"> | ||||||
|                 <input type="hidden" name="location_code" value="{{vm.location_code}}"> |                 <input type="hidden" name="location_code" value="{{vm.location_code}}"> | ||||||
|                 <input type="hidden" name="vm_template_id" value="{{vm.id}}"> |                  <input type="hidden" name="configuration" value="{{vm.id}}"> | ||||||
|                 |                 | ||||||
|                  |                  | ||||||
|                  |                  | ||||||
|  | @ -53,14 +53,14 @@ | ||||||
|                       </div> |                       </div> | ||||||
|                     </div> |                     </div> | ||||||
|                   </li> |                   </li> | ||||||
| <!--                   <li> |                   <li> | ||||||
|                   <label for="configuration">Configuration: </label> |                   <label for="configuration">Configuration: </label> | ||||||
|                         <select class="form-control" name="configuration" id="{{vm.hosting_company}}-configuration" data-vm-type="{{vm.hosting_company}}"> |                         <select class="form-control" name="vm_template_id" id="{{vm.hosting_company}}-configuration" data-vm-type="{{vm.hosting_company}}"> | ||||||
|                         {% for key,value in configuration_options.items   %} |                         {% for template in templates   %} | ||||||
|                             <option  value="{{key}}">{{ value }}</option> |                             <option  value="{{template.id}}">{{ template.name }}</option> | ||||||
|                         {% endfor %} |                         {% endfor %} | ||||||
|                         </select> |                         </select> | ||||||
|                   </li> --> |                   </li> | ||||||
|                   <li> |                   <li> | ||||||
|                     <input type="hidden" name="final_price" value="{{vm.final_price|floatformat}}"> |                     <input type="hidden" name="final_price" value="{{vm.final_price|floatformat}}"> | ||||||
|                     <h3 id="{{vm.hosting_company}}-final-price">{{vm.price|floatformat}} CHF</h3> |                     <h3 id="{{vm.hosting_company}}-final-price">{{vm.price|floatformat}} CHF</h3> | ||||||
|  |  | ||||||
|  | @ -47,6 +47,7 @@ class DjangoHostingView(ProcessVMSelectionMixin, View): | ||||||
|         HOSTING = 'django' |         HOSTING = 'django' | ||||||
|         templates = OpenNebulaManager().get_templates() |         templates = OpenNebulaManager().get_templates() | ||||||
|         data = VirtualMachineTemplateSerializer(templates, many=True).data |         data = VirtualMachineTemplateSerializer(templates, many=True).data | ||||||
|  |         configuration_options = HostingPlan.get_serialized_configs() | ||||||
| 
 | 
 | ||||||
|         # configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) |         # configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) | ||||||
|         context = { |         context = { | ||||||
|  | @ -57,8 +58,8 @@ class DjangoHostingView(ProcessVMSelectionMixin, View): | ||||||
|             'google_analytics': "UA-62285904-6", |             'google_analytics': "UA-62285904-6", | ||||||
|             'vm_types': data, |             'vm_types': data, | ||||||
|             'email': "info@django-hosting.ch", |             'email': "info@django-hosting.ch", | ||||||
|             # 'vm_types': VirtualMachineType.get_serialized_vm_types(), |             'configuration_options': configuration_options, | ||||||
|             # 'configuration_options': dict(VirtualMachinePlan.VM_CONFIGURATION) |             'templates': templates, | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return context |         return context | ||||||
|  | @ -77,7 +78,7 @@ class RailsHostingView(ProcessVMSelectionMixin, View): | ||||||
|         HOSTING = 'rails' |         HOSTING = 'rails' | ||||||
| 
 | 
 | ||||||
|         templates = OpenNebulaManager().get_templates() |         templates = OpenNebulaManager().get_templates() | ||||||
|         data = VirtualMachineTemplateSerializer(templates, many=True).data |         configuration_options = HostingPlan.get_serialized_configs() | ||||||
| 
 | 
 | ||||||
|         context = { |         context = { | ||||||
|             'hosting': HOSTING, |             'hosting': HOSTING, | ||||||
|  | @ -85,7 +86,8 @@ class RailsHostingView(ProcessVMSelectionMixin, View): | ||||||
|             'domain': "rails-hosting.ch", |             'domain': "rails-hosting.ch", | ||||||
|             'google_analytics': "UA-62285904-5", |             'google_analytics': "UA-62285904-5", | ||||||
|             'email': "info@rails-hosting.ch", |             'email': "info@rails-hosting.ch", | ||||||
|             'vm_types': data, |             'configuration_options': configuration_options, | ||||||
|  |             'templates': templates, | ||||||
|         } |         } | ||||||
|         return context |         return context | ||||||
| 
 | 
 | ||||||
|  | @ -102,7 +104,7 @@ class NodeJSHostingView(ProcessVMSelectionMixin, View): | ||||||
|         HOSTING = 'nodejs' |         HOSTING = 'nodejs' | ||||||
|         # configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) |         # configuration_detail = dict(VirtualMachinePlan.VM_CONFIGURATION).get(HOSTING) | ||||||
|         templates = OpenNebulaManager().get_templates() |         templates = OpenNebulaManager().get_templates() | ||||||
|         data = VirtualMachineTemplateSerializer(templates, many=True).data |         configuration_options = HostingPlan.get_serialized_configs() | ||||||
| 
 | 
 | ||||||
|         context = { |         context = { | ||||||
|             'hosting': HOSTING, |             'hosting': HOSTING, | ||||||
|  | @ -111,7 +113,9 @@ class NodeJSHostingView(ProcessVMSelectionMixin, View): | ||||||
|             'domain': "node-hosting.ch", |             'domain': "node-hosting.ch", | ||||||
|             'google_analytics': "UA-62285904-7", |             'google_analytics': "UA-62285904-7", | ||||||
|             'email': "info@node-hosting.ch", |             'email': "info@node-hosting.ch", | ||||||
|             'vm_types': data, |             'templates': templates, | ||||||
|  |             'configuration_options': configuration_options, | ||||||
|  | 
 | ||||||
|         } |         } | ||||||
|         return context |         return context | ||||||
| 
 | 
 | ||||||
|  | @ -128,12 +132,15 @@ class HostingPricingView(ProcessVMSelectionMixin, View): | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
|         # configuration_options = dict(VirtualMachinePlan.VM_CONFIGURATION) |         # configuration_options = dict(VirtualMachinePlan.VM_CONFIGURATION) | ||||||
|         templates = OpenNebulaManager().get_templates() |         templates = OpenNebulaManager().get_templates() | ||||||
|         data = VirtualMachineTemplateSerializer(templates, many=True).data |         configuration_options = HostingPlan.get_serialized_configs() | ||||||
| 
 | 
 | ||||||
|         context = { |         context = { | ||||||
|             # 'configuration_options': configuration_options, |             # 'configuration_options': configuration_options, | ||||||
|             'email': "info@django-hosting.ch", |             'email': "info@django-hosting.ch", | ||||||
|             'vm_types': data, |             'templates': templates, | ||||||
|  |             'configuration_options': configuration_options, | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return context |         return context | ||||||
|  |  | ||||||
|  | @ -82,6 +82,7 @@ class OpenNebulaManager(): | ||||||
|         try: |         try: | ||||||
|             vm_pool = oca.VirtualMachinePool(self.client) |             vm_pool = oca.VirtualMachinePool(self.client) | ||||||
|             vm_pool.info() |             vm_pool.info() | ||||||
|  |             return vm_pool | ||||||
|         except AttributeError: |         except AttributeError: | ||||||
|             logger.info('Could not connect via client, using oneadmin instead')  |             logger.info('Could not connect via client, using oneadmin instead')  | ||||||
|             try: |             try: | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ class VirtualMachineTemplateSerializer(serializers.Serializer): | ||||||
|     id          = serializers.IntegerField(read_only=True) |     id          = serializers.IntegerField(read_only=True) | ||||||
|     set_name    = serializers.CharField(read_only=True, label='Name') |     set_name    = serializers.CharField(read_only=True, label='Name') | ||||||
|     name        = serializers.SerializerMethodField() |     name        = serializers.SerializerMethodField() | ||||||
|     cores       = serializers.IntegerField(source='template.vcpu')  |     cores       = serializers.SerializerMethodField()  | ||||||
|     disk        = serializers.IntegerField(write_only=True) |     disk        = serializers.IntegerField(write_only=True) | ||||||
|     disk_size   = serializers.SerializerMethodField() |     disk_size   = serializers.SerializerMethodField() | ||||||
|     set_memory      = serializers.IntegerField(write_only=True, label='Memory') |     set_memory      = serializers.IntegerField(write_only=True, label='Memory') | ||||||
|  | @ -41,6 +41,12 @@ class VirtualMachineTemplateSerializer(serializers.Serializer): | ||||||
|          |          | ||||||
|         return manager.get_template(template_id=opennebula_id) |         return manager.get_template(template_id=opennebula_id) | ||||||
| 
 | 
 | ||||||
|  |     def get_cores(self, obj): | ||||||
|  |         if hasattr(obj.template, 'vcpu'): | ||||||
|  |             return obj.template.vcpu | ||||||
|  | 
 | ||||||
|  |         return '' | ||||||
|  | 
 | ||||||
|     def get_disk_size(self, obj): |     def get_disk_size(self, obj): | ||||||
|         template = obj.template |         template = obj.template | ||||||
|         disk_size = 0 |         disk_size = 0 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue