Coverage for server / models.py: 90%
58 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
1from django.db import models
2from patchtime.models import Model as PatchtimeModel
3from status.models import Model as StatusModel
4from domain.models import Model as DomainModel
5from location.models import Model as LocationModel
6from operatingsystem.models import Model as OperatingsystemModel
7from servermodel.models import Model as ServermodelModel
8from cluster.models import Model as ClusterModel
9from django.urls import reverse
10from django.utils.timezone import now
11from simple_history.models import HistoricalRecords
12from django.contrib.auth.models import Group
14from . import app_label
17class ServerManager(models.Manager):
18 def get_by_natural_key(self, hostname, status):
19 if isinstance(status, (list, tuple)):
20 status = status[0]
21 return self.get(hostname=hostname, status__name=status)
24class Model(models.Model):
25 objects = ServerManager()
26 hostname = models.CharField(max_length=45)
27 domain = models.ForeignKey(DomainModel, on_delete=models.PROTECT, default=1)
28 delivery_date = models.DateField(default=now)
29 install_date = models.DateField(default=now)
30 last_update = models.DateTimeField(auto_now=True)
31 documentation_url = models.URLField(max_length=2083, blank=True, null=True)
32 memory_in_mb = models.IntegerField(blank=True, null=True)
33 monitoring_from_puppet = models.BooleanField(default=False)
34 location = models.ForeignKey(
35 LocationModel,
36 on_delete=models.PROTECT,
37 null=True,
38 related_name="%s_set" % app_label,
39 related_query_name="%s" % app_label,
40 )
41 operatingsystem = models.ForeignKey(
42 OperatingsystemModel,
43 on_delete=models.PROTECT,
44 null=True,
45 blank=True,
46 related_name="%s_set" % app_label,
47 related_query_name="%s" % app_label,
48 )
50 status = models.ForeignKey(
51 StatusModel,
52 on_delete=models.PROTECT,
53 default=1,
54 related_name="%s_set" % app_label,
55 related_query_name="%s" % app_label,
56 )
58 servermodel = models.ForeignKey(
59 ServermodelModel,
60 on_delete=models.PROTECT,
61 null=True,
62 related_name="%s_set" % app_label,
63 related_query_name="%s" % app_label,
64 )
66 cluster = models.ForeignKey(
67 ClusterModel,
68 on_delete=models.PROTECT,
69 null=True,
70 blank=True,
71 related_name="%s_set" % app_label,
72 related_query_name="%s" % app_label,
73 )
75 # => application model
76 # application = models.CharField(max_length=100, blank=True, null=True)
78 # => rack model
79 # rack = models.CharField(max_length=45, blank=True, null=True)
81 # network!
82 primary_ip = models.GenericIPAddressField(blank=True, null=True)
83 management_ip = models.GenericIPAddressField(blank=True, null=True)
84 management_hostname = models.CharField(max_length=45, blank=True, null=True)
85 delivery_note_id = models.CharField(max_length=45, blank=True, null=True)
86 serial_nr = models.CharField(max_length=60, blank=True, null=True)
87 description = models.CharField(max_length=100, blank=True, null=True)
89 patchtime = models.ForeignKey(
90 PatchtimeModel,
91 null=True,
92 default=None,
93 on_delete=models.PROTECT,
94 related_name="%s_set" % app_label,
95 related_query_name="%s" % app_label,
96 )
98 group = models.ForeignKey(
99 Group,
100 editable=False,
101 blank=True,
102 null=True,
103 on_delete=models.PROTECT,
104 related_name="servers",
105 )
107 history = HistoricalRecords()
109 def __str__(self):
110 return "%s" % self.hostname
112 def natural_key(self):
113 return (self.hostname,) + self.status.natural_key()
115 natural_key.dependencies = ["status.Model"]
117 @classmethod
118 def get_natural_key_fields(cls):
119 return ["hostname", "status__name"]
121 @classmethod
122 def get_natural_key_info(cls):
123 return [("hostname", None), ("status", StatusModel)]
125 def get_absolute_url(self):
126 return reverse("server:detail", kwargs={"pk": self.pk})
128 class Meta:
129 db_table = "{}_{}".format("sm", app_label)
130 constraints = [
131 models.UniqueConstraint(
132 fields=["hostname", "status"], name="unique_sm_server_hostname_status"
133 ),
134 models.UniqueConstraint(
135 fields=["hostname", "status", "group"],
136 name="unique_sm_server_hostname_status_group",
137 ),
138 ]