Files
michaelschiemer/ansible/netcup-simple-deploy/restart-app.yml

92 lines
2.9 KiB
YAML

---
# Restart application containers after file upload
- name: Restart Application Containers
hosts: all
become: yes
vars_files:
- inventory/group_vars.yml
tasks:
- name: Check if app directory exists
stat:
path: "{{ app_directory }}"
register: app_dir_exists
- name: Fail if app directory doesn't exist
fail:
msg: "App directory {{ app_directory }} not found. Please deploy first with deploy.yml"
when: not app_dir_exists.stat.exists
- name: Check which docker compose command is available
shell: |
if docker compose version >/dev/null 2>&1; then
echo "docker compose"
elif docker-compose --version >/dev/null 2>&1; then
echo "docker-compose"
else
echo "none"
fi
register: docker_compose_cmd
changed_when: false
- name: Fail if docker compose not available
fail:
msg: "Neither 'docker compose' nor 'docker-compose' is available"
when: docker_compose_cmd.stdout == "none"
- name: Show current container status
shell: "cd {{ app_directory }} && {{ docker_compose_cmd.stdout }} ps"
register: container_status_before
ignore_errors: yes
changed_when: false
- name: Stop existing containers
shell: "cd {{ app_directory }} && {{ docker_compose_cmd.stdout }} down"
register: stop_result
- name: Start containers with updated files
shell: "cd {{ app_directory }} && {{ docker_compose_cmd.stdout }} up -d --build"
register: start_result
- name: Wait for application to start
wait_for:
port: "{{ app_port }}"
host: "127.0.0.1"
delay: 5
timeout: 60
- name: Test if app is accessible
uri:
url: "http://127.0.0.1:{{ app_port }}/"
method: GET
status_code: [200, 301, 302]
register: app_test
ignore_errors: yes
- name: Show final container status
shell: "cd {{ app_directory }} && {{ docker_compose_cmd.stdout }} ps"
register: container_status_after
changed_when: false
- name: Show restart result
debug:
msg: |
🔄 Application restart completed!
📂 Directory: {{ app_directory }}
🐳 Docker Compose: {{ docker_compose_cmd.stdout }}
🚀 Restart status: {{ 'Success' if start_result.rc == 0 else 'Failed' }}
{% if app_test.status is defined and (app_test.status == 200 or app_test.status == 301 or app_test.status == 302) %}
✅ App is responding (HTTP {{ app_test.status }})
🌐 Available at: https://{{ domain }}
{% else %}
⚠️ App health check failed - please check logs
🔍 Check logs with: cd {{ app_directory }} && {{ docker_compose_cmd.stdout }} logs
{% endif %}
📊 Container Status:
{{ container_status_after.stdout }}