@@ -70,6 +70,7 @@ extract_image_info() {
7070# $3 - Ports (JSON array)
7171# $4 - Environment variables (JSON object)
7272# $5 - Environment file reference (from docker-compose)
73+ # $6 - Command (string or JSON array)
7374#
7475# Output:
7576# deployment-${service_name}.yaml
@@ -80,6 +81,7 @@ create_deployment_yaml() {
8081 local ports=$3
8182 local env_vars=$4
8283 local env_file=$5
84+ local command=$6
8385
8486 echo " Generating deployment manifest for $service_name ..."
8587
@@ -109,6 +111,23 @@ spec:
109111 imagePullPolicy: $( [ " ${image##*: } " == " latest" ] && echo " Always" || echo " IfNotPresent" )
110112EOF
111113
114+ # Add command as args if defined (docker-compose command -> k8s args)
115+ if [ ! -z " $command " ] && [ " $command " != " null" ]; then
116+ echo " args:" >> " deployment-${service_name} .yaml"
117+ # Check if command is a JSON array or a string
118+ if echo " $command " | jq -e ' type == "array"' > /dev/null 2>&1 ; then
119+ # Command is an array
120+ echo " $command " | jq -r ' .[]' | while read -r cmd_part; do
121+ echo " - \" $cmd_part \" " >> " deployment-${service_name} .yaml"
122+ done
123+ else
124+ # Command is a string - split by spaces or use as single entry
125+ cmd_str=$( echo " $command " | jq -r ' .' )
126+ # For a simple string command like "start", add it as a single array element
127+ echo " - \" $cmd_str \" " >> " deployment-${service_name} .yaml"
128+ fi
129+ fi
130+
112131 # Add container ports if defined
113132 if [ ! -z " $ports " ] && [ " $ports " != " null" ]; then
114133 echo " ports:" >> " deployment-${service_name} .yaml"
131150 # Add specific environment variables if defined in docker-compose
132151 if [ " $env_vars " != " null" ] && [ " $env_vars " != " {}" ]; then
133152 echo " env:" >> " deployment-${service_name} .yaml"
134- echo " $env_vars " | jq -r ' to_entries | .[] | " - name: " + .key + "\n value: \"" + (.value | tostring) + "\""' >> " deployment-${service_name} .yaml"
153+
154+ # Process each environment variable
155+ echo " $env_vars " | jq -r ' to_entries | .[]' | jq -c ' .' | while read -r entry; do
156+ key=$( echo " $entry " | jq -r ' .key' )
157+ value=$( echo " $entry " | jq -r ' .value // ""' )
158+
159+ # Check if value is a variable reference like ${VAR_NAME}
160+ if [[ " $value " =~ ^\$\{ ([^}]+)\} $ ]]; then
161+ # Extract the ConfigMap key name (remove ${ and })
162+ configmap_key=" ${BASH_REMATCH[1]} "
163+
164+ # Use valueFrom to reference the ConfigMap key
165+ cat >> " deployment-${service_name} .yaml" << EOF
166+ - name: $key
167+ valueFrom:
168+ configMapKeyRef:
169+ name: app-config
170+ key: $configmap_key
171+ optional: true
172+ EOF
173+ else
174+ # Use literal value (for non-variable-reference values)
175+ echo " - name: $key " >> " deployment-${service_name} .yaml"
176+ echo " value: \" $value \" " >> " deployment-${service_name} .yaml"
177+ fi
178+ done
135179 fi
136180
137181 echo " ✓ Deployment manifest created: deployment-${service_name} .yaml"
202246# Initialize processed services tracker
203247> processed_services.txt
204248
249+ # Initialize failed deployments tracker
250+ > failed_deployments.txt
251+
205252# Get list of current deployments in namespace
206253echo " Fetching current deployments in namespace $NAMESPACE ..."
207254kubectl get deployments -n " $NAMESPACE " -o json 2> /dev/null | jq -r ' .items[].metadata.name' > current_deployments.txt || touch current_deployments.txt
@@ -219,6 +266,7 @@ cat services.json | jq -c '.' | while read -r service; do
219266 ports=$( echo " $service " | jq -c ' .ports' )
220267 env_vars=$( echo " $service " | jq -c ' .environment' )
221268 env_file=$( echo " $service " | jq -c ' .env_file' )
269+ command=$( echo " $service " | jq -c ' .command' )
222270
223271 echo " "
224272 echo " ===================================================================="
@@ -247,7 +295,8 @@ cat services.json | jq -c '.' | while read -r service; do
247295 echo " ✓ Deployment updated successfully"
248296 else
249297 echo " ✗ Deployment rollout failed or timed out"
250- exit 1
298+ echo " ⚠ Continuing with remaining deployments..."
299+ echo " $name |update-timeout" >> failed_deployments.txt
251300 fi
252301 else
253302 echo " ✓ Image is up to date, no action needed"
@@ -256,7 +305,7 @@ cat services.json | jq -c '.' | while read -r service; do
256305 echo " ⚡ Deployment '$name ' does not exist, creating new deployment..."
257306
258307 # Create deployment manifest
259- create_deployment_yaml " $name " " $image " " $ports " " $env_vars " " $env_file "
308+ create_deployment_yaml " $name " " $image " " $ports " " $env_vars " " $env_file " " $command "
260309
261310 # Apply deployment
262311 kubectl apply -f " deployment-${name} .yaml"
@@ -275,7 +324,8 @@ cat services.json | jq -c '.' | while read -r service; do
275324 echo " ✓ Deployment is ready"
276325 else
277326 echo " ✗ Deployment failed to become ready"
278- exit 1
327+ echo " ⚠ Continuing with remaining deployments..."
328+ echo " $name |create-timeout" >> failed_deployments.txt
279329 fi
280330 fi
281331
@@ -287,3 +337,28 @@ echo ""
287337echo " ===================================================================="
288338echo " All services from docker-compose.yml have been processed"
289339echo " ===================================================================="
340+
341+ # Check for failed deployments
342+ if [ -s failed_deployments.txt ]; then
343+ echo " "
344+ echo " ⚠ WARNING: Some deployments encountered issues:"
345+ echo " "
346+ while IFS=' |' read -r service reason; do
347+ case " $reason " in
348+ update-timeout)
349+ echo " - $service : Update rollout timed out"
350+ ;;
351+ create-timeout)
352+ echo " - $service : New deployment failed to become ready"
353+ ;;
354+ esac
355+ done < failed_deployments.txt
356+ echo " "
357+ echo " These services were deployed but may not be fully operational."
358+ echo " Check the verification step for current status."
359+ echo " "
360+ else
361+ echo " "
362+ echo " ✓ All deployments completed successfully"
363+ echo " "
364+ fi
0 commit comments