automated terminal push
This commit is contained in:
147
ansible/rollback.yml
Normal file
147
ansible/rollback.yml
Normal file
@@ -0,0 +1,147 @@
|
||||
---
|
||||
- name: Rollback ECS Service
|
||||
hosts: localhost
|
||||
connection: local
|
||||
gather_facts: false
|
||||
vars:
|
||||
ecs_cluster_name: "nvhi-atsila-cluster"
|
||||
service_name: "nvhi-atsila-cluster-service"
|
||||
task_family: "nvhi-atsila-cluster-task"
|
||||
aws_region: "us-east-2"
|
||||
|
||||
tasks:
|
||||
- name: Get current service task definition
|
||||
shell: |
|
||||
aws ecs describe-services \
|
||||
--cluster {{ ecs_cluster_name }} \
|
||||
--services {{ service_name }} \
|
||||
--region {{ aws_region }} \
|
||||
--query 'services[0].taskDefinition' \
|
||||
--output text
|
||||
register: current_task_def
|
||||
environment:
|
||||
AWS_DEFAULT_REGION: "{{ aws_region }}"
|
||||
|
||||
- name: Extract current revision number
|
||||
set_fact:
|
||||
current_revision: "{{ current_task_def.stdout.split(':')[-1] | int }}"
|
||||
|
||||
- name: Calculate rollback revision
|
||||
set_fact:
|
||||
rollback_revision: "{{ (current_revision | int) - 1 }}"
|
||||
when: rollback_revision is not defined
|
||||
|
||||
- name: Validate rollback revision
|
||||
fail:
|
||||
msg: "Cannot rollback - target revision {{ rollback_revision }} is invalid (must be >= 1)"
|
||||
when: (rollback_revision | int) < 1
|
||||
|
||||
- name: Display rollback information
|
||||
debug:
|
||||
msg: |
|
||||
=================================
|
||||
ROLLBACK INFORMATION
|
||||
=================================
|
||||
Service: {{ service_name }}
|
||||
Cluster: {{ ecs_cluster_name }}
|
||||
Current Revision: {{ current_revision }}
|
||||
Target Revision: {{ rollback_revision }}
|
||||
=================================
|
||||
|
||||
- name: Confirm rollback (interactive)
|
||||
pause:
|
||||
prompt: |
|
||||
WARNING: You are about to rollback the ECS service!
|
||||
|
||||
Service: {{ service_name }}
|
||||
From: {{ task_family }}:{{ current_revision }}
|
||||
To: {{ task_family }}:{{ rollback_revision }}
|
||||
|
||||
Do you want to continue? (yes/no)
|
||||
register: rollback_confirm
|
||||
when: auto_rollback is not defined
|
||||
|
||||
- name: Set automatic confirmation
|
||||
set_fact:
|
||||
rollback_confirm:
|
||||
user_input: "yes"
|
||||
when: auto_rollback is defined and auto_rollback
|
||||
|
||||
- name: Execute rollback
|
||||
shell: |
|
||||
aws ecs update-service \
|
||||
--cluster {{ ecs_cluster_name }} \
|
||||
--service {{ service_name }} \
|
||||
--task-definition {{ task_family }}:{{ rollback_revision }} \
|
||||
--force-new-deployment \
|
||||
--region {{ aws_region }} \
|
||||
--output json
|
||||
environment:
|
||||
AWS_DEFAULT_REGION: "{{ aws_region }}"
|
||||
when: rollback_confirm.user_input | lower == 'yes'
|
||||
register: rollback_result
|
||||
|
||||
- name: Wait for rollback completion
|
||||
shell: |
|
||||
echo "Waiting for rollback to complete..."
|
||||
count=0
|
||||
while [ $count -lt 20 ]; do
|
||||
service_status=$(aws ecs describe-services \
|
||||
--cluster {{ ecs_cluster_name }} \
|
||||
--services {{ service_name }} \
|
||||
--region {{ aws_region }} \
|
||||
--query 'services[0]' \
|
||||
--output json 2>/dev/null)
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
running=$(echo "$service_status" | jq -r '.runningCount // 0')
|
||||
pending=$(echo "$service_status" | jq -r '.pendingCount // 0')
|
||||
|
||||
echo "Running: $running, Pending: $pending"
|
||||
|
||||
if [ "$running" -ge "1" ] && [ "$pending" -eq "0" ]; then
|
||||
echo "Rollback completed successfully"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Waiting for rollback completion (attempt $((count+1))/20)..."
|
||||
sleep 15
|
||||
count=$((count+1))
|
||||
done
|
||||
|
||||
echo "WARNING: Rollback may not have completed within expected time"
|
||||
exit 1
|
||||
environment:
|
||||
AWS_DEFAULT_REGION: "{{ aws_region }}"
|
||||
when: rollback_confirm.user_input | lower == 'yes'
|
||||
|
||||
- name: Verify rollback status
|
||||
shell: |
|
||||
aws ecs describe-services \
|
||||
--cluster {{ ecs_cluster_name }} \
|
||||
--services {{ service_name }} \
|
||||
--region {{ aws_region }} \
|
||||
--query 'services[0].{TaskDefinition:taskDefinition,RunningCount:runningCount,Status:status}' \
|
||||
--output table
|
||||
environment:
|
||||
AWS_DEFAULT_REGION: "{{ aws_region }}"
|
||||
when: rollback_confirm.user_input | lower == 'yes'
|
||||
register: final_status
|
||||
|
||||
- name: Display rollback results
|
||||
debug:
|
||||
msg: |
|
||||
========================================
|
||||
🔄 ROLLBACK COMPLETED
|
||||
========================================
|
||||
Service: {{ service_name }}
|
||||
Rolled back to: {{ task_family }}:{{ rollback_revision }}
|
||||
Status: Check output above
|
||||
========================================
|
||||
when: rollback_confirm.user_input | lower == 'yes'
|
||||
|
||||
- name: Rollback cancelled
|
||||
debug:
|
||||
msg: "Rollback operation was cancelled by user"
|
||||
when: rollback_confirm.user_input | lower != 'yes'
|
Reference in New Issue
Block a user