Files
kubernetes-advanced/admission/app.py
Thomas Kruse 24b9717db2 init
2026-09-02 22:11:05 +02:00

69 lines
1.7 KiB
Python

from flask import Flask, request, jsonify
import json
import base64
app = Flask(__name__)
@app.route('/mutate', methods=['POST'])
def mutate():
request_info = request.get_json()
pod = request_info['request']['object']
uid = request_info['request']['uid']
patch = []
if 'metadata' in pod and 'labels' in pod['metadata']:
labels = pod['metadata']['labels']
if 'env' not in labels:
patch.append({
"op": "add",
"path": "/metadata/labels/env",
"value": "training"
})
else:
patch.append({
"op": "add",
"path": "/metadata/labels",
"value": {"env": "training"}
})
admission_response = {
"apiVersion": "admission.k8s.io/v1",
"kind": "AdmissionReview",
"response": {
"uid": uid,
"allowed": True,
"patch": base64.b64encode(json.dumps(patch).encode()).decode(),
"patchType": "JSONPatch"
}
}
print (admission_response)
print (jsonify(admission_response))
return jsonify(admission_response)
@app.route('/validate', methods=['POST'])
def validate():
request_info = request.get_json()
pod = request_info['request']['object']
uid = request_info['request']['uid']
allowed = True
reason = ""
admission_response = {
"apiVersion": "admission.k8s.io/v1",
"kind": "AdmissionReview",
"response": {
"uid": uid,
"allowed": allowed
}
}
admission_response["response"]["status"] = {
"message": reason
}
return jsonify(admission_response)
if __name__ == '__main__':
context = ('tls.crt', 'tls.key')
print(context)
app.run(host='0.0.0.0', port=443, ssl_context=context)