forked from uncloud/uncloud
vmhosts, restructure urls, etc.
This commit is contained in:
parent
d4b170f813
commit
c7ded96658
9 changed files with 134 additions and 47 deletions
21
uncloud/uncloud_vm/management/commands/schedulevms.py
Normal file
21
uncloud/uncloud_vm/management/commands/schedulevms.py
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import json
|
||||
|
||||
import uncloud.secrets as secrets
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
from uncloud_vm.models import VMProduct, VMHost
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Select VM Host for VMs'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
pass
|
||||
|
||||
def handle(self, *args, **options):
|
||||
pending_vms = VMProduct.objects.filter(vmhost__isnull=True)
|
||||
vmhosts = VMHost.objects.filter(status='active')
|
||||
for vm in pending_vms:
|
||||
print(vm)
|
||||
# FIXME: implement smart placement
|
||||
24
uncloud/uncloud_vm/management/commands/vmhealth.py
Normal file
24
uncloud/uncloud_vm/management/commands/vmhealth.py
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
import json
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
from uncloud_vm.models import VMProduct, VMHost
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Check health of VMs and VMHosts'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
pass
|
||||
|
||||
def handle(self, *args, **options):
|
||||
pending_vms = VMProduct.objects.filter(vmhost__isnull=True)
|
||||
vmhosts = VMHost.objects.filter(status='active')
|
||||
|
||||
# 1. Check that all active hosts reported back N seconds ago
|
||||
# 2. Check that no VM is running on a dead host
|
||||
# 3. Migrate VMs if necessary
|
||||
# 4. Check that no VMs have been pending for longer than Y seconds
|
||||
|
||||
|
||||
print("Nothing is good, you should implement me")
|
||||
19
uncloud/uncloud_vm/migrations/0003_auto_20200225_2028.py
Normal file
19
uncloud/uncloud_vm/migrations/0003_auto_20200225_2028.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 3.0.3 on 2020-02-25 20:28
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('uncloud_vm', '0002_auto_20200225_1952'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='vmproduct',
|
||||
name='vmhost',
|
||||
field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='uncloud_vm.VMHost'),
|
||||
),
|
||||
]
|
||||
|
|
@ -39,7 +39,9 @@ class VMProduct(models.Model):
|
|||
editable=False)
|
||||
vmhost = models.ForeignKey(VMHost,
|
||||
on_delete=models.CASCADE,
|
||||
editable=False)
|
||||
editable=False,
|
||||
blank=True,
|
||||
null=True)
|
||||
|
||||
cores = models.IntegerField()
|
||||
ram_in_gb = models.FloatField()
|
||||
|
|
|
|||
|
|
@ -1,9 +1,15 @@
|
|||
from django.contrib.auth import get_user_model
|
||||
|
||||
from rest_framework import serializers
|
||||
from .models import VMHost
|
||||
from .models import VMHost, VMProduct
|
||||
|
||||
class VMHostSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = VMHost
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class VMProductSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = VMProduct
|
||||
fields = '__all__'
|
||||
|
|
|
|||
|
|
@ -6,13 +6,24 @@ from django.shortcuts import get_object_or_404
|
|||
from rest_framework import viewsets, permissions
|
||||
from rest_framework.response import Response
|
||||
|
||||
|
||||
from opennebula.models import VM as OpenNebulaVM
|
||||
|
||||
from .models import VMHost
|
||||
from .serializers import VMHostSerializer
|
||||
from .models import VMHost, VMProduct
|
||||
from .serializers import VMHostSerializer, VMProductSerializer
|
||||
|
||||
class VMHostViewSet(viewsets.ModelViewSet):
|
||||
serializer_class = VMHostSerializer
|
||||
queryset = VMHost.objects.all()
|
||||
permission_classes = [permissions.IsAdminUser]
|
||||
|
||||
class VMProductViewSet(viewsets.ModelViewSet):
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
serializer_class = VMProductSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return VMProduct.objects.filter(owner=self.request.user)
|
||||
|
||||
def create(self, request):
|
||||
serializer = VMProductSerializer(data=request.data, context={'request': request})
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save(owner=request.user)
|
||||
|
||||
return Response(serializer.data)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue