move code to init
This commit is contained in:
parent
8964a9b34b
commit
2564e4256a
@ -0,0 +1,90 @@
|
|||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
class Chart(object):
|
||||||
|
def __setattr__(self, name, value):
|
||||||
|
if name == 'status':
|
||||||
|
value = value.casefold()
|
||||||
|
if 'update_available' in name:
|
||||||
|
value = True if value.casefold() == "true" else False
|
||||||
|
super(Chart, self).__setattr__(name, value)
|
||||||
|
|
||||||
|
def new_attr(self, attr):
|
||||||
|
setattr(self, attr, attr)
|
||||||
|
|
||||||
|
INSTALLED_CHARTS = []
|
||||||
|
CATALOG = "ALL"
|
||||||
|
SEMVER = "minor"
|
||||||
|
|
||||||
|
def parse_headers(charts: str):
|
||||||
|
for line in charts.split("\n"):
|
||||||
|
if line.startswith("+-"):
|
||||||
|
continue
|
||||||
|
if "name" in line.casefold():
|
||||||
|
return [col.strip() for col in line.casefold().strip().split("|") if col and col != ""]
|
||||||
|
|
||||||
|
def parse_charts(charts: str):
|
||||||
|
headers = parse_headers(charts)
|
||||||
|
table_data = charts.split("\n")[3:-2:] # Skip the header part of the table
|
||||||
|
for row in table_data:
|
||||||
|
row = [section.strip() for section in row.split("|") if section and section != ""]
|
||||||
|
chart = Chart()
|
||||||
|
for item in zip(headers, row):
|
||||||
|
setattr(chart, item[0], item[1])
|
||||||
|
INSTALLED_CHARTS.append(chart)
|
||||||
|
|
||||||
|
def check_semver(current: str, latest: str):
|
||||||
|
split_current_semver = current.split(".", 3)
|
||||||
|
split_latest_semver = latest.split(".", 3)
|
||||||
|
if split_current_semver[0] != split_latest_semver[0]:
|
||||||
|
type="major"
|
||||||
|
if SEMVER == "major":
|
||||||
|
return True
|
||||||
|
if split_current_semver[1] != split_latest_semver[1]:
|
||||||
|
type="minor"
|
||||||
|
if SEMVER != "patch":
|
||||||
|
return True
|
||||||
|
if split_current_semver[2] != split_latest_semver[2]:
|
||||||
|
type="patch"
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def execute_upgrades():
|
||||||
|
if CATALOG == "ALL":
|
||||||
|
filtered = filter(lambda a: a.update_available and a.status == "active", INSTALLED_CHARTS)
|
||||||
|
else:
|
||||||
|
filtered = filter(lambda a: a.update_available and a.status == "active" and a.catalog == CATALOG, INSTALLED_CHARTS)
|
||||||
|
for chart in filtered:
|
||||||
|
pre_update_ver = chart.human_version
|
||||||
|
post_update_ver = chart.human_latest_version
|
||||||
|
split_current_version = chart.human_version.split("_", 1)
|
||||||
|
current_version = split_current_version[1]
|
||||||
|
split_latest = chart.human_latest_version.split("_", 1)
|
||||||
|
latest_version = split_latest[1]
|
||||||
|
if check_semver(current_version, latest_version):
|
||||||
|
pre_update_ver = chart.human_version
|
||||||
|
result = subprocess.run(['cli', '-c', f'app chart_release upgrade release_name={chart.name}'], capture_output=True)
|
||||||
|
post_update_ver = chart.human_latest_version
|
||||||
|
if "Upgrade complete" not in result.stdout.decode('utf-8'):
|
||||||
|
print(f"{chart.name} failed to upgrade. \n{result.stdout.decode('utf-8')}")
|
||||||
|
else:
|
||||||
|
print(f"{chart.name} upgraded ({pre_update_ver} --> {post_update_ver})")
|
||||||
|
|
||||||
|
def fetch_charts():
|
||||||
|
rawcharts = subprocess.run(["cli", "-c", "app chart_release query"], stdout=subprocess.PIPE)
|
||||||
|
charts = rawcharts.stdout.decode('utf-8')
|
||||||
|
return(charts)
|
||||||
|
|
||||||
|
def get_args():
|
||||||
|
if len(sys.argv) == 3:
|
||||||
|
SEMVER = sys.argv[2] or "minor"
|
||||||
|
if len(sys.argv) == 2:
|
||||||
|
CATALOG = sys.argv[1] or "ALL"
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
get_args()
|
||||||
|
charts = fetch_charts()
|
||||||
|
parse_charts(charts)
|
||||||
|
execute_upgrades()
|
||||||
|
exit(0)
|
@ -1,90 +0,0 @@
|
|||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
|
|
||||||
class Chart(object):
|
|
||||||
def __setattr__(self, name, value):
|
|
||||||
if name == 'status':
|
|
||||||
value = value.casefold()
|
|
||||||
if 'update_available' in name:
|
|
||||||
value = True if value.casefold() == "true" else False
|
|
||||||
super(Chart, self).__setattr__(name, value)
|
|
||||||
|
|
||||||
def new_attr(self, attr):
|
|
||||||
setattr(self, attr, attr)
|
|
||||||
|
|
||||||
INSTALLED_CHARTS = []
|
|
||||||
CATALOG = "ALL"
|
|
||||||
SEMVER = "minor"
|
|
||||||
|
|
||||||
def parse_headers(charts: str):
|
|
||||||
for line in charts.split("\n"):
|
|
||||||
if line.startswith("+-"):
|
|
||||||
continue
|
|
||||||
if "name" in line.casefold():
|
|
||||||
return [col.strip() for col in line.casefold().strip().split("|") if col and col != ""]
|
|
||||||
|
|
||||||
def parse_charts(charts: str):
|
|
||||||
headers = parse_headers(charts)
|
|
||||||
table_data = charts.split("\n")[3:-2:] # Skip the header part of the table
|
|
||||||
for row in table_data:
|
|
||||||
row = [section.strip() for section in row.split("|") if section and section != ""]
|
|
||||||
chart = Chart()
|
|
||||||
for item in zip(headers, row):
|
|
||||||
setattr(chart, item[0], item[1])
|
|
||||||
INSTALLED_CHARTS.append(chart)
|
|
||||||
|
|
||||||
def check_semver(current: str, latest: str):
|
|
||||||
split_current_semver = current.split(".", 3)
|
|
||||||
split_latest_semver = latest.split(".", 3)
|
|
||||||
if split_current_semver[0] != split_latest_semver[0]:
|
|
||||||
type="major"
|
|
||||||
if SEMVER == "major":
|
|
||||||
return True
|
|
||||||
if split_current_semver[1] != split_latest_semver[1]:
|
|
||||||
type="minor"
|
|
||||||
if SEMVER != "patch":
|
|
||||||
return True
|
|
||||||
if split_current_semver[2] != split_latest_semver[2]:
|
|
||||||
type="patch"
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def execute_upgrades():
|
|
||||||
if CATALOG == "ALL":
|
|
||||||
filtered = filter(lambda a: a.update_available and a.status == "active", INSTALLED_CHARTS)
|
|
||||||
else:
|
|
||||||
filtered = filter(lambda a: a.update_available and a.status == "active" and a.catalog == CATALOG, INSTALLED_CHARTS)
|
|
||||||
for chart in filtered:
|
|
||||||
pre_update_ver = chart.human_version
|
|
||||||
post_update_ver = chart.human_latest_version
|
|
||||||
split_current_version = chart.human_version.split("_", 1)
|
|
||||||
current_version = split_current_version[1]
|
|
||||||
split_latest = chart.human_latest_version.split("_", 1)
|
|
||||||
latest_version = split_latest[1]
|
|
||||||
if check_semver(current_version, latest_version):
|
|
||||||
pre_update_ver = chart.human_version
|
|
||||||
result = subprocess.run(['cli', '-c', f'app chart_release upgrade release_name={chart.name}'], capture_output=True)
|
|
||||||
post_update_ver = chart.human_latest_version
|
|
||||||
if "Upgrade complete" not in result.stdout.decode('utf-8'):
|
|
||||||
print(f"{chart.name} failed to upgrade. \n{result.stdout.decode('utf-8')}")
|
|
||||||
else:
|
|
||||||
print(f"{chart.name} upgraded ({pre_update_ver} --> {post_update_ver})")
|
|
||||||
|
|
||||||
def fetch_charts():
|
|
||||||
rawcharts = subprocess.run(["cli", "-c", "app chart_release query"], stdout=subprocess.PIPE)
|
|
||||||
charts = rawcharts.stdout.decode('utf-8')
|
|
||||||
return(charts)
|
|
||||||
|
|
||||||
def get_args():
|
|
||||||
if len(sys.argv) == 3:
|
|
||||||
SEMVER = sys.argv[2] or "minor"
|
|
||||||
if len(sys.argv) == 2:
|
|
||||||
CATALOG = sys.argv[1] or "ALL"
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
get_args()
|
|
||||||
charts = fetch_charts()
|
|
||||||
parse_charts(charts)
|
|
||||||
execute_upgrades()
|
|
||||||
exit(0)
|
|
Loading…
Reference in New Issue
Block a user