netbox-docker-plugin 2.9.0__tar.gz → 2.10.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. {netbox_docker_plugin-2.9.0/netbox_docker_plugin.egg-info → netbox_docker_plugin-2.10.0}/PKG-INFO +3 -2
  2. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/__init__.py +2 -2
  3. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/api/serializers.py +29 -0
  4. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/api/views.py +2 -1
  5. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/filtersets.py +22 -2
  6. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/container.py +21 -2
  7. netbox_docker_plugin-2.10.0/netbox_docker_plugin/forms/log_driver_option.py +28 -0
  8. netbox_docker_plugin-2.10.0/netbox_docker_plugin/migrations/0031_container_cap_add.py +37 -0
  9. netbox_docker_plugin-2.10.0/netbox_docker_plugin/migrations/0032_device_and_more.py +98 -0
  10. netbox_docker_plugin-2.10.0/netbox_docker_plugin/migrations/0033_host_operation.py +26 -0
  11. netbox_docker_plugin-2.10.0/netbox_docker_plugin/migrations/0034_container_log_driver_alter_container_containerid_and_more.py +147 -0
  12. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/models/container.py +59 -1
  13. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/models/registry.py +1 -1
  14. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tables.py +16 -0
  15. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templates/netbox_docker_plugin/container.html +75 -55
  16. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/container/test_container_api.py +10 -1
  17. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/container/test_container_views.py +5 -3
  18. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/urls.py +22 -0
  19. netbox_docker_plugin-2.10.0/netbox_docker_plugin/views/log_driver_option.py +27 -0
  20. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0/netbox_docker_plugin.egg-info}/PKG-INFO +3 -2
  21. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin.egg-info/SOURCES.txt +3 -0
  22. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/pyproject.toml +1 -1
  23. netbox_docker_plugin-2.9.0/netbox_docker_plugin/migrations/0031_container_cap_add.py +0 -29
  24. netbox_docker_plugin-2.9.0/netbox_docker_plugin/migrations/0032_device_and_more.py +0 -66
  25. netbox_docker_plugin-2.9.0/netbox_docker_plugin/migrations/0033_host_operation.py +0 -20
  26. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/LICENSE +0 -0
  27. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/MANIFEST.in +0 -0
  28. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/README.md +0 -0
  29. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/api/__init__.py +0 -0
  30. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/api/renderers.py +0 -0
  31. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/api/urls.py +0 -0
  32. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/__init__.py +0 -0
  33. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/bind.py +0 -0
  34. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/device.py +0 -0
  35. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/env.py +0 -0
  36. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/host.py +0 -0
  37. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/image.py +0 -0
  38. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/label.py +0 -0
  39. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/mount.py +0 -0
  40. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/network.py +0 -0
  41. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/network_setting.py +0 -0
  42. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/port.py +0 -0
  43. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/registry.py +0 -0
  44. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/forms/volume.py +0 -0
  45. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0001_initial.py +0 -0
  46. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0002_image.py +0 -0
  47. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0003_image_size.py +0 -0
  48. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0004_volume.py +0 -0
  49. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0005_network.py +0 -0
  50. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0006_container_port_mount_label_env_and_more.py +0 -0
  51. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0007_remove_container_netbox_docker_plugin_container_unique_name_host__and_more.py +0 -0
  52. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0008_alter_network_unique_together_network_networkid_and_more.py +0 -0
  53. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0009_remove_container_network_networksettings_and_more.py +0 -0
  54. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0010_container_containerid_and_more.py +0 -0
  55. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0011_host_token.py +0 -0
  56. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0012_host_state.py +0 -0
  57. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0013_host_netbox_url.py +0 -0
  58. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0014_container_operation.py +0 -0
  59. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0015_remove_mount_netbox_docker_plugin_mount_unique_volume_and_more.py +0 -0
  60. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0016_alter_env_value.py +0 -0
  61. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0017_network_state.py +0 -0
  62. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0018_alter_mount_volume_alter_networksetting_network.py +0 -0
  63. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0019_host_agent_version_host_docker_api_version.py +0 -0
  64. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0020_container_hostname.py +0 -0
  65. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0021_registry_and_more.py +0 -0
  66. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0022_bind_bind_netbox_docker_plugin_bind_unique_bind.py +0 -0
  67. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0023_delete_hosts.py +0 -0
  68. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0024_registry_host_alter_registry_name_and_more.py +0 -0
  69. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0025_alter_image_version.py +0 -0
  70. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0026_image_digest.py +0 -0
  71. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0027_container_restart_policy.py +0 -0
  72. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0028_mount_and_bind_read_only.py +0 -0
  73. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0029_alter_container_state.py +0 -0
  74. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/0030_alter_container_containerid_alter_container_hostname_and_more.py +0 -0
  75. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/migrations/__init__.py +0 -0
  76. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/models/__init__.py +0 -0
  77. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/models/host.py +0 -0
  78. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/models/image.py +0 -0
  79. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/models/network.py +0 -0
  80. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/models/volume.py +0 -0
  81. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/navigation.py +0 -0
  82. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/signals.py +0 -0
  83. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templates/netbox_docker_plugin/container-exec.html +0 -0
  84. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templates/netbox_docker_plugin/container-layout.html +0 -0
  85. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templates/netbox_docker_plugin/container-logs.html +0 -0
  86. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templates/netbox_docker_plugin/host-graph.html +0 -0
  87. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templates/netbox_docker_plugin/host.html +0 -0
  88. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templates/netbox_docker_plugin/image.html +0 -0
  89. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templates/netbox_docker_plugin/network.html +0 -0
  90. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templates/netbox_docker_plugin/registry.html +0 -0
  91. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templates/netbox_docker_plugin/volume.html +0 -0
  92. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templatetags/__init__.py +0 -0
  93. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/templatetags/host.py +0 -0
  94. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/__init__.py +0 -0
  95. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/base.py +0 -0
  96. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/container/__init__.py +0 -0
  97. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/container/test_container_actions.py +0 -0
  98. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/container/test_container_api_exec.py +0 -0
  99. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/container/test_container_operation_view.py +0 -0
  100. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/container/test_container_validation.py +0 -0
  101. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/host/__init__.py +0 -0
  102. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/host/test_host_api.py +0 -0
  103. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/host/test_host_views.py +0 -0
  104. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/host/test_replace_password.py +0 -0
  105. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/image/__init__.py +0 -0
  106. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/image/test_image_api.py +0 -0
  107. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/image/test_image_views.py +0 -0
  108. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/network/__init__.py +0 -0
  109. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/network/test_network_api.py +0 -0
  110. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/network/test_network_views.py +0 -0
  111. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/registry/__init__.py +0 -0
  112. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/registry/test_registry_api.py +0 -0
  113. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/registry/test_registry_views.py +0 -0
  114. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/test_init.py +0 -0
  115. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/volume/__init__.py +0 -0
  116. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/volume/test_volume_api.py +0 -0
  117. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/tests/volume/test_volume_views.py +0 -0
  118. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/utilities/__init__.py +0 -0
  119. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/__init__.py +0 -0
  120. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/bind.py +0 -0
  121. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/container.py +0 -0
  122. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/device.py +0 -0
  123. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/env.py +0 -0
  124. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/host.py +0 -0
  125. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/image.py +0 -0
  126. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/label.py +0 -0
  127. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/mount.py +0 -0
  128. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/network.py +0 -0
  129. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/network_setting.py +0 -0
  130. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/port.py +0 -0
  131. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/registry.py +0 -0
  132. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin/views/volume.py +0 -0
  133. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin.egg-info/dependency_links.txt +0 -0
  134. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/netbox_docker_plugin.egg-info/top_level.txt +0 -0
  135. {netbox_docker_plugin-2.9.0 → netbox_docker_plugin-2.10.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: netbox-docker-plugin
3
- Version: 2.9.0
3
+ Version: 2.10.0
4
4
  Summary: Manage Docker with Netbox & style.
5
5
  Author-email: Vincent Simonin <vincent@saashup.com>, David Delassus <david.jose.delassus@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/SaaShup/netbox-docker-plugin
@@ -10,6 +10,7 @@ Classifier: Programming Language :: Python :: 3
10
10
  Requires-Python: >=3.8
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
+ Dynamic: license-file
13
14
 
14
15
  # Netbox Docker Plugin
15
16
 
@@ -11,9 +11,9 @@ class NetBoxDockerConfig(PluginConfig):
11
11
  name = "netbox_docker_plugin"
12
12
  verbose_name = " NetBox Docker Plugin"
13
13
  description = "Manage Docker"
14
- version = "2.9.0"
14
+ version = "2.10.0"
15
15
  base_url = "docker"
16
- min_version = "4.0.0"
16
+ min_version = "4.0.11"
17
17
  author = "Vincent Simonin <vincent@saashup.com>, David Delassus <david.jose.delassus@gmail.com>"
18
18
  author_email = "vincent@saashup.com, david.jose.delassus@gmail.com"
19
19
 
@@ -19,6 +19,7 @@ from ..models.container import (
19
19
  Bind,
20
20
  NetworkSetting,
21
21
  Device,
22
+ LogDriverOption,
22
23
  )
23
24
  from ..models.registry import Registry
24
25
 
@@ -149,6 +150,7 @@ class NestedContainerSerializer(WritableNestedSerializer):
149
150
  "operation",
150
151
  "hostname",
151
152
  "cap_add",
153
+ "log_driver",
152
154
  )
153
155
 
154
156
 
@@ -322,6 +324,19 @@ class EnvSerializer(serializers.ModelSerializer):
322
324
  )
323
325
 
324
326
 
327
+ class LogDriverOptionSerializer(serializers.ModelSerializer):
328
+ """Container Log Driver Option Serializer class"""
329
+
330
+ class Meta:
331
+ """Container Log Driver Option Serializer Meta class"""
332
+
333
+ model = LogDriverOption
334
+ fields = (
335
+ "option_name",
336
+ "value",
337
+ )
338
+
339
+
325
340
  class LabelSerializer(serializers.ModelSerializer):
326
341
  """Container Label Serializer class"""
327
342
 
@@ -405,6 +420,7 @@ class ContainerSerializer(NetBoxModelSerializer):
405
420
  binds = BindSerializer(many=True, required=False)
406
421
  network_settings = NetworkSettingSerializer(many=True, required=False)
407
422
  devices = DeviceSerializer(many=True, required=False)
423
+ log_driver_options = LogDriverOptionSerializer(many=True, required=False)
408
424
 
409
425
  class Meta:
410
426
  """Container Serializer Meta class"""
@@ -431,6 +447,8 @@ class ContainerSerializer(NetBoxModelSerializer):
431
447
  "binds",
432
448
  "network_settings",
433
449
  "devices",
450
+ "log_driver",
451
+ "log_driver_options",
434
452
  "custom_fields",
435
453
  "created",
436
454
  "last_updated",
@@ -456,6 +474,7 @@ class ContainerSerializer(NetBoxModelSerializer):
456
474
  def create(self, validated_data):
457
475
  ports_data = validated_data.pop("ports", None)
458
476
  env_data = validated_data.pop("env", None)
477
+ log_driver_options_data = validated_data.pop("log_driver_options", None)
459
478
  labels_data = validated_data.pop("labels", None)
460
479
  mounts_data = validated_data.pop("mounts", None)
461
480
  binds_data = validated_data.pop("binds", None)
@@ -472,6 +491,10 @@ class ContainerSerializer(NetBoxModelSerializer):
472
491
  for env in env_data:
473
492
  Env.objects.create(container=container, **env)
474
493
 
494
+ if log_driver_options_data is not None:
495
+ for option in log_driver_options_data:
496
+ LogDriverOption.objects.create(container=container, **option)
497
+
475
498
  if labels_data is not None:
476
499
  for label in labels_data:
477
500
  Label.objects.create(container=container, **label)
@@ -506,6 +529,7 @@ class ContainerSerializer(NetBoxModelSerializer):
506
529
  def update(self, instance, validated_data):
507
530
  ports_data = validated_data.pop("ports", None)
508
531
  env_data = validated_data.pop("env", None)
532
+ log_driver_options_data = validated_data.pop("log_driver_options", None)
509
533
  labels_data = validated_data.pop("labels", None)
510
534
  mounts_data = validated_data.pop("mounts", None)
511
535
  binds_data = validated_data.pop("binds", None)
@@ -524,6 +548,11 @@ class ContainerSerializer(NetBoxModelSerializer):
524
548
  for env in env_data:
525
549
  Env.objects.create(container=container, **env)
526
550
 
551
+ if log_driver_options_data is not None:
552
+ LogDriverOption.objects.filter(container=container).delete()
553
+ for option in log_driver_options_data:
554
+ LogDriverOption.objects.create(container=container, **option)
555
+
527
556
  if labels_data is not None:
528
557
  Label.objects.filter(container=container).delete()
529
558
  for label in labels_data:
@@ -85,7 +85,7 @@ class ImageViewSet(NetBoxModelViewSet):
85
85
  renderer_classes=[JSONRenderer],
86
86
  )
87
87
  def force_pull(self, _request, **_kwargs):
88
- """ Force pull an existing image """
88
+ """Force pull an existing image"""
89
89
 
90
90
  image: Image = self.get_object()
91
91
  agent_url = image.host.endpoint
@@ -145,6 +145,7 @@ class ContainerViewSet(NetBoxModelViewSet):
145
145
  "host",
146
146
  "ports",
147
147
  "labels",
148
+ "log_driver_options",
148
149
  "tags",
149
150
  )
150
151
  filterset_class = filtersets.ContainerFilterSet
@@ -16,6 +16,7 @@ from .models.container import (
16
16
  Bind,
17
17
  NetworkSetting,
18
18
  Device,
19
+ LogDriverOption,
19
20
  )
20
21
  from .models.registry import Registry
21
22
 
@@ -89,7 +90,7 @@ class ImageFilterSet(NetBoxModelFilterSet):
89
90
  """Image filterset definition meta class"""
90
91
 
91
92
  model = Image
92
- fields = ("id", "name", "version", "size", "ImageID", "containers")
93
+ fields = ("id", "name", "version", "size", "ImageID", "Digest", "containers")
93
94
 
94
95
  # pylint: disable=W0613
95
96
  def search(self, queryset, name, value):
@@ -166,7 +167,7 @@ class ContainerFilterSet(NetBoxModelFilterSet):
166
167
  """Container filterset definition meta class"""
167
168
 
168
169
  model = Container
169
- fields = ("id", "name", "state", "hostname", "restart_policy")
170
+ fields = ("id", "name", "state", "hostname", "restart_policy", "ContainerID")
170
171
 
171
172
  # pylint: disable=W0613
172
173
  def search(self, queryset, name, value):
@@ -195,6 +196,25 @@ class EnvFilterSet(BaseFilterSet):
195
196
  )
196
197
 
197
198
 
199
+ class LogDriverOptionFilterSet(BaseFilterSet):
200
+ """Log driver option filterset definition class"""
201
+
202
+ container_id = ModelMultipleChoiceFilter(
203
+ field_name="container_id",
204
+ queryset=Container.objects.all(),
205
+ label="Container (ID)",
206
+ )
207
+
208
+ class Meta:
209
+ """Log driver option filterset definition meta class"""
210
+
211
+ model = LogDriverOption
212
+ fields = (
213
+ "id",
214
+ "option_name",
215
+ )
216
+
217
+
198
218
  class LabelFilterSet(BaseFilterSet):
199
219
  """Label filterset definition class"""
200
220
 
@@ -15,7 +15,11 @@ from netbox.forms import (
15
15
  )
16
16
  from ..models.volume import Volume
17
17
  from ..models.host import Host
18
- from ..models.container import Container, ContainerRestartPolicyChoices, ContainerCapAddChoices
18
+ from ..models.container import (
19
+ Container,
20
+ ContainerRestartPolicyChoices,
21
+ ContainerCapAddChoices,
22
+ )
19
23
  from ..models.image import Image
20
24
 
21
25
 
@@ -44,6 +48,7 @@ class ContainerForm(NetBoxModelForm):
44
48
  "hostname",
45
49
  "restart_policy",
46
50
  "cap_add",
51
+ "log_driver",
47
52
  "tags",
48
53
  )
49
54
  labels = {
@@ -53,6 +58,7 @@ class ContainerForm(NetBoxModelForm):
53
58
  "hostname": "Hostname",
54
59
  "restart_policy": "Restart Policy",
55
60
  "cap_add": "Add Host capabilities",
61
+ "log_driver": "Logging Driver",
56
62
  }
57
63
 
58
64
 
@@ -77,6 +83,7 @@ class ContainerEditForm(NetBoxModelForm):
77
83
  "hostname",
78
84
  "restart_policy",
79
85
  "cap_add",
86
+ "log_driver",
80
87
  "tags",
81
88
  )
82
89
  labels = {
@@ -85,6 +92,7 @@ class ContainerEditForm(NetBoxModelForm):
85
92
  "hostname": "Hostname",
86
93
  "restart_policy": "Restart Policy",
87
94
  "cap_add": "Add Host capabilities",
95
+ "log_driver": "Logging Driver",
88
96
  }
89
97
 
90
98
 
@@ -112,6 +120,7 @@ class ContainerFilterForm(NetBoxModelFilterSetForm):
112
120
  restart_policy = forms.ChoiceField(
113
121
  label="Restart Policy", choices=ContainerRestartPolicyChoices, required=False
114
122
  )
123
+ log_driver = forms.ChoiceField(label="Logging driver", required=False)
115
124
  tag = TagFilterField(model)
116
125
 
117
126
 
@@ -126,6 +135,12 @@ class ContainerImportForm(NetBoxModelImportForm):
126
135
  + "`always`, `unless-stopped`.",
127
136
  )
128
137
 
138
+ log_driver = forms.CharField(
139
+ label="Logging driver",
140
+ required=False,
141
+ help_text="Logging driver. Can be `json-file`, `syslog`.",
142
+ )
143
+
129
144
  class Meta:
130
145
  """Container importation form definition Meta class"""
131
146
 
@@ -151,12 +166,16 @@ class ContainerBulkEditForm(NetBoxModelBulkEditForm):
151
166
  choices=ContainerRestartPolicyChoices,
152
167
  required=True,
153
168
  )
169
+ log_driver = forms.CharField(
170
+ label="Logging driver",
171
+ required=False,
172
+ )
154
173
  hostname = forms.CharField(
155
174
  label="Hostname", max_length=256, min_length=1, required=False
156
175
  )
157
176
 
158
177
  model = Container
159
- fieldsets = (FieldSet("restart_policy", "hostname", name="General"),)
178
+ fieldsets = (FieldSet("restart_policy", "log_driver", "hostname", name="General"),)
160
179
 
161
180
 
162
181
  class ContainerOperationForm(NetBoxModelForm):
@@ -0,0 +1,28 @@
1
+ """Log Driver option Form definition"""
2
+
3
+ from django import forms
4
+ from utilities.forms.fields import DynamicModelChoiceField
5
+ from ..models.container import LogDriverOption, Container
6
+
7
+
8
+ class LogDriverOptionForm(forms.ModelForm):
9
+ """Log Driver option form definition class"""
10
+
11
+ container = DynamicModelChoiceField(
12
+ label="Container", queryset=Container.objects.all(), required=True
13
+ )
14
+
15
+ class Meta:
16
+ """Log Driver option form definition Meta class"""
17
+
18
+ model = LogDriverOption
19
+ fields = (
20
+ "container",
21
+ "option_name",
22
+ "value",
23
+ )
24
+ labels = {
25
+ "container": "Container",
26
+ "option_name": "Option Name",
27
+ "value": "Value",
28
+ }
@@ -0,0 +1,37 @@
1
+ # pylint: disable=C0103
2
+ """Migration file"""
3
+
4
+ import django.contrib.postgres.fields
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ """Migration file"""
10
+
11
+ dependencies = [
12
+ (
13
+ "netbox_docker_plugin",
14
+ "0030_alter_container_containerid_alter_container_hostname_and_more",
15
+ ),
16
+ ]
17
+
18
+ operations = [
19
+ migrations.RunSQL(
20
+ "ALTER TABLE netbox_docker_plugin_container "
21
+ + "ADD COLUMN IF NOT EXISTS cap_add character varying(32)[];",
22
+ state_operations=[
23
+ migrations.AddField(
24
+ model_name="container",
25
+ name="cap_add",
26
+ field=django.contrib.postgres.fields.ArrayField(
27
+ base_field=models.CharField(
28
+ blank=True, max_length=32, null=True
29
+ ),
30
+ blank=True,
31
+ null=True,
32
+ size=None,
33
+ ),
34
+ ),
35
+ ],
36
+ )
37
+ ]
@@ -0,0 +1,98 @@
1
+ # pylint: disable=C0103
2
+ """Migration file"""
3
+
4
+ import django.core.validators
5
+ import django.db.models.deletion
6
+ from django.db import migrations, models
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+ """Migration file"""
11
+
12
+ dependencies = [
13
+ ("netbox_docker_plugin", "0031_container_cap_add"),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.RunSQL(
18
+ """
19
+ CREATE TABLE IF NOT EXISTS public.netbox_docker_plugin_device
20
+ (
21
+ id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
22
+ host_path character varying(1024) NOT NULL,
23
+ container_path character varying(1024) NOT NULL,
24
+ container_id bigint NOT NULL,
25
+ CONSTRAINT netbox_docker_plugin_device_pkey PRIMARY KEY (id),
26
+ CONSTRAINT netbox_docker_plugin_device_unique_device UNIQUE
27
+ (container_id, container_path, host_path),
28
+ CONSTRAINT netbox_docker_plugin_container_id_a53ca874_fk_netbox_do FOREIGN KEY (container_id)
29
+ REFERENCES public.netbox_docker_plugin_container (id) MATCH SIMPLE
30
+ ON UPDATE NO ACTION
31
+ ON DELETE NO ACTION
32
+ DEFERRABLE INITIALLY DEFERRED
33
+ );
34
+ CREATE INDEX IF NOT EXISTS netbox_docker_plugin_device_container_id_a53ca874
35
+ ON public.netbox_docker_plugin_device USING btree
36
+ (container_id ASC NULLS LAST);
37
+ """,
38
+ state_operations=[
39
+ migrations.CreateModel(
40
+ name="Device",
41
+ fields=[
42
+ (
43
+ "id",
44
+ models.BigAutoField(
45
+ auto_created=True, primary_key=True, serialize=False
46
+ ),
47
+ ),
48
+ (
49
+ "host_path",
50
+ models.CharField(
51
+ max_length=1024,
52
+ validators=[
53
+ django.core.validators.MinLengthValidator(
54
+ limit_value=1
55
+ ),
56
+ django.core.validators.MaxLengthValidator(
57
+ limit_value=1024
58
+ ),
59
+ ],
60
+ ),
61
+ ),
62
+ (
63
+ "container_path",
64
+ models.CharField(
65
+ max_length=1024,
66
+ validators=[
67
+ django.core.validators.MinLengthValidator(
68
+ limit_value=1
69
+ ),
70
+ django.core.validators.MaxLengthValidator(
71
+ limit_value=1024
72
+ ),
73
+ ],
74
+ ),
75
+ ),
76
+ (
77
+ "container",
78
+ models.ForeignKey(
79
+ on_delete=django.db.models.deletion.CASCADE,
80
+ related_name="devices",
81
+ to="netbox_docker_plugin.container",
82
+ ),
83
+ ),
84
+ ],
85
+ options={
86
+ "ordering": ("container", "container_path", "host_path"),
87
+ },
88
+ ),
89
+ migrations.AddConstraint(
90
+ model_name="device",
91
+ constraint=models.UniqueConstraint(
92
+ fields=("container", "container_path", "host_path"),
93
+ name="netbox_docker_plugin_device_unique_device",
94
+ ),
95
+ ),
96
+ ],
97
+ ),
98
+ ]
@@ -0,0 +1,26 @@
1
+ # pylint: disable=C0103
2
+ """Migration file"""
3
+
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+ """Migration file"""
9
+
10
+ dependencies = [
11
+ ("netbox_docker_plugin", "0032_device_and_more"),
12
+ ]
13
+
14
+ operations = [
15
+ migrations.RunSQL(
16
+ "ALTER TABLE netbox_docker_plugin_host "
17
+ + "ADD COLUMN IF NOT EXISTS operation character varying(32);",
18
+ state_operations=[
19
+ migrations.AddField(
20
+ model_name="host",
21
+ name="operation",
22
+ field=models.CharField(default="none", max_length=32),
23
+ ),
24
+ ],
25
+ )
26
+ ]
@@ -0,0 +1,147 @@
1
+ # pylint: disable=C0103
2
+ """Migration file"""
3
+
4
+ import django.core.validators
5
+ import django.db.models.deletion
6
+ from django.db import migrations, models
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+ """Migration file"""
11
+
12
+ dependencies = [
13
+ ("netbox_docker_plugin", "0033_host_operation"),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.RunSQL(
18
+ "ALTER TABLE netbox_docker_plugin_container "
19
+ + "ADD COLUMN IF NOT EXISTS log_driver character varying(32);",
20
+ state_operations=[
21
+ migrations.AddField(
22
+ model_name="container",
23
+ name="log_driver",
24
+ field=models.CharField(blank=True, max_length=32, null=True),
25
+ ),
26
+ ],
27
+ ),
28
+ migrations.AlterField(
29
+ model_name="container",
30
+ name="ContainerID",
31
+ field=models.CharField(
32
+ blank=True,
33
+ max_length=128,
34
+ null=True,
35
+ validators=[
36
+ django.core.validators.MinLengthValidator(limit_value=1),
37
+ django.core.validators.MaxLengthValidator(limit_value=128),
38
+ ],
39
+ ),
40
+ ),
41
+ migrations.AlterField(
42
+ model_name="container",
43
+ name="hostname",
44
+ field=models.CharField(
45
+ blank=True,
46
+ max_length=256,
47
+ null=True,
48
+ validators=[
49
+ django.core.validators.MinLengthValidator(limit_value=1),
50
+ django.core.validators.MaxLengthValidator(limit_value=256),
51
+ ],
52
+ ),
53
+ ),
54
+ migrations.AlterField(
55
+ model_name="port",
56
+ name="public_port",
57
+ field=models.IntegerField(
58
+ validators=[
59
+ django.core.validators.MinValueValidator(limit_value=-1),
60
+ django.core.validators.MaxValueValidator(limit_value=65535),
61
+ ]
62
+ ),
63
+ ),
64
+ migrations.RunSQL(
65
+ """
66
+ CREATE TABLE IF NOT EXISTS public.netbox_docker_plugin_logdriveroption
67
+ (
68
+ id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
69
+ option_name character varying(255) NOT NULL,
70
+ value character varying(4096) NOT NULL,
71
+ container_id bigint NOT NULL,
72
+ CONSTRAINT netbox_docker_plugin_logdriveroption_pkey PRIMARY KEY (id),
73
+ CONSTRAINT netbox_docker_plugin_container_id_929d4dfe_fk_netbox_do FOREIGN KEY (container_id)
74
+ REFERENCES public.netbox_docker_plugin_container (id) MATCH SIMPLE
75
+ ON UPDATE NO ACTION
76
+ ON DELETE NO ACTION
77
+ DEFERRABLE INITIALLY DEFERRED
78
+ );
79
+
80
+ CREATE INDEX IF NOT EXISTS netbox_docker_plugin_logdriveroption_container_id_929d4dfe
81
+ ON public.netbox_docker_plugin_logdriveroption USING btree
82
+ (container_id ASC NULLS LAST);
83
+
84
+ CREATE UNIQUE INDEX IF NOT EXISTS netbox_docker_plugin_logdriveroption_unique_option_name_contain
85
+ ON public.netbox_docker_plugin_logdriveroption USING btree
86
+ (option_name ASC NULLS LAST, container_id ASC NULLS LAST);
87
+ """,
88
+ state_operations=[
89
+ migrations.CreateModel(
90
+ name="LogDriverOption",
91
+ fields=[
92
+ (
93
+ "id",
94
+ models.BigAutoField(
95
+ auto_created=True, primary_key=True, serialize=False
96
+ ),
97
+ ),
98
+ (
99
+ "option_name",
100
+ models.CharField(
101
+ max_length=255,
102
+ validators=[
103
+ django.core.validators.MinLengthValidator(
104
+ limit_value=1
105
+ ),
106
+ django.core.validators.MaxLengthValidator(
107
+ limit_value=255
108
+ ),
109
+ ],
110
+ ),
111
+ ),
112
+ (
113
+ "value",
114
+ models.CharField(
115
+ blank=True,
116
+ max_length=4096,
117
+ validators=[
118
+ django.core.validators.MaxLengthValidator(
119
+ limit_value=4096
120
+ )
121
+ ],
122
+ ),
123
+ ),
124
+ (
125
+ "container",
126
+ models.ForeignKey(
127
+ on_delete=django.db.models.deletion.CASCADE,
128
+ related_name="log_driver_options",
129
+ to="netbox_docker_plugin.container",
130
+ ),
131
+ ),
132
+ ],
133
+ options={
134
+ "ordering": ("container", "option_name"),
135
+ },
136
+ ),
137
+ migrations.AddConstraint(
138
+ model_name="logdriveroption",
139
+ constraint=models.UniqueConstraint(
140
+ models.F("option_name"),
141
+ models.F("container"),
142
+ name="netbox_docker_plugin_logdriveroption_unique_option_name_container'",
143
+ ),
144
+ ),
145
+ ],
146
+ ),
147
+ ]