automated terminal push

This commit is contained in:
lenape
2025-07-16 01:11:58 +00:00
parent 727b3af1a1
commit 2d3302c588
8 changed files with 1327 additions and 252 deletions

147
ansible/rollback.yml Normal file
View 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'