Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,25 @@ You need to put cloud public key into authorized keys on the compute node. Simpl
sudo -u www-data ssh-copy-id root@compute1
```

### Host SMBIOS information is not available

If you see warning
```
Unsupported configuration: Host SMBIOS information is not available
```
Then you need to install `dmidecode` package on your host using your package manager and restart libvirt daemon.

Debian/Ubuntu like:
```
$ sudo apt-get install dmidecode
$ sudo service libvirt-bin restart
```
Arch Linux
```
$ sudo pacman -S dmidecode
$ systemctl restart libvirtd
```

### Cloud-init
Currently supports only root ssh authorized keys and hostname. Example configuration of the cloud-init client follows.
```
Expand Down
4 changes: 3 additions & 1 deletion accounts/migrations/0002_addAdmin.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
def add_useradmin(apps, schema_editor):
from django.utils import timezone
from django.contrib.auth.models import User
from accounts.models import UserAttributes

User.objects.create_superuser('admin', None, 'admin', last_login=timezone.now())
admin = User.objects.create_superuser('admin', None, 'admin', last_login=timezone.now())
UserAttributes(user=admin, max_instances=-1, max_cpus=-1, max_memory=-1, max_disk_size=-1).save()


class Migration(migrations.Migration):
Expand Down
24 changes: 24 additions & 0 deletions accounts/migrations/0003_permissionset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 2.2.12 on 2020-05-27 12:29

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('accounts', '0002_addAdmin'),
]

operations = [
migrations.CreateModel(
name='PermissionSet',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
options={
'permissions': (('change_password', 'Can change password'),),
'managed': False,
'default_permissions': (),
},
),
]
25 changes: 25 additions & 0 deletions accounts/migrations/0004_apply_change_password.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from django.db import migrations


def apply_change_password(apps, schema_editor):
from django.conf import settings
from django.contrib.auth.models import User, Permission

if hasattr(settings, 'SHOW_PROFILE_EDIT_PASSWORD'):
if settings.SHOW_PROFILE_EDIT_PASSWORD:
permission = Permission.objects.get(codename='change_password')
users = User.objects.all()
user: User
for user in users:
user.user_permissions.add(permission)


class Migration(migrations.Migration):

dependencies = [
('accounts', '0003_permissionset'),
]

operations = [
migrations.RunPython(apply_change_password),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.2.12 on 2020-05-28 04:24

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('accounts', '0004_apply_change_password'),
('instances', '0003_migrate_can_clone_instances'),
]

operations = [
migrations.RemoveField(
model_name='userattributes',
name='can_clone_instances',
),
]
72 changes: 49 additions & 23 deletions accounts/models.py
Original file line number Diff line number Diff line change
@@ -1,39 +1,54 @@
from django.db.models import Model, BooleanField, IntegerField, CharField
from django.db.models import ForeignKey, OneToOneField
from django.db.models import CASCADE, DO_NOTHING
from django.contrib.auth.models import User
from django.conf import settings
from instances.models import Instance
from django.contrib.auth.models import User
from django.core.validators import MinValueValidator
from django.db import models
from django.utils.translation import ugettext_lazy as _

from instances.models import Instance


class UserInstance(Model):
user = ForeignKey(User, on_delete=CASCADE)
instance = ForeignKey(Instance, on_delete=CASCADE)
is_change = BooleanField(default=False)
is_delete = BooleanField(default=False)
is_vnc = BooleanField(default=False)
class UserInstance(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
instance = models.ForeignKey(Instance, on_delete=models.CASCADE)
is_change = models.BooleanField(default=False)
is_delete = models.BooleanField(default=False)
is_vnc = models.BooleanField(default=False)

def __unicode__(self):
return self.instance.name


class UserSSHKey(Model):
user = ForeignKey(User, on_delete=DO_NOTHING)
keyname = CharField(max_length=25)
keypublic = CharField(max_length=500)
class UserSSHKey(models.Model):
user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
keyname = models.CharField(max_length=25)
keypublic = models.CharField(max_length=500)

def __unicode__(self):
return self.keyname


class UserAttributes(Model):
user = OneToOneField(User, on_delete=CASCADE)
can_clone_instances = BooleanField(default=True)
max_instances = IntegerField(default=1, help_text="-1 for unlimited. Any integer value", validators=[MinValueValidator(-1), ])
max_cpus = IntegerField(default=1, help_text="-1 for unlimited. Any integer value", validators=[MinValueValidator(-1)])
max_memory = IntegerField(default=2048, help_text="-1 for unlimited. Any integer value", validators=[MinValueValidator(-1)])
max_disk_size = IntegerField(default=20, help_text="-1 for unlimited. Any integer value", validators=[MinValueValidator(-1)])
class UserAttributes(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
max_instances = models.IntegerField(default=1,
help_text="-1 for unlimited. Any integer value",
validators=[
MinValueValidator(-1),
])
max_cpus = models.IntegerField(
default=1,
help_text="-1 for unlimited. Any integer value",
validators=[MinValueValidator(-1)],
)
max_memory = models.IntegerField(
default=2048,
help_text="-1 for unlimited. Any integer value",
validators=[MinValueValidator(-1)],
)
max_disk_size = models.IntegerField(
default=20,
help_text="-1 for unlimited. Any integer value",
validators=[MinValueValidator(-1)],
)

@staticmethod
def create_missing_userattributes(user):
Expand All @@ -51,11 +66,22 @@ def add_default_instances(user):
instance = Instance.objects.get(name=instance_name)
user_instance = UserInstance(user=user, instance=instance)
user_instance.save()

@staticmethod
def configure_user(user):
UserAttributes.create_missing_userattributes(user)
UserAttributes.add_default_instances(user)

def __unicode__(self):
return self.user.username


class PermissionSet(models.Model):
"""
Dummy model for holding set of permissions we need to be automatically added by Django
"""
class Meta:
default_permissions = ()
permissions = (('change_password', _('Can change password')), )

managed = False
175 changes: 0 additions & 175 deletions accounts/templates/accounts-list.html

This file was deleted.

Loading