Просмотр исходного кода

Merge branch 'feature' into 9071-plugin-menu

Arthur 3 лет назад
Родитель
Сommit
36f31228ff

+ 1 - 1
base_requirements.txt

@@ -4,7 +4,7 @@ bleach
 
 # The Python web framework on which NetBox is built
 # https://github.com/django/django
-Django<4.1
+Django<4.2
 
 # Django middleware which permits cross-domain API requests
 # https://github.com/OttoYiu/django-cors-headers

+ 1 - 1
docs/configuration/required-parameters.md

@@ -25,7 +25,7 @@ ALLOWED_HOSTS = ['*']
 
 ## DATABASE
 
-NetBox requires access to a PostgreSQL 10 or later database service to store data. This service can run locally on the NetBox server or on a remote system. The following parameters must be defined within the `DATABASE` dictionary:
+NetBox requires access to a PostgreSQL 11 or later database service to store data. This service can run locally on the NetBox server or on a remote system. The following parameters must be defined within the `DATABASE` dictionary:
 
 * `NAME` - Database name
 * `USER` - PostgreSQL username

+ 3 - 3
docs/installation/1-postgresql.md

@@ -2,8 +2,8 @@
 
 This section entails the installation and configuration of a local PostgreSQL database. If you already have a PostgreSQL database service in place, skip to [the next section](2-redis.md).
 
-!!! warning "PostgreSQL 10 or later required"
-    NetBox requires PostgreSQL 10 or later. Please note that MySQL and other relational databases are **not** supported.
+!!! warning "PostgreSQL 11 or later required"
+    NetBox requires PostgreSQL 11 or later. Please note that MySQL and other relational databases are **not** supported.
 
 ## Installation
 
@@ -35,7 +35,7 @@ sudo systemctl start postgresql
 sudo systemctl enable postgresql
 ```
 
-Before continuing, verify that you have installed PostgreSQL 10 or later:
+Before continuing, verify that you have installed PostgreSQL 11 or later:
 
 ```no-highlight
 psql -V

+ 1 - 1
docs/installation/index.md

@@ -18,7 +18,7 @@ The following sections detail how to set up a new instance of NetBox:
 | Dependency | Minimum Version |
 |------------|-----------------|
 | Python     | 3.8             |
-| PostgreSQL | 10              |
+| PostgreSQL | 11              |
 | Redis      | 4.0             |
 
 Below is a simplified overview of the NetBox application stack for reference:

+ 4 - 5
docs/installation/upgrading.md

@@ -20,7 +20,7 @@ NetBox v3.0 and later require the following:
 | Dependency | Minimum Version |
 |------------|-----------------|
 | Python     | 3.8             |
-| PostgreSQL | 10              |
+| PostgreSQL | 11              |
 | Redis      | 4.0             |
 
 ## 3. Install the Latest Release
@@ -28,16 +28,15 @@ NetBox v3.0 and later require the following:
 As with the initial installation, you can upgrade NetBox by either downloading the latest release package or by cloning the `master` branch of the git repository. 
 
 !!! warning
-    Use the same method as you used to install Netbox originally
+    Use the same method as you used to install NetBox originally
 
-If you are not sure how Netbox was installed originally, check with this
-command:
+If you are not sure how NetBox was installed originally, check with this command:
 
 ```
 ls -ld /opt/netbox /opt/netbox/.git
 ```
 
-If Netbox was installed from a release package, then `/opt/netbox` will be a
+If NetBox was installed from a release package, then `/opt/netbox` will be a
 symlink pointing to the current version, and `/opt/netbox/.git` will not
 exist.  If it was installed from git, then `/opt/netbox` and
 `/opt/netbox/.git` will both exist as normal directories.

+ 1 - 1
docs/introduction.md

@@ -74,6 +74,6 @@ NetBox is built on the [Django](https://djangoproject.com/) Python framework and
 | HTTP service       | nginx or Apache   |
 | WSGI service       | gunicorn or uWSGI |
 | Application        | Django/Python     |
-| Database           | PostgreSQL 10+    |
+| Database           | PostgreSQL 11+    |
 | Task queuing       | Redis/django-rq   |
 | Live device access | NAPALM (optional) |

+ 2 - 18
docs/plugins/development/models.md

@@ -49,24 +49,6 @@ class MyModel(NetBoxModel):
     ...
 ```
 
-### The `clone()` Method
-
-!!! info
-    This method was introduced in NetBox v3.3.
-
-The `NetBoxModel` class includes a `clone()` method to be used for gathering attributes which can be used to create a "cloned" instance. This is used primarily for form initialization, e.g. when using the "clone" button in the NetBox UI. By default, this method will replicate any fields listed in the model's `clone_fields` list, if defined.
-
-Plugin models can leverage this method by defining `clone_fields` as a list of field names to be replicated, or override this method to replace or extend its content:
-
-```python
-class MyModel(NetBoxModel):
-
-    def clone(self):
-        attrs = super().clone()
-        attrs['extra-value'] = 123
-        return attrs
-```
-
 ### Enabling Features Individually
 
 If you prefer instead to enable only a subset of these features for a plugin model, NetBox provides a discrete "mix-in" class for each feature. You can subclass each of these individually when defining your model. (Your model will also need to inherit from Django's built-in `Model` class.)
@@ -116,6 +98,8 @@ For more information about database migrations, see the [Django documentation](h
 
 ::: netbox.models.features.ChangeLoggingMixin
 
+::: netbox.models.features.CloningMixin
+
 ::: netbox.models.features.CustomLinksMixin
 
 ::: netbox.models.features.CustomFieldsMixin

+ 12 - 0
docs/release-notes/version-3.4.md

@@ -0,0 +1,12 @@
+# NetBox v3.4
+
+!!! warning "PostgreSQL 11 Required"
+    NetBox v3.4 requires PostgreSQL 11 or later.
+
+### Plugins API
+
+* [#10314](https://github.com/netbox-community/netbox/issues/10314) - Move `clone()` method from NetBoxModel to CloningMixin
+
+### Other Changes
+
+* [#10358](https://github.com/netbox-community/netbox/issues/10358) - Raise minimum required PostgreSQL version from 10 to 11

+ 1 - 0
mkdocs.yml

@@ -252,6 +252,7 @@ nav:
         - git Cheat Sheet: 'development/git-cheat-sheet.md'
     - Release Notes:
         - Summary: 'release-notes/index.md'
+        - Version 3.4: 'release-notes/version-3.4.md'
         - Version 3.3: 'release-notes/version-3.3.md'
         - Version 3.2: 'release-notes/version-3.2.md'
         - Version 3.1: 'release-notes/version-3.1.md'

+ 7 - 6
netbox/dcim/models/device_components.py

@@ -955,12 +955,13 @@ class RearPort(ModularComponentModel, CabledObjectModel):
         super().clean()
 
         # Check that positions count is greater than or equal to the number of associated FrontPorts
-        frontport_count = self.frontports.count()
-        if self.positions < frontport_count:
-            raise ValidationError({
-                "positions": f"The number of positions cannot be less than the number of mapped front ports "
-                             f"({frontport_count})"
-            })
+        if self.pk:
+            frontport_count = self.frontports.count()
+            if self.positions < frontport_count:
+                raise ValidationError({
+                    "positions": f"The number of positions cannot be less than the number of mapped front ports "
+                                 f"({frontport_count})"
+                })
 
 
 #

+ 1 - 1
netbox/dcim/models/devices.py

@@ -268,7 +268,7 @@ class DeviceType(NetBoxModel):
 
         if (
                 self.subdevice_role != SubdeviceRoleChoices.ROLE_PARENT
-        ) and self.devicebaytemplates.count():
+        ) and self.pk and self.devicebaytemplates.count():
             raise ValidationError({
                 'subdevice_role': "Must delete all device bay templates associated with this device before "
                                   "declassifying it as a parent device."

+ 11 - 2
netbox/netbox/models/features.py

@@ -92,8 +92,17 @@ class CloningMixin(models.Model):
 
     def clone(self):
         """
-        Return a dictionary of attributes suitable for creating a copy of the current instance. This is used for pre-
-        populating an object creation form in the UI.
+        Returns a dictionary of attributes suitable for creating a copy of the current instance. This is used for pre-
+        populating an object creation form in the UI. By default, this method will replicate any fields listed in the
+        model's `clone_fields` list (if defined), but it can be overridden to apply custom logic.
+
+        ```python
+        class MyModel(NetBoxModel):
+            def clone(self):
+                attrs = super().clone()
+                attrs['extra-value'] = 123
+                return attrs
+        ```
         """
         attrs = {}
 

+ 1 - 1
netbox/virtualization/models.py

@@ -367,7 +367,7 @@ class VirtualMachine(NetBoxModel, ConfigContextModel):
             })
 
         # Validate primary IP addresses
-        interfaces = self.interfaces.all()
+        interfaces = self.interfaces.all() if self.pk else None
         for family in (4, 6):
             field = f'primary_ip{family}'
             ip = getattr(self, field)

+ 1 - 1
requirements.txt

@@ -1,5 +1,5 @@
 bleach==5.0.1
-Django==4.0.7
+Django==4.1.1
 django-cors-headers==3.13.0
 django-debug-toolbar==3.6.0
 django-filter==22.1