config() { cat <${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} 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} vsAction=delete else vsAction=clear fi mkmap "${res}" "${ns}" "${gwName}" "${gwAction}" "${vsName}" "${vsAction}" [[ "${gwAction}" == "delete" ]] && mkgw "${gwName}" "${ns}" "${host}" [[ "${vsAction}" == "delete" ]] && mkvs "${vsName}" "${ns}" "${host}" "${path}" "${svcName}" "${svcPort}" \ || addvs "${vsName}" "${ns}" "${path}" "${svcName}" "${svcPort}" mkdr "${res}" "${ns}" "${svcName}" } 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" }