初始提交
This commit is contained in:
262
py-deploy/k8s
Normal file
262
py-deploy/k8s
Normal file
@@ -0,0 +1,262 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import json
|
||||
import jinja2
|
||||
import os
|
||||
import argparse
|
||||
import subprocess
|
||||
|
||||
|
||||
|
||||
def generate_global_configmap_yaml(json_data):
|
||||
template_global_configmap_dir='template/'
|
||||
global_configmap_dir='applications/'
|
||||
template_global_configmaps = ['nginx.yaml','backend.yaml']
|
||||
for global_configmap in template_global_configmaps:
|
||||
template_global_config_file=f'{template_global_configmap_dir}{global_configmap}'
|
||||
with open(template_global_config_file,'r') as file:
|
||||
template = jinja2.Template(file.read())
|
||||
rendered_yaml = template.render(
|
||||
namespace=json_data['namespace'],
|
||||
)
|
||||
global_configmap_file=f'{global_configmap_dir}{global_configmap}'
|
||||
with open(global_configmap_file, 'w') as global_file:
|
||||
global_file.write(rendered_yaml)
|
||||
|
||||
|
||||
|
||||
def generate_configmap_yaml(json_data, app):
|
||||
template_global_configmap_dir='template/'
|
||||
global_configmap_dir='applications/'
|
||||
template_app_configmap_file=f'{template_global_configmap_dir}{app}''/configmap.yaml'
|
||||
|
||||
if not os.path.exists(template_app_configmap_file):
|
||||
print(f"{template_app_configmap_file} does have configmap. exiting.")
|
||||
return
|
||||
|
||||
app_configmap_path=f'applications/{app}'
|
||||
if not os.path.isdir(app_configmap_path):
|
||||
os.makedirs(app_configmap_path)
|
||||
|
||||
app_configmap_file=f'{app_configmap_path}''/configmap.yaml'
|
||||
with open(template_app_configmap_file,'r') as template_app_configmap:
|
||||
template = jinja2.Template(template_app_configmap.read())
|
||||
superDomain = ["tmuyun-h5"]
|
||||
if app in superDomain:
|
||||
rendered_yaml = template.render(
|
||||
namespace=json_data['namespace'],
|
||||
superDomain=json_data['superDomain'],
|
||||
name=app
|
||||
)
|
||||
else:
|
||||
rendered_yaml = template.render(
|
||||
namespace=json_data['namespace'],
|
||||
domain=json_data['domain'],
|
||||
name=app
|
||||
)
|
||||
with open(app_configmap_file,'w') as app_configmap:
|
||||
app_configmap.write(rendered_yaml)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def generate_deployment_yaml(json_data, app):
|
||||
|
||||
app_template = 'template/%s/deployment.yaml' % app
|
||||
if os.path.exists(app_template):
|
||||
pass
|
||||
else:
|
||||
print("%s 文件不存在" %app_template)
|
||||
exit(1)
|
||||
|
||||
|
||||
with open(app_template, 'r') as file:
|
||||
template = jinja2.Template(file.read())
|
||||
|
||||
superApp=["tmuyun-h5"]
|
||||
superGateway=["tmy-gateway"]
|
||||
tssApp=["tss-api"]
|
||||
|
||||
for deployment in json_data['deployments']:
|
||||
|
||||
namespace=json_data['namespace'],
|
||||
imageSecret=json_data['imageSecret'],
|
||||
deployment_name=deployment['name'],
|
||||
image=deployment['image'],
|
||||
replicas=deployment['replicas'],
|
||||
limits_cpu=deployment['resources']['limits']['cpu'],
|
||||
limits_memory=deployment['resources']['limits']['memory'],
|
||||
requests_cpu=deployment['resources']['requests']['cpu'],
|
||||
requests_memory=deployment['resources']['requests']['memory'],
|
||||
domain=json_data['domain'],
|
||||
superDomain=json_data['superDomain'],
|
||||
ingressClassName=json_data['ingressClassName']
|
||||
|
||||
|
||||
if app != deployment['name']:
|
||||
continue
|
||||
else:
|
||||
if app in superApp:
|
||||
rendered_yaml = template.render(
|
||||
namespace=json_data['namespace'],
|
||||
imageSecret=json_data['imageSecret'],
|
||||
deployment_name=deployment['name'],
|
||||
image=deployment['image'],
|
||||
replicas=deployment['replicas'],
|
||||
limits_cpu=deployment['resources']['limits']['cpu'],
|
||||
limits_memory=deployment['resources']['limits']['memory'],
|
||||
requests_cpu=deployment['resources']['requests']['cpu'],
|
||||
requests_memory=deployment['resources']['requests']['memory'],
|
||||
superDomain=json_data['superDomain'],
|
||||
ingressClassName=json_data['ingressClassName']
|
||||
)
|
||||
elif app in superGateway:
|
||||
rendered_yaml = template.render(
|
||||
namespace=json_data['namespace'],
|
||||
imageSecret=json_data['imageSecret'],
|
||||
deployment_name=deployment['name'],
|
||||
image=deployment['image'],
|
||||
replicas=deployment['replicas'],
|
||||
limits_cpu=deployment['resources']['limits']['cpu'],
|
||||
limits_memory=deployment['resources']['limits']['memory'],
|
||||
requests_cpu=deployment['resources']['requests']['cpu'],
|
||||
requests_memory=deployment['resources']['requests']['memory'],
|
||||
superDomain=json_data['superDomain'],
|
||||
domain=json_data['domain'],
|
||||
ingressClassName=json_data['ingressClassName']
|
||||
)
|
||||
elif app in tssApp:
|
||||
rendered_yaml = template.render(
|
||||
namespace=json_data['namespace'],
|
||||
imageSecret=json_data['imageSecret'],
|
||||
deployment_name=deployment['name'],
|
||||
image=deployment['image'],
|
||||
replicas=deployment['replicas'],
|
||||
limits_cpu=deployment['resources']['limits']['cpu'],
|
||||
limits_memory=deployment['resources']['limits']['memory'],
|
||||
requests_cpu=deployment['resources']['requests']['cpu'],
|
||||
requests_memory=deployment['resources']['requests']['memory'],
|
||||
tssDomain=json_data['tssDomain'],
|
||||
ingressClassName=json_data['ingressClassName']
|
||||
)
|
||||
else:
|
||||
rendered_yaml = template.render(
|
||||
namespace=json_data['namespace'],
|
||||
imageSecret=json_data['imageSecret'],
|
||||
deployment_name=deployment['name'],
|
||||
image=deployment['image'],
|
||||
replicas=deployment['replicas'],
|
||||
limits_cpu=deployment['resources']['limits']['cpu'],
|
||||
limits_memory=deployment['resources']['limits']['memory'],
|
||||
requests_cpu=deployment['resources']['requests']['cpu'],
|
||||
requests_memory=deployment['resources']['requests']['memory'],
|
||||
domain=json_data['domain'],
|
||||
ingressClassName=json_data['ingressClassName']
|
||||
)
|
||||
|
||||
app_dir = 'applications/%s' %app
|
||||
if not os.path.isdir(app_dir):
|
||||
os.makedirs(app_dir)
|
||||
print("%s 目录已创建" %app_dir)
|
||||
|
||||
app_deployment = app_dir+'/deployment.yaml'
|
||||
|
||||
with open(app_deployment, 'w') as file:
|
||||
file.write(rendered_yaml)
|
||||
print("Generated %s" %app_deployment)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def before_apply():
|
||||
front_configmap='applications/nginx.yaml'
|
||||
backend_config='applications/tmly.yaml'
|
||||
|
||||
cmd_front='kubectl apply -f %s' %front_configmap
|
||||
cmd_backend='kubectl apply -f %s' %backend_config
|
||||
subprocess.run(cmd_front,shell=True)
|
||||
subprocess.run(cmd_backend,shell=True)
|
||||
|
||||
|
||||
def delete_after():
|
||||
front_configmap='applications/nginx.yaml'
|
||||
backend_config='applications/tmly.yaml'
|
||||
|
||||
cmd_front='kubectl delete -f %s' %front_configmap
|
||||
cmd_backend='kubectl delete -f %s' %backend_config
|
||||
subprocess.run(cmd_front,shell=True)
|
||||
subprocess.run(cmd_backend,shell=True)
|
||||
|
||||
def apply(app):
|
||||
app_configmap='applications/%s/configmap.yaml'%app
|
||||
app_deployment='applications/%s/deployment.yaml' %app
|
||||
cmd_configmap='kubectl apply -f %s' %app_configmap
|
||||
cmd_deployment = 'kubectl apply -f %s' %app_deployment
|
||||
|
||||
if os.path.exists(app_configmap):
|
||||
subprocess.run(cmd_configmap,shell=True)
|
||||
|
||||
subprocess.run(cmd_deployment,shell=True)
|
||||
|
||||
|
||||
|
||||
def delete(app):
|
||||
app_configmap='applications/%s/configmap.yaml'%app
|
||||
app_deployment='applications/%s/deployment.yaml' %app
|
||||
cmd_configmap='kubectl delete -f %s' %app_configmap
|
||||
cmd_deployment = 'kubectl delete -f %s' %app_deployment
|
||||
|
||||
subprocess.run(cmd_deployment,shell=True)
|
||||
|
||||
if os.path.exists(app_configmap):
|
||||
subprocess.run(cmd_configmap,shell=True)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with open('global.json', 'r') as file:
|
||||
json_data = json.load(file)
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser(description="D")
|
||||
parser.add_argument("action",type=str,help="config,build,apply,delete")
|
||||
parser.add_argument("apps",type=str,help="app name or -")
|
||||
args = parser.parse_args()
|
||||
|
||||
action = args.action
|
||||
apps = args.apps
|
||||
_app = []
|
||||
|
||||
# generate_global_configmap_yaml(json_data)
|
||||
|
||||
if apps == '-':
|
||||
for app in json_data['deployments']:
|
||||
_app.append(app['name'])
|
||||
else:
|
||||
_app.append(apps)
|
||||
|
||||
# generate configmap
|
||||
if action == 'config':
|
||||
generate_global_configmap_yaml(json_data)
|
||||
for app in _app:
|
||||
generate_configmap_yaml(json_data,app)
|
||||
|
||||
# generate deployment
|
||||
if action == 'build':
|
||||
for app in _app:
|
||||
generate_deployment_yaml(json_data,app)
|
||||
|
||||
# apply configmap,deployment
|
||||
if action == 'apply':
|
||||
before_apply()
|
||||
for app in _app:
|
||||
apply(app)
|
||||
|
||||
# delete deployment,configmap
|
||||
if action == 'delete':
|
||||
for app in _app:
|
||||
delete(app)
|
||||
# delete_after()
|
||||
|
||||
Reference in New Issue
Block a user