Skip to content

Commit 693c633

Browse files
authored
Merge pull request #229 from christopher-mackle/patch-1
Create delete_oldest_version_at_version_limit.py
2 parents daa5b68 + 311787c commit 693c633

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
'''
2+
Created on January 23, 2023
3+
@author: christopher-mackle
4+
Delete the oldest project version (last created or last updated) when you've hit your max version limit
5+
'''
6+
7+
from datetime import datetime
8+
from blackduck.Client import Client
9+
import argparse
10+
11+
parser = argparse.ArgumentParser("Get a specific component and list its vulnerabilities")
12+
parser.add_argument("--url", dest='url', required=True, help="Hub server URL e.g. https://your.blackduck.url")
13+
parser.add_argument("--token", dest='token', required=True, help="Hub server access token")
14+
parser.add_argument("--project", dest='project_name', required=True, help="Name of project")
15+
parser.add_argument("--mode", dest='mode', required=False, default='createdAt', help="Use createdAt or updatedAt")
16+
parser.add_argument("--count", dest='count_total', required=False, default=9, help="Max versions - 1")
17+
args = parser.parse_args()
18+
19+
TOKEN = args.token
20+
BASE_URL = args.url
21+
PROJECT_NAME = args.project_name
22+
23+
try:
24+
bd = Client(
25+
token=TOKEN,
26+
base_url=BASE_URL,
27+
verify=False # TLS certificate verification
28+
)
29+
except:
30+
print("Could not authenticate to your Black Duck server with the given URL and token.")
31+
32+
def deleteVersion(mode):
33+
count = 0
34+
time_format = '%Y-%m-%dT%H:%M:%S.%fZ'
35+
for version in bd.get_resource('versions', project):
36+
count = count + 1
37+
if count == 1:
38+
oldest_version = version
39+
else:
40+
oldestVersionDate = datetime.strptime(oldest_version[mode], time_format)
41+
currentVersionDate = datetime.strptime(version[mode], time_format)
42+
if currentVersionDate < oldestVersionDate:
43+
oldest_version = version
44+
if count > int(args.count_total):
45+
print('Too many project versions. Deleting oldest project version before scanning.')
46+
projectVersionToDelete = oldest_version['_meta']['href']
47+
r = bd.session.delete(projectVersionToDelete)
48+
r.raise_for_status()
49+
print("Project version " + oldest_version['versionName'] + ' has been deleted.')
50+
51+
if __name__ == '__main__':
52+
found = False
53+
for project in bd.get_resource('projects'):
54+
if project['name'] == PROJECT_NAME:
55+
found = True
56+
if args.mode == 'createdAt':
57+
deleteVersion(args.mode)
58+
elif args.mode == 'updatedAt':
59+
deleteVersion('settingUpdatedAt')
60+
else:
61+
print("Invalid mode: " + args.mode)
62+
print("Valid modes: createdAt, updatedAt")
63+
if not found:
64+
print("Project " + PROJECT_NAME + " not found.")

0 commit comments

Comments
 (0)