assemblyline-core 4.5.0.19__tar.gz → 4.5.0.21__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.
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/PKG-INFO +1 -1
- assemblyline-core-4.5.0.21/assemblyline_core/VERSION +1 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/archiver/run_archiver.py +30 -6
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/controllers/docker_ctl.py +12 -6
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/scaler_server.py +19 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/updater/helper.py +17 -20
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/updater/run_updater.py +22 -3
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core.egg-info/PKG-INFO +1 -1
- assemblyline-core-4.5.0.19/assemblyline_core/VERSION +0 -1
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/LICENCE.md +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/README.md +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/alerter/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/alerter/processing.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/alerter/run_alerter.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/archiver/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/badlist_client.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/dispatching/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/dispatching/__main__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/dispatching/client.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/dispatching/dispatcher.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/dispatching/schedules.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/dispatching/timeout.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/expiry/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/expiry/run_expiry.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/ingester/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/ingester/__main__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/ingester/constants.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/ingester/ingester.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/metrics/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/metrics/es_metrics.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/metrics/helper.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/metrics/metrics_server.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/plumber/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/plumber/run_plumber.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/client.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/creator/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/creator/run.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/creator/run_worker.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/loader/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/loader/run.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/loader/run_worker.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/replay.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/safelist_client.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/collection.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/controllers/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/controllers/interface.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/run_scaler.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/server_base.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/signature_client.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/submission_client.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/tasking_client.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/updater/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/crawler.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/department_map.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/safelist.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/stream_map.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/worker.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/workflow/__init__.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/workflow/run_workflow.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core.egg-info/SOURCES.txt +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core.egg-info/dependency_links.txt +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core.egg-info/requires.txt +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core.egg-info/top_level.txt +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/setup.cfg +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/setup.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_alerter.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_badlist_client.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_dispatcher.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_expiry.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_plumber.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_replay.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_safelist_client.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_scaler.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_scheduler.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_signature_client.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_simulation.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_vacuum.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_worker_ingest.py +0 -0
- {assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/test/test_worker_submit.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
4.5.0.21
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/archiver/run_archiver.py
RENAMED
|
@@ -7,8 +7,8 @@ from assemblyline.common import forge
|
|
|
7
7
|
from assemblyline.common.archiving import ARCHIVE_QUEUE_NAME
|
|
8
8
|
from assemblyline.common.metrics import MetricsFactory
|
|
9
9
|
from assemblyline.datastore.collection import ESCollection, Index
|
|
10
|
+
from assemblyline.datastore.exceptions import VersionConflictException
|
|
10
11
|
from assemblyline.odm.messages.archive_heartbeat import Metrics
|
|
11
|
-
from assemblyline.odm.models.submission import Submission
|
|
12
12
|
from assemblyline.remote.datatypes import get_client
|
|
13
13
|
from assemblyline.remote.datatypes.queues.named import NamedQueue
|
|
14
14
|
|
|
@@ -62,7 +62,16 @@ class Archiver(ServerBase):
|
|
|
62
62
|
return
|
|
63
63
|
else:
|
|
64
64
|
try:
|
|
65
|
-
|
|
65
|
+
if len(message) == 3:
|
|
66
|
+
archive_type, type_id, delete_after = message
|
|
67
|
+
metadata = None
|
|
68
|
+
use_alternate_dtl = False
|
|
69
|
+
elif len(message) == 4:
|
|
70
|
+
archive_type, type_id, delete_after, metadata = message
|
|
71
|
+
use_alternate_dtl = False
|
|
72
|
+
else:
|
|
73
|
+
archive_type, type_id, delete_after, metadata, use_alternate_dtl = message
|
|
74
|
+
|
|
66
75
|
self.counter.increment('received')
|
|
67
76
|
except Exception:
|
|
68
77
|
self.log.error(f"Invalid message received: {message}")
|
|
@@ -76,11 +85,24 @@ class Archiver(ServerBase):
|
|
|
76
85
|
if archive_type == "submission":
|
|
77
86
|
self.counter.increment('submission')
|
|
78
87
|
# Load submission
|
|
79
|
-
|
|
88
|
+
while True:
|
|
89
|
+
try:
|
|
90
|
+
submission, version = self.datastore.submission.get_if_exists(type_id, version=True)
|
|
91
|
+
|
|
92
|
+
# If we have metadata passed in the message, we need to apply it before archiving the submission
|
|
93
|
+
if metadata and self.config.core.archiver.use_metadata:
|
|
94
|
+
submission.metadata.update({f"archive.{k}": v for k, v in metadata.items()})
|
|
95
|
+
self.datastore.submission.save(type_id, submission, version=version)
|
|
96
|
+
|
|
97
|
+
break
|
|
98
|
+
except VersionConflictException as vce:
|
|
99
|
+
self.log.info(f"Retrying saving metadata due to version conflict: {str(vce)}")
|
|
100
|
+
|
|
80
101
|
if not submission:
|
|
81
102
|
raise SubmissionNotFound(type_id)
|
|
82
103
|
|
|
83
|
-
self.datastore.submission.archive(type_id, delete_after=delete_after
|
|
104
|
+
self.datastore.submission.archive(type_id, delete_after=delete_after,
|
|
105
|
+
use_alternate_dtl=use_alternate_dtl)
|
|
84
106
|
if not delete_after:
|
|
85
107
|
self.datastore.submission.update(type_id, [(ESCollection.UPDATE_SET, 'archived', True)],
|
|
86
108
|
index_type=Index.HOT)
|
|
@@ -100,7 +122,8 @@ class Archiver(ServerBase):
|
|
|
100
122
|
infos = infos.union({'password' for x in tags if x['type'] == 'info.password'})
|
|
101
123
|
|
|
102
124
|
# Create the archive file
|
|
103
|
-
self.datastore.file.archive(sha256, delete_after=delete_after,
|
|
125
|
+
self.datastore.file.archive(sha256, delete_after=delete_after,
|
|
126
|
+
allow_missing=True, use_alternate_dtl=use_alternate_dtl)
|
|
104
127
|
|
|
105
128
|
# Auto-Labelling
|
|
106
129
|
operations = []
|
|
@@ -142,7 +165,8 @@ class Archiver(ServerBase):
|
|
|
142
165
|
for r in submission.results:
|
|
143
166
|
if not r.endswith(".e"):
|
|
144
167
|
self.counter.increment('result')
|
|
145
|
-
self.datastore.result.archive(r, delete_after=delete_after,
|
|
168
|
+
self.datastore.result.archive(r, delete_after=delete_after,
|
|
169
|
+
allow_missing=True, use_alternate_dtl=use_alternate_dtl)
|
|
146
170
|
|
|
147
171
|
# End of process alert transaction (success)
|
|
148
172
|
self.log.info(f"Successfully archived submission '{type_id}'.")
|
|
@@ -191,7 +191,7 @@ class DockerController(ControllerInterface):
|
|
|
191
191
|
# Define environment variables
|
|
192
192
|
env = [f'{_e.name}={_e.value}' for _e in cfg.environment]
|
|
193
193
|
env += [f'{name}={os.environ[name]}' for name in INHERITED_VARIABLES if name in os.environ]
|
|
194
|
-
env += [f'LOG_LEVEL={self.log_level}']
|
|
194
|
+
env += [f'LOG_LEVEL={self.log_level}', f'AL_SERVICE_NAME={service_name}']
|
|
195
195
|
env += [f'{_n}={_v}' for _n, _v in self._service_limited_env[service_name].items()]
|
|
196
196
|
if prof.privileged:
|
|
197
197
|
env.append('PRIVILEGED=true')
|
|
@@ -259,6 +259,15 @@ class DockerController(ControllerInterface):
|
|
|
259
259
|
env += [f'{name}={os.environ[name]}' for name in INHERITED_VARIABLES if name in os.environ]
|
|
260
260
|
env += [f'LOG_LEVEL={self.log_level}', f'AL_SERVICE_NAME={service_name}']
|
|
261
261
|
|
|
262
|
+
healthcheck = {
|
|
263
|
+
'test': ["CMD", "python3", "-m", "assemblyline_v4_service.healthz"],
|
|
264
|
+
'interval': SERVICE_LIVENESS_PERIOD,
|
|
265
|
+
'timeout': SERVICE_LIVENESS_TIMEOUT
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
if 'assemblyline' not in cfg.image:
|
|
269
|
+
healthcheck = None
|
|
270
|
+
|
|
262
271
|
container = self.client.containers.run(
|
|
263
272
|
image=cfg.image,
|
|
264
273
|
name=name,
|
|
@@ -274,12 +283,9 @@ class DockerController(ControllerInterface):
|
|
|
274
283
|
environment=env,
|
|
275
284
|
detach=True,
|
|
276
285
|
# ports=ports,
|
|
277
|
-
healthcheck=
|
|
278
|
-
'test': ["CMD", "python3", "-m", "assemblyline_v4_service.healthz"],
|
|
279
|
-
'interval': SERVICE_LIVENESS_PERIOD,
|
|
280
|
-
'timeout': SERVICE_LIVENESS_TIMEOUT
|
|
281
|
-
}
|
|
286
|
+
healthcheck=healthcheck
|
|
282
287
|
)
|
|
288
|
+
|
|
283
289
|
if core_container:
|
|
284
290
|
self._connect_to_network(container, self.core_network, aliases=[hostname])
|
|
285
291
|
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/scaler_server.py
RENAMED
|
@@ -448,11 +448,30 @@ class ScalerServer(ThreadedCoreBase):
|
|
|
448
448
|
self._sync_service(service)
|
|
449
449
|
|
|
450
450
|
def sync_services(self):
|
|
451
|
+
last_synced_profiles = None
|
|
451
452
|
while self.running:
|
|
452
453
|
with apm_span(self.apm_client, 'sync_services'):
|
|
453
454
|
self.log.info('Synchronizing service configuration')
|
|
454
455
|
with self.profiles_lock:
|
|
455
456
|
current_services = set(self.profiles.keys())
|
|
457
|
+
|
|
458
|
+
# Check to see if the service is progressing since it's last sync
|
|
459
|
+
if last_synced_profiles:
|
|
460
|
+
for service, profile in self.profiles.items():
|
|
461
|
+
# Assume there was no backlog initially if the service is new since last sync
|
|
462
|
+
last_synced_backlog = 0
|
|
463
|
+
if last_synced_profiles.get(service):
|
|
464
|
+
last_synced_backlog = last_synced_profiles[service].backlog
|
|
465
|
+
|
|
466
|
+
# Check to see if the backlog has increased and if the service has been running since
|
|
467
|
+
if profile.backlog and profile.backlog >= last_synced_backlog and \
|
|
468
|
+
profile.running_instances == 0 and profile.target_instances > 0:
|
|
469
|
+
# Restart the service in an attempt to resolve intermittent issues with container/pod
|
|
470
|
+
self.controller.restart(profile)
|
|
471
|
+
|
|
472
|
+
# Update the last synced profiles for next time
|
|
473
|
+
last_synced_profiles = self.profiles
|
|
474
|
+
|
|
456
475
|
discovered_services: list[str] = []
|
|
457
476
|
|
|
458
477
|
# Get all the service data
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/updater/helper.py
RENAMED
|
@@ -21,6 +21,17 @@ class ContainerRegistry():
|
|
|
21
21
|
def _get_proprietary_registry_tags(self, server, image_name, auth, verify, proxies=None, token_server=None):
|
|
22
22
|
raise NotImplementedError()
|
|
23
23
|
|
|
24
|
+
def _perform_request(self, url, headers, verify, proxies):
|
|
25
|
+
resp = None
|
|
26
|
+
try:
|
|
27
|
+
resp = requests.get(url, headers=headers, verify=verify, proxies=proxies)
|
|
28
|
+
except requests.exceptions.SSLError:
|
|
29
|
+
# Connect to insecure registry over HTTP (development only)
|
|
30
|
+
if not verify:
|
|
31
|
+
url = url.replace('https://','http://')
|
|
32
|
+
resp = requests.get(url, headers=headers, verify=verify, proxies=proxies)
|
|
33
|
+
return resp
|
|
34
|
+
|
|
24
35
|
|
|
25
36
|
class DockerRegistry(ContainerRegistry):
|
|
26
37
|
def _get_proprietary_registry_tags(self, server, image_name, auth, verify, proxies=None, token_server=None):
|
|
@@ -37,20 +48,13 @@ class DockerRegistry(ContainerRegistry):
|
|
|
37
48
|
# Assume the token server is the same as the container image registry host if not explicitly set
|
|
38
49
|
token_server = token_server if token_server else server
|
|
39
50
|
token_url = f"https://{token_server}/token?scope=repository:{image_name}:pull"
|
|
40
|
-
resp =
|
|
41
|
-
if resp.ok:
|
|
51
|
+
resp = self._perform_request(token_url, headers, verify, proxies)
|
|
52
|
+
if resp and resp.ok:
|
|
42
53
|
# Request to obtain token was successful, set Authorization header for registry API
|
|
43
54
|
token = resp.json().get('token')
|
|
44
55
|
headers["Authorization"] = f"Bearer {token}"
|
|
45
56
|
|
|
46
|
-
resp =
|
|
47
|
-
try:
|
|
48
|
-
resp = requests.get(url, headers=headers, verify=verify, proxies=proxies)
|
|
49
|
-
except requests.exceptions.SSLError:
|
|
50
|
-
# Connect to insecure registry over HTTP (development only)
|
|
51
|
-
if not verify:
|
|
52
|
-
url = f"http://{server}/v2/{image_name}/tags/list"
|
|
53
|
-
resp = requests.get(url, headers=headers, verify=verify, proxies=proxies)
|
|
57
|
+
resp = self._perform_request(url, headers, verify, proxies)
|
|
54
58
|
|
|
55
59
|
# Test for valid response
|
|
56
60
|
if resp and resp.ok:
|
|
@@ -76,20 +80,13 @@ class HarborRegistry(ContainerRegistry):
|
|
|
76
80
|
# Assume the token server is the same as the container image registry host if not explicitly set
|
|
77
81
|
token_server = token_server if token_server else server
|
|
78
82
|
token_url = f"https://{server}/service/token?scope=repository:{image_name}:pull"
|
|
79
|
-
resp =
|
|
80
|
-
if resp.ok:
|
|
83
|
+
resp = self._perform_request(token_url, headers, verify, proxies)
|
|
84
|
+
if resp and resp.ok:
|
|
81
85
|
# Request to obtain token was successful, set Authorization header for registry API
|
|
82
86
|
token = resp.json().get('token')
|
|
83
87
|
headers["Authorization"] = f"Bearer {token}"
|
|
84
|
-
resp = None
|
|
85
|
-
try:
|
|
86
|
-
resp = requests.get(url, headers=headers, verify=verify, proxies=proxies)
|
|
87
|
-
except requests.exceptions.SSLError:
|
|
88
|
-
# Connect to insecure registry over HTTP (development only)
|
|
89
|
-
if not verify:
|
|
90
|
-
url = f"http://{server}/api/v2.0/projects/{project_id}/repositories/{repo_id}/artifacts"
|
|
91
|
-
resp = requests.get(url, headers=headers, verify=verify, proxies=proxies)
|
|
92
88
|
|
|
89
|
+
resp = self._perform_request(url, headers, verify, proxies)
|
|
93
90
|
if resp and resp.ok:
|
|
94
91
|
return [tag['name'] for image in resp.json() if image['tags'] for tag in image['tags']]
|
|
95
92
|
return []
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/updater/run_updater.py
RENAMED
|
@@ -357,10 +357,24 @@ class KubernetesUpdateInterface:
|
|
|
357
357
|
|
|
358
358
|
if blocking:
|
|
359
359
|
try:
|
|
360
|
+
# Obtain the name of the pod that spawned from the Job
|
|
361
|
+
pod_name = self.api.list_namespaced_pod(namespace=self.namespace,
|
|
362
|
+
label_selector=",".join([f"{k}={v}"
|
|
363
|
+
for k, v in labels.items()]),
|
|
364
|
+
limit=1).items[0].metadata.name
|
|
360
365
|
while not (status.failed or status.succeeded):
|
|
361
366
|
time.sleep(3)
|
|
362
367
|
status = self.batch_api.read_namespaced_job(namespace=self.namespace, name=name,
|
|
363
368
|
_request_timeout=API_TIMEOUT).status
|
|
369
|
+
# Monitor container's waiting status state
|
|
370
|
+
pod_waiting_state = self.api.read_namespaced_pod(name=pod_name, namespace=self.namespace,
|
|
371
|
+
_request_timeout=API_TIMEOUT).status.container_statuses[0].state.waiting
|
|
372
|
+
# Check to see if we've encountered an issue before the container starts
|
|
373
|
+
if pod_waiting_state and pod_waiting_state.reason == "ImagePullBackOff":
|
|
374
|
+
# Delete job and raise exception
|
|
375
|
+
self.batch_api.delete_namespaced_job(name=name, namespace=self.namespace,
|
|
376
|
+
propagation_policy='Background', _request_timeout=API_TIMEOUT)
|
|
377
|
+
raise Exception(pod_waiting_state.message)
|
|
364
378
|
|
|
365
379
|
self.batch_api.delete_namespaced_job(name=name, namespace=self.namespace,
|
|
366
380
|
propagation_policy='Background', _request_timeout=API_TIMEOUT)
|
|
@@ -479,6 +493,13 @@ class ServiceUpdater(ThreadedCoreBase):
|
|
|
479
493
|
image_name, tag_name, auth = get_latest_tag_for_service(
|
|
480
494
|
service, self.config, self.log, prefix="[CI] ")
|
|
481
495
|
|
|
496
|
+
if not tag_name:
|
|
497
|
+
# Fallback to tag alias if we can't find a suitable versioned tag
|
|
498
|
+
self.log.warning("Unable to find a versioned tag for "
|
|
499
|
+
f"{self.config.services.preferred_update_channel} channel. "
|
|
500
|
+
f"Defaulting to '{tag}' tag...")
|
|
501
|
+
tag_name = tag
|
|
502
|
+
|
|
482
503
|
docker_config = dict(image=f"{image_name}:{tag_name}")
|
|
483
504
|
if auth:
|
|
484
505
|
docker_config.update(dict(registry_username=auth['username'],
|
|
@@ -507,12 +528,10 @@ class ServiceUpdater(ThreadedCoreBase):
|
|
|
507
528
|
blocking=True
|
|
508
529
|
)
|
|
509
530
|
|
|
510
|
-
service_key = f"{service_name}_{tag_name.replace('stable', '')}"
|
|
511
|
-
|
|
512
531
|
except Exception as e:
|
|
513
532
|
self.log.error(
|
|
514
533
|
f"[CI] Service {service_name} has failed to install. Install procedure cancelled... [{str(e)}]")
|
|
515
|
-
return
|
|
534
|
+
return f"{service_name}_{str(tag_name).replace('stable', '')}"
|
|
516
535
|
|
|
517
536
|
# Start up installs for services in parallel
|
|
518
537
|
install_threads = []
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
4.5.0.19
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/alerter/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/alerter/processing.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/alerter/run_alerter.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/archiver/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/badlist_client.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/dispatching/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/dispatching/__main__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/dispatching/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/dispatching/schedules.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/dispatching/timeout.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/expiry/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/expiry/run_expiry.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/ingester/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/ingester/__main__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/ingester/constants.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/ingester/ingester.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/metrics/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/metrics/es_metrics.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/metrics/helper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/plumber/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/plumber/run_plumber.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/creator/run.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/loader/run.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/replay/replay.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/safelist_client.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/collection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/scaler/run_scaler.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/signature_client.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/submission_client.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/tasking_client.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/updater/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/crawler.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/department_map.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/safelist.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/stream_map.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/vacuum/worker.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/workflow/__init__.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core/workflow/run_workflow.py
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core.egg-info/requires.txt
RENAMED
|
File without changes
|
{assemblyline-core-4.5.0.19 → assemblyline-core-4.5.0.21}/assemblyline_core.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|