From 57794486f7ea7f72bede8adbab2fcae382a4322e Mon Sep 17 00:00:00 2001 From: Tobias Genannt Date: Wed, 15 Jan 2025 07:32:34 +0100 Subject: [PATCH 1/3] Prepare for Netbox 4.2 --- README.md | 6 +- pyproject.toml | 4 +- src/netbox_initializers/__init__.py | 4 +- src/netbox_initializers/initializers/users.py | 3 +- src/netbox_initializers/version.py | 2 +- test/Dockerfile | 2 +- uv.lock | 106 +++++++++--------- 7 files changed, 64 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 8565255..51a9950 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Load data from YAML files into Netbox First activate your virtual environment where Netbox is installed, the install the plugin version correspondig to your Netbox version. ```bash -pip install "netbox-initializers==4.1.*" +pip install "netbox-initializers==4.2.*" ``` Then you need to add the plugin to the `PLUGINS` array in the Netbox configuration. @@ -38,6 +38,6 @@ The initializers where a part of the Docker image and where then extracted into To use the new plugin in a the Netbox Docker image, it musst be installad into the image. To this, the following example can be used as a starting point: ```dockerfile -FROM netboxcommunity/netbox:v4.1 -RUN /opt/netbox/venv/bin/pip install "netbox-initializers==4.1.*" +FROM netboxcommunity/netbox:v4.2 +RUN /opt/netbox/venv/bin/pip install "netbox-initializers==4.2.*" ``` diff --git a/pyproject.toml b/pyproject.toml index 5445898..15e9d54 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ license = "Apache-2.0" dynamic = ["version"] requires-python = ">=3.10" -dependencies = ["ruamel-yaml>=0.18.6"] +dependencies = ["ruamel-yaml>=0.18.10"] [build-system] requires = ["hatchling"] @@ -24,7 +24,7 @@ build-backend = "hatchling.build" path = "src/netbox_initializers/version.py" [tool.uv] -dev-dependencies = ["ruff==0.6.3"] +dev-dependencies = ["ruff==0.9.1"] [tool.ruff] line-length = 100 diff --git a/src/netbox_initializers/__init__.py b/src/netbox_initializers/__init__.py index d8f0437..05f8d7e 100644 --- a/src/netbox_initializers/__init__.py +++ b/src/netbox_initializers/__init__.py @@ -9,8 +9,8 @@ class NetBoxInitializersConfig(PluginConfig): description = "Load initial data into Netbox" version = VERSION base_url = "initializers" - min_version = "4.1-beta1" - max_version = "4.1.99" + min_version = "4.2.0" + max_version = "4.2.99" config = NetBoxInitializersConfig diff --git a/src/netbox_initializers/initializers/users.py b/src/netbox_initializers/initializers/users.py index 26aeb95..4a987b6 100644 --- a/src/netbox_initializers/initializers/users.py +++ b/src/netbox_initializers/initializers/users.py @@ -1,3 +1,4 @@ +from django.utils.crypto import get_random_string from users.models import Token, User from netbox_initializers.initializers.base import BaseInitializer, register_initializer @@ -13,7 +14,7 @@ def load_data(self): for username, user_details in users.items(): api_token = user_details.pop("api_token", Token.generate_key()) - password = user_details.pop("password", User.objects.make_random_password()) + password = user_details.pop("password", get_random_string(length=25)) user, created = User.objects.get_or_create(username=username, defaults=user_details) if created: user.set_password(password) diff --git a/src/netbox_initializers/version.py b/src/netbox_initializers/version.py index 73f980c..773464b 100644 --- a/src/netbox_initializers/version.py +++ b/src/netbox_initializers/version.py @@ -1 +1 @@ -VERSION = "4.1.0" +VERSION = "4.2.0" diff --git a/test/Dockerfile b/test/Dockerfile index ba25a73..73d3211 100644 --- a/test/Dockerfile +++ b/test/Dockerfile @@ -1,4 +1,4 @@ -FROM netboxcommunity/netbox:feature +FROM netboxcommunity/netbox:v4.2 COPY ../ /opt/netbox-initializers/ COPY ./test/config/plugins.py /etc/netbox/config/ diff --git a/uv.lock b/uv.lock index be6974e..7e05d68 100644 --- a/uv.lock +++ b/uv.lock @@ -3,7 +3,7 @@ requires-python = ">=3.10" [[package]] name = "netbox-initializers" -version = "4.1.0" +version = "4.2.0" source = { editable = "." } dependencies = [ { name = "ruamel-yaml" }, @@ -15,76 +15,76 @@ dev = [ ] [package.metadata] -requires-dist = [{ name = "ruamel-yaml", specifier = ">=0.18.6" }] +requires-dist = [{ name = "ruamel-yaml", specifier = ">=0.18.10" }] [package.metadata.requires-dev] -dev = [{ name = "ruff", specifier = "==0.6.3" }] +dev = [{ name = "ruff", specifier = "==0.9.1" }] [[package]] name = "ruamel-yaml" -version = "0.18.6" -source = { registry = "https://pypi.org/simple" } +version = "0.18.10" +source = { registry = "https://nexus.scanplus.de/repository/pypi-group/simple" } dependencies = [ { name = "ruamel-yaml-clib", marker = "python_full_version < '3.13' and platform_python_implementation == 'CPython'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/29/81/4dfc17eb6ebb1aac314a3eb863c1325b907863a1b8b1382cdffcb6ac0ed9/ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b", size = 143362 } +sdist = { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml/0.18.10/ruamel.yaml-0.18.10.tar.gz", hash = "sha256:20c86ab29ac2153f80a428e1254a8adf686d3383df04490514ca3b79a362db58" } wheels = [ - { url = "https://files.pythonhosted.org/packages/73/67/8ece580cc363331d9a53055130f86b096bf16e38156e33b1d3014fffda6b/ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636", size = 117761 }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml/0.18.10/ruamel.yaml-0.18.10-py3-none-any.whl", hash = "sha256:30f22513ab2301b3d2b577adc121c6471f28734d3d9728581245f1e76468b4f1" }, ] [[package]] name = "ruamel-yaml-clib" version = "0.2.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/46/ab/bab9eb1566cd16f060b54055dd39cf6a34bfa0240c53a7218c43e974295b/ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512", size = 213824 } +source = { registry = "https://nexus.scanplus.de/repository/pypi-group/simple" } +sdist = { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/01/37ac131614f71b98e9b148b2d7790662dcee92217d2fb4bac1aa377def33/ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d", size = 148236 }, - { url = "https://files.pythonhosted.org/packages/61/ee/4874c9fc96010fce85abefdcbe770650c5324288e988d7a48b527a423815/ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462", size = 133996 }, - { url = "https://files.pythonhosted.org/packages/d3/62/c60b034d9a008bbd566eeecf53a5a4c73d191c8de261290db6761802b72d/ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412", size = 526680 }, - { url = "https://files.pythonhosted.org/packages/90/8c/6cdb44f548b29eb6328b9e7e175696336bc856de2ff82e5776f860f03822/ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f", size = 605853 }, - { url = "https://files.pythonhosted.org/packages/88/30/fc45b45d5eaf2ff36cffd215a2f85e9b90ac04e70b97fd4097017abfb567/ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334", size = 655206 }, - { url = "https://files.pythonhosted.org/packages/af/dc/133547f90f744a0c827bac5411d84d4e81da640deb3af1459e38c5f3b6a0/ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d", size = 689649 }, - { url = "https://files.pythonhosted.org/packages/23/1d/589139191b187a3c750ae8d983c42fd799246d5f0dd84451a0575c9bdbe9/ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d", size = 100044 }, - { url = "https://files.pythonhosted.org/packages/4f/5b/744df20285a75ac4c606452ce9a0fcc42087d122f42294518ded1017697c/ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31", size = 117825 }, - { url = "https://files.pythonhosted.org/packages/b1/15/971b385c098e8d0d170893f5ba558452bb7b776a0c90658b8f4dd0e3382b/ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069", size = 148870 }, - { url = "https://files.pythonhosted.org/packages/01/b0/4ddef56e9f703d7909febc3a421d709a3482cda25826816ec595b73e3847/ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248", size = 134475 }, - { url = "https://files.pythonhosted.org/packages/a4/f7/22d6b620ed895a05d40802d8281eff924dc6190f682d933d4efff60db3b5/ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b", size = 544020 }, - { url = "https://files.pythonhosted.org/packages/7c/e4/0d19d65e340f93df1c47f323d95fa4b256bb28320290f5fddef90837853a/ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe", size = 642643 }, - { url = "https://files.pythonhosted.org/packages/c9/ff/f781eb5e2ae011e586d5426e2086a011cf1e0f59704a6cad1387975c5a62/ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899", size = 695832 }, - { url = "https://files.pythonhosted.org/packages/e3/41/f62e67ac651358b8f0d60cfb12ab2daf99b1b69eeaa188d0cec809d943a6/ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9", size = 730923 }, - { url = "https://files.pythonhosted.org/packages/9f/f0/19ab8acbf983cd1b37f47d27ceb8b10a738d60d36316a54bad57e0d73fbb/ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7", size = 99999 }, - { url = "https://files.pythonhosted.org/packages/ec/54/d8a795997921d87224c65d44499ca595a833093fb215b133f920c1062956/ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb", size = 118008 }, - { url = "https://files.pythonhosted.org/packages/7a/a2/eb5e9d088cb9d15c24d956944c09dca0a89108ad6e2e913c099ef36e3f0d/ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1", size = 144636 }, - { url = "https://files.pythonhosted.org/packages/66/98/8de4f22bbfd9135deb3422e96d450c4bc0a57d38c25976119307d2efe0aa/ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2", size = 135684 }, - { url = "https://files.pythonhosted.org/packages/30/d3/5fe978cd01a61c12efd24d65fa68c6f28f28c8073a06cf11db3a854390ca/ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92", size = 734571 }, - { url = "https://files.pythonhosted.org/packages/55/b3/e2531a050758b717c969cbf76c103b75d8a01e11af931b94ba656117fbe9/ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62", size = 643946 }, - { url = "https://files.pythonhosted.org/packages/0d/aa/06db7ca0995b513538402e11280282c615b5ae5f09eb820460d35fb69715/ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9", size = 692169 }, - { url = "https://files.pythonhosted.org/packages/27/38/4cf4d482b84ecdf51efae6635cc5483a83cf5ca9d9c13e205a750e251696/ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d", size = 740325 }, - { url = "https://files.pythonhosted.org/packages/6f/67/c62c6eea53a4feb042727a3d6c18f50dc99683c2b199c06bd2a9e3db8e22/ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa", size = 98639 }, - { url = "https://files.pythonhosted.org/packages/10/d2/52a3d810d0b5b3720725c0504a27b3fced7b6f310fe928f7019d79387bc1/ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b", size = 115305 }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruamel-yaml-clib/0.2.8/ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b" }, ] [[package]] name = "ruff" -version = "0.6.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5d/f9/0b32e5d1c6f957df49398cd882a011e9488fcbca0d6acfeeea50ccd37a4d/ruff-0.6.3.tar.gz", hash = "sha256:183b99e9edd1ef63be34a3b51fee0a9f4ab95add123dbf89a71f7b1f0c991983", size = 2463514 } +version = "0.9.1" +source = { registry = "https://nexus.scanplus.de/repository/pypi-group/simple" } +sdist = { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1.tar.gz", hash = "sha256:fd2b25ecaf907d6458fa842675382c8597b3c746a2dde6717fe3415425df0c17" } wheels = [ - { url = "https://files.pythonhosted.org/packages/72/68/1da6a1e39a03a229ea57c511691d6225072759cc7764206c3f0989521194/ruff-0.6.3-py3-none-linux_armv6l.whl", hash = "sha256:97f58fda4e309382ad30ede7f30e2791d70dd29ea17f41970119f55bdb7a45c3", size = 9696928 }, - { url = "https://files.pythonhosted.org/packages/6e/59/3b8b1d3a4271c6eb6ceecd3cef19a6d881639a0f18ad651563d6f619aaae/ruff-0.6.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3b061e49b5cf3a297b4d1c27ac5587954ccb4ff601160d3d6b2f70b1622194dc", size = 9448462 }, - { url = "https://files.pythonhosted.org/packages/35/4f/b942ecb8bbebe53aa9b33e9b96df88acd50b70adaaed3070f1d92131a1cb/ruff-0.6.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:34e2824a13bb8c668c71c1760a6ac7d795ccbd8d38ff4a0d8471fdb15de910b1", size = 9176190 }, - { url = "https://files.pythonhosted.org/packages/a0/20/b0bcb29d4ee437f3567b73b6905c034e2e94d29b9b826c66daecc1cf6388/ruff-0.6.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bddfbb8d63c460f4b4128b6a506e7052bad4d6f3ff607ebbb41b0aa19c2770d1", size = 10108892 }, - { url = "https://files.pythonhosted.org/packages/9c/e3/211bc759f424e8823a9937e0f678695ca02113c621dfde1fa756f9f26f6d/ruff-0.6.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ced3eeb44df75353e08ab3b6a9e113b5f3f996bea48d4f7c027bc528ba87b672", size = 9476471 }, - { url = "https://files.pythonhosted.org/packages/b2/a3/2ec35a2d7a554364864206f0e46812b92a074ad8a014b923d821ead532aa/ruff-0.6.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47021dff5445d549be954eb275156dfd7c37222acc1e8014311badcb9b4ec8c1", size = 10294802 }, - { url = "https://files.pythonhosted.org/packages/03/8b/56ef687b3489c88886dea48c78fb4969b6b65f18007d0ac450070edd1f58/ruff-0.6.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7d7bd20dc07cebd68cc8bc7b3f5ada6d637f42d947c85264f94b0d1cd9d87384", size = 11022372 }, - { url = "https://files.pythonhosted.org/packages/a5/21/327d147feb442adb88975e81e2263102789eba9ad2afa102c661912a482f/ruff-0.6.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:500f166d03fc6d0e61c8e40a3ff853fa8a43d938f5d14c183c612df1b0d6c58a", size = 10596596 }, - { url = "https://files.pythonhosted.org/packages/6c/86/ff386de63729da3e08c8099c57f577a00ec9f3eea711b23ac07cf3588dc5/ruff-0.6.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42844ff678f9b976366b262fa2d1d1a3fe76f6e145bd92c84e27d172e3c34500", size = 11572830 }, - { url = "https://files.pythonhosted.org/packages/38/5d/b33284c108e3f315ddd09b70296fd76bd28ecf8965a520bc93f3bbd8ac40/ruff-0.6.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70452a10eb2d66549de8e75f89ae82462159855e983ddff91bc0bce6511d0470", size = 10262577 }, - { url = "https://files.pythonhosted.org/packages/29/99/9cdfad0d7f460e66567236eddc691473791afd9aff93a0dfcdef0462a6c7/ruff-0.6.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:65a533235ed55f767d1fc62193a21cbf9e3329cf26d427b800fdeacfb77d296f", size = 10098751 }, - { url = "https://files.pythonhosted.org/packages/a8/9f/f801a1619f5549e552f1f722f1db57eb39e7e1d83d482133142781d450de/ruff-0.6.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2e2c23cef30dc3cbe9cc5d04f2899e7f5e478c40d2e0a633513ad081f7361b5", size = 9563859 }, - { url = "https://files.pythonhosted.org/packages/0b/4d/fb2424faf04ffdb960ae2b3a1d991c5183dd981003de727d2d5cc38abc98/ruff-0.6.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d8a136aa7d228975a6aee3dd8bea9b28e2b43e9444aa678fb62aeb1956ff2351", size = 9914291 }, - { url = "https://files.pythonhosted.org/packages/2e/dd/94fddf002a8f6152e8ebfbb51d3f93febc415c1fe694345623c31ce8b33b/ruff-0.6.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f92fe93bc72e262b7b3f2bba9879897e2d58a989b4714ba6a5a7273e842ad2f8", size = 10331549 }, - { url = "https://files.pythonhosted.org/packages/b4/73/ca9c2f9237a430ca423b6dca83b77e9a428afeb7aec80596e86c369123fe/ruff-0.6.3-py3-none-win32.whl", hash = "sha256:7a62d3b5b0d7f9143d94893f8ba43aa5a5c51a0ffc4a401aa97a81ed76930521", size = 7962163 }, - { url = "https://files.pythonhosted.org/packages/55/ce/061c605b1dfb52748d59bc0c7a8507546c178801156415773d18febfd71d/ruff-0.6.3-py3-none-win_amd64.whl", hash = "sha256:746af39356fee2b89aada06c7376e1aa274a23493d7016059c3a72e3b296befb", size = 8800901 }, - { url = "https://files.pythonhosted.org/packages/63/28/ae4ffe7d3b6134ca6d31ebef07447ef70097c4a9e8fbbc519b374c5c1559/ruff-0.6.3-py3-none-win_arm64.whl", hash = "sha256:14a9528a8b70ccc7a847637c29e56fd1f9183a9db743bbc5b8e0c4ad60592a82", size = 8229171 }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-linux_armv6l.whl", hash = "sha256:84330dda7abcc270e6055551aca93fdde1b0685fc4fd358f26410f9349cf1743" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3cae39ba5d137054b0e5b472aee3b78a7c884e61591b100aeb544bcd1fc38d4f" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:50c647ff96f4ba288db0ad87048257753733763b409b2faf2ea78b45c8bb7fcb" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0c8b149e9c7353cace7d698e1656ffcf1e36e50f8ea3b5d5f7f87ff9986a7ca" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:beb3298604540c884d8b282fe7625651378e1986c25df51dec5b2f60cafc31ce" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39d0174ccc45c439093971cc06ed3ac4dc545f5e8bdacf9f067adf879544d969" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:69572926c0f0c9912288915214ca9b2809525ea263603370b9e00bed2ba56dbd" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:937267afce0c9170d6d29f01fcd1f4378172dec6760a9f4dface48cdabf9610a" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:186c2313de946f2c22bdf5954b8dd083e124bcfb685732cfb0beae0c47233d9b" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f94942a3bb767675d9a051867c036655fe9f6c8a491539156a6f7e6b5f31831" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:728d791b769cc28c05f12c280f99e8896932e9833fef1dd8756a6af2261fd1ab" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2f312c86fb40c5c02b44a29a750ee3b21002bd813b5233facdaf63a51d9a85e1" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ae017c3a29bee341ba584f3823f805abbe5fe9cd97f87ed07ecbf533c4c88366" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5dc40a378a0e21b4cfe2b8a0f1812a6572fc7b230ef12cd9fac9161aa91d807f" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-win32.whl", hash = "sha256:46ebf5cc106cf7e7378ca3c28ce4293b61b449cd121b98699be727d40b79ba72" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-win_amd64.whl", hash = "sha256:342a824b46ddbcdddd3abfbb332fa7fcaac5488bf18073e841236aadf4ad5c19" }, + { url = "https://nexus.scanplus.de/repository/pypi-group/packages/ruff/0.9.1/ruff-0.9.1-py3-none-win_arm64.whl", hash = "sha256:1cd76c7f9c679e6e8f2af8f778367dca82b95009bc7b1a85a47f1521ae524fa7" }, ] From 5815558e8d713b9a5048197dd5aee5887d570a52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Pola=C5=84ski?= Date: Mon, 27 Jan 2025 10:57:58 +0100 Subject: [PATCH 2/3] Adding mac initializer. Fixing cables, clusters, prefixes and virtualizzation_interfaces --- .../initializers/__init__.py | 1 + src/netbox_initializers/initializers/base.py | 18 +++++++++++++ .../initializers/cables.py | 17 +++++------- .../initializers/clusters.py | 2 +- src/netbox_initializers/initializers/macs.py | 24 +++++++++++++++++ .../initializers/prefixes.py | 10 ++++--- src/netbox_initializers/initializers/utils.py | 13 ++++++++++ .../initializers/virtualization_interfaces.py | 11 ++++++++ .../initializers/yaml/cables.yml | 8 ++++-- .../initializers/yaml/clusters.yml | 2 +- .../initializers/yaml/macs.yml | 10 +++++++ .../initializers/yaml/prefixes.yml | 26 ++++++++++++++++--- .../yaml/virtualization_interfaces.yml | 20 ++++++++++++-- 13 files changed, 139 insertions(+), 23 deletions(-) create mode 100644 src/netbox_initializers/initializers/macs.py create mode 100644 src/netbox_initializers/initializers/utils.py create mode 100644 src/netbox_initializers/initializers/yaml/macs.yml diff --git a/src/netbox_initializers/initializers/__init__.py b/src/netbox_initializers/initializers/__init__.py index b4e185e..fe5c10b 100644 --- a/src/netbox_initializers/initializers/__init__.py +++ b/src/netbox_initializers/initializers/__init__.py @@ -22,6 +22,7 @@ from .interfaces import InterfaceInitializer from .ip_addresses import IPAddressInitializer from .locations import LocationInitializer +from .macs import MACAddressInitializer from .manufacturers import ManufacturerInitializer from .object_permissions import ObjectPermissionInitializer from .platforms import PlatformInitializer diff --git a/src/netbox_initializers/initializers/base.py b/src/netbox_initializers/initializers/base.py index d7d659c..6423d44 100644 --- a/src/netbox_initializers/initializers/base.py +++ b/src/netbox_initializers/initializers/base.py @@ -2,6 +2,7 @@ from typing import Tuple from core.models import ObjectType +from dcim.models import MACAddress from django.core.exceptions import ObjectDoesNotExist from extras.models import CustomField, Tag from ruamel.yaml import YAML @@ -90,6 +91,22 @@ def set_tags(self, entity, tags): if save: entity.save() + def set_mac_addresses(self, entity, mac_addresses): + if not mac_addresses: + return + + if not hasattr(entity, "mac_addresses"): + raise Exception(f"⚠️ MAC Address cannot be applied to {entity}'s model") + + save = False + for mac_address in MACAddress.objects.filter(mac_address__in=mac_addresses): + + entity.mac_addresses.add(mac_address) + save = True + + if save: + entity.save() + def split_params(self, params: dict, unique_params: list = None) -> Tuple[dict, dict]: """Split params dict into dict with matching params and a dict with default values""" @@ -140,6 +157,7 @@ class InitializationError(Exception): "prefix_vlan_roles", "vlan_groups", "vlans", + "macs", "devices", "interfaces", "route_targets", diff --git a/src/netbox_initializers/initializers/cables.py b/src/netbox_initializers/initializers/cables.py index 5053a69..e18e783 100644 --- a/src/netbox_initializers/initializers/cables.py +++ b/src/netbox_initializers/initializers/cables.py @@ -1,6 +1,6 @@ from typing import Tuple - -from circuits.models import Circuit, CircuitTermination, ProviderNetwork +from circuits.constants import CIRCUIT_TERMINATION_TERMINATION_TYPES +from circuits.models import Circuit, CircuitTermination from dcim.models import ( Cable, CableTermination, @@ -13,12 +13,12 @@ PowerPanel, PowerPort, RearPort, - Site, ) from django.contrib.contenttypes.models import ContentType from django.db.models import Q from netbox_initializers.initializers.base import BaseInitializer, register_initializer +from netbox_initializers.initializers.utils import get_scope_details CONSOLE_PORT_TERMINATION = ContentType.objects.get_for_model(ConsolePort) CONSOLE_SERVER_PORT_TERMINATION = ContentType.objects.get_for_model(ConsoleServerPort) @@ -55,16 +55,11 @@ def get_termination_object(params: dict, side: str): circuit = Circuit.objects.get(cid=circuit_params.pop("cid")) term_side = circuit_params.pop("term_side").upper() - site_name = circuit_params.pop("site", None) - provider_network = circuit_params.pop("provider_network", None) - - if site_name: - circuit_params["site"] = Site.objects.get(name=site_name) - elif provider_network: - circuit_params["provider_network"] = ProviderNetwork.objects.get(name=provider_network) + if scope := circuit_params.pop("scope", None): + circuit_params["termination_type"], circuit_params["termination_id"] = get_scope_details(scope, CIRCUIT_TERMINATION_TERMINATION_TYPES) else: raise ValueError( - f"⚠️ Missing one of required parameters: 'site' or 'provider_network' " + f"⚠️ Missing required parameter: 'scope'" f"for side {term_side} of circuit {circuit}" ) diff --git a/src/netbox_initializers/initializers/clusters.py b/src/netbox_initializers/initializers/clusters.py index 328ffc0..fdecc31 100644 --- a/src/netbox_initializers/initializers/clusters.py +++ b/src/netbox_initializers/initializers/clusters.py @@ -7,7 +7,7 @@ MATCH_PARAMS = ["name", "type"] REQUIRED_ASSOCS = {"type": (ClusterType, "name")} OPTIONAL_ASSOCS = { - "site": (Site, "name"), + "scope": (Site, "name"), "group": (ClusterGroup, "name"), "tenant": (Tenant, "name"), } diff --git a/src/netbox_initializers/initializers/macs.py b/src/netbox_initializers/initializers/macs.py new file mode 100644 index 0000000..f382788 --- /dev/null +++ b/src/netbox_initializers/initializers/macs.py @@ -0,0 +1,24 @@ +from dcim.models import MACAddress + +from netbox_initializers.initializers.base import BaseInitializer, register_initializer + + +class MACAddressInitializer(BaseInitializer): + data_file_name = "macs.yml" + + def load_data(self): + macs = self.load_yaml() + if macs is None: + return + + for mac in macs: + tags = mac.pop("tags", None) + macaddress, created = MACAddress.objects.get_or_create(**mac) + + if created: + print("🗺️ Created MAC Address", macaddress.mac_address) + + self.set_tags(macaddress, tags) + + +register_initializer("macs", MACAddressInitializer) diff --git a/src/netbox_initializers/initializers/prefixes.py b/src/netbox_initializers/initializers/prefixes.py index cdbada2..a67a076 100644 --- a/src/netbox_initializers/initializers/prefixes.py +++ b/src/netbox_initializers/initializers/prefixes.py @@ -1,13 +1,14 @@ -from dcim.models import Site from ipam.models import VLAN, VRF, Prefix, Role from netaddr import IPNetwork from tenancy.models import Tenant, TenantGroup +from dcim.constants import LOCATION_SCOPE_TYPES +from django.contrib.contenttypes.models import ContentType from netbox_initializers.initializers.base import BaseInitializer, register_initializer +from netbox_initializers.initializers.utils import get_scope_details -MATCH_PARAMS = ["prefix", "site", "vrf", "vlan"] +MATCH_PARAMS = ["prefix", "scope", "vrf", "vlan"] OPTIONAL_ASSOCS = { - "site": (Site, "name"), "tenant": (Tenant, "name"), "tenant_group": (TenantGroup, "name"), "vlan": (VLAN, "name"), @@ -29,6 +30,9 @@ def load_data(self): params["prefix"] = IPNetwork(params["prefix"]) + if scope := params.pop("scope"): + params["scope_type"], params["scope_id"] = get_scope_details(scope, LOCATION_SCOPE_TYPES) + for assoc, details in OPTIONAL_ASSOCS.items(): if assoc in params: model, field = details diff --git a/src/netbox_initializers/initializers/utils.py b/src/netbox_initializers/initializers/utils.py new file mode 100644 index 0000000..26fbc3b --- /dev/null +++ b/src/netbox_initializers/initializers/utils.py @@ -0,0 +1,13 @@ +from django.contrib.contenttypes.models import ContentType + + +def get_scope_details(scope: dict, allowed_termination_types: list): + try: + scope_type = ContentType.objects.get(app_label__in=["dcim", "circuits"], model=scope["type"]) + if scope["type"] not in allowed_termination_types: + raise ValueError(f"{scope['type']} scope type is not permitted on {scope_type.app_label}") + except ContentType.DoesNotExist: + raise ValueError(f"⚠️ Invalid scope type: {scope['type']}") + + scope_id = scope_type.model_class().objects.get(name=scope["name"]).id + return scope_type, scope_id diff --git a/src/netbox_initializers/initializers/virtualization_interfaces.py b/src/netbox_initializers/initializers/virtualization_interfaces.py index abc5175..52ec77a 100644 --- a/src/netbox_initializers/initializers/virtualization_interfaces.py +++ b/src/netbox_initializers/initializers/virtualization_interfaces.py @@ -1,9 +1,11 @@ +from dcim.models import MACAddress from virtualization.models import VirtualMachine, VMInterface from netbox_initializers.initializers.base import BaseInitializer, register_initializer MATCH_PARAMS = ["name", "virtual_machine"] REQUIRED_ASSOCS = {"virtual_machine": (VirtualMachine, "name")} +OPTIONAL_ASSOCS = {"primary_mac_address": (MACAddress, "mac_address")} class VMInterfaceInitializer(BaseInitializer): @@ -16,6 +18,7 @@ def load_data(self): for params in interfaces: custom_field_data = self.pop_custom_fields(params) tags = params.pop("tags", None) + mac_addresses = params.pop("mac_addresses", None) for assoc, details in REQUIRED_ASSOCS.items(): model, field = details @@ -23,6 +26,13 @@ def load_data(self): params[assoc] = model.objects.get(**query) + for assoc, details in OPTIONAL_ASSOCS.items(): + if assoc in params: + model, field = details + query = {field: params.pop(assoc)} + + params[assoc] = model.objects.get(**query) + matching_params, defaults = self.split_params(params, MATCH_PARAMS) interface, created = VMInterface.objects.get_or_create( **matching_params, defaults=defaults @@ -33,6 +43,7 @@ def load_data(self): self.set_custom_fields_values(interface, custom_field_data) self.set_tags(interface, tags) + self.set_mac_addresses(interface, mac_addresses) register_initializer("virtualization_interfaces", VMInterfaceInitializer) diff --git a/src/netbox_initializers/initializers/yaml/cables.yml b/src/netbox_initializers/initializers/yaml/cables.yml index 3257643..0cab5e9 100644 --- a/src/netbox_initializers/initializers/yaml/cables.yml +++ b/src/netbox_initializers/initializers/yaml/cables.yml @@ -16,7 +16,9 @@ # # termination_x_circuit: # # term_side -> termination side of a circuit. Must be A or B # # cid -> circuit ID value -# # site OR provider_network -> name of Site or ProviderNetwork respectively. If both provided, Site takes precedence +# # scope: +# # type -> select one of the following: region, site, sitegroup, location +# # name -> name of the object in the respective scope type # # ``` # # # # If a termination is a power feed then the required parameter is termination_x_feed. @@ -51,7 +53,9 @@ # termination_b_circuit: # term_side: A # cid: Circuit_ID-1 -# site: AMS 1 +# scope: +# type: site +# name: AMS 1 # type: cat6 # - termination_a_name: psu0 diff --git a/src/netbox_initializers/initializers/yaml/clusters.yml b/src/netbox_initializers/initializers/yaml/clusters.yml index 4e15477..85e1a4a 100644 --- a/src/netbox_initializers/initializers/yaml/clusters.yml +++ b/src/netbox_initializers/initializers/yaml/clusters.yml @@ -4,4 +4,4 @@ # tenant: tenant1 # - name: cluster2 # type: Hyper-V -# site: SING 1 +# scope: SING 1 diff --git a/src/netbox_initializers/initializers/yaml/macs.yml b/src/netbox_initializers/initializers/yaml/macs.yml new file mode 100644 index 0000000..5b293eb --- /dev/null +++ b/src/netbox_initializers/initializers/yaml/macs.yml @@ -0,0 +1,10 @@ +# - mac_address: 00:01:11:11:11:11 +# description: MAC address 1 +# - mac_address: 00:01:22:22:22:22 +# description: Mac address 2 +# - mac_address: 00:01:33:33:33:33 +# description: mac address 3 +# - mac_address: 00:02:44:44:44:44 +# description: mac address 4 +# - mac_address: 00:02:55:55:55:55 +# description: mac address 5 diff --git a/src/netbox_initializers/initializers/yaml/prefixes.yml b/src/netbox_initializers/initializers/yaml/prefixes.yml index fbf3eee..f2e14a2 100644 --- a/src/netbox_initializers/initializers/yaml/prefixes.yml +++ b/src/netbox_initializers/initializers/yaml/prefixes.yml @@ -4,18 +4,28 @@ ## - active ## - reserved ## - deprecated +## scope: +## type: +## - region +## - sitegroup +## - site +## - location ## ## Examples: # - description: prefix1 # prefix: 10.1.1.0/24 -# site: AMS 1 +# scope: +# type: site +# name: AMS 1 # status: active # tenant: tenant1 # vlan: vlan1 # - description: prefix2 # prefix: 10.1.2.0/24 -# site: AMS 2 +# scope: +# type: site +# name: AMS 2 # status: active # tenant: tenant2 # vlan: vlan2 @@ -23,7 +33,17 @@ # vrf: vrf2 # - description: ipv6 prefix1 # prefix: 2001:db8:a000:1::/64 -# site: AMS 2 +# scope: +# type: site +# name: AMS 2 # status: active # tenant: tenant2 # vlan: vlan2 +# - description: ipv6 prefix2 +# prefix: 2001:db8:b000:1::/64 +# scope: +# type: location +# name: cage 101 +# status: active +# tenant: tenant2 +# vlan: vlan1 \ No newline at end of file diff --git a/src/netbox_initializers/initializers/yaml/virtualization_interfaces.yml b/src/netbox_initializers/initializers/yaml/virtualization_interfaces.yml index aeedd58..4af9825 100644 --- a/src/netbox_initializers/initializers/yaml/virtualization_interfaces.yml +++ b/src/netbox_initializers/initializers/yaml/virtualization_interfaces.yml @@ -1,12 +1,28 @@ # - description: Network Interface 1 # enabled: true -# mac_address: 00:77:77:77:77:77 +# primary_mac_address: 00:01:11:11:11:11 # mtu: 1500 # name: Network Interface 1 # virtual_machine: virtual machine 1 # - description: Network Interface 2 # enabled: true -# mac_address: 00:55:55:55:55:55 +# mac_addresses: +# - 00:01:22:22:22:22 +# - 00:01:33:33:33:33 +# primary_mac_address: 00:01:33:33:33:33 # mtu: 1500 # name: Network Interface 2 # virtual_machine: virtual machine 1 +# - description: Network Interface 3 +# enabled: true +# mtu: 1500 +# name: Network Interface 3 +# virtual_machine: virtual machine 2 +# - description: Network Interface 4 +# enabled: true +# mac_addresses: +# - 00:02:44:44:44:44 +# - 00:02:55:55:55:55 +# mtu: 1500 +# name: Network Interface 4 +# virtual_machine: virtual machine 2 \ No newline at end of file From 7e33f53101b9f03f93df49b8403abd09f0f04c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Pola=C5=84ski?= Date: Mon, 27 Jan 2025 12:46:46 +0100 Subject: [PATCH 3/3] Fix linting --- src/netbox_initializers/initializers/cables.py | 4 +++- src/netbox_initializers/initializers/prefixes.py | 3 +-- src/netbox_initializers/initializers/yaml/cables.yml | 2 +- src/netbox_initializers/initializers/yaml/prefixes.yml | 8 ++++---- .../initializers/yaml/virtualization_interfaces.yml | 6 +++--- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/netbox_initializers/initializers/cables.py b/src/netbox_initializers/initializers/cables.py index e18e783..4b39314 100644 --- a/src/netbox_initializers/initializers/cables.py +++ b/src/netbox_initializers/initializers/cables.py @@ -56,7 +56,9 @@ def get_termination_object(params: dict, side: str): term_side = circuit_params.pop("term_side").upper() if scope := circuit_params.pop("scope", None): - circuit_params["termination_type"], circuit_params["termination_id"] = get_scope_details(scope, CIRCUIT_TERMINATION_TERMINATION_TYPES) + scope_type, scope_id = get_scope_details(scope, CIRCUIT_TERMINATION_TERMINATION_TYPES) + circuit_params["termination_type"] = scope_type + circuit_params["termination_id"] = scope_id else: raise ValueError( f"⚠️ Missing required parameter: 'scope'" diff --git a/src/netbox_initializers/initializers/prefixes.py b/src/netbox_initializers/initializers/prefixes.py index a67a076..29d4ed8 100644 --- a/src/netbox_initializers/initializers/prefixes.py +++ b/src/netbox_initializers/initializers/prefixes.py @@ -1,8 +1,7 @@ +from dcim.constants import LOCATION_SCOPE_TYPES from ipam.models import VLAN, VRF, Prefix, Role from netaddr import IPNetwork from tenancy.models import Tenant, TenantGroup -from dcim.constants import LOCATION_SCOPE_TYPES -from django.contrib.contenttypes.models import ContentType from netbox_initializers.initializers.base import BaseInitializer, register_initializer from netbox_initializers.initializers.utils import get_scope_details diff --git a/src/netbox_initializers/initializers/yaml/cables.yml b/src/netbox_initializers/initializers/yaml/cables.yml index 0cab5e9..f84de17 100644 --- a/src/netbox_initializers/initializers/yaml/cables.yml +++ b/src/netbox_initializers/initializers/yaml/cables.yml @@ -53,7 +53,7 @@ # termination_b_circuit: # term_side: A # cid: Circuit_ID-1 -# scope: +# scope: # type: site # name: AMS 1 # type: cat6 diff --git a/src/netbox_initializers/initializers/yaml/prefixes.yml b/src/netbox_initializers/initializers/yaml/prefixes.yml index f2e14a2..1d8c944 100644 --- a/src/netbox_initializers/initializers/yaml/prefixes.yml +++ b/src/netbox_initializers/initializers/yaml/prefixes.yml @@ -15,7 +15,7 @@ # - description: prefix1 # prefix: 10.1.1.0/24 -# scope: +# scope: # type: site # name: AMS 1 # status: active @@ -23,7 +23,7 @@ # vlan: vlan1 # - description: prefix2 # prefix: 10.1.2.0/24 -# scope: +# scope: # type: site # name: AMS 2 # status: active @@ -34,7 +34,7 @@ # - description: ipv6 prefix1 # prefix: 2001:db8:a000:1::/64 # scope: -# type: site +# type: site # name: AMS 2 # status: active # tenant: tenant2 @@ -46,4 +46,4 @@ # name: cage 101 # status: active # tenant: tenant2 -# vlan: vlan1 \ No newline at end of file +# vlan: vlan1 diff --git a/src/netbox_initializers/initializers/yaml/virtualization_interfaces.yml b/src/netbox_initializers/initializers/yaml/virtualization_interfaces.yml index 4af9825..72b198a 100644 --- a/src/netbox_initializers/initializers/yaml/virtualization_interfaces.yml +++ b/src/netbox_initializers/initializers/yaml/virtualization_interfaces.yml @@ -6,7 +6,7 @@ # virtual_machine: virtual machine 1 # - description: Network Interface 2 # enabled: true -# mac_addresses: +# mac_addresses: # - 00:01:22:22:22:22 # - 00:01:33:33:33:33 # primary_mac_address: 00:01:33:33:33:33 @@ -20,9 +20,9 @@ # virtual_machine: virtual machine 2 # - description: Network Interface 4 # enabled: true -# mac_addresses: +# mac_addresses: # - 00:02:44:44:44:44 # - 00:02:55:55:55:55 # mtu: 1500 # name: Network Interface 4 -# virtual_machine: virtual machine 2 \ No newline at end of file +# virtual_machine: virtual machine 2