some improvements
This commit is contained in:
parent
afc6e3a412
commit
bae55a54f4
5 changed files with 4 additions and 2 deletions
188
testapp/certman-istio-operator/app/hooks/common/functions.sh
Normal file
188
testapp/certman-istio-operator/app/hooks/common/functions.sh
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
config() {
|
||||
cat <<EOF
|
||||
{
|
||||
"onKubernetesEvent": [
|
||||
{
|
||||
"kind": "Ingress",
|
||||
"event": ["$1"],
|
||||
"selector": {
|
||||
"matchLabels": {
|
||||
"certmanager.k8s.io/acme-http01-solver": "true"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
}
|
||||
|
||||
mkmap() {
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: cio.giftfish.de/v1alpha1
|
||||
kind: RefMap
|
||||
metadata:
|
||||
name: "$1"
|
||||
spec:
|
||||
namespace: "$2"
|
||||
gateway:
|
||||
ref: "$3"
|
||||
action: "$4"
|
||||
virtualService:
|
||||
ref: "$5"
|
||||
action: "$6"
|
||||
EOF
|
||||
}
|
||||
getmap() { kubectl get refmap $1 -ojson; }
|
||||
delmap() { kubectl delete refmap $1; }
|
||||
|
||||
mkgw() {
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: Gateway
|
||||
metadata:
|
||||
name: "$1"
|
||||
namespace: "$2"
|
||||
spec:
|
||||
selector:
|
||||
istio: ingressgateway
|
||||
servers:
|
||||
- port:
|
||||
number: 80
|
||||
name: http
|
||||
protocol: HTTP
|
||||
hosts: ["$3"]
|
||||
EOF
|
||||
}
|
||||
delgw() { kubectl -n $2 delete gateway $1; }
|
||||
|
||||
mkvs() {
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: VirtualService
|
||||
metadata:
|
||||
name: "$1"
|
||||
namespace: "$2"
|
||||
spec:
|
||||
gateways: ["$1"]
|
||||
hosts: ["$3"]
|
||||
http:
|
||||
- match:
|
||||
- port: 80
|
||||
uri:
|
||||
exact: "$4"
|
||||
route:
|
||||
- destination:
|
||||
port:
|
||||
number: $6
|
||||
host: "$5.$2.svc.cluster.local"
|
||||
EOF
|
||||
}
|
||||
addvs() {
|
||||
insert=$(jq -c -M . <<EOF
|
||||
{
|
||||
"match": [
|
||||
{
|
||||
"port": 80,
|
||||
"uri": {
|
||||
"exact": "$3"
|
||||
}
|
||||
}
|
||||
],
|
||||
"route": [
|
||||
{
|
||||
"destination": {
|
||||
"host": "$4.$2.svc.cluster.local",
|
||||
"port": {
|
||||
"number": $5
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
)
|
||||
kubectl -n $2 get virtualservice $1 -ojson | jq ".spec.http |= [${insert}] + ." | kubectl -n $2 apply -f -
|
||||
}
|
||||
clearvs() { kubectl -n $2 get virtualservice $1 -ojson | jq -r '.spec.http |= .[1:]' | kubectl -n $2 apply -f -; }
|
||||
delvs() { kubectl -n $2 delete virtualservice $1; }
|
||||
|
||||
mkdr() {
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: DestinationRule
|
||||
metadata:
|
||||
name: $1
|
||||
namespace: $2
|
||||
spec:
|
||||
host: "$3.$2.svc.cluster.local"
|
||||
trafficPolicy:
|
||||
tls:
|
||||
mode: DISABLE
|
||||
EOF
|
||||
}
|
||||
deldr() { kubectl -n $2 delete destinationrule $1; }
|
||||
|
||||
delete() {
|
||||
tmp=$(mktemp)
|
||||
getmap $1 >${tmp} || return 0
|
||||
ns=$(jq -r '.spec.namespace' ${tmp})
|
||||
gwName=$(jq -r '.spec.gateway.ref' ${tmp})
|
||||
gwAction=$(jq -r '.spec.gateway.action' ${tmp})
|
||||
vsName=$(jq -r '.spec.virtualService.ref' ${tmp})
|
||||
vsAction=$(jq -r '.spec.virtualService.action' ${tmp})
|
||||
rm -f ${tmp}
|
||||
if [[ "${gwName}" != "" ]]; then
|
||||
case ${gwAction} in
|
||||
delete) delgw "${gwName}" "${ns}" ;;
|
||||
none|*) ;;
|
||||
esac
|
||||
fi
|
||||
if [[ "${vsName}" != "" ]]; then
|
||||
case ${vsAction} in
|
||||
delete) delvs "${vsName}" "${ns}" ;;
|
||||
clear) clearvs "${vsName}" "${ns}" ;;
|
||||
esac
|
||||
fi
|
||||
deldr "$1" "${ns}"
|
||||
delmap "$1"
|
||||
}
|
||||
|
||||
add() {
|
||||
res=$1
|
||||
ns=$2
|
||||
tmp=$(mktemp)
|
||||
kubectl -n ${ns} get ingress ${res} -ojson >${tmp} || return 0
|
||||
host=$(jq -r '.spec.rules[0].host' ${tmp})
|
||||
svcName=$(jq -r '.spec.rules[0].http.paths[0].backend.serviceName' ${tmp})
|
||||
svcPort=$(jq -r '.spec.rules[0].http.paths[0].backend.servicePort' ${tmp})
|
||||
path=$(jq -r '.spec.rules[0].http.paths[0].path' ${tmp})
|
||||
rm -f ${tmp}
|
||||
gwName=
|
||||
for gw in $(kubectl -n ${ns} get gateway -ojson | jq -r '.items[] | .metadata.name'); do
|
||||
contains=$(kubectl -n ${ns} get gateway ${gw} -ojson | jq -r ".spec.servers[0].hosts | contains([\"${host}\"])")
|
||||
[[ "${contains}" == "true" ]] && { gwName=${gw}; break; }
|
||||
done
|
||||
if [[ "${gwName}" == "" ]]; then
|
||||
gwName=${res}
|
||||
mkgw "${gwName}" "${ns}" "${host}"
|
||||
gwAction=delete
|
||||
else
|
||||
gwAction=none
|
||||
fi
|
||||
vsName=
|
||||
vsAction=
|
||||
for vs in $(kubectl -n ${ns} get virtualservice -ojson | jq -r '.items[] | .metadata.name'); do
|
||||
contains=$(kubectl -n ${ns} get virtualservice ${vs} -ojson | jq -r ".spec.hosts | contains([\"${host}\"])")
|
||||
[[ "${contains}" == "true" ]] && { vsName=${vs}; break; }
|
||||
done
|
||||
if [[ "${vsName}" == "" ]]; then
|
||||
vsName=${res}
|
||||
mkvs "${vsName}" "${ns}" "${host}" "${path}" "${svcName}" "${svcPort}"
|
||||
vsAction=delete
|
||||
else
|
||||
addvs "${vsName}" "${ns}" "${path}" "${svcName}" "${svcPort}"
|
||||
vsAction=clear
|
||||
fi
|
||||
mkdr "${res}" "${ns}" "${svcName}"
|
||||
mkmap "${res}" "${ns}" "${gwName}" "${gwAction}" "${vsName}" "${vsAction}"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue