netbox-docker-plugin 3.3.0__tar.gz → 3.4.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 (138) hide show
  1. {netbox_docker_plugin-3.3.0/netbox_docker_plugin.egg-info → netbox_docker_plugin-3.4.0}/PKG-INFO +1 -1
  2. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/__init__.py +1 -1
  3. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/container.py +6 -10
  4. netbox_docker_plugin-3.4.0/netbox_docker_plugin/migrations/0036_alter_container_log_driver.py +32 -0
  5. netbox_docker_plugin-3.4.0/netbox_docker_plugin/migrations/0037_alter_env_value.py +32 -0
  6. netbox_docker_plugin-3.4.0/netbox_docker_plugin/migrations/0038_container_cmd.py +26 -0
  7. netbox_docker_plugin-3.4.0/netbox_docker_plugin/migrations/1039_alter_port_public_port.py +30 -0
  8. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/models/container.py +30 -18
  9. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templates/netbox_docker_plugin/container.html +1 -1
  10. netbox_docker_plugin-3.4.0/netbox_docker_plugin/tests/container/test_agent_compatibility.py +96 -0
  11. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/container/test_container_views.py +2 -1
  12. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0/netbox_docker_plugin.egg-info}/PKG-INFO +1 -1
  13. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin.egg-info/SOURCES.txt +5 -0
  14. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/pyproject.toml +1 -1
  15. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/LICENSE +0 -0
  16. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/MANIFEST.in +0 -0
  17. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/README.md +0 -0
  18. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/api/__init__.py +0 -0
  19. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/api/renderers.py +0 -0
  20. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/api/serializers.py +0 -0
  21. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/api/urls.py +0 -0
  22. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/api/views.py +0 -0
  23. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/filtersets.py +0 -0
  24. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/__init__.py +0 -0
  25. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/bind.py +0 -0
  26. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/device.py +0 -0
  27. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/env.py +0 -0
  28. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/host.py +0 -0
  29. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/image.py +0 -0
  30. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/label.py +0 -0
  31. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/log_driver_option.py +0 -0
  32. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/mount.py +0 -0
  33. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/network.py +0 -0
  34. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/network_setting.py +0 -0
  35. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/port.py +0 -0
  36. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/registry.py +0 -0
  37. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/forms/volume.py +0 -0
  38. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0001_initial.py +0 -0
  39. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0002_image.py +0 -0
  40. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0003_image_size.py +0 -0
  41. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0004_volume.py +0 -0
  42. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0005_network.py +0 -0
  43. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0006_container_port_mount_label_env_and_more.py +0 -0
  44. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0007_remove_container_netbox_docker_plugin_container_unique_name_host__and_more.py +0 -0
  45. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0008_alter_network_unique_together_network_networkid_and_more.py +0 -0
  46. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0009_remove_container_network_networksettings_and_more.py +0 -0
  47. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0010_container_containerid_and_more.py +0 -0
  48. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0011_host_token.py +0 -0
  49. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0012_host_state.py +0 -0
  50. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0013_host_netbox_url.py +0 -0
  51. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0014_container_operation.py +0 -0
  52. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0015_remove_mount_netbox_docker_plugin_mount_unique_volume_and_more.py +0 -0
  53. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0016_alter_env_value.py +0 -0
  54. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0017_network_state.py +0 -0
  55. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0018_alter_mount_volume_alter_networksetting_network.py +0 -0
  56. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0019_host_agent_version_host_docker_api_version.py +0 -0
  57. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0020_container_hostname.py +0 -0
  58. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0021_registry_and_more.py +0 -0
  59. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0022_bind_bind_netbox_docker_plugin_bind_unique_bind.py +0 -0
  60. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0023_delete_hosts.py +0 -0
  61. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0024_registry_host_alter_registry_name_and_more.py +0 -0
  62. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0025_alter_image_version.py +0 -0
  63. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0026_image_digest.py +0 -0
  64. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0027_container_restart_policy.py +0 -0
  65. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0028_mount_and_bind_read_only.py +0 -0
  66. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0029_alter_container_state.py +0 -0
  67. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0030_alter_container_containerid_alter_container_hostname_and_more.py +0 -0
  68. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0031_container_cap_add.py +0 -0
  69. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0032_device_and_more.py +0 -0
  70. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0033_host_operation.py +0 -0
  71. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0034_volume_max_size.py +0 -0
  72. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/0035_container_log_driver_logdriveroption.py +0 -0
  73. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/migrations/__init__.py +0 -0
  74. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/models/__init__.py +0 -0
  75. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/models/host.py +0 -0
  76. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/models/image.py +0 -0
  77. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/models/network.py +0 -0
  78. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/models/registry.py +0 -0
  79. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/models/volume.py +0 -0
  80. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/navigation.py +0 -0
  81. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/signals.py +0 -0
  82. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tables.py +0 -0
  83. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templates/netbox_docker_plugin/container-exec.html +0 -0
  84. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templates/netbox_docker_plugin/container-layout.html +0 -0
  85. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templates/netbox_docker_plugin/container-logs.html +0 -0
  86. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templates/netbox_docker_plugin/host-graph.html +0 -0
  87. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templates/netbox_docker_plugin/host.html +0 -0
  88. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templates/netbox_docker_plugin/image.html +0 -0
  89. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templates/netbox_docker_plugin/network.html +0 -0
  90. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templates/netbox_docker_plugin/registry.html +0 -0
  91. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templates/netbox_docker_plugin/volume.html +0 -0
  92. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templatetags/__init__.py +0 -0
  93. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/templatetags/host.py +0 -0
  94. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/__init__.py +0 -0
  95. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/base.py +0 -0
  96. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/container/__init__.py +0 -0
  97. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/container/test_container_actions.py +0 -0
  98. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/container/test_container_api.py +0 -0
  99. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/container/test_container_api_exec.py +0 -0
  100. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/container/test_container_operation_view.py +0 -0
  101. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/container/test_container_validation.py +0 -0
  102. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/host/__init__.py +0 -0
  103. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/host/test_host_api.py +0 -0
  104. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/host/test_host_views.py +0 -0
  105. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/host/test_replace_password.py +0 -0
  106. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/image/__init__.py +0 -0
  107. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/image/test_image_api.py +0 -0
  108. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/image/test_image_views.py +0 -0
  109. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/network/__init__.py +0 -0
  110. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/network/test_network_api.py +0 -0
  111. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/network/test_network_views.py +0 -0
  112. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/registry/__init__.py +0 -0
  113. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/registry/test_registry_api.py +0 -0
  114. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/registry/test_registry_views.py +0 -0
  115. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/test_init.py +0 -0
  116. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/volume/__init__.py +0 -0
  117. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/volume/test_volume_api.py +0 -0
  118. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/tests/volume/test_volume_views.py +0 -0
  119. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/urls.py +0 -0
  120. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/utilities/__init__.py +0 -0
  121. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/__init__.py +0 -0
  122. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/bind.py +0 -0
  123. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/container.py +0 -0
  124. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/device.py +0 -0
  125. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/env.py +0 -0
  126. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/host.py +0 -0
  127. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/image.py +0 -0
  128. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/label.py +0 -0
  129. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/log_driver_option.py +0 -0
  130. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/mount.py +0 -0
  131. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/network.py +0 -0
  132. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/network_setting.py +0 -0
  133. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/port.py +0 -0
  134. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/registry.py +0 -0
  135. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin/views/volume.py +0 -0
  136. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin.egg-info/dependency_links.txt +0 -0
  137. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/netbox_docker_plugin.egg-info/top_level.txt +0 -0
  138. {netbox_docker_plugin-3.3.0 → netbox_docker_plugin-3.4.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: netbox-docker-plugin
3
- Version: 3.3.0
3
+ Version: 3.4.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
@@ -11,7 +11,7 @@ class NetBoxDockerConfig(PluginConfig):
11
11
  name = "netbox_docker_plugin"
12
12
  verbose_name = " NetBox Docker Plugin"
13
13
  description = "Manage Docker"
14
- version = "3.3.0"
14
+ version = "3.4.0"
15
15
  base_url = "docker"
16
16
  min_version = "4.1.0"
17
17
  author = "Vincent Simonin <vincent@saashup.com>, David Delassus <david.jose.delassus@gmail.com>"
@@ -19,7 +19,6 @@ from ..models.container import (
19
19
  Container,
20
20
  ContainerRestartPolicyChoices,
21
21
  ContainerCapAddChoices,
22
- ContainerLogDriverChoices,
23
22
  )
24
23
  from ..models.image import Image
25
24
 
@@ -121,9 +120,7 @@ class ContainerFilterForm(NetBoxModelFilterSetForm):
121
120
  restart_policy = forms.ChoiceField(
122
121
  label="Restart Policy", choices=ContainerRestartPolicyChoices, required=False
123
122
  )
124
- log_driver = forms.ChoiceField(
125
- label="Logging driver", choices=ContainerLogDriverChoices, required=False
126
- )
123
+ log_driver = forms.CharField(label="Logging driver", required=False)
127
124
  tag = TagFilterField(model)
128
125
 
129
126
 
@@ -138,11 +135,11 @@ class ContainerImportForm(NetBoxModelImportForm):
138
135
  + "`always`, `unless-stopped`.",
139
136
  )
140
137
 
141
- log_driver = forms.ChoiceField(
138
+ log_driver = forms.CharField(
142
139
  label="Logging driver",
143
- choices=ContainerLogDriverChoices,
144
140
  required=False,
145
- help_text="Logging driver. Can be `json-log`, `syslog`.",
141
+ help_text="Logging driver, as reported by Docker. For example "
142
+ + "`json-file`, `syslog`, `journald`, `local`.",
146
143
  )
147
144
 
148
145
  class Meta:
@@ -170,10 +167,9 @@ class ContainerBulkEditForm(NetBoxModelBulkEditForm):
170
167
  choices=ContainerRestartPolicyChoices,
171
168
  required=True,
172
169
  )
173
- log_driver = forms.ChoiceField(
170
+ log_driver = forms.CharField(
174
171
  label="Logging driver",
175
- choices=ContainerLogDriverChoices,
176
- required=True,
172
+ required=False,
177
173
  )
178
174
  hostname = forms.CharField(
179
175
  label="Hostname", max_length=256, min_length=1, required=False
@@ -0,0 +1,32 @@
1
+ # pylint: disable=C0103
2
+ """Migration file"""
3
+
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+ """Make Container.log_driver a free-form value.
9
+
10
+ The agent reports HostConfig.LogConfig.Type verbatim from the Docker
11
+ daemon (json-file, journald, local, ...), which the previous two-value
12
+ choice set rejected. The legacy `json-log` value was never a valid Docker
13
+ driver name and is normalised to `json-file`.
14
+ """
15
+
16
+ dependencies = [
17
+ ("netbox_docker_plugin", "0035_container_log_driver_logdriveroption"),
18
+ ]
19
+
20
+ operations = [
21
+ migrations.RunSQL(
22
+ sql="UPDATE netbox_docker_plugin_container "
23
+ "SET log_driver='json-file' WHERE log_driver='json-log'",
24
+ reverse_sql="UPDATE netbox_docker_plugin_container "
25
+ "SET log_driver='json-log' WHERE log_driver='json-file'",
26
+ ),
27
+ migrations.AlterField(
28
+ model_name="container",
29
+ name="log_driver",
30
+ field=models.CharField(max_length=32, null=True, blank=True),
31
+ ),
32
+ ]
@@ -0,0 +1,32 @@
1
+ # pylint: disable=C0103
2
+ """Migration file"""
3
+
4
+ import django.core.validators
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ """Raise Env.value to 32768 characters.
10
+
11
+ The agent imports environment variables verbatim from the Docker daemon;
12
+ inline configuration and certificate material routinely exceed the previous
13
+ 4096 character ceiling.
14
+ """
15
+
16
+ dependencies = [
17
+ ("netbox_docker_plugin", "0036_alter_container_log_driver"),
18
+ ]
19
+
20
+ operations = [
21
+ migrations.AlterField(
22
+ model_name="env",
23
+ name="value",
24
+ field=models.CharField(
25
+ blank=True,
26
+ max_length=32768,
27
+ validators=[
28
+ django.core.validators.MaxLengthValidator(limit_value=32768)
29
+ ],
30
+ ),
31
+ ),
32
+ ]
@@ -0,0 +1,26 @@
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
+ ("netbox_docker_plugin", "0037_alter_env_value"),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.AddField(
17
+ model_name="container",
18
+ name="cmd",
19
+ field=django.contrib.postgres.fields.ArrayField(
20
+ base_field=models.CharField(blank=True, max_length=1024, null=True),
21
+ blank=True,
22
+ null=True,
23
+ size=None,
24
+ ),
25
+ ),
26
+ ]
@@ -0,0 +1,30 @@
1
+ # pylint: disable=C0103
2
+ """Migration file"""
3
+
4
+ import django.core.validators
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ """Allow Port.public_port to be -1.
10
+
11
+ The agent uses -1 to mean "exposed but not published"; the previous floor
12
+ of 0 rejected every container with an unpublished exposed port.
13
+ """
14
+
15
+ dependencies = [
16
+ ("netbox_docker_plugin", "0038_container_cmd"),
17
+ ]
18
+
19
+ operations = [
20
+ migrations.AlterField(
21
+ model_name="port",
22
+ name="public_port",
23
+ field=models.IntegerField(
24
+ validators=[
25
+ django.core.validators.MinValueValidator(limit_value=-1),
26
+ django.core.validators.MaxValueValidator(limit_value=65535),
27
+ ]
28
+ ),
29
+ ),
30
+ ]
@@ -73,19 +73,6 @@ class ContainerRestartPolicyChoices(ChoiceSet):
73
73
  ]
74
74
 
75
75
 
76
- class ContainerLogDriverChoices(ChoiceSet):
77
- """Container log driver choices definition class"""
78
-
79
- key = "Container.log_driver"
80
-
81
- DEFAULT_VALUE = "json-log"
82
-
83
- CHOICES = [
84
- ("json-log", "json-log", "blue"),
85
- ("syslog", "syslog", "blue"),
86
- ]
87
-
88
-
89
76
  class PortTypeChoices(ChoiceSet):
90
77
  """Port type choices definition class"""
91
78
 
@@ -105,7 +92,27 @@ class ContainerCapAddChoices(ChoiceSet):
105
92
  key = "Container.cap_add"
106
93
 
107
94
  CHOICES = [
95
+ ("AUDIT_WRITE", "AUDIT_WRITE"),
96
+ ("CHOWN", "CHOWN"),
97
+ ("DAC_OVERRIDE", "DAC_OVERRIDE"),
98
+ ("DAC_READ_SEARCH", "DAC_READ_SEARCH"),
99
+ ("FOWNER", "FOWNER"),
100
+ ("FSETID", "FSETID"),
101
+ ("KILL", "KILL"),
102
+ ("MKNOD", "MKNOD"),
108
103
  ("NET_ADMIN", "NET_ADMIN"),
104
+ ("NET_BIND_SERVICE", "NET_BIND_SERVICE"),
105
+ ("NET_RAW", "NET_RAW"),
106
+ ("SETFCAP", "SETFCAP"),
107
+ ("SETGID", "SETGID"),
108
+ ("SETPCAP", "SETPCAP"),
109
+ ("SETUID", "SETUID"),
110
+ ("SYS_ADMIN", "SYS_ADMIN"),
111
+ ("SYS_CHROOT", "SYS_CHROOT"),
112
+ ("SYS_NICE", "SYS_NICE"),
113
+ ("SYS_PTRACE", "SYS_PTRACE"),
114
+ ("SYS_RESOURCE", "SYS_RESOURCE"),
115
+ ("ALL", "ALL"),
109
116
  ]
110
117
 
111
118
 
@@ -168,8 +175,13 @@ class Container(NetBoxModel):
168
175
  )
169
176
  log_driver = models.CharField(
170
177
  max_length=32,
171
- choices=ContainerLogDriverChoices,
172
- default=ContainerLogDriverChoices.DEFAULT_VALUE,
178
+ null=True,
179
+ blank=True,
180
+ )
181
+ cmd = ArrayField(
182
+ models.CharField(max_length=1024, blank=True, null=True),
183
+ null=True,
184
+ blank=True,
173
185
  )
174
186
 
175
187
  @property
@@ -261,7 +273,7 @@ class Port(models.Model):
261
273
  )
262
274
  public_port = models.IntegerField(
263
275
  validators=[
264
- MinValueValidator(limit_value=0),
276
+ MinValueValidator(limit_value=-1),
265
277
  MaxValueValidator(limit_value=65535),
266
278
  ],
267
279
  )
@@ -345,9 +357,9 @@ class Env(models.Model):
345
357
  )
346
358
  value = models.CharField(
347
359
  blank=True,
348
- max_length=4096,
360
+ max_length=32768,
349
361
  validators=[
350
- MaxLengthValidator(limit_value=4096),
362
+ MaxLengthValidator(limit_value=32768),
351
363
  ],
352
364
  )
353
365
 
@@ -51,7 +51,7 @@
51
51
  </tr>
52
52
  <tr>
53
53
  <th scope="row">Logging driver</th>
54
- <td>{{ object.get_log_driver_display }}</td>
54
+ <td>{{ object.log_driver }}</td>
55
55
  </tr>
56
56
  </table>
57
57
  </div>
@@ -0,0 +1,96 @@
1
+ """Agent compatibility regression tests.
2
+
3
+ Each test pins one payload shape that netbox-docker-agent >= 1.25 sends back to
4
+ NetBox and that plugin 3.3.0 rejected. See the migrations 0036 to 0038.
5
+ """
6
+
7
+ from django.test import TestCase
8
+ from netbox_docker_plugin.models.container import Container, Env, Port
9
+ from netbox_docker_plugin.models.host import Host
10
+ from netbox_docker_plugin.models.image import Image
11
+ from netbox_docker_plugin.models.registry import Registry
12
+
13
+
14
+ class AgentCompatibilityTestCase(TestCase):
15
+ """Agent Compatibility Test Case Class"""
16
+
17
+ objects = {}
18
+
19
+ @classmethod
20
+ def setUpTestData(cls) -> None:
21
+ cls.objects["host1"] = Host.objects.create(
22
+ endpoint="http://localhost:8080", name="host1"
23
+ )
24
+ cls.objects["registry1"] = Registry.objects.create(
25
+ host=cls.objects["host1"],
26
+ name="registry1",
27
+ serveraddress="http://localhost:8080",
28
+ )
29
+ cls.objects["image1"] = Image.objects.create(
30
+ host=cls.objects["host1"],
31
+ name="image1",
32
+ registry=cls.objects["registry1"],
33
+ )
34
+
35
+ def _container(self, name, **kwargs):
36
+ """Create a container on the shared fixture host"""
37
+
38
+ container = Container.objects.create(
39
+ host=self.objects["host1"],
40
+ image=self.objects["image1"],
41
+ name=name,
42
+ operation="none",
43
+ state="created",
44
+ **kwargs,
45
+ )
46
+ container.full_clean()
47
+ return container
48
+
49
+ def test_docker_log_drivers_are_accepted(self):
50
+ """The agent reports LogConfig.Type verbatim from the Docker daemon"""
51
+
52
+ for index, driver in enumerate(
53
+ ["json-file", "syslog", "journald", "local", "none"]
54
+ ):
55
+ container = self._container(f"container-log-{index}", log_driver=driver)
56
+ self.assertEqual(container.log_driver, driver)
57
+
58
+ def test_log_driver_may_be_empty(self):
59
+ """A container created before any refresh has no log driver yet"""
60
+
61
+ container = self._container("container-log-null")
62
+ self.assertIsNone(container.log_driver)
63
+
64
+ def test_unpublished_port_is_accepted(self):
65
+ """The agent uses -1 for exposed but unpublished ports"""
66
+
67
+ container = self._container("container-port")
68
+ port = Port.objects.create(
69
+ container=container,
70
+ private_port=8080,
71
+ public_port=-1,
72
+ type="tcp",
73
+ )
74
+ port.full_clean()
75
+ self.assertEqual(port.public_port, -1)
76
+
77
+ def test_docker_capabilities_are_accepted(self):
78
+ """The agent reports the container capabilities with CAP_ stripped"""
79
+
80
+ container = self._container(
81
+ "container-caps",
82
+ cap_add=["CHOWN", "SETUID", "SYS_ADMIN", "MKNOD"],
83
+ )
84
+ self.assertEqual(len(container.cap_add), 4)
85
+
86
+ def test_long_environment_value_is_accepted(self):
87
+ """Inline configuration and certificates exceed the old 4096 ceiling"""
88
+
89
+ container = self._container("container-env")
90
+ env = Env.objects.create(
91
+ container=container,
92
+ var_name="BIG_VALUE",
93
+ value="x" * 20000,
94
+ )
95
+ env.full_clean()
96
+ self.assertEqual(len(env.value), 20000)
@@ -85,5 +85,6 @@ class ContainerViewsTestCase(
85
85
  cls.csv_update_data = (
86
86
  "id,name,host,image,hostname,restart_policy,log_driver",
87
87
  f"{container1.pk},container1,{host1.pk},{image1.pk},,on-failure,syslog",
88
- f"{container2.pk},container2,{host1.pk},{image1.pk},container2,unless-stopped,json-log",
88
+ f"{container2.pk},container2,{host1.pk},{image1.pk},"
89
+ "container2,unless-stopped,json-file",
89
90
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: netbox-docker-plugin
3
- Version: 3.3.0
3
+ Version: 3.4.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
@@ -67,6 +67,10 @@ netbox_docker_plugin/migrations/0032_device_and_more.py
67
67
  netbox_docker_plugin/migrations/0033_host_operation.py
68
68
  netbox_docker_plugin/migrations/0034_volume_max_size.py
69
69
  netbox_docker_plugin/migrations/0035_container_log_driver_logdriveroption.py
70
+ netbox_docker_plugin/migrations/0036_alter_container_log_driver.py
71
+ netbox_docker_plugin/migrations/0037_alter_env_value.py
72
+ netbox_docker_plugin/migrations/0038_container_cmd.py
73
+ netbox_docker_plugin/migrations/1039_alter_port_public_port.py
70
74
  netbox_docker_plugin/migrations/__init__.py
71
75
  netbox_docker_plugin/models/__init__.py
72
76
  netbox_docker_plugin/models/container.py
@@ -91,6 +95,7 @@ netbox_docker_plugin/tests/__init__.py
91
95
  netbox_docker_plugin/tests/base.py
92
96
  netbox_docker_plugin/tests/test_init.py
93
97
  netbox_docker_plugin/tests/container/__init__.py
98
+ netbox_docker_plugin/tests/container/test_agent_compatibility.py
94
99
  netbox_docker_plugin/tests/container/test_container_actions.py
95
100
  netbox_docker_plugin/tests/container/test_container_api.py
96
101
  netbox_docker_plugin/tests/container/test_container_api_exec.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "netbox-docker-plugin"
7
- version = "3.3.0"
7
+ version = "3.4.0"
8
8
  authors = [
9
9
  { name="Vincent Simonin", email="vincent@saashup.com" },
10
10
  { name="David Delassus", email="david.jose.delassus@gmail.com" }