Skip to content

Commit

Permalink
Allow import/export of rack groups (netbox-community#1347)
Browse files Browse the repository at this point in the history
  • Loading branch information
paravoid committed Jul 17, 2017
1 parent 4df9e8d commit 7beabc5
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 1 deletion.
21 changes: 21 additions & 0 deletions netbox/dcim/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,27 @@ class Meta:
fields = ['site', 'name', 'slug']


class RackGroupCSVForm(forms.ModelForm):
site = forms.ModelChoiceField(
queryset=Site.objects.all(),
to_field_name='name',
help_text='Name of parent site',
error_messages={
'invalid_choice': 'Site not found.',
}
)

class Meta:
model = RackGroup
fields = [
'site', 'name', 'slug',
]
help_texts = {
'name': 'Name of rack group',
'slug': 'URL-friendly slug',
}


class RackGroupFilterForm(BootstrapMixin, forms.Form):
site = FilterChoiceField(queryset=Site.objects.annotate(filter_count=Count('rack_groups')), to_field_name='slug')

Expand Down
11 changes: 11 additions & 0 deletions netbox/dcim/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,10 @@ class RackGroup(models.Model):
slug = models.SlugField()
site = models.ForeignKey('Site', related_name='rack_groups', on_delete=models.CASCADE)

csv_headers = [
'site', 'name', 'slug',
]

class Meta:
ordering = ['site', 'name']
unique_together = [
Expand All @@ -172,6 +176,13 @@ def __str__(self):
def get_absolute_url(self):
return "{}?group_id={}".format(reverse('dcim:rack_list'), self.pk)

def to_csv(self):
return csv_format([
self.site,
self.name,
self.slug,
])


@python_2_unicode_compatible
class RackRole(models.Model):
Expand Down
1 change: 1 addition & 0 deletions netbox/dcim/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
# Rack groups
url(r'^rack-groups/$', views.RackGroupListView.as_view(), name='rackgroup_list'),
url(r'^rack-groups/add/$', views.RackGroupCreateView.as_view(), name='rackgroup_add'),
url(r'^rack-groups/import/$', views.RackGroupBulkImportView.as_view(), name='rackgroup_import'),
url(r'^rack-groups/delete/$', views.RackGroupBulkDeleteView.as_view(), name='rackgroup_bulk_delete'),
url(r'^rack-groups/(?P<pk>\d+)/edit/$', views.RackGroupEditView.as_view(), name='rackgroup_edit'),

Expand Down
7 changes: 7 additions & 0 deletions netbox/dcim/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,13 @@ class RackGroupEditView(RackGroupCreateView):
permission_required = 'dcim.change_rackgroup'


class RackGroupBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'dcim.add_rackgroup'
model_form = forms.RackGroupCSVForm
table = tables.RackGroupTable
default_return_url = 'dcim:rackgroup_list'


class RackGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_rackgroup'
cls = RackGroup
Expand Down
2 changes: 1 addition & 1 deletion netbox/extras/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@

# Models which support export templates
EXPORTTEMPLATE_MODELS = [
'site', 'region', 'rack', 'device', # DCIM
'site', 'region', 'rack', 'rackgroup', 'device', # DCIM
'consoleport', 'powerport', 'interfaceconnection', # DCIM
'aggregate', 'prefix', 'ipaddress', 'vlan', # IPAM
'provider', 'circuit', # Circuits
Expand Down
1 change: 1 addition & 0 deletions netbox/templates/_base.html
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
<li><a href="{% url 'dcim:rackgroup_list' %}"><i class="fa fa-search" aria-hidden="true"></i> Rack Groups</a></li>
{% if perms.dcim.add_rackgroup %}
<li><a href="{% url 'dcim:rackgroup_add' %}"><i class="fa fa-plus" aria-hidden="true"></i> Add a Rack Group</a></li>
<li><a href="{% url 'dcim:rackgroup_import' %}"><i class="fa fa-download" aria-hidden="true"></i> Import Rack Groups</a></li>
{% endif %}
<li class="divider"></li>
<li><a href="{% url 'dcim:rackrole_list' %}"><i class="fa fa-search" aria-hidden="true"></i> Rack Roles</a></li>
Expand Down
5 changes: 5 additions & 0 deletions netbox/templates/dcim/rackgroup_list.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@
<span class="fa fa-plus" aria-hidden="true"></span>
Add a rack group
</a>
<a href="{% url 'dcim:rackgroup_import' %}" class="btn btn-info">
<span class="fa fa-download" aria-hidden="true"></span>
Import rack groups
</a>
{% endif %}
{% include 'inc/export_button.html' with obj_type='rackgroups' %}
</div>
<h1>Rack Groups</h1>
<div class="row">
Expand Down

0 comments on commit 7beabc5

Please sign in to comment.