assemblyline-core 4.5.0.27__tar.gz → 4.5.0.28__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.

Potentially problematic release.


This version of assemblyline-core might be problematic. Click here for more details.

Files changed (88) hide show
  1. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/PKG-INFO +1 -1
  2. assemblyline-core-4.5.0.28/assemblyline_core/VERSION +1 -0
  3. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +4 -2
  4. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/scaler/scaler_server.py +10 -6
  5. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/tasking_client.py +9 -4
  6. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/updater/run_updater.py +6 -3
  7. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core.egg-info/PKG-INFO +1 -1
  8. assemblyline-core-4.5.0.27/assemblyline_core/VERSION +0 -1
  9. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/LICENCE.md +0 -0
  10. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/README.md +0 -0
  11. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/__init__.py +0 -0
  12. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/alerter/__init__.py +0 -0
  13. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/alerter/processing.py +0 -0
  14. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/alerter/run_alerter.py +0 -0
  15. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/archiver/__init__.py +0 -0
  16. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/archiver/run_archiver.py +0 -0
  17. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/badlist_client.py +0 -0
  18. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/dispatching/__init__.py +0 -0
  19. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/dispatching/__main__.py +0 -0
  20. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/dispatching/client.py +0 -0
  21. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/dispatching/dispatcher.py +0 -0
  22. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/dispatching/schedules.py +0 -0
  23. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/dispatching/timeout.py +0 -0
  24. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/expiry/__init__.py +0 -0
  25. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/expiry/run_expiry.py +0 -0
  26. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/ingester/__init__.py +0 -0
  27. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/ingester/__main__.py +0 -0
  28. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/ingester/constants.py +0 -0
  29. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/ingester/ingester.py +0 -0
  30. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/metrics/__init__.py +0 -0
  31. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/metrics/es_metrics.py +0 -0
  32. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
  33. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/metrics/helper.py +0 -0
  34. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/metrics/metrics_server.py +0 -0
  35. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
  36. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
  37. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
  38. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/plumber/__init__.py +0 -0
  39. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/plumber/run_plumber.py +0 -0
  40. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/replay/__init__.py +0 -0
  41. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/replay/client.py +0 -0
  42. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/replay/creator/__init__.py +0 -0
  43. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/replay/creator/run.py +0 -0
  44. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/replay/creator/run_worker.py +0 -0
  45. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/replay/loader/__init__.py +0 -0
  46. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/replay/loader/run.py +0 -0
  47. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/replay/loader/run_worker.py +0 -0
  48. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/replay/replay.py +0 -0
  49. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/safelist_client.py +0 -0
  50. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/scaler/__init__.py +0 -0
  51. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/scaler/collection.py +0 -0
  52. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/scaler/controllers/__init__.py +0 -0
  53. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/scaler/controllers/docker_ctl.py +0 -0
  54. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/scaler/controllers/interface.py +0 -0
  55. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/scaler/run_scaler.py +0 -0
  56. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/server_base.py +0 -0
  57. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/signature_client.py +0 -0
  58. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/submission_client.py +0 -0
  59. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/updater/__init__.py +0 -0
  60. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/updater/helper.py +0 -0
  61. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/vacuum/__init__.py +0 -0
  62. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/vacuum/crawler.py +0 -0
  63. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/vacuum/department_map.py +0 -0
  64. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/vacuum/safelist.py +0 -0
  65. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/vacuum/stream_map.py +0 -0
  66. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/vacuum/worker.py +0 -0
  67. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/workflow/__init__.py +0 -0
  68. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core/workflow/run_workflow.py +0 -0
  69. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core.egg-info/SOURCES.txt +0 -0
  70. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core.egg-info/dependency_links.txt +0 -0
  71. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core.egg-info/requires.txt +0 -0
  72. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/assemblyline_core.egg-info/top_level.txt +0 -0
  73. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/setup.cfg +0 -0
  74. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/setup.py +0 -0
  75. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_alerter.py +0 -0
  76. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_badlist_client.py +0 -0
  77. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_dispatcher.py +0 -0
  78. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_expiry.py +0 -0
  79. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_plumber.py +0 -0
  80. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_replay.py +0 -0
  81. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_safelist_client.py +0 -0
  82. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_scaler.py +0 -0
  83. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_scheduler.py +0 -0
  84. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_signature_client.py +0 -0
  85. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_simulation.py +0 -0
  86. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_vacuum.py +0 -0
  87. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_worker_ingest.py +0 -0
  88. {assemblyline-core-4.5.0.27 → assemblyline-core-4.5.0.28}/test/test_worker_submit.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: assemblyline-core
3
- Version: 4.5.0.27
3
+ Version: 4.5.0.28
4
4
  Summary: Assemblyline 4 - Core components
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-core/
6
6
  Author: CCCS Assemblyline development team
@@ -0,0 +1 @@
1
+ 4.5.0.28
@@ -26,7 +26,7 @@ from kubernetes.client import V1Deployment, V1DeploymentSpec, V1PodTemplateSpec,
26
26
  V1PersistentVolumeClaimSpec, V1NetworkPolicy, V1NetworkPolicySpec, V1NetworkPolicyEgressRule, V1NetworkPolicyPeer, \
27
27
  V1NetworkPolicyIngressRule, V1Secret, V1SecretVolumeSource, V1LocalObjectReference, V1Service, \
28
28
  V1ServiceSpec, V1ServicePort, V1PodSecurityContext, V1Probe, V1ExecAction, V1SecurityContext, \
29
- V1Affinity, V1NodeAffinity, V1NodeSelector, V1NodeSelectorTerm, V1NodeSelectorRequirement
29
+ V1Affinity, V1NodeAffinity, V1NodeSelector, V1NodeSelectorTerm, V1NodeSelectorRequirement, V1Toleration
30
30
  from kubernetes.client.rest import ApiException
31
31
  from assemblyline.odm.models.service import DependencyConfig, DockerConfig, PersistentVolume
32
32
 
@@ -241,7 +241,7 @@ def parse_cpu(string: str) -> float:
241
241
  class KubernetesController(ControllerInterface):
242
242
  def __init__(self, logger, namespace: str, prefix: str, priority: str, dependency_priority: str,
243
243
  cpu_reservation: float, linux_node_selector: Selector, labels=None, log_level="INFO", core_env={},
244
- default_service_account=None, cluster_pod_list=True):
244
+ default_service_account=None, cluster_pod_list=True, default_service_tolerations = []):
245
245
  # Try loading a kubernetes connection from either the fact that we are running
246
246
  # inside of a cluster, or have a config file that tells us how
247
247
  try:
@@ -285,6 +285,7 @@ class KubernetesController(ControllerInterface):
285
285
  self._service_limited_env: dict[str, dict[str, str]] = defaultdict(dict)
286
286
  self.default_service_account: Optional[str] = default_service_account
287
287
  self.cluster_pod_list = cluster_pod_list
288
+ self.default_service_tolerations = [V1Toleration(**toleration.as_primitives()) for toleration in default_service_tolerations]
288
289
 
289
290
  # A record of previously reported events so that we don't report the same message repeatedly, fill it with
290
291
  # existing messages so we don't have a huge dump of duplicates on restart
@@ -849,6 +850,7 @@ class KubernetesController(ControllerInterface):
849
850
  security_context=V1PodSecurityContext(fs_group=1000),
850
851
  service_account_name=service_account,
851
852
  affinity=selector_to_node_affinity(self.linux_node_selector),
853
+ tolerations=self.default_service_tolerations
852
854
  )
853
855
 
854
856
  if use_pull_secret:
@@ -285,11 +285,13 @@ class ScalerServer(ThreadedCoreBase):
285
285
  'privilege': 'service'
286
286
  }
287
287
 
288
+ service_defaults_config = self.config.core.scaler.service_defaults
289
+
288
290
  # If Scaler has envs that set service-server env, then that should override configured values
289
291
  if SERVICE_API_HOST:
290
- self.config.core.scaler.service_defaults.environment = \
292
+ service_defaults_config.environment = \
291
293
  [EnvironmentVariable(dict(name="SERVICE_API_HOST", value=SERVICE_API_HOST))] + \
292
- [env for env in self.config.core.scaler.service_defaults.environment if env.name != "SERVICE_API_HOST"]
294
+ [env for env in service_defaults_config.environment if env.name != "SERVICE_API_HOST"]
293
295
 
294
296
  if self.config.core.scaler.additional_labels:
295
297
  labels.update({k: v for k, v in (_l.split("=") for _l in self.config.core.scaler.additional_labels)})
@@ -304,7 +306,9 @@ class ScalerServer(ThreadedCoreBase):
304
306
  log_level=self.config.logging.log_level,
305
307
  core_env=core_env,
306
308
  cluster_pod_list=self.config.core.scaler.cluster_pod_list,
307
- default_service_account=self.config.services.service_account)
309
+ default_service_account=self.config.services.service_account,
310
+ default_service_tolerations=service_defaults_config.tolerations
311
+ )
308
312
 
309
313
  # Add global configuration for privileged services
310
314
  self.controller.add_config_mount(KUBERNETES_AL_CONFIG, config_map=KUBERNETES_AL_CONFIG, key="config",
@@ -313,7 +317,7 @@ class ScalerServer(ThreadedCoreBase):
313
317
  # If we're passed an override for server-server and it's defining an HTTPS connection, then add a global
314
318
  # mount for the Root CA that needs to be mounted
315
319
  if INTERNAL_ENCRYPT:
316
- self.config.core.scaler.service_defaults.mounts.append(Mount(dict(
320
+ service_defaults_config.mounts.append(Mount(dict(
317
321
  name="root-ca",
318
322
  path="/etc/assemblyline/ssl/al_root-ca.crt",
319
323
  resource_type="secret",
@@ -322,7 +326,7 @@ class ScalerServer(ThreadedCoreBase):
322
326
  )))
323
327
 
324
328
  # Add default mounts for (non-)privileged services
325
- for mount in self.config.core.scaler.service_defaults.mounts:
329
+ for mount in service_defaults_config.mounts:
326
330
  # Deprecated configuration for mounting ConfigMap
327
331
  # TODO: Deprecate code on next major change
328
332
  if mount.config_map:
@@ -365,7 +369,7 @@ class ScalerServer(ThreadedCoreBase):
365
369
  if CLASSIFICATION_HOST_PATH:
366
370
  self.controller.global_mounts.append((CLASSIFICATION_HOST_PATH, '/etc/assemblyline/classification.yml'))
367
371
 
368
- for mount in self.config.core.scaler.service_defaults.mounts:
372
+ for mount in service_defaults_config.mounts:
369
373
  # Mounts are all storage-based since there's no equivalent to ConfigMaps in Docker
370
374
  if mount.privileged_only:
371
375
  self.controller.core_mounts.append((mount.name, mount.path))
@@ -91,7 +91,7 @@ class TaskingClient:
91
91
  self.event_listener.stop()
92
92
 
93
93
  @elasticapm.capture_span(span_type='tasking_client')
94
- def upload_file(self, file_path, classification, ttl, is_section_image, expected_sha256=None):
94
+ def upload_file(self, file_path, classification, ttl, is_section_image, is_supplementary, expected_sha256=None):
95
95
  # Identify the file info of the uploaded file
96
96
  file_info = self.identify.fileinfo(file_path)
97
97
 
@@ -105,8 +105,12 @@ class TaskingClient:
105
105
  file_info['expiry_ts'] = None
106
106
 
107
107
  # Update the datastore with the uploaded file
108
- self.datastore.save_or_freshen_file(file_info['sha256'], file_info, file_info['expiry_ts'],
109
- file_info['classification'], is_section_image=is_section_image)
108
+ self.datastore.save_or_freshen_file(
109
+ file_info['sha256'],
110
+ file_info, file_info['expiry_ts'],
111
+ file_info['classification'],
112
+ is_section_image=is_section_image,
113
+ is_supplementary=is_supplementary)
110
114
 
111
115
  # Upload file to the filestore (upload already checks if the file exists)
112
116
  self.filestore.upload(file_path, file_info['sha256'])
@@ -349,7 +353,8 @@ class TaskingClient:
349
353
  file_info['classification'] = item['classification']
350
354
  self.datastore.save_or_freshen_file(item['sha256'], file_info,
351
355
  file_info['expiry_ts'], file_info['classification'],
352
- is_section_image=item.get('is_section_image', False))
356
+ is_section_image=item.get('is_section_image', False),
357
+ is_supplementary=item.get('is_supplementary', False))
353
358
  return False
354
359
 
355
360
  if task.ttl:
@@ -15,7 +15,7 @@ import docker
15
15
 
16
16
  from kubernetes.client import V1Job, V1ObjectMeta, V1JobSpec, V1PodTemplateSpec, V1PodSpec, V1Volume, \
17
17
  V1VolumeMount, V1EnvVar, V1Container, V1ResourceRequirements, \
18
- V1ConfigMapVolumeSource, V1Secret, V1SecretVolumeSource, V1LocalObjectReference
18
+ V1ConfigMapVolumeSource, V1Secret, V1SecretVolumeSource, V1LocalObjectReference, V1Toleration
19
19
  from kubernetes import client, config
20
20
  from kubernetes.client.rest import ApiException
21
21
 
@@ -148,7 +148,7 @@ class DockerUpdateInterface:
148
148
 
149
149
  class KubernetesUpdateInterface:
150
150
  def __init__(self, logger, prefix, namespace, priority_class, extra_labels, linux_node_selector: Selector,
151
- log_level="INFO", default_service_account=None):
151
+ log_level="INFO", default_service_account=None, default_service_tolerations=[]):
152
152
  # Try loading a kubernetes connection from either the fact that we are running
153
153
  # inside of a cluster, or we have a configuration in the normal location
154
154
  try:
@@ -181,6 +181,8 @@ class KubernetesUpdateInterface:
181
181
  self.default_service_account = default_service_account
182
182
  self.secret_env = []
183
183
  self.linux_node_selector = linux_node_selector
184
+ self.default_service_tolerations = [V1Toleration(**toleration.as_primitives()) for toleration in default_service_tolerations]
185
+
184
186
 
185
187
  # Get the deployment of this process. Use that information to fill out the secret info
186
188
  deployment = self.apps_api.read_namespaced_deployment(name='updater', namespace=self.namespace)
@@ -465,7 +467,8 @@ class ServiceUpdater(ThreadedCoreBase):
465
467
  extra_labels=extra_labels,
466
468
  log_level=self.config.logging.log_level,
467
469
  default_service_account=self.config.services.service_account,
468
- linux_node_selector=self.config.core.scaler.linux_node_selector)
470
+ linux_node_selector=self.config.core.scaler.linux_node_selector,
471
+ default_service_tolerations=self.config.core.scaler.service_defaults.tolerations)
469
472
  # Add all additional mounts to privileged services
470
473
  self.mounts = self.config.core.scaler.service_defaults.mounts
471
474
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: assemblyline-core
3
- Version: 4.5.0.27
3
+ Version: 4.5.0.28
4
4
  Summary: Assemblyline 4 - Core components
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-core/
6
6
  Author: CCCS Assemblyline development team
@@ -1 +0,0 @@
1
- 4.5.0.27