mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-02 16:49:48 +01:00
6569016d35
Migrate gc to task manager
184 lines
9.0 KiB
Python
184 lines
9.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import time
|
|
import re
|
|
import base
|
|
import swagger_client
|
|
from swagger_client.rest import ApiException
|
|
|
|
class System(base.Base):
|
|
def get_gc_history(self, expect_status_code = 200, expect_response_body = None, **kwargs):
|
|
client = self._get_client(**kwargs)
|
|
|
|
try:
|
|
data, status_code, _ = client.system_gc_get_with_http_info()
|
|
except ApiException as e:
|
|
if e.status == expect_status_code:
|
|
if expect_response_body is not None and e.body.strip() != expect_response_body.strip():
|
|
raise Exception(r"Get configuration response body is not as expected {} actual status is {}.".format(expect_response_body.strip(), e.body.strip()))
|
|
else:
|
|
return e.reason, e.body
|
|
else:
|
|
raise Exception(r"Get configuration result is not as expected {} actual status is {}.".format(expect_status_code, e.status))
|
|
base._assert_status_code(expect_status_code, status_code)
|
|
return data
|
|
|
|
def get_gc_status_by_id(self, job_id, expect_status_code = 200, expect_response_body = None, **kwargs):
|
|
client = self._get_client(**kwargs)
|
|
|
|
try:
|
|
data, status_code, _ = client.system_gc_id_get_with_http_info(job_id)
|
|
except ApiException as e:
|
|
if e.status == expect_status_code:
|
|
if expect_response_body is not None and e.body.strip() != expect_response_body.strip():
|
|
raise Exception(r"Get configuration response body is not as expected {} actual status is {}.".format(expect_response_body.strip(), e.body.strip()))
|
|
else:
|
|
return e.reason, e.body
|
|
else:
|
|
raise Exception(r"Get configuration result is not as expected {} actual status is {}.".format(expect_status_code, e.status))
|
|
base._assert_status_code(expect_status_code, status_code)
|
|
return data
|
|
|
|
def get_gc_log_by_id(self, job_id, expect_status_code = 200, expect_response_body = None, **kwargs):
|
|
client = self._get_client(**kwargs)
|
|
|
|
try:
|
|
data, status_code, _ = client.system_gc_id_log_get_with_http_info(job_id)
|
|
except ApiException as e:
|
|
if e.status == expect_status_code:
|
|
if expect_response_body is not None and e.body.strip() != expect_response_body.strip():
|
|
raise Exception(r"Get configuration response body is not as expected {} actual status is {}.".format(expect_response_body.strip(), e.body.strip()))
|
|
else:
|
|
return e.reason, e.body
|
|
else:
|
|
raise Exception(r"Get configuration result is not as expected {} actual status is {}.".format(expect_status_code, e.status))
|
|
base._assert_status_code(expect_status_code, status_code)
|
|
return data
|
|
|
|
def get_gc_schedule(self, expect_status_code = 200, expect_response_body = None, **kwargs):
|
|
client = self._get_client(**kwargs)
|
|
|
|
try:
|
|
data, status_code, _ = client.system_gc_schedule_get_with_http_info()
|
|
except ApiException as e:
|
|
if e.status == expect_status_code:
|
|
if expect_response_body is not None and e.body.strip() != expect_response_body.strip():
|
|
raise Exception(r"Get configuration response body is not as expected {} actual status is {}.".format(expect_response_body.strip(), e.body.strip()))
|
|
else:
|
|
return e.reason, e.body
|
|
else:
|
|
raise Exception(r"Get configuration result is not as expected {} actual status is {}.".format(expect_status_code, e.status))
|
|
base._assert_status_code(expect_status_code, status_code)
|
|
return data
|
|
|
|
def set_gc_schedule(self, schedule_type = 'None', cron = None, expect_status_code = 200, expect_response_body = None, **kwargs):
|
|
client = self._get_client(**kwargs)
|
|
gc_schedule = swagger_client.AdminJobSchedule()
|
|
gc_schedule.type = schedule_type
|
|
if cron is not None:
|
|
gc_schedule.cron = cron
|
|
try:
|
|
data, status_code, _ = client.system_gc_schedule_put_with_http_info(gc_schedule)
|
|
except ApiException as e:
|
|
if e.status == expect_status_code:
|
|
if expect_response_body is not None and e.body.strip() != expect_response_body.strip():
|
|
raise Exception(r"Get configuration response body is not as expected {} actual status is {}.".format(expect_response_body.strip(), e.body.strip()))
|
|
else:
|
|
return e.reason, e.body
|
|
else:
|
|
raise Exception(r"Get configuration result is not as expected {} actual status is {}.".format(expect_status_code, e.status))
|
|
base._assert_status_code(expect_status_code, status_code)
|
|
return data
|
|
|
|
def create_gc_schedule(self, schedule_type, is_delete_untagged, cron = None, expect_status_code = 201, expect_response_body = None, **kwargs):
|
|
client = self._get_client(**kwargs)
|
|
|
|
gc_parameters = {'delete_untagged':is_delete_untagged}
|
|
|
|
gc_schedule = swagger_client.AdminJobScheduleObj()
|
|
gc_schedule.type = schedule_type
|
|
if cron is not None:
|
|
gc_schedule.cron = cron
|
|
|
|
gc_job = swagger_client.AdminJobSchedule()
|
|
gc_job.schedule = gc_schedule
|
|
gc_job.parameters = gc_parameters
|
|
|
|
try:
|
|
_, status_code, header = client.system_gc_schedule_post_with_http_info(gc_job)
|
|
except ApiException as e:
|
|
if e.status == expect_status_code:
|
|
if expect_response_body is not None and e.body.strip() != expect_response_body.strip():
|
|
raise Exception(r"Create GC schedule response body is not as expected {} actual status is {}.".format(expect_response_body.strip(), e.body.strip()))
|
|
else:
|
|
return e.reason, e.body
|
|
else:
|
|
raise Exception(r"Create GC schedule result is not as expected {} actual status is {}.".format(expect_status_code, e.status))
|
|
base._assert_status_code(expect_status_code, status_code)
|
|
return base._get_id_from_header(header)
|
|
|
|
def wait_until_scans_all_finish(self, **kwargs):
|
|
client = self._get_client(**kwargs)
|
|
timeout_count = 50
|
|
scan_status=""
|
|
while True:
|
|
time.sleep(5)
|
|
timeout_count = timeout_count - 1
|
|
if (timeout_count == 0):
|
|
break
|
|
stats = client.scans_all_metrics_get()
|
|
print("Scan all status:", stats)
|
|
if stats.ongoing is False:
|
|
return
|
|
raise Exception("Error: Scan all job is timeout.")
|
|
|
|
def create_scan_all_schedule(self, schedule_type, cron = None, expect_status_code = 201, expect_response_body = None, **kwargs):
|
|
client = self._get_client(**kwargs)
|
|
scanschedule = swagger_client.AdminJobScheduleObj()
|
|
scanschedule.type = schedule_type
|
|
if cron is not None:
|
|
scanschedule.cron = cron
|
|
|
|
scan_all_schedule = swagger_client.AdminJobSchedule(scanschedule)
|
|
try:
|
|
_, status_code, header = client.system_scan_all_schedule_post_with_http_info(scan_all_schedule)
|
|
except ApiException as e:
|
|
if e.status == expect_status_code:
|
|
if expect_response_body is not None and e.body.strip() != expect_response_body.strip():
|
|
raise Exception(r"Create Scan All schedule response body is not as expected {} actual status is {}.".format(expect_response_body.strip(), e.body.strip()))
|
|
else:
|
|
return e.reason, e.body
|
|
else:
|
|
raise Exception(r"Create Scan All schedule result is not as expected {} actual status is {}.".format(expect_status_code, e.status))
|
|
base._assert_status_code(expect_status_code, status_code)
|
|
return base._get_id_from_header(header)
|
|
|
|
def scan_now(self, **kwargs):
|
|
scan_all_id = self.create_scan_all_schedule('Manual', **kwargs)
|
|
return scan_all_id
|
|
|
|
def set_cve_allowlist(self, expires_at=None, expected_status_code=200, *cve_ids, **kwargs):
|
|
client = self._get_client(**kwargs)
|
|
cve_list = [swagger_client.CVEAllowlistItem(cve_id=c) for c in cve_ids]
|
|
allowlist = swagger_client.CVEAllowlist(expires_at=expires_at, items=cve_list)
|
|
try:
|
|
r = client.system_cve_allowlist_put_with_http_info(allowlist=allowlist, _preload_content=False)
|
|
except Exception as e:
|
|
base._assert_status_code(expected_status_code, e.status)
|
|
else:
|
|
base._assert_status_code(expected_status_code, r.status)
|
|
|
|
def get_cve_allowlist(self, **kwargs):
|
|
client = self._get_client(**kwargs)
|
|
return client.system_cve_allowlist_get()
|
|
|
|
def get_project_quota(self, reference, reference_id, **kwargs):
|
|
params={}
|
|
params['reference'] = reference
|
|
params['reference_id'] = reference_id
|
|
|
|
client = self._get_client(**kwargs)
|
|
data, status_code, _ = client.quotas_get_with_http_info(**params)
|
|
base._assert_status_code(200, status_code)
|
|
return data
|