Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deleting git repository used for backup config causes AttributeError #61

Closed
pke11y opened this issue May 21, 2021 · 3 comments
Closed

Comments

@pke11y
Copy link
Contributor

pke11y commented May 21, 2021

Environment

  • Python version: 3.7.10
  • Nautobot version: 1.0.0
  • nautobot-golden-config version: 1.0.0 (develop branch - using dev env)

Steps to Reproduce

  1. Create git repository on the UI at Extensibility -> Git Repository for config_context and backup_config
  2. Go to GoldenConfig Settings and configure backup path pointing to the newly created git repository
  3. Delete the newly created repository using the UI at Extensibility -> Git Repository
  4. Go back to the GoldenConfig Settings

Expected Behavior

Can view and reconfigure the settings for the GoldenConfig.

Observed Behavior

AttributeError raised as below.

Environment:


Request Method: GET
Request URL: http://147.75.194.238:8080/plugins/golden-config/setting/

Django Version: 3.1.8
Python Version: 3.7.10
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'cacheops',
 'corsheaders',
 'django_filters',
 'django_tables2',
 'django_prometheus',
 'mptt',
 'rest_framework',
 'social_django',
 'taggit',
 'timezone_field',
 'nautobot.core',
 'nautobot.circuits',
 'nautobot.dcim',
 'nautobot.ipam',
 'nautobot.extras',
 'nautobot.tenancy',
 'nautobot.users',
 'nautobot.utilities',
 'nautobot.virtualization',
 'django_rq',
 'drf_yasg',
 'graphene_django',
 'debug_toolbar',
 'nautobot_plugin_nornir.NornirConfig',
 'nautobot_golden_config.GoldenConfig',
 'nautobot_netbox_importer.NautobotNetboxImporterConfig']
Installed Middleware:
['debug_toolbar.middleware.DebugToolbarMiddleware',
 'django_prometheus.middleware.PrometheusBeforeMiddleware',
 'corsheaders.middleware.CorsMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'nautobot.core.middleware.ExceptionHandlingMiddleware',
 'nautobot.core.middleware.RemoteUserMiddleware',
 'nautobot.core.middleware.ExternalAuthMiddleware',
 'nautobot.core.middleware.APIVersionMiddleware',
 'nautobot.core.middleware.ObjectChangeMiddleware',
 'django_prometheus.middleware.PrometheusAfterMiddleware']


Template error:
In template /usr/local/lib/python3.7/site-packages/nautobot/core/templates/base.html, error at line 27
   'NoneType' object has no attribute '_meta'
   17 :           href="{% static 'select2-4.0.13/dist/css/select2.min.css' %}"
   18 :           onerror="window.location='{% url 'media_failure' %}?filename=select2-4.0.13/dist/css/select2.min.css'">
   19 :     <link rel="stylesheet"
   20 :           href="{% static 'select2-bootstrap-0.1.0-beta.10/select2-bootstrap.min.css' %}"
   21 :           onerror="window.location='{% url 'media_failure' %}?filename=select2-bootstrap-0.1.0-beta.10/select2-bootstrap.min.css'">
   22 :     <link rel="stylesheet"
   23 :           href="{% static 'flatpickr-4.6.3/themes/light.css' %}"
   24 :           onerror="window.location='{% url 'media_failure' %}?filename=flatpickr-4.6.3/themes/light.css'">
   25 :     <link rel="stylesheet"
   26 :           href="{% static 'css/base.css' %}?v{{ settings.VERSION }}"
   27 :           onerro r="window.location='{% ur l 'media_failure' %}?filename=css/base.css'">
   28 :     <link rel="apple-touch-icon" sizes="180x180" href="{% static 'img/nautobot_icon_180x180.png' %}">
   29 :     <link rel="icon" type="image/png" sizes="32x32" href="{% static 'img/nautobot_icon_32x32.png' %}">
   30 :     <link rel="icon" type="image/png" sizes="16x16" href="{% static 'img/nautobot_icon_16x16.png' %}">
   31 :     <link rel="icon" type="image/png" href="{% static 'img/nautobot_icon_192x192.png' %}" sizes="192x192">
   32 :     <link rel="mask-icon" href="{% static 'img/nautobot_icon_monochrome.svg' %}" color="#0097ff">
   33 :     <link rel="shortcut icon" href="{% static 'img/favicon.ico' %}">
   34 :     <meta name="msapplication-TileColor" content="#2d89ef">
   35 :     <meta name="theme-color" content="#ffffff">
   36 :     <meta charset="UTF-8">
   37 :     <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">


Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/nautobot/utilities/views.py", line 94, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py", line 98, in dispatch
    return handler(request, *args, **kwargs)
  File "/source/nautobot_golden_config/views.py", line 679, in get
    **self.get_extra_context(request, instance),
  File "/usr/local/lib/python3.7/site-packages/django/shortcuts.py", line 19, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "/usr/local/lib/python3.7/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "/usr/local/lib/python3.7/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/usr/local/lib/python3.7/site-packages/django/test/utils.py", line 96, in instrumented_test_render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.7/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/usr/local/lib/python3.7/site-packages/django/test/utils.py", line 96, in instrumented_test_render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.7/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.7/site-packages/django/template/library.py", line 192, in render
    output = self.func(*resolved_args, **resolved_kwargs)
  File "/usr/local/lib/python3.7/site-packages/nautobot/extras/templatetags/custom_links.py", line 30, in custom_links
    content_type = ContentType.objects.get_for_model(obj)
  File "/usr/local/lib/python3.7/site-packages/django/contrib/contenttypes/models.py", line 40, in get_for_model
    opts = self._get_opts(model, for_concrete_model)
  File "/usr/local/lib/python3.7/site-packages/django/contrib/contenttypes/models.py", line 27, in _get_opts
    model = model._meta.concrete_model

Exception Type: AttributeError at /plugins/golden-config/setting/
Exception Value: 'NoneType' object has no attribute '_meta'
@pke11y
Copy link
Contributor Author

pke11y commented May 21, 2021

It seems to delete the entry from the goldenconfigsetting table

@jeffkala
Copy link
Contributor

Will mention a temporary workaround:
Manually go into nbshell and create an object.

>>> from nautobot_golden_config.models import GoldenConfigSetting
>>>
>>> GoldenConfigSetting.objects.all()
<RestrictedQuerySet []>
>>>
>>> GoldenConfigSetting.objects.create()
<GoldenConfigSetting: Golden Config Settings>
>>>
>>> GoldenConfigSetting.objects.all()
<RestrictedQuerySet [<GoldenConfigSetting: Golden Config Settings>]>

@jeffkala
Copy link
Contributor

itdependsnetworks added a commit that referenced this issue Jun 17, 2021
fix #61 by setting setting to set to null on git repo delete
jmpettit pushed a commit to jmpettit/nautobot-app-golden-config that referenced this issue Jan 30, 2024
jmpettit pushed a commit to jmpettit/nautobot-app-golden-config that referenced this issue Jan 30, 2024
fix nautobot#61 by setting setting to set to null on git repo delete
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants