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
#+BEGIN_SRC python :tangle ../network_inventory/models.py
#+BEGIN_SRC python :tangle ../inventory/models.py
#!/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
#+END_SRC
* Admin
#+BEGIN_SRC python :tangle ../network_inventory/admin.py
#+BEGIN_SRC python :tangle ../inventory/admin.py
#!/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)
#+END_SRC
* Views
#+BEGIN_SRC python :tangle ../network_inventory/views.py
#+BEGIN_SRC python :tangle ../inventory/views.py
#!/usr/bin/python3
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.messages',
'django.contrib.staticfiles',
'inventory.apps.InventoryConfig'
]
MIDDLEWARE = [

View File

@ -1 +0,0 @@