1
1
#! /bin/bash
2
2
3
- parse_yaml () {
4
- local prefix=$2
5
- local s=' [[:space:]]*' w=' [a-zA-Z0-9_]*' fs=$( echo @| tr @ ' \034' )
6
- sed -ne " s|^\($s \)\($w \)$s :$s \" \(.*\)\" $s \$ |\1$fs \2$fs \3|p" \
7
- -e " s|^\($s \)\($w \)$s :$s \(.*\)$s \$ |\1$fs \2$fs \3|p" $1 |
8
- awk -F$fs ' {
9
- indent = length($1)/2;
10
- vname[indent] = $2;
11
- for (i in vname) {if (i > indent) {delete vname[i]}}
12
- if (length($3) > 0) {
13
- vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
14
- printf("%s%s%s=%s\n", "' $prefix ' ",vn, $2, $3);
15
- }
16
- }'
17
- }
18
-
19
-
20
- objects () {
21
- parse_yaml $1 | awk -F" =" ' /metadata_name=/ && i==1 {print (NF>1)? $NF : " "; i=0} /kind=/{printf (NF>1)? $NF : "";printf " "; i=1}'
22
- }
23
-
24
-
25
3
fatal () {
26
4
echo " ERROR: $1 "
27
5
exit 1
@@ -98,25 +76,29 @@ DEPLOYMENT_FILE=${deployment_file}-$(date '+%y-%m-%d_%H-%M-%S').yml
98
76
$( dirname $0 ) /template.sh " $deployment_file " > " $DEPLOYMENT_FILE " || fatal " Failed to apply deployment template on $deployment_file "
99
77
100
78
101
- echo " ---> Kubernetes objects to deploy in $deployment_file :"
79
+ echo -e " \n\n ---> Kubernetes objects to deploy in $deployment_file :"
102
80
KUBECTL_OBJECTS=/tmp/deployment.objects
103
- kubectl convert -f " $DEPLOYMENT_FILE " --local=true --no-headers=true -o=custom-columns=" KIND:{.kind},NAME:{.metadata.name}" > >( tee $KUBECTL_OBJECTS ) 2> ${KUBECTL_OBJECTS} .errors
81
+ kubectl apply \
82
+ --context " ${KUBECONTEXT} " \
83
+ --namespace " ${KUBERNETES_NAMESPACE} " \
84
+ --dry-run \
85
+ -f " $DEPLOYMENT_FILE " \
86
+ -o go-template \
87
+ --template ' {{ if .items }}{{ range .items }}{{ printf "%-30s%-50s\n" .kind .metadata.name}}{{end}}{{else}}{{ printf "%-30s%-50s\n" .kind .metadata.name}}{{end}}' \
88
+ > >( tee $KUBECTL_OBJECTS ) 2> ${KUBECTL_OBJECTS} .errors
89
+
104
90
if [ $? != 0 ]; then
105
- cat ${KUBECTL_OBJECTS} .errors
106
- echo " Failed to parse $deployment_file with kubectl... "
107
- echo " Using alternative parsing method... "
108
- truncate -s 0 $KUBECTL_OBJECTS
109
- objects $DEPLOYMENT_FILE | tee $KUBECTL_OBJECTS
91
+ echo -e " \nERROR Failed to parse ${deployment_file} "
92
+ cat ${KUBECTL_OBJECTS} .errors
110
93
fi
111
94
112
95
DEPLOYMENT_NAME=$( awk ' /^Deployment /{a=$2}END{print a}' $KUBECTL_OBJECTS )
113
96
114
- echo " ---> Submitting a deployment to Kubernetes by
97
+ echo -e " \n\n ---> Submitting a deployment to Kubernetes by
115
98
kubectl --context " ${KUBECONTEXT} " --namespace " ${KUBERNETES_NAMESPACE} " $KUBECTL_ACTION "
116
99
kubectl --context " ${KUBECONTEXT} " --namespace " ${KUBERNETES_NAMESPACE} " $KUBECTL_ACTION -f " $DEPLOYMENT_FILE " || fatal " Deployment submitting Failed"
117
100
118
101
if [ -n " $DEPLOYMENT_NAME " ]; then
119
102
echo " ---> Waiting for a successful deployment/${DEPLOYMENT_NAME} status to namespace ${KUBERNETES_NAMESPACE} ..."
120
103
timeout -s SIGTERM $KUBERNETES_DEPLOYMENT_TIMEOUT kubectl --context " ${KUBECONTEXT} " --namespace " ${KUBERNETES_NAMESPACE} " rollout status deployment/" ${DEPLOYMENT_NAME} " || fatal " Deployment Failed"
121
- fi
122
-
104
+ fi
0 commit comments