create an app for the inventory

This commit is contained in:
Andreas Zweili 2017-12-22 17:02:24 +01:00
parent 30a20c2697
commit 03bbfbc612
13 changed files with 626 additions and 7 deletions

View File

@ -4,22 +4,206 @@
* Models * Models
#+BEGIN_SRC python :tangle ../network_inventory/models.py #+BEGIN_SRC python :tangle ../inventory/models.py
#!/usr/bin/python3 #!/usr/bin/python3
from django.db import models from django.db import models
class Device(models.Model):
name = models.CharField(max_length=50)
description = models.TextField()
def __str__(self):
return self.name
class Weekday(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Month(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class RamType(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Ram(models.Model):
type = models.ForeignKey(RamType, on_delete=models.CASCADE)
size_in_gb = models.FloatField()
def __str__(self):
return '{} {} GB'.format(self.type, self.size)
class DiskType(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class DiskSize(models.Model):
size = models.FloatField()
def __str__(self):
return self.size + " GB"
class Disk(models.Model):
type = models.ForeignKey(DiskType, on_delete=models.CASCADE)
size_in_gb = models.ForeignKey(DiskSize, on_delete=models.CASCADE)
def __str__(self):
return '{} {} GB'.format(self.type, self.size)
class Architecture(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class CpuManufacturer(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Cpu(models.Model):
name = models.CharField(max_length=50)
manufacturer = models.ForeignKey(CpuManufacturer, on_delete=models.PROTECT)
number_of_cores = models.IntegerField()
frequency = models.FloatField()
architecture = models.ForeignKey(Architecture, on_delete=models.PROTECT)
def __str__(self):
return self.name
class OperatingSystem(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Raid(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Computer(Device):
hostname = models.CharField(max_length=20, unique=True)
raid = models.ForeignKey(Raid, null=True, blank=True,
on_delete=models.PROTECT)
os = models.ForeignKey(OperatingSystem, on_delete=models.PROTECT)
cpu = models.ForeignKey(Cpu, on_delete=models.PROTECT)
ram = models.ManyToManyField(Ram, through='ComputerRamRelation')
ip = models.CharField(max_length=15)
disks = models.ManyToManyField(Disk, through='ComputerDiskRelation')
host = models.ForeignKey('self', null=True, blank=True,
on_delete=models.PROTECT)
def __str__(self):
return self.hostname
class ComputerDiskRelation(models.Model):
disk = models.ForeignKey(Disk, on_delete=models.CASCADE)
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
amount = models.IntegerField()
class ComputerRamRelation(models.Model):
ram = models.ForeignKey(Ram, on_delete=models.CASCADE)
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
amount = models.IntegerField()
class Warranty(models.Model):
device = models.ForeignKey(Device, on_delete=models.CASCADE)
files = models.FileField()
valid_until = models.DateField()
def __str__(self):
return self.device
class CronJob(models.Model):
name = models.CharField(max_length=50)
host = models.ForeignKey(Computer, on_delete=models.CASCADE)
command = models.CharField(max_length=50)
time = models.TimeField()
weekday = models.ForeignKey(Weekday, on_delete=models.CASCADE)
month = models.ForeignKey(Month, on_delete=models.CASCADE)
def __str__(self):
return self.name
#+END_SRC #+END_SRC
* Admin * Admin
#+BEGIN_SRC python :tangle ../network_inventory/admin.py #+BEGIN_SRC python :tangle ../inventory/admin.py
#!/usr/bin/python3 #!/usr/bin/python3
from django.contrib import admin from django.contrib import admin
from inventory.models import (Device, Weekday, Month, RamType, Ram,
DiskType, DiskSize, Disk, Architecture,
CpuManufacturer, Cpu, OperatingSystem, Raid,
Computer, ComputerDiskRelation,
ComputerRamRelation, Warranty, CronJob)
class RamInline(admin.StackedInline):
model = ComputerRamRelation
verbose_name_plural = 'Ram Modules'
class DiskInline(admin.StackedInline):
model = ComputerDiskRelation
verbose_name_plural = 'Disks'
class ComputerAdmin(admin.ModelAdmin):
inlines = (RamInline, DiskInline)
admin.site.register(Device)
admin.site.register(Weekday)
admin.site.register(Month)
admin.site.register(RamType)
admin.site.register(Ram)
admin.site.register(DiskType)
admin.site.register(DiskSize)
admin.site.register(Disk)
admin.site.register(Architecture)
admin.site.register(CpuManufacturer)
admin.site.register(Cpu)
admin.site.register(OperatingSystem)
admin.site.register(Raid)
admin.site.register(Computer)
admin.site.register(ComputerDiskRelation)
admin.site.register(ComputerRamRelation)
admin.site.register(Warranty)
admin.site.register(CronJob)
#+END_SRC #+END_SRC
* Views * Views
#+BEGIN_SRC python :tangle ../network_inventory/views.py #+BEGIN_SRC python :tangle ../inventory/views.py
#!/usr/bin/python3 #!/usr/bin/python3
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render

0
inventory/__init__.py Normal file
View File

41
inventory/admin.py Normal file
View File

@ -0,0 +1,41 @@
#!/usr/bin/python3
from django.contrib import admin
from inventory.models import (Device, Weekday, Month, RamType, Ram,
DiskType, DiskSize, Disk, Architecture,
CpuManufacturer, Cpu, OperatingSystem, Raid,
Computer, ComputerDiskRelation,
ComputerRamRelation, Warranty, CronJob)
class RamInline(admin.StackedInline):
model = ComputerRamRelation
verbose_name_plural = 'Ram Modules'
class DiskInline(admin.StackedInline):
model = ComputerDiskRelation
verbose_name_plural = 'Disks'
class ComputerAdmin(admin.ModelAdmin):
inlines = (RamInline, DiskInline)
admin.site.register(Device)
admin.site.register(Weekday)
admin.site.register(Month)
admin.site.register(RamType)
admin.site.register(Ram)
admin.site.register(DiskType)
admin.site.register(DiskSize)
admin.site.register(Disk)
admin.site.register(Architecture)
admin.site.register(CpuManufacturer)
admin.site.register(Cpu)
admin.site.register(OperatingSystem)
admin.site.register(Raid)
admin.site.register(Computer)
admin.site.register(ComputerDiskRelation)
admin.site.register(ComputerRamRelation)
admin.site.register(Warranty)
admin.site.register(CronJob)

5
inventory/apps.py Normal file
View File

@ -0,0 +1,5 @@
from django.apps import AppConfig
class InventoryConfig(AppConfig):
name = 'inventory'

View File

@ -0,0 +1,239 @@
# Generated by Django 2.0 on 2017-12-22 15:21
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Architecture',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
],
),
migrations.CreateModel(
name='ComputerDiskRelation',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('amount', models.IntegerField()),
],
),
migrations.CreateModel(
name='ComputerRamRelation',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('amount', models.IntegerField()),
],
),
migrations.CreateModel(
name='Cpu',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
('number_of_cores', models.IntegerField()),
('frequency', models.FloatField()),
('architecture', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='inventory.Architecture')),
],
),
migrations.CreateModel(
name='CpuManufacturer',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
],
),
migrations.CreateModel(
name='CronJob',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
('command', models.CharField(max_length=50)),
('time', models.TimeField()),
],
),
migrations.CreateModel(
name='Device',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
('description', models.TextField()),
],
),
migrations.CreateModel(
name='Disk',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
),
migrations.CreateModel(
name='DiskSize',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('size', models.FloatField()),
],
),
migrations.CreateModel(
name='DiskType',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
],
),
migrations.CreateModel(
name='Month',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
],
),
migrations.CreateModel(
name='OperatingSystem',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
],
),
migrations.CreateModel(
name='Raid',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
],
),
migrations.CreateModel(
name='Ram',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('size_in_gb', models.FloatField()),
],
),
migrations.CreateModel(
name='RamType',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
],
),
migrations.CreateModel(
name='Warranty',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('files', models.FileField(upload_to='')),
('valid_until', models.DateField()),
],
),
migrations.CreateModel(
name='Weekday',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
],
),
migrations.CreateModel(
name='Computer',
fields=[
('device_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='inventory.Device')),
('hostname', models.CharField(max_length=20, unique=True)),
('ip', models.CharField(max_length=15)),
],
bases=('inventory.device',),
),
migrations.AddField(
model_name='warranty',
name='device',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.Device'),
),
migrations.AddField(
model_name='ram',
name='type',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.RamType'),
),
migrations.AddField(
model_name='disk',
name='size_in_gb',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.DiskSize'),
),
migrations.AddField(
model_name='disk',
name='type',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.DiskType'),
),
migrations.AddField(
model_name='cronjob',
name='month',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.Month'),
),
migrations.AddField(
model_name='cronjob',
name='weekday',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.Weekday'),
),
migrations.AddField(
model_name='cpu',
name='manufacturer',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='inventory.CpuManufacturer'),
),
migrations.AddField(
model_name='computerramrelation',
name='ram',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.Ram'),
),
migrations.AddField(
model_name='computerdiskrelation',
name='disk',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.Disk'),
),
migrations.AddField(
model_name='cronjob',
name='host',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.Computer'),
),
migrations.AddField(
model_name='computerramrelation',
name='computer',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.Computer'),
),
migrations.AddField(
model_name='computerdiskrelation',
name='computer',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.Computer'),
),
migrations.AddField(
model_name='computer',
name='cpu',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='inventory.Cpu'),
),
migrations.AddField(
model_name='computer',
name='disks',
field=models.ManyToManyField(through='inventory.ComputerDiskRelation', to='inventory.Disk'),
),
migrations.AddField(
model_name='computer',
name='host',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='inventory.Computer'),
),
migrations.AddField(
model_name='computer',
name='os',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='inventory.OperatingSystem'),
),
migrations.AddField(
model_name='computer',
name='raid',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='inventory.Raid'),
),
migrations.AddField(
model_name='computer',
name='ram',
field=models.ManyToManyField(through='inventory.ComputerRamRelation', to='inventory.Ram'),
),
]

View File

148
inventory/models.py Normal file
View File

@ -0,0 +1,148 @@
#!/usr/bin/python3
from django.db import models
class Device(models.Model):
name = models.CharField(max_length=50)
description = models.TextField()
def __str__(self):
return self.name
class Weekday(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Month(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class RamType(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Ram(models.Model):
type = models.ForeignKey(RamType, on_delete=models.CASCADE)
size_in_gb = models.FloatField()
def __str__(self):
return '{} {} GB'.format(self.type, self.size)
class DiskType(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class DiskSize(models.Model):
size = models.FloatField()
def __str__(self):
return self.size + " GB"
class Disk(models.Model):
type = models.ForeignKey(DiskType, on_delete=models.CASCADE)
size_in_gb = models.ForeignKey(DiskSize, on_delete=models.CASCADE)
def __str__(self):
return '{} {} GB'.format(self.type, self.size)
class Architecture(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class CpuManufacturer(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Cpu(models.Model):
name = models.CharField(max_length=50)
manufacturer = models.ForeignKey(CpuManufacturer, on_delete=models.PROTECT)
number_of_cores = models.IntegerField()
frequency = models.FloatField()
architecture = models.ForeignKey(Architecture, on_delete=models.PROTECT)
def __str__(self):
return self.name
class OperatingSystem(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Raid(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Computer(Device):
hostname = models.CharField(max_length=20, unique=True)
raid = models.ForeignKey(Raid, null=True, blank=True,
on_delete=models.PROTECT)
os = models.ForeignKey(OperatingSystem, on_delete=models.PROTECT)
cpu = models.ForeignKey(Cpu, on_delete=models.PROTECT)
ram = models.ManyToManyField(Ram, through='ComputerRamRelation')
ip = models.CharField(max_length=15)
disks = models.ManyToManyField(Disk, through='ComputerDiskRelation')
host = models.ForeignKey('self', null=True, blank=True,
on_delete=models.PROTECT)
def __str__(self):
return self.hostname
class ComputerDiskRelation(models.Model):
disk = models.ForeignKey(Disk, on_delete=models.CASCADE)
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
amount = models.IntegerField()
class ComputerRamRelation(models.Model):
ram = models.ForeignKey(Ram, on_delete=models.CASCADE)
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
amount = models.IntegerField()
class Warranty(models.Model):
device = models.ForeignKey(Device, on_delete=models.CASCADE)
files = models.FileField()
valid_until = models.DateField()
def __str__(self):
return self.device
class CronJob(models.Model):
name = models.CharField(max_length=50)
host = models.ForeignKey(Computer, on_delete=models.CASCADE)
command = models.CharField(max_length=50)
time = models.TimeField()
weekday = models.ForeignKey(Weekday, on_delete=models.CASCADE)
month = models.ForeignKey(Month, on_delete=models.CASCADE)
def __str__(self):
return self.name

3
inventory/tests.py Normal file
View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

2
inventory/views.py Normal file
View File

@ -0,0 +1,2 @@
#!/usr/bin/python3
from django.shortcuts import get_object_or_404, render

View File

@ -1 +0,0 @@

View File

@ -1,2 +0,0 @@
#!/usr/bin/python3
from django.db import models

View File

@ -37,6 +37,7 @@ INSTALLED_APPS = [
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'inventory.apps.InventoryConfig'
] ]
MIDDLEWARE = [ MIDDLEWARE = [

View File

@ -1 +0,0 @@