flask-python-helm/main.py
2020-12-16 11:55:14 +08:00

100 lines
3.4 KiB
Python

# encoding=utf-8
import os
import json
from app import app
from flask import Flask, flash, render_template, request, redirect, url_for
from flask_wtf import FlaskForm
from flask_bootstrap import Bootstrap
from wtforms import StringField, PasswordField, BooleanField
from wtforms.fields.html5 import DateField
from wtforms.validators import InputRequired, Email, Length
from routes import *
from logging import error, info
from subprocess import STDOUT, CalledProcessError, check_output
from itertools import islice
from kubernetes import client, config
app.register_blueprint(routes)
def get_namespaces():
config.load_incluster_config()
v1 = client.CoreV1Api()
ns = v1.list_namespace()
for namespace in ns.items:
print("%s" % (namespace.metadata.name))
return ns
def get_tiller_namespaces():
command = "/usr/local/bin/kubectl get deploy --all-namespaces -l name=tiller -ojson"
info(f"Running command: {command}")
try:
output = check_output(command.split(" "), stderr=STDOUT).decode("utf-8")
except CalledProcessError as err:
error(err.output.decode("utf-8"))
raise err
info(f"Output from command:\n{output}")
data = json.loads(output)
return data
def get_deployments(namespace):
command = "/usr/local/bin/kubectl -n " + namespace + " get deploy -ojson"
info(f"Running command: {command}")
try:
output = check_output(command.split(" "), stderr=STDOUT).decode("utf-8")
except CalledProcessError as err:
error(err.output.decode("utf-8"))
raise err
info(f"Output from command:\n{output}")
data = json.loads(output)
return data
def get_charts(ns):
command = "/usr/local/bin/helm -n " + ns + " list -ojson" #helm3
info(f"Running command: {command}")
try:
output = check_output(command.split(" "), stderr=STDOUT).decode("utf-8")
except CalledProcessError as err:
error(err.output.decode("utf-8"))
raise err
info(f"Output from command:\n{output}")
if output:
data = json.loads(output)
else:
data = 'EMPTY'
return data
def sortRevision(n):
return n['revision']
def get_chartdata(tiller_ns, namespace, chart, records):
command = "/usr/local/bin/helm --tiller-namespace " + tiller_ns + " history " + chart + " --max " + records + " --output json" #helm2
#command = "/usr/local/bin/helm -n " + namespace + " history " + chart + " -ojson" #helm3
info(f"Running command: {command}")
try:
output = check_output(command.split(" "), stderr=STDOUT).decode("utf-8")
except CalledProcessError as err:
error(err.output.decode("utf-8"))
raise err
info(f"Output from command:\n{output}")
data = json.loads(output)
data.sort(reverse=True, key=sortRevision)
for revision in data:
revision['chartName'] = chart
revision["namespace"] = namespace
revision["tiller_ns"] = tiller_ns
return data
def chartRollback(revision, chart, tiller_ns):
command = "/usr/local/bin/helm --tiller-namespace " + tiller_ns + " rollback " + chart + " " + revision # helm2
info(f"Running command: {command}")
try:
output = check_output(command.split(" "), stderr=STDOUT).decode("utf-8")
except CalledProcessError as err:
error(err.output.decode("utf-8"))
raise err
info(f"Output from command:\n{output}")
return output
if __name__ == "__main__":
app.run(host='0.0.0.0', port=3000, debug=True)