From 92211d4afd1b5394814a82dd04a729dc0c327f44 Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 16:06:39 +0000 Subject: [PATCH 01/14] update demo_data --- .devcontainer/Dockerfile-plugin_dev | 7 +- .devcontainer/configuration/plugins.py | 2 + .devcontainer/initializers/aggregates.yml | 1 - .devcontainer/initializers/asns.yml | 1 - .devcontainer/initializers/cables.yml | 71 +++++++++++ .devcontainer/initializers/circuit_types.yml | 1 - .devcontainer/initializers/circuits.yml | 1 - .devcontainer/initializers/cluster_groups.yml | 1 - .devcontainer/initializers/cluster_types.yml | 1 - .devcontainer/initializers/clusters.yml | 1 - .devcontainer/initializers/contact_groups.yml | 7 ++ .devcontainer/initializers/contact_roles.yml | 3 + .devcontainer/initializers/contacts.yml | 20 +++ .devcontainer/initializers/custom_fields.yml | 117 ++++++++++++++++++ .devcontainer/initializers/custom_links.yml | 21 ++++ .../initializers/dcim_interfaces.yml | 9 -- .devcontainer/initializers/device_roles.yml | 1 - .devcontainer/initializers/device_types.yml | 43 ++++++- .devcontainer/initializers/devices.yml | 24 +++- .devcontainer/initializers/groups.yml | 19 ++- .devcontainer/initializers/interfaces.yml | 35 ++++++ .devcontainer/initializers/ip_addresses.yml | 19 ++- .devcontainer/initializers/locations.yml | 1 - .devcontainer/initializers/manufacturers.yml | 1 - .../initializers/object_permissions.yml | 109 ++++++++-------- .devcontainer/initializers/platforms.yml | 1 - .devcontainer/initializers/power_feeds.yml | 1 - .devcontainer/initializers/power_panels.yml | 1 - .../initializers/prefix_vlan_roles.yml | 1 - .devcontainer/initializers/prefixes.yml | 18 +-- .devcontainer/initializers/providers.yml | 1 - .devcontainer/initializers/rack_roles.yml | 1 - .devcontainer/initializers/racks.yml | 23 +++- .devcontainer/initializers/regions.yml | 1 - .devcontainer/initializers/rirs.yml | 1 - .devcontainer/initializers/route_targets.yml | 1 - .devcontainer/initializers/services.yml | 1 - .devcontainer/initializers/sites.yml | 9 +- .devcontainer/initializers/tags.yml | 1 - .devcontainer/initializers/tenant_groups.yml | 1 - .devcontainer/initializers/tenants.yml | 1 - .devcontainer/initializers/users.yml | 20 ++- .../initializers/virtual_machines.yml | 9 +- .../virtualization_interfaces.yml | 1 - .devcontainer/initializers/vlan_groups.yml | 1 - .devcontainer/initializers/vlans.yml | 9 +- .devcontainer/initializers/vrfs.yml | 1 - .devcontainer/initializers/webhooks.yml | 12 +- Makefile | 10 +- 49 files changed, 522 insertions(+), 120 deletions(-) create mode 100644 .devcontainer/initializers/cables.yml create mode 100644 .devcontainer/initializers/contact_groups.yml create mode 100644 .devcontainer/initializers/contact_roles.yml create mode 100644 .devcontainer/initializers/contacts.yml create mode 100644 .devcontainer/initializers/custom_fields.yml create mode 100644 .devcontainer/initializers/custom_links.yml delete mode 100644 .devcontainer/initializers/dcim_interfaces.yml create mode 100644 .devcontainer/initializers/interfaces.yml diff --git a/.devcontainer/Dockerfile-plugin_dev b/.devcontainer/Dockerfile-plugin_dev index 87008c6..489a860 100644 --- a/.devcontainer/Dockerfile-plugin_dev +++ b/.devcontainer/Dockerfile-plugin_dev @@ -1,6 +1,7 @@ -ARG VARIANT=v3.2-2.1.0 +ARG NETBOX_VARIANT=v3.2 +ARG NETBOX_INITIALIZERS_VARIANT=3.2.3 -FROM netboxcommunity/netbox:${VARIANT} +FROM netboxcommunity/netbox:${NETBOX_VARIANT} ARG DEBIAN_FRONTEND=noninteractive @@ -32,6 +33,8 @@ RUN wget --quiet https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/inst COPY .bashrc /home/vscode/.bashrc COPY .zshrc /home/vscode/.zshrc +RUN /opt/netbox/venv/bin/pip install --no-warn-script-location netbox-initializers==${NETBOX_INITIALIZERS_VARIANT} + WORKDIR /opt/netbox/netbox/netbox-acls USER root diff --git a/.devcontainer/configuration/plugins.py b/.devcontainer/configuration/plugins.py index 8ad3634..de3dc25 100644 --- a/.devcontainer/configuration/plugins.py +++ b/.devcontainer/configuration/plugins.py @@ -5,9 +5,11 @@ # See https://github.com/netbox-community/netbox-docker/wiki/Using-Netbox-Plugins PLUGINS = [ + "netbox_initializers", # Loads demo data "netbox_acls", ] PLUGINS_CONFIG = { + "netbox_initializers": {}, "netbox_acls": {}, } diff --git a/.devcontainer/initializers/aggregates.yml b/.devcontainer/initializers/aggregates.yml index d41539d..ae92ec0 100644 --- a/.devcontainer/initializers/aggregates.yml +++ b/.devcontainer/initializers/aggregates.yml @@ -1,4 +1,3 @@ ---- - prefix: 10.0.0.0/16 rir: RFC1918 tenant: tenant1 diff --git a/.devcontainer/initializers/asns.yml b/.devcontainer/initializers/asns.yml index b65197c..8e6393e 100644 --- a/.devcontainer/initializers/asns.yml +++ b/.devcontainer/initializers/asns.yml @@ -1,4 +1,3 @@ ---- - asn: 1 rir: RFC1918 tenant: tenant1 diff --git a/.devcontainer/initializers/cables.yml b/.devcontainer/initializers/cables.yml new file mode 100644 index 0000000..b4a9137 --- /dev/null +++ b/.devcontainer/initializers/cables.yml @@ -0,0 +1,71 @@ +# Required parameters for termination X ('a' or 'b'): +# +# ``` +# termination_x_name -> name of interface +# termination_x_device -> name of the device interface belongs to +# termination_x_class -> required if different than 'Interface' which is the default +# ``` +# +# Supported termination classes: Interface, ConsolePort, ConsoleServerPort, FrontPort, RearPort, PowerPort, PowerOutlet +# +# +# If a termination is a circuit then the required parameter is termination_x_circuit. +# Required parameters for a circuit termination: +# +# ``` +# 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 +# ``` +# +# If a termination is a power feed then the required parameter is termination_x_feed. +# +# ``` +# termination_x_feed: +# name -> name of the PowerFeed object +# power_panel: +# name -> name of the PowerPanel the PowerFeed is attached to +# site -> name of the Site in which the PowerPanel is present +# ``` +# +# Any other Cable parameters supported by Netbox are supported as the top level keys, e.g. 'type', 'status', etc. +# +# - termination_a_name: console +# termination_a_device: spine +# termination_a_class: ConsolePort +# termination_b_name: tty9 +# termination_b_device: console-server +# termination_b_class: ConsoleServerPort +# type: cat6 +# +- termination_a_name: to-server02 + termination_a_device: server01 + termination_b_name: to-server01 + termination_b_device: server02 + status: planned + type: mmf + +- termination_a_name: eth0 + termination_a_device: server02 + termination_b_circuit: + term_side: A + cid: Circuit_ID-1 + site: AMS 1 + type: cat6 + +- termination_a_name: psu0 + termination_a_device: server04 + termination_a_class: PowerPort + termination_b_feed: + name: power feed 1 + power_panel: + name: power panel AMS 1 + site: AMS 1 + +- termination_a_name: outlet1 + termination_a_device: server04 + termination_a_class: PowerOutlet + termination_b_name: psu1 + termination_b_device: server04 + termination_b_class: PowerPort diff --git a/.devcontainer/initializers/circuit_types.yml b/.devcontainer/initializers/circuit_types.yml index 5bd53e4..95dee30 100644 --- a/.devcontainer/initializers/circuit_types.yml +++ b/.devcontainer/initializers/circuit_types.yml @@ -1,4 +1,3 @@ ---- - name: VPLS slug: vpls - name: MPLS diff --git a/.devcontainer/initializers/circuits.yml b/.devcontainer/initializers/circuits.yml index b69efb3..6dd8602 100644 --- a/.devcontainer/initializers/circuits.yml +++ b/.devcontainer/initializers/circuits.yml @@ -1,4 +1,3 @@ ---- - cid: Circuit_ID-1 provider: Provider1 type: Internet diff --git a/.devcontainer/initializers/cluster_groups.yml b/.devcontainer/initializers/cluster_groups.yml index 503fd7e..b8a54b4 100644 --- a/.devcontainer/initializers/cluster_groups.yml +++ b/.devcontainer/initializers/cluster_groups.yml @@ -1,4 +1,3 @@ ---- - name: Group 1 slug: group-1 - name: Group 2 diff --git a/.devcontainer/initializers/cluster_types.yml b/.devcontainer/initializers/cluster_types.yml index c2342ac..0ca1f8d 100644 --- a/.devcontainer/initializers/cluster_types.yml +++ b/.devcontainer/initializers/cluster_types.yml @@ -1,3 +1,2 @@ ---- - name: Hyper-V slug: hyper-v diff --git a/.devcontainer/initializers/clusters.yml b/.devcontainer/initializers/clusters.yml index c47ca5f..3ed7c8e 100644 --- a/.devcontainer/initializers/clusters.yml +++ b/.devcontainer/initializers/clusters.yml @@ -1,4 +1,3 @@ ---- - name: cluster1 type: Hyper-V group: Group 1 diff --git a/.devcontainer/initializers/contact_groups.yml b/.devcontainer/initializers/contact_groups.yml new file mode 100644 index 0000000..843b902 --- /dev/null +++ b/.devcontainer/initializers/contact_groups.yml @@ -0,0 +1,7 @@ +- name: Network-Team + slug: network-team + description: This is a new contact group for the Network-Team +- name: New Contact Group + slug: new-contact-group + description: This is a new contact group sub under of Network-Team + parent: Network-Team diff --git a/.devcontainer/initializers/contact_roles.yml b/.devcontainer/initializers/contact_roles.yml new file mode 100644 index 0000000..8253ea5 --- /dev/null +++ b/.devcontainer/initializers/contact_roles.yml @@ -0,0 +1,3 @@ +- name: New Contact Role + slug: new-contact-role + description: This is a new contact role description diff --git a/.devcontainer/initializers/contacts.yml b/.devcontainer/initializers/contacts.yml new file mode 100644 index 0000000..622f3d0 --- /dev/null +++ b/.devcontainer/initializers/contacts.yml @@ -0,0 +1,20 @@ +- name: Lee Widget + title: CEO of Widget Corp + phone: 221-555-1212 + email: widgetCEO@widgetcorp.com + address: 1200 Nowhere Blvd, Scranton NJ, 555111 + comments: This is a very important contact +- name: Ali Gator + group: Network-Team + title: Consultant for Widget Corp + phone: 221-555-1213 + email: Consultant@widgetcorp.com + address: 1200 Nowhere Blvd, Scranton NJ, 555111 + comments: This is a very important contact +- name: Karlchen Maier + group: New Contact Group + title: COO of Widget Corp + phone: 221-555-1214 + email: Karlchen@widgetcorp.com + address: 1200 Nowhere Blvd, Scranton NJ, 555111 + comments: This is a very important contact diff --git a/.devcontainer/initializers/custom_fields.yml b/.devcontainer/initializers/custom_fields.yml new file mode 100644 index 0000000..25da99b --- /dev/null +++ b/.devcontainer/initializers/custom_fields.yml @@ -0,0 +1,117 @@ +## Possible Choices: +## type: +## - text +## - integer +## - boolean +## - date +## - url +## - select +## - multiselect +## - object +## - multiobject +## filter_logic: +## - disabled +## - loose +## - exact +## +## Examples: + +text_field: + type: text + label: Custom Text + description: Enter text in a text field. + required: false + weight: 0 + on_objects: + - dcim.models.Device + - dcim.models.Rack + - dcim.models.Site + - dcim.models.DeviceType + - ipam.models.IPAddress + - ipam.models.Prefix + - tenancy.models.Tenant + - virtualization.models.VirtualMachine +integer_field: + type: integer + label: Custom Number + description: Enter numbers into an integer field. + required: true + filter_logic: loose + validation_minimum: 0 + validation_maximum: 255 + weight: 10 + on_objects: + - tenancy.models.Tenant +select_field: + type: select + label: Choose between items + required: false + filter_logic: exact + weight: 30 + default: First Item + on_objects: + - dcim.models.Device + choices: + - First Item + - Second Item + - Third Item + - Fifth Item + - Fourth Item +select_field_legacy_format: + type: select + label: Choose between items + required: false + filter_logic: loose + weight: 30 + on_objects: + - dcim.models.Device + choices: + - value: A # this is the deprecated format. + - value: B # we only use it for the tests. + - value: C # please see above for the new format. + - value: "D like deprecated" + weight: 999 + - value: E +boolean_field: + type: boolean + label: Yes Or No? + required: true + filter_logic: loose + default: "false" # important: put "false" in quotes! + weight: 90 + on_objects: + - dcim.models.Device +url_field: + type: url + label: Hyperlink + description: Link to something nice. + required: true + filter_logic: disabled + validation_regex: ^https:// + on_objects: + - tenancy.models.Tenant +date_field: + type: date + label: Important Date + required: false + filter_logic: disabled + on_objects: + - dcim.models.Device +multiobject_field: + type: multiobject + label: Related Objects + description: IP addresses that belong to this location + required: true + filter_logic: loose + on_objects: + - dcim.models.Location + object_type: ipam.models.IPAddress +object_field: + type: object + label: ASN + description: This device has an ASN now + required: false + filter_logic: loose + on_objects: + - dcim.models.Device + object_type: ipam.models.ASN diff --git a/.devcontainer/initializers/custom_links.yml b/.devcontainer/initializers/custom_links.yml new file mode 100644 index 0000000..2ac822b --- /dev/null +++ b/.devcontainer/initializers/custom_links.yml @@ -0,0 +1,21 @@ +## Possible Choices: +## new_window: +## - True +## - False +## content_type: +## - device +## - site +## - any-other-content-type +## +## Examples: + +- name: link_to_repo + link_text: 'Link to Netbox Docker' + link_url: 'https://github.com/netbox-community/netbox-docker' + new_window: False + content_type: device +- name: link_to_localhost + link_text: 'Link to localhost' + link_url: 'http://localhost' + new_window: True + content_type: device diff --git a/.devcontainer/initializers/dcim_interfaces.yml b/.devcontainer/initializers/dcim_interfaces.yml deleted file mode 100644 index 7f824ec..0000000 --- a/.devcontainer/initializers/dcim_interfaces.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -- device: server01 - enabled: true - type: virtual - name: to-server02 -- device: server02 - enabled: true - type: virtual - name: to-server01 diff --git a/.devcontainer/initializers/device_roles.yml b/.devcontainer/initializers/device_roles.yml index aa829c9..2f327e1 100644 --- a/.devcontainer/initializers/device_roles.yml +++ b/.devcontainer/initializers/device_roles.yml @@ -1,4 +1,3 @@ ---- - name: switch slug: switch color: Grey diff --git a/.devcontainer/initializers/device_types.yml b/.devcontainer/initializers/device_types.yml index 8e346d8..b056cc3 100644 --- a/.devcontainer/initializers/device_types.yml +++ b/.devcontainer/initializers/device_types.yml @@ -1,16 +1,57 @@ ---- - model: Model 1 manufacturer: Manufacturer 1 slug: model-1 u_height: 2 + custom_field_data: + text_field: Description - model: Model 2 manufacturer: Manufacturer 1 slug: model-2 + custom_field_data: + text_field: Description - model: Model 3 manufacturer: Manufacturer 1 slug: model-3 is_full_depth: false u_height: 0 + custom_field_data: + text_field: Description - model: Other manufacturer: No Name slug: other + custom_field_data: + text_field: Description + interfaces: + - name: eth0 + type: 1000base-t + mgmt_only: True + - name: eth1 + type: 1000base-t + console_server_ports: + - name_template: ttyS[1-48] + type: rj-45 + power_ports: + - name_template: psu[0,1] + type: iec-60320-c14 + maximum_draw: 35 + allocated_draw: 35 + front_ports: + - name_template: front[1,2] + type: 8p8c + rear_port_template: rear[0,1] + rear_port_position_template: "[1,2]" + rear_ports: + - name_template: rear[0,1] + type: 8p8c + positions_template: "[3,2]" + device_bays: + - name: bay0 # both non-template and template field specified; non-template field takes precedence + name_template: bay[0-9] + label: test0 + label_template: test[0-5,9,6-8] + description: Test description + power_outlets: + - name_template: outlet[0,1] + type: iec-60320-c5 + power_port: psu0 + feed_leg: B diff --git a/.devcontainer/initializers/devices.yml b/.devcontainer/initializers/devices.yml index 9a7b59d..dbd9182 100644 --- a/.devcontainer/initializers/devices.yml +++ b/.devcontainer/initializers/devices.yml @@ -1,4 +1,18 @@ ---- +## Possible Choices: +## face: +## - front +## - rear +## status: +## - offline +## - active +## - planned +## - staged +## - failed +## - inventory +## - decommissioning +## +## Examples: + - name: server01 device_role: server device_type: Other @@ -6,6 +20,8 @@ rack: rack-01 face: front position: 1 + custom_field_data: + text_field: Description - name: server02 device_role: server device_type: Other @@ -15,6 +31,8 @@ position: 2 primary_ip4: 10.1.1.2/24 primary_ip6: 2001:db8:a000:1::2/64 + custom_field_data: + text_field: Description - name: server03 device_role: server device_type: Other @@ -22,6 +40,8 @@ rack: rack-03 face: front position: 3 + custom_field_data: + text_field: Description - name: server04 device_role: server device_type: Other @@ -29,3 +49,5 @@ location: cage 101 face: front position: 3 + custom_field_data: + text_field: Description diff --git a/.devcontainer/initializers/groups.yml b/.devcontainer/initializers/groups.yml index 864d8e0..705a992 100644 --- a/.devcontainer/initializers/groups.yml +++ b/.devcontainer/initializers/groups.yml @@ -1,10 +1,9 @@ ---- -# applications: -# users: -# - technical_user -# readers: -# users: -# - reader -# writers: -# users: -# - writer +applications: + users: + - technical_user +readers: + users: + - reader +writers: + users: + - writer diff --git a/.devcontainer/initializers/interfaces.yml b/.devcontainer/initializers/interfaces.yml new file mode 100644 index 0000000..6c57f53 --- /dev/null +++ b/.devcontainer/initializers/interfaces.yml @@ -0,0 +1,35 @@ +## Possible Choices: +## type: +## - virtual +## - lag +## - 1000base-t +## - ... and many more. See for yourself: +## https://github.com/netbox-community/netbox/blob/295d4f0394b431351c0cb2c3ecc791df68c6c2fb/netbox/dcim/choices.py#L510 +## +## Examples: + +- device: server01 + name: ath0 + type: 1000base-t + lag: ae0 + bridge: br0 +- device: server01 + name: ath1 + type: 1000base-t + parent: ath0 +- device: server01 + enabled: true + type: 1000base-x-sfp + name: to-server02 +- device: server02 + enabled: true + type: 1000base-x-sfp + name: to-server01 +- device: server02 + enabled: true + type: 1000base-t + name: eth0 +- device: server02 + enabled: true + type: virtual + name: loopback diff --git a/.devcontainer/initializers/ip_addresses.yml b/.devcontainer/initializers/ip_addresses.yml index 17ee653..7f0debf 100644 --- a/.devcontainer/initializers/ip_addresses.yml +++ b/.devcontainer/initializers/ip_addresses.yml @@ -1,4 +1,21 @@ ---- +## Possible Choices: +## status: +## - active +## - reserved +## - deprecated +## - dhcp +## role: +## - loopback +## - secondary +## - anycast +## - vip +## - vrrp +## - hsrp +## - glbp +## - carp +## +## Examples: + - address: 10.1.1.1/24 device: server01 interface: to-server02 diff --git a/.devcontainer/initializers/locations.yml b/.devcontainer/initializers/locations.yml index 3595f7d..ff8cb42 100644 --- a/.devcontainer/initializers/locations.yml +++ b/.devcontainer/initializers/locations.yml @@ -1,4 +1,3 @@ ---- - name: cage 101 slug: cage-101 site: SING 1 diff --git a/.devcontainer/initializers/manufacturers.yml b/.devcontainer/initializers/manufacturers.yml index 8463d76..f8e5cca 100644 --- a/.devcontainer/initializers/manufacturers.yml +++ b/.devcontainer/initializers/manufacturers.yml @@ -1,4 +1,3 @@ ---- - name: Manufacturer 1 slug: manufacturer-1 - name: Manufacturer 2 diff --git a/.devcontainer/initializers/object_permissions.yml b/.devcontainer/initializers/object_permissions.yml index fef2675..fdd5cfb 100644 --- a/.devcontainer/initializers/object_permissions.yml +++ b/.devcontainer/initializers/object_permissions.yml @@ -1,49 +1,60 @@ ---- -# all.ro: -# actions: -# - view -# description: 'Read Only for All Objects' -# enabled: true -# groups: -# - applications -# - readers -# object_types: all -# users: -# - jdoe -# all.rw: -# actions: -# - add -# - change -# - delete -# - view -# description: 'Read/Write for All Objects' -# enabled: true -# groups: -# - writers -# object_types: all -# network_team.rw: -# actions: -# - add -# - change -# - delete -# - view -# description: "Network Team Permissions" -# enabled: true -# object_types: -# circuits: -# - circuit -# - circuittermination -# - circuittype -# - provider -# dcim: all -# ipam: -# - aggregate -# - ipaddress -# - prefix -# - rir -# - role -# - routetarget -# - service -# - vlan -# - vlangroup -# - vrf +all.ro: + actions: + - view + description: 'Read Only for All Objects' + enabled: true + groups: + - applications + - readers + object_types: all + users: + - jdoe +all.rw: + actions: + - add + - change + - delete + - view + description: 'Read/Write for All Objects' + enabled: true + groups: + - writers + object_types: all +network_team.rw: + actions: + - add + - change + - delete + - view + description: "Network Team Permissions" + enabled: true + object_types: + circuits: + - circuit + - circuittermination + - circuittype + - provider + dcim: all + ipam: + - aggregate + - ipaddress + - prefix + - rir + - role + - routetarget + - service + - vlan + - vlangroup + - vrf +vips.change: + actions: + - change + description: "Update VIP object permission" + enabled: true + object_types: + ipam: + - ipaddress + groups: + - devops + constraints: + role: vip diff --git a/.devcontainer/initializers/platforms.yml b/.devcontainer/initializers/platforms.yml index 510ab04..8fc82be 100644 --- a/.devcontainer/initializers/platforms.yml +++ b/.devcontainer/initializers/platforms.yml @@ -1,4 +1,3 @@ ---- - name: Platform 1 slug: platform-1 manufacturer: Manufacturer 1 diff --git a/.devcontainer/initializers/power_feeds.yml b/.devcontainer/initializers/power_feeds.yml index a32e3dd..595c3d2 100644 --- a/.devcontainer/initializers/power_feeds.yml +++ b/.devcontainer/initializers/power_feeds.yml @@ -1,4 +1,3 @@ ---- - name: power feed 1 power_panel: power panel AMS 1 voltage: 208 diff --git a/.devcontainer/initializers/power_panels.yml b/.devcontainer/initializers/power_panels.yml index 757b4b3..4bb656b 100644 --- a/.devcontainer/initializers/power_panels.yml +++ b/.devcontainer/initializers/power_panels.yml @@ -1,4 +1,3 @@ ---- - name: power panel AMS 1 site: AMS 1 - name: power panel SING 1 diff --git a/.devcontainer/initializers/prefix_vlan_roles.yml b/.devcontainer/initializers/prefix_vlan_roles.yml index 4f269c7..20043c9 100644 --- a/.devcontainer/initializers/prefix_vlan_roles.yml +++ b/.devcontainer/initializers/prefix_vlan_roles.yml @@ -1,3 +1,2 @@ ---- - name: Main Management slug: main-management diff --git a/.devcontainer/initializers/prefixes.yml b/.devcontainer/initializers/prefixes.yml index cf37272..9c0439b 100644 --- a/.devcontainer/initializers/prefixes.yml +++ b/.devcontainer/initializers/prefixes.yml @@ -1,4 +1,12 @@ ---- +## Possible Choices: +## status: +## - container +## - active +## - reserved +## - deprecated +## +## Examples: + - description: prefix1 prefix: 10.1.1.0/24 site: AMS 1 @@ -19,11 +27,3 @@ status: active tenant: tenant2 vlan: vlan2 -- description: prefix3 - prefix: 192.168.1.0/24 - site: AMS 1 - status: active -- description: prefix4 - prefix: 192.168.11.0/24 - site: AMS 2 - status: active diff --git a/.devcontainer/initializers/providers.yml b/.devcontainer/initializers/providers.yml index 6465b82..4d0e5b0 100644 --- a/.devcontainer/initializers/providers.yml +++ b/.devcontainer/initializers/providers.yml @@ -1,4 +1,3 @@ ---- - name: Provider1 slug: provider1 asn: 121 diff --git a/.devcontainer/initializers/rack_roles.yml b/.devcontainer/initializers/rack_roles.yml index 54e95ed..7af7a74 100644 --- a/.devcontainer/initializers/rack_roles.yml +++ b/.devcontainer/initializers/rack_roles.yml @@ -1,4 +1,3 @@ ---- - name: Role 1 slug: role-1 color: Pink diff --git a/.devcontainer/initializers/racks.yml b/.devcontainer/initializers/racks.yml index d918625..881dec8 100644 --- a/.devcontainer/initializers/racks.yml +++ b/.devcontainer/initializers/racks.yml @@ -1,16 +1,35 @@ ---- +## Possible Choices: +## width: +## - 19 +## - 23 +## types: +## - 2-post-frame +## - 4-post-frame +## - 4-post-cabinet +## - wall-frame +## - wall-cabinet +## outer_unit: +## - mm +## - in +## +## Examples: + - site: AMS 1 name: rack-01 role: Role 1 type: 4-post-cabinet width: 19 u_height: 47 + custom_field_data: + text_field: Description - site: AMS 2 name: rack-02 role: Role 2 type: 4-post-cabinet width: 19 u_height: 47 + custom_field_data: + text_field: Description - site: SING 1 name: rack-03 location: cage 101 @@ -18,3 +37,5 @@ type: 4-post-cabinet width: 19 u_height: 47 + custom_field_data: + text_field: Description diff --git a/.devcontainer/initializers/regions.yml b/.devcontainer/initializers/regions.yml index a818c6f..11db5bf 100644 --- a/.devcontainer/initializers/regions.yml +++ b/.devcontainer/initializers/regions.yml @@ -1,4 +1,3 @@ ---- - name: Singapore slug: singapore - name: Amsterdam diff --git a/.devcontainer/initializers/rirs.yml b/.devcontainer/initializers/rirs.yml index 34777f9..a74d484 100644 --- a/.devcontainer/initializers/rirs.yml +++ b/.devcontainer/initializers/rirs.yml @@ -1,4 +1,3 @@ ---- - is_private: true name: RFC1918 slug: rfc1918 diff --git a/.devcontainer/initializers/route_targets.yml b/.devcontainer/initializers/route_targets.yml index 2fa188e..786d24e 100644 --- a/.devcontainer/initializers/route_targets.yml +++ b/.devcontainer/initializers/route_targets.yml @@ -1,4 +1,3 @@ ---- - name: 65000:1001 tenant: tenant1 - name: 65000:1002 diff --git a/.devcontainer/initializers/services.yml b/.devcontainer/initializers/services.yml index 88cd473..e04bee8 100644 --- a/.devcontainer/initializers/services.yml +++ b/.devcontainer/initializers/services.yml @@ -1,4 +1,3 @@ ---- - name: DNS protocol: TCP ports: diff --git a/.devcontainer/initializers/sites.yml b/.devcontainer/initializers/sites.yml index 92b988b..ed5a28e 100644 --- a/.devcontainer/initializers/sites.yml +++ b/.devcontainer/initializers/sites.yml @@ -1,23 +1,30 @@ ---- - name: AMS 1 slug: ams1 region: Downtown status: active facility: Amsterdam 1 + custom_field_data: + text_field: Description for AMS1 - name: AMS 2 slug: ams2 region: Downtown status: active facility: Amsterdam 2 + custom_field_data: + text_field: Description for AMS2 - name: AMS 3 slug: ams3 region: Suburbs status: active facility: Amsterdam 3 tenant: tenant1 + custom_field_data: + text_field: Description for AMS3 - name: SING 1 slug: sing1 region: Singapore status: active facility: Singapore 1 tenant: tenant2 + custom_field_data: + text_field: Description for SING1 diff --git a/.devcontainer/initializers/tags.yml b/.devcontainer/initializers/tags.yml index 2697237..ff582d3 100644 --- a/.devcontainer/initializers/tags.yml +++ b/.devcontainer/initializers/tags.yml @@ -1,4 +1,3 @@ ---- - name: Tag 1 slug: tag-1 color: Pink diff --git a/.devcontainer/initializers/tenant_groups.yml b/.devcontainer/initializers/tenant_groups.yml index 79fa5cb..a535b25 100644 --- a/.devcontainer/initializers/tenant_groups.yml +++ b/.devcontainer/initializers/tenant_groups.yml @@ -1,4 +1,3 @@ ---- - name: Tenant Group 1 slug: tenant-group-1 - name: Tenant Group 2 diff --git a/.devcontainer/initializers/tenants.yml b/.devcontainer/initializers/tenants.yml index d3a983e..fd63d1c 100644 --- a/.devcontainer/initializers/tenants.yml +++ b/.devcontainer/initializers/tenants.yml @@ -1,4 +1,3 @@ ---- - name: tenant1 slug: tenant1 - name: tenant2 diff --git a/.devcontainer/initializers/users.yml b/.devcontainer/initializers/users.yml index e17c5b9..2f79ad9 100644 --- a/.devcontainer/initializers/users.yml +++ b/.devcontainer/initializers/users.yml @@ -1,7 +1,15 @@ ---- -admin: - api_token: 0123456789admin789abcdef01234567admin +technical_user: + api_token: 0123456789technicaluser789abcdef01234567 # must be looooong! +reader: + password: reader +writer: + password: writer + api_token: "" # a token is generated automatically unless the value is explicity set to empty +jdoe: + first_name: John + last_name: Doe + api_token: 0123456789jdoe789abcdef01234567jdoe is_active: True - is_staff: True - is_superuser: True - password: admin + is_superuser: False + is_staff: False + email: john.doe@example.com diff --git a/.devcontainer/initializers/virtual_machines.yml b/.devcontainer/initializers/virtual_machines.yml index 4009209..1dad3d4 100644 --- a/.devcontainer/initializers/virtual_machines.yml +++ b/.devcontainer/initializers/virtual_machines.yml @@ -1,4 +1,11 @@ ---- +## Possible Choices: +## status: +## - active +## - offline +## - staged +## +## Examples: + - cluster: cluster1 comments: VM1 disk: 200 diff --git a/.devcontainer/initializers/virtualization_interfaces.yml b/.devcontainer/initializers/virtualization_interfaces.yml index 396a8c8..29e9965 100644 --- a/.devcontainer/initializers/virtualization_interfaces.yml +++ b/.devcontainer/initializers/virtualization_interfaces.yml @@ -1,4 +1,3 @@ ---- - description: Network Interface 1 enabled: true mac_address: 00:77:77:77:77:77 diff --git a/.devcontainer/initializers/vlan_groups.yml b/.devcontainer/initializers/vlan_groups.yml index 6aae0d8..c385b44 100644 --- a/.devcontainer/initializers/vlan_groups.yml +++ b/.devcontainer/initializers/vlan_groups.yml @@ -1,4 +1,3 @@ ---- - name: VLAN group 1 scope_type: dcim.region scope: Amsterdam diff --git a/.devcontainer/initializers/vlans.yml b/.devcontainer/initializers/vlans.yml index 32403d6..eb596f1 100644 --- a/.devcontainer/initializers/vlans.yml +++ b/.devcontainer/initializers/vlans.yml @@ -1,4 +1,11 @@ ---- +## Possible Choices: +## status: +## - active +## - reserved +## - deprecated +## +## Examples: + - name: vlan1 site: AMS 1 status: active diff --git a/.devcontainer/initializers/vrfs.yml b/.devcontainer/initializers/vrfs.yml index accb990..6f91b90 100644 --- a/.devcontainer/initializers/vrfs.yml +++ b/.devcontainer/initializers/vrfs.yml @@ -1,4 +1,3 @@ ---- - enforce_unique: true name: vrf1 tenant: tenant1 diff --git a/.devcontainer/initializers/webhooks.yml b/.devcontainer/initializers/webhooks.yml index ad4f0d0..5386b14 100644 --- a/.devcontainer/initializers/webhooks.yml +++ b/.devcontainer/initializers/webhooks.yml @@ -1,4 +1,14 @@ ---- +## Possible Choices: +## object_types: +## - device +## - site +## - any-other-content-type +## types: +## - type_create +## - type_update +## - type_delete +## Examples: + - name: device_creation payload_url: 'http://localhost:8080' object_types: diff --git a/Makefile b/Makefile index 41ad785..2a03c41 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,14 @@ setup: -${VENV_PY_PATH} -m pip install --disable-pip-version-check --no-cache-dir -e ${REPO_PATH} #-python3 setup.py develop +.PHONY: example_initializers ## Run initializers +example_initializers: + -${VENV_PY_PATH} ${NETBOX_MANAGE_PATH} copy_initializers_examples --path /opt/netbox/netbox/netbox-acls/.devcontainer/initializers + +.PHONY: load_initializers ## Run initializers +load_initializers: + -${VENV_PY_PATH} ${NETBOX_MANAGE_PATH} load_initializer_data --path /opt/netbox/netbox/netbox-acls/.devcontainer/initializers + .PHONY: makemigrations ## Run makemigrations makemigrations: -${VENV_PY_PATH} ${NETBOX_MANAGE_PATH} makemigrations --name ${PLUGIN_NAME} @@ -55,7 +63,7 @@ start: - cd /opt/netbox/netbox/ && /opt/netbox/docker-entrypoint.sh && /opt/netbox/launch-netbox.sh .PHONY: all ## Run all PLUGIN DEV targets -all: setup makemigrations migrate collectstatic startup_scripts start +all: setup makemigrations migrate collectstatic start #.PHONY: test #test: From 69bfb96b3ac546c6185476622e9d05b4bca6afbd Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 16:45:03 +0000 Subject: [PATCH 02/14] bug fix - ACL Interface assignment --- netbox_acls/forms/models.py | 69 ++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/netbox_acls/forms/models.py b/netbox_acls/forms/models.py index 451462e..b666f37 100644 --- a/netbox_acls/forms/models.py +++ b/netbox_acls/forms/models.py @@ -176,18 +176,18 @@ class AccessListForm(NetBoxModelForm): if device: host_type = "device" existing_acls = AccessList.objects.filter(name=name, device=device).exists() - elif virtual_chassis: - host_type = "virtual_chassis" - existing_acls = AccessList.objects.filter( - name=name, - virtual_chassis=virtual_chassis, - ).exists() elif virtual_machine: host_type = "virtual_machine" existing_acls = AccessList.objects.filter( name=name, virtual_machine=virtual_machine, ).exists() + else: + host_type = "virtual_chassis" + existing_acls = AccessList.objects.filter( + name=name, + virtual_chassis=virtual_chassis, + ).exists() # Check if duplicate entry. if ( @@ -233,9 +233,9 @@ class ACLInterfaceAssignmentForm(NetBoxModelForm): device = DynamicModelChoiceField( queryset=Device.objects.all(), required=False, - query_params={ + # query_params={ # Need to pass ACL device to it - }, + # }, ) interface = DynamicModelChoiceField( queryset=Interface.objects.all(), @@ -247,6 +247,9 @@ class ACLInterfaceAssignmentForm(NetBoxModelForm): virtual_machine = DynamicModelChoiceField( queryset=VirtualMachine.objects.all(), required=False, + # query_params={ + # Need to pass ACL device to it + # }, label="Virtual Machine", ) vminterface = DynamicModelChoiceField( @@ -330,34 +333,14 @@ class ACLInterfaceAssignmentForm(NetBoxModelForm): interface = cleaned_data.get("interface") vminterface = cleaned_data.get("vminterface") assigned_object = cleaned_data.get("assigned_object") - if interface: - assigned_object = interface - assigned_object_type = "interface" - host_type = "device" - host = Interface.objects.get(pk=assigned_object.pk).device - elif vminterface: - assigned_object = vminterface - assigned_object_type = "vminterface" - host_type = "virtual_machine" - host = VMInterface.objects.get(pk=assigned_object.pk).virtual_machine - if interface or vminterface: - assigned_object_id = VMInterface.objects.get(pk=assigned_object.pk).pk - assigned_object_type_id = ContentType.objects.get_for_model( - assigned_object, - ).pk - access_list_host = AccessList.objects.get(pk=access_list.pk).assigned_object # Check if both interface and vminterface are set. if interface and vminterface: error_too_many_interfaces = "Access Lists must be assigned to one type of interface at a time (VM interface or physical interface)" - error_too_many_hosts = "Access Lists must be assigned to one type of device at a time (VM or physical device)." error_message |= { - "device": [error_too_many_hosts], "interface": [error_too_many_interfaces], - "virtual_machine": [error_too_many_hosts], "vminterface": [error_too_many_interfaces], } - # Check if neither interface or vminterface are set. elif not (interface or vminterface): error_no_interface = ( "An Access List assignment but specify an Interface or VM Interface." @@ -366,8 +349,27 @@ class ACLInterfaceAssignmentForm(NetBoxModelForm): "interface": [error_no_interface], "vminterface": [error_no_interface], } + else: + if interface: + assigned_object = interface + assigned_object_type = "interface" + host_type = "device" + host = Interface.objects.get(pk=assigned_object.pk).device + assigned_object_id = Interface.objects.get(pk=assigned_object.pk).pk + else: + assigned_object = vminterface + assigned_object_type = "vminterface" + host_type = "virtual_machine" + host = VMInterface.objects.get(pk=assigned_object.pk).virtual_machine + assigned_object_id = VMInterface.objects.get(pk=assigned_object.pk).pk + + assigned_object_type_id = ContentType.objects.get_for_model( + assigned_object, + ).pk + access_list_host = AccessList.objects.get(pk=access_list.pk).assigned_object + # Check that an interface's parent device/virtual_machine is assigned to the Access List. - elif access_list_host != host: + if access_list_host != host: error_acl_not_assigned_to_host = "Access List not present on selected host." error_message |= { "access_list": [error_acl_not_assigned_to_host], @@ -375,7 +377,7 @@ class ACLInterfaceAssignmentForm(NetBoxModelForm): host_type: [error_acl_not_assigned_to_host], } # Check for duplicate entry. - elif ACLInterfaceAssignment.objects.filter( + if ACLInterfaceAssignment.objects.filter( access_list=access_list, assigned_object_id=assigned_object_id, assigned_object_type=assigned_object_type_id, @@ -388,7 +390,7 @@ class ACLInterfaceAssignmentForm(NetBoxModelForm): assigned_object_type: [error_duplicate_entry], } # Check that the interface does not have an existing ACL applied in the direction already. - elif ACLInterfaceAssignment.objects.filter( + if ACLInterfaceAssignment.objects.filter( assigned_object_id=assigned_object_id, assigned_object_type=assigned_object_type_id, direction=direction, @@ -407,10 +409,7 @@ class ACLInterfaceAssignmentForm(NetBoxModelForm): def save(self, *args, **kwargs): # Set assigned object - self.instance.assigned_object = self.cleaned_data.get( - "interface", - ) or self.cleaned_data.get("vminterface") - + self.instance.assigned_object = self.cleaned_data.get("interface") or self.cleaned_data.get("vminterface") return super().save(*args, **kwargs) From 4a60c282bad46d5a59921e5f906446b760953730 Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 16:49:50 +0000 Subject: [PATCH 03/14] bump version & fix pypi project content --- setup.py | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/setup.py b/setup.py index a13ecd2..ca98e3e 100644 --- a/setup.py +++ b/setup.py @@ -1,31 +1,21 @@ -# import codecs -# import os.path -# +import codecs +import os.path + from setuptools import find_packages, setup -# -# with open("README.md", "r") as fh: -# long_description = fh.read() -# -# -# def read(rel_path): -# here = os.path.abspath(os.path.dirname(__file__)) -# with codecs.open(os.path.join(here, rel_path), "r") as fp: -# return fp.read() -# -# -# def get_version(rel_path): -# for line in read(rel_path).splitlines(): -# if line.startswith('__version__'): -# delim = '"' if '"' in line else "'" -# return line.split(delim)[1] -# else: -# raise RuntimeError("Unable to find version string.") -# +with open("README.md", "r") as fh: + long_description = fh.read() + + +def read(rel_path): + here = os.path.abspath(os.path.dirname(__file__)) + with codecs.open(os.path.join(here, rel_path), "r") as fp: + return fp.read() + setup( name="netbox-acls", - version="1.0.0", + version="1.1.1", # version=get_version("netbox_acls/version.py"), description="A NetBox plugin for Access List management", # long_description=long_description, @@ -35,4 +25,4 @@ setup( packages=find_packages(), include_package_data=True, zip_safe=False, -) +) \ No newline at end of file From 8993663724e9e0cfc73ce8283eb956105d990733 Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 16:51:46 +0000 Subject: [PATCH 04/14] update README --- README.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 992119c..f2f6310 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,16 @@ -# netbox-acls +# NetBox Access Lists Plugin -A NetBox plugin for Access List management +A [Netbox](https://github.com/netbox-community/netbox) plugin for Access List management. + +## Features + +This plugin provides the following models: + +- Access Lists +- Access List to Interface Assignment +- Access List Rules (abstract model bassis for other rules) +- Access List Standard Rules +- Access List Extended Rules ## Origin @@ -15,11 +25,11 @@ This project just looks to build on top of this framework and model presented. ## Compatibility -This plugin was first developed using 3.2.5, and tested with all of 3.2.0. +This plugin was first developed using 3.2.5, and tested with all of 3.2. | NetBox Version | Plugin Version | |----------------|----------------| -| 3.2 | 1.0.0 | +| 3.2 | 1.0.1 | | 3.3 | TBD | ## Installing From 7ef080dee1287e842984ddaf8c1d8b5c7aece393 Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 16:52:43 +0000 Subject: [PATCH 05/14] update pre-commit config --- .pre-commit-config.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cea1ea7..596b3da 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,12 +18,12 @@ repos: args: - "--profile=black" - repo: https://github.com/psf/black - rev: 22.6.0 + rev: 22.10.0 hooks: - id: black language_version: python3 - repo: https://github.com/asottile/add-trailing-comma - rev: v2.2.3 + rev: v2.3.0 hooks: - id: add-trailing-comma args: @@ -33,7 +33,7 @@ repos: hooks: - id: flake8 - repo: https://github.com/asottile/pyupgrade - rev: v2.37.3 + rev: v3.0.0 hooks: - id: pyupgrade args: @@ -43,16 +43,16 @@ repos: # hooks: # - id: yamllint - repo: https://github.com/psf/black - rev: 22.6.0 + rev: 22.10.0 hooks: - id: black - - repo: https://github.com/Lucas-C/pre-commit-hooks-nodejs - rev: v1.1.2 - hooks: - - id: htmlhint - args: [--config, .htmlhintrc] + #- repo: https://github.com/Lucas-C/pre-commit-hooks-nodejs + # rev: v1.1.2 + # hooks: + # - id: htmlhint + # args: [--config, .htmlhintrc] - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.32.1 + rev: v0.32.2 hooks: - id: markdownlint #- repo: local @@ -62,4 +62,4 @@ repos: # entry: wily diff # verbose: true # language: python - # additional_dependencies: [wily] + # additional_dependencies: [wily] \ No newline at end of file From 69227ee303d4883db98390c68a6fb7625742bfbb Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 16:54:25 +0000 Subject: [PATCH 06/14] linter updates --- .github/linters/.flake8 | 3 +++ .github/linters/.isort.cfg | 8 ++++++++ .isort.cfg | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 .github/linters/.flake8 create mode 100644 .github/linters/.isort.cfg diff --git a/.github/linters/.flake8 b/.github/linters/.flake8 new file mode 100644 index 0000000..55e13d2 --- /dev/null +++ b/.github/linters/.flake8 @@ -0,0 +1,3 @@ +[flake8] +max-line-length = 160 +extend-ignore = E203 diff --git a/.github/linters/.isort.cfg b/.github/linters/.isort.cfg new file mode 100644 index 0000000..a9a8d64 --- /dev/null +++ b/.github/linters/.isort.cfg @@ -0,0 +1,8 @@ +[settings] +profile = black + +; vertical hanging indent mode also used in black configuration +multi_line_output = 3 + +; necessary because black expect the trailing comma +include_trailing_comma = true diff --git a/.isort.cfg b/.isort.cfg index a7a84fb..a9a8d64 100644 --- a/.isort.cfg +++ b/.isort.cfg @@ -1,5 +1,5 @@ [settings] -profile = "black" +profile = black ; vertical hanging indent mode also used in black configuration multi_line_output = 3 From 5620a74a73cd4cc35753d68afd25fbcbbbd215d0 Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 16:54:37 +0000 Subject: [PATCH 07/14] devcontainer setting updates --- .devcontainer/devcontainer.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 97d5acf..33f388e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -44,6 +44,10 @@ "python.linting.banditPath": "/opt/netbox/venv/bin/bandit", "python.linting.enabled": true, "python.linting.flake8Path": "/opt/netbox/venv/bin/flake8", + "python.linting.flake8Args": [ + "--max-line-length=160", + "--ignore=E203" + ], "python.linting.mypyPath": "//opt/netbox/venv/bin/mypy", "python.linting.pycodestylePath": "/opt/netbox/venv/bin/pycodestyle", "python.linting.pydocstylePath": "/opt/netbox/venv/bin/pydocstyle", @@ -57,6 +61,7 @@ ], "python.linting.pylintEnabled": true, "python.linting.pylintPath": "/opt/netbox/venv/bin/pylint", + "python.linting.lintOnSave": true, "python.pythonPath": "/opt/netbox/venv/bin/python3", "python.terminal.activateEnvironment": true, "python.venvPath": "/opt/netbox/", From 85edb3a2d138548c29f2aaaa147bbc0c37458ec3 Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 16:55:05 +0000 Subject: [PATCH 08/14] hadolint updates --- .devcontainer/Dockerfile-plugin_dev | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile-plugin_dev b/.devcontainer/Dockerfile-plugin_dev index 489a860..814b71e 100644 --- a/.devcontainer/Dockerfile-plugin_dev +++ b/.devcontainer/Dockerfile-plugin_dev @@ -6,6 +6,7 @@ FROM netboxcommunity/netbox:${NETBOX_VARIANT} ARG DEBIAN_FRONTEND=noninteractive # Install APT packages +# hadolint ignore=DL3008 RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ && apt-get -y install --no-install-recommends curl git make openssh-client python3.10-dev sudo wget zsh \ && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* @@ -19,7 +20,7 @@ ARG USERNAME=vscode ARG USER_UID=1000 ARG USER_GID=$USER_UID -RUN useradd -md /home/vscode -s /usr/bin/zsh -u $USER_UID $USERNAME \ +RUN useradd -l -md /home/vscode -s /usr/bin/zsh -u $USER_UID $USERNAME \ && usermod -aG sudo $USERNAME \ && echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \ && mkdir /opt/netbox/netbox/netbox-acls \ @@ -27,6 +28,7 @@ RUN useradd -md /home/vscode -s /usr/bin/zsh -u $USER_UID $USERNAME \ USER $USERNAME +SHELL ["/bin/bash", "-o", "pipefail", "-c"] # Add oh my zsh RUN wget --quiet https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh || true @@ -37,6 +39,7 @@ RUN /opt/netbox/venv/bin/pip install --no-warn-script-location netbox-initializ WORKDIR /opt/netbox/netbox/netbox-acls +# hadolint ignore=DL3002 USER root COPY entrypoint-dev.sh /bin/entrypoint-dev.sh From e654c81949cc7bafd990115c069124ad3a2a9904 Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 13:56:46 -0400 Subject: [PATCH 09/14] add dependabot --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..93827e2 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: + - package-ecosystem: pip + directory: "/" + schedule: + interval: daily + time: "04:00" + open-pull-requests-limit: 10 From 2b7f54e3e98cdc930ba0eb9b66aa831237dbf1db Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 14:04:43 -0400 Subject: [PATCH 10/14] add Duplicated Code VS Code plugin --- .devcontainer/devcontainer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 33f388e..2c47708 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -88,6 +88,7 @@ "ms-python.python", "ms-python.vscode-pylance", "mutantdino.resourcemonitor", + "paulomenezes.duplicated-code", "searKing.preview-vscode", "sourcery.sourcery" ] From a415b20756b3d89f2c4a3f4eabc4dce195cf8e6a Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 18:22:19 +0000 Subject: [PATCH 11/14] tweak intializers to remove gitleaks triggers --- .devcontainer/initializers/users.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.devcontainer/initializers/users.yml b/.devcontainer/initializers/users.yml index 2f79ad9..0d83523 100644 --- a/.devcontainer/initializers/users.yml +++ b/.devcontainer/initializers/users.yml @@ -1,15 +1,12 @@ technical_user: - api_token: 0123456789technicaluser789abcdef01234567 # must be looooong! + api_token: "" # a token is generated automatically unless the value is explicity set to empty reader: - password: reader + api_token: "" # a token is generated automatically unless the value is explicity set to empty writer: - password: writer api_token: "" # a token is generated automatically unless the value is explicity set to empty jdoe: first_name: John last_name: Doe - api_token: 0123456789jdoe789abcdef01234567jdoe is_active: True is_superuser: False is_staff: False - email: john.doe@example.com From 32c40248f08a6def62bbed63eac97d181d984ea2 Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 18:22:31 +0000 Subject: [PATCH 12/14] correct NETBOX_INITIALIZERS_VARIANT Dockerfile --- .devcontainer/Dockerfile-plugin_dev | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile-plugin_dev b/.devcontainer/Dockerfile-plugin_dev index 814b71e..9c17ee4 100644 --- a/.devcontainer/Dockerfile-plugin_dev +++ b/.devcontainer/Dockerfile-plugin_dev @@ -1,8 +1,9 @@ ARG NETBOX_VARIANT=v3.2 -ARG NETBOX_INITIALIZERS_VARIANT=3.2.3 FROM netboxcommunity/netbox:${NETBOX_VARIANT} +ARG NETBOX_INITIALIZERS_VARIANT=3.2.3 + ARG DEBIAN_FRONTEND=noninteractive # Install APT packages From 3efaf42eef4bea40bb9a0f75051ce0c43d5d15ce Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 18:23:38 +0000 Subject: [PATCH 13/14] black fixes --- .devcontainer/configuration/plugins.py | 2 +- netbox_acls/forms/models.py | 8 +++++--- setup.py | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.devcontainer/configuration/plugins.py b/.devcontainer/configuration/plugins.py index de3dc25..b79a0bc 100644 --- a/.devcontainer/configuration/plugins.py +++ b/.devcontainer/configuration/plugins.py @@ -5,7 +5,7 @@ # See https://github.com/netbox-community/netbox-docker/wiki/Using-Netbox-Plugins PLUGINS = [ - "netbox_initializers", # Loads demo data + "netbox_initializers", # Loads demo data "netbox_acls", ] diff --git a/netbox_acls/forms/models.py b/netbox_acls/forms/models.py index b666f37..2bff4ce 100644 --- a/netbox_acls/forms/models.py +++ b/netbox_acls/forms/models.py @@ -234,7 +234,7 @@ class ACLInterfaceAssignmentForm(NetBoxModelForm): queryset=Device.objects.all(), required=False, # query_params={ - # Need to pass ACL device to it + # Need to pass ACL device to it # }, ) interface = DynamicModelChoiceField( @@ -248,7 +248,7 @@ class ACLInterfaceAssignmentForm(NetBoxModelForm): queryset=VirtualMachine.objects.all(), required=False, # query_params={ - # Need to pass ACL device to it + # Need to pass ACL device to it # }, label="Virtual Machine", ) @@ -409,7 +409,9 @@ class ACLInterfaceAssignmentForm(NetBoxModelForm): def save(self, *args, **kwargs): # Set assigned object - self.instance.assigned_object = self.cleaned_data.get("interface") or self.cleaned_data.get("vminterface") + self.instance.assigned_object = self.cleaned_data.get( + "interface" + ) or self.cleaned_data.get("vminterface") return super().save(*args, **kwargs) diff --git a/setup.py b/setup.py index ca98e3e..cafeb4b 100644 --- a/setup.py +++ b/setup.py @@ -25,4 +25,4 @@ setup( packages=find_packages(), include_package_data=True, zip_safe=False, -) \ No newline at end of file +) From 7d80a1f699b38656aad72215fbbccdc9ae9a01b5 Mon Sep 17 00:00:00 2001 From: ryanmerolle Date: Fri, 7 Oct 2022 18:33:12 +0000 Subject: [PATCH 14/14] type ignore mypy --- .devcontainer/configuration/plugins.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/configuration/plugins.py b/.devcontainer/configuration/plugins.py index b79a0bc..9d1b8e9 100644 --- a/.devcontainer/configuration/plugins.py +++ b/.devcontainer/configuration/plugins.py @@ -9,7 +9,7 @@ PLUGINS = [ "netbox_acls", ] -PLUGINS_CONFIG = { +PLUGINS_CONFIG = { # type: ignore "netbox_initializers": {}, "netbox_acls": {}, }