Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions .github/workflows/ansible-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Ansible Deployment

on:
push:
branches: [ main, master ]
paths:
- 'ansible/'
- '.github/workflows/ansible-deploy.yml'
pull_request:
branches: [ main, master ]
paths:
- 'ansible/'

jobs:
lint:
name: Ansible Lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install dependencies
run: |
pip install ansible ansible-lint
ansible-galaxy collection install community.docker

- name: Run ansible-lint
run: |
cd ansible
ansible-lint playbooks/*.yml

deploy:
name: Deploy Application
needs: lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install Ansible
run: |
pip install ansible
ansible-galaxy collection install community.docker

- name: Create vault password file
run: |
echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}" > /tmp/vault_pass

- name: Deploy with Ansible
run: |
cd ansible
ansible-playbook playbooks/deploy.yml \
--vault-password-file /tmp/vault_pass

- name: Verify Deployment
run: |
echo "Deployment completed"
1 change: 1 addition & 0 deletions ansible/.vault_pass
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
123123
21 changes: 21 additions & 0 deletions ansible/docs/compose.yml.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
services:
devops-app:
image: ramzeus1/devops-info-service:latest
container_name: devops-app
restart: unless-stopped
ports:
- "5000:5000"
environment:
- HOST=0.0.0.0
- PORT=5000
logging:
driver: json-file
options:
max-size: 10m
max-file: "3"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
79 changes: 79 additions & 0 deletions ansible/docs/deploy_first.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@

PLAY [Deploy application] ******************************************************

TASK [Gathering Facts] *********************************************************
ok: [ramzuka]

TASK [docker : Add Docker GPG key] *********************************************
ok: [ramzuka]

TASK [docker : Add Docker repository] ******************************************
ok: [ramzuka]

TASK [docker : Verify repository exists] ***************************************
ok: [ramzuka]

TASK [docker : Install Docker packages] ****************************************
ok: [ramzuka]

TASK [docker : Show installation status] ***************************************
skipping: [ramzuka]

TASK [docker : Ensure Docker is running] ***************************************
ok: [ramzuka]

TASK [docker : Add user to docker group] ***************************************
ok: [ramzuka]

TASK [docker : Install Docker Python module] ***********************************
ok: [ramzuka]

TASK [docker : Verify Docker installation] *************************************
ok: [ramzuka]

TASK [docker : Show Docker version] ********************************************
ok: [ramzuka] => {
"msg": "Docker version 29.2.1, build a5c7197"
}

TASK [web_app : Include wipe tasks] ********************************************
skipping: [ramzuka]

TASK [web_app : Create application directory] **********************************
ok: [ramzuka]

TASK [web_app : Template docker-compose.yml] ***********************************
ok: [ramzuka]

TASK [web_app : Login to Docker Hub] *******************************************
ok: [ramzuka]

TASK [web_app : Pull Docker image] *********************************************
ok: [ramzuka]

TASK [web_app : Deploy with Docker Compose] ************************************
changed: [ramzuka]

TASK [web_app : Verify deployment] *********************************************
ok: [ramzuka] => {
"msg": "Deployment completed"
}

TASK [web_app : Wait for container to be ready] ********************************
ok: [ramzuka]

TASK [web_app : Check health endpoint] *****************************************
ok: [ramzuka]

TASK [web_app : Display application info] **************************************
ok: [ramzuka] => {
"msg": [
"Container devops-app is running",
"Application: http://127.0.0.1:5000",
"Health check: 200"
]
}

PLAY RECAP *********************************************************************
ramzuka : ok=19 changed=1 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0

79 changes: 79 additions & 0 deletions ansible/docs/deploy_second.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@

PLAY [Deploy application] ******************************************************

TASK [Gathering Facts] *********************************************************
ok: [ramzuka]

TASK [docker : Add Docker GPG key] *********************************************
ok: [ramzuka]

TASK [docker : Add Docker repository] ******************************************
ok: [ramzuka]

TASK [docker : Verify repository exists] ***************************************
ok: [ramzuka]

TASK [docker : Install Docker packages] ****************************************
ok: [ramzuka]

TASK [docker : Show installation status] ***************************************
skipping: [ramzuka]

TASK [docker : Ensure Docker is running] ***************************************
ok: [ramzuka]

TASK [docker : Add user to docker group] ***************************************
ok: [ramzuka]

TASK [docker : Install Docker Python module] ***********************************
ok: [ramzuka]

TASK [docker : Verify Docker installation] *************************************
ok: [ramzuka]

TASK [docker : Show Docker version] ********************************************
ok: [ramzuka] => {
"msg": "Docker version 29.2.1, build a5c7197"
}

TASK [web_app : Include wipe tasks] ********************************************
skipping: [ramzuka]

TASK [web_app : Create application directory] **********************************
ok: [ramzuka]

TASK [web_app : Template docker-compose.yml] ***********************************
ok: [ramzuka]

TASK [web_app : Login to Docker Hub] *******************************************
ok: [ramzuka]

TASK [web_app : Pull Docker image] *********************************************
ok: [ramzuka]

TASK [web_app : Deploy with Docker Compose] ************************************
changed: [ramzuka]

TASK [web_app : Verify deployment] *********************************************
ok: [ramzuka] => {
"msg": "Deployment completed"
}

TASK [web_app : Wait for container to be ready] ********************************
ok: [ramzuka]

TASK [web_app : Check health endpoint] *****************************************
ok: [ramzuka]

TASK [web_app : Display application info] **************************************
ok: [ramzuka] => {
"msg": [
"Container devops-app is running",
"Application: http://127.0.0.1:5000",
"Health check: 200"
]
}

PLAY RECAP *********************************************************************
ramzuka : ok=19 changed=1 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0

2 changes: 2 additions & 0 deletions ansible/docs/docker_ps.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4880ba11c904 ramzeus1/devops-info-service:latest "python app.py" 20 minutes ago Up 20 minutes (unhealthy) 0.0.0.0:5000->5000/tcp, [::]:5000->5000/tcp devops-app
46 changes: 46 additions & 0 deletions ansible/docs/docker_run.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@

PLAY [Provision web servers] ***************************************************

TASK [Gathering Facts] *********************************************************
ok: [ramzuka]

TASK [docker : Add Docker GPG key] *********************************************
ok: [ramzuka]

TASK [docker : Add Docker repository] ******************************************
ok: [ramzuka]

TASK [docker : Verify repository exists] ***************************************
ok: [ramzuka]

TASK [docker : Install Docker packages] ****************************************
ok: [ramzuka]

TASK [docker : Show installation status] ***************************************
skipping: [ramzuka]

TASK [docker : Ensure Docker is running] ***************************************
ok: [ramzuka]

TASK [docker : Add user to docker group] ***************************************
ok: [ramzuka]

TASK [docker : Install Docker Python module] ***********************************
ok: [ramzuka]

TASK [docker : Verify Docker installation] *************************************
ok: [ramzuka]

TASK [docker : Show Docker version] ********************************************
ok: [ramzuka] => {
"msg": "Docker version 29.2.1, build a5c7197"
}

TASK [Provisioning completed] **************************************************
ok: [ramzuka] => {
"msg": "System provisioning completed successfully"
}

PLAY RECAP *********************************************************************
ramzuka : ok=11 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0

1 change: 1 addition & 0 deletions ansible/docs/health_check.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"status":"healthy","timestamp":"2026-03-04T06:52:52.268039+00:00","uptime_seconds":9}
79 changes: 79 additions & 0 deletions ansible/docs/scenario1_normal.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@

PLAY [Deploy application] ******************************************************

TASK [Gathering Facts] *********************************************************
ok: [ramzuka]

TASK [docker : Add Docker GPG key] *********************************************
ok: [ramzuka]

TASK [docker : Add Docker repository] ******************************************
ok: [ramzuka]

TASK [docker : Verify repository exists] ***************************************
ok: [ramzuka]

TASK [docker : Install Docker packages] ****************************************
ok: [ramzuka]

TASK [docker : Show installation status] ***************************************
skipping: [ramzuka]

TASK [docker : Ensure Docker is running] ***************************************
ok: [ramzuka]

TASK [docker : Add user to docker group] ***************************************
ok: [ramzuka]

TASK [docker : Install Docker Python module] ***********************************
ok: [ramzuka]

TASK [docker : Verify Docker installation] *************************************
ok: [ramzuka]

TASK [docker : Show Docker version] ********************************************
ok: [ramzuka] => {
"msg": "Docker version 29.2.1, build a5c7197"
}

TASK [web_app : Include wipe tasks] ********************************************
skipping: [ramzuka]

TASK [web_app : Create application directory] **********************************
ok: [ramzuka]

TASK [web_app : Template docker-compose.yml] ***********************************
ok: [ramzuka]

TASK [web_app : Login to Docker Hub] *******************************************
ok: [ramzuka]

TASK [web_app : Pull Docker image] *********************************************
ok: [ramzuka]

TASK [web_app : Deploy with Docker Compose] ************************************
changed: [ramzuka]

TASK [web_app : Verify deployment] *********************************************
ok: [ramzuka] => {
"msg": "Deployment completed"
}

TASK [web_app : Wait for container to be ready] ********************************
ok: [ramzuka]

TASK [web_app : Check health endpoint] *****************************************
ok: [ramzuka]

TASK [web_app : Display application info] **************************************
ok: [ramzuka] => {
"msg": [
"Container devops-app is running",
"Application: http://127.0.0.1:5000",
"Health check: 200"
]
}

PLAY RECAP *********************************************************************
ramzuka : ok=19 changed=1 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0

Loading