Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
3060bf9
feat: implement lab01 devops info service
scruffyscarf Jan 24, 2026
929d861
feat: implement lab02 docker containerization
scruffyscarf Jan 31, 2026
cdcc374
feat: implement ci/cd for app_python
scruffyscarf Feb 2, 2026
beb301e
fix: python-ci.yml
scruffyscarf Feb 3, 2026
8cf584a
fix: python-ci.yml
scruffyscarf Feb 3, 2026
7e0bbae
fix: stage name
scruffyscarf Feb 3, 2026
1f9b56c
fix: python-ci.yml
scruffyscarf Feb 3, 2026
6b3abef
fix: snyk/actions
scruffyscarf Feb 3, 2026
11f8808
add: go-ci.yml
scruffyscarf Feb 3, 2026
93c4ad8
add: workflow_dispatch
scruffyscarf Feb 3, 2026
3387e03
fix: paths disable
scruffyscarf Feb 3, 2026
2225507
add: coveralls check
scruffyscarf Feb 4, 2026
d930ab4
fix: python-ci.yml
scruffyscarf Feb 4, 2026
285e625
fix: go-ci.yml
scruffyscarf Feb 4, 2026
34278fe
fix: report
scruffyscarf Feb 4, 2026
f14cca7
add: tests for go
scruffyscarf Feb 4, 2026
4de1f7f
add: docs
scruffyscarf Feb 5, 2026
ebec736
add: terraform and pulumi configs
scruffyscarf Feb 8, 2026
607c896
fix: terraform version
scruffyscarf Feb 8, 2026
b5af601
test
scruffyscarf Feb 8, 2026
4ad69a2
add: terraform fmt
scruffyscarf Feb 8, 2026
6760170
add: -recursive
scruffyscarf Feb 8, 2026
046f14f
fix: validate
scruffyscarf Feb 8, 2026
eda0016
fix: ssh
scruffyscarf Feb 8, 2026
07f6054
fix: unused var
scruffyscarf Feb 8, 2026
f1785f0
add: paths
scruffyscarf Feb 8, 2026
a868ae5
feat: complete lab05 - ansible fundamentals
scruffyscarf Feb 10, 2026
a9b6d43
feat: complete lab05 - ansible fundamentals
scruffyscarf Feb 10, 2026
6ada822
feat: complete lab05 - ansible fundamentals
scruffyscarf Feb 10, 2026
29a6086
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 10, 2026
1235d6c
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 10, 2026
6959164
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 10, 2026
b50a411
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 10, 2026
19f5815
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 10, 2026
38ea55a
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 10, 2026
162707d
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 10, 2026
db46a9c
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 10, 2026
4b87ef4
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
2a9d881
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
da9e804
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
50eb05a
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
412fd72
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
5aa3ead
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
44668df
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
160ca12
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
5e9383c
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
9911a42
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
653237a
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
56bc031
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
e1c6539
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
7c5289c
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
cb59f43
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
61cb24d
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
eda6d89
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
345d8f1
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
c6989d0
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
c6c206d
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
8134b05
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
33d4e5f
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
a38fe56
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
54f8445
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
8db5301
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
45d5ac9
Complete Lab 6: Advanced Ansible & CI/CD
scruffyscarf Feb 11, 2026
22ca492
Merge branch 'inno-devops-labs:master' into lab06
scruffyscarf Feb 24, 2026
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
Binary file added .DS_Store
Binary file not shown.
99 changes: 99 additions & 0 deletions .github/workflows/ansible-deploy-bonus.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Ansible Deployment Go App

on:
push:
branches: [ main, master, lab06 ]
paths:
- 'ansible/vars/app_bonus.yml'
- 'ansible/playbooks/deploy-bonus.yml'
- 'ansible/roles/web_app/tasks/**'
- 'ansible/roles/web_app/templates/docker-compose.yml.j2'
- '.github/workflows/ansible-deploy-bonus.yml'
pull_request:
branches: [ main, master, lab06 ]
paths:
- 'ansible/vars/app_bonus.yml'
- 'ansible/playbooks/deploy-bonus.yml'

env:
ANSIBLE_CONFIG: ansible/ansible.cfg
ANSIBLE_ROLES_PATH: ${{ github.workspace }}/ansible/roles
ANSIBLE_HOST_KEY_CHECKING: False
ANSIBLE_SSH_ARGS: '-o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
VM_HOST: ${{ secrets.VM_HOST }}
VM_USER: ${{ secrets.VM_USER }}
APP_NAME: 'devops-go'

jobs:
lint:
name: Lint Go App Ansible
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

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

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

- name: Syntax check Go playbook
run: |
cd ansible
export ANSIBLE_ROLES_PATH="$GITHUB_WORKSPACE/ansible/roles"
ansible-playbook playbooks/deploy-bonus.yml --syntax-check

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

deploy:
name: Deploy Go App
needs: lint
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup 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: Setup Ansible Vault
run: |
echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}" > /tmp/vault_pass
chmod 600 /tmp/vault_pass

- name: Setup roles
run: |
mkdir -p ansible/playbooks/roles
cp -r ansible/roles/* ansible/playbooks/roles/ 2>/dev/null || true
cp -r roles/* ansible/playbooks/roles/ 2>/dev/null || true

- name: Deploy Go
run: |
cd ansible
export ANSIBLE_ROLES_PATH=$(pwd)/roles
export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook playbooks/deploy-bonus.yml --syntax-check\
--vault-password-file /tmp/vault_pass

- name: Cleanup
run: rm -f /tmp/vault_pass
if: always()
74 changes: 74 additions & 0 deletions .github/workflows/ansible-deploy-matrix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Ansible Deployment Matrix

on:
push:
branches: [ main, master, lab06 ]
paths:
- 'ansible/roles/web_app/**'
- '.github/workflows/ansible-deploy-matrix.yml'

env:
ANSIBLE_CONFIG: ansible/ansible.cfg
ANSIBLE_ROLES_PATH: ${{ github.workspace }}/ansible/roles

jobs:
matrix-deploy:
name: Deploy ${{ matrix.app.name }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
app:
- name: Python
var_file: app_python.yml
playbook: deploy-python.yml
port: 8000
image: info-service-python
container_port: 8000

- name: Go
var_file: app_bonus.yml
playbook: deploy_bonus.yml
port: 8001
image: info-service-go
container_port: 8080

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: Setup Ansible Vault
run: |
echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}" > /tmp/vault_pass
chmod 600 /tmp/vault_pass

- name: Setup roles
run: |
mkdir -p ansible/playbooks/roles
cp -r ansible/roles/* ansible/playbooks/roles/ 2>/dev/null || true
cp -r roles/* ansible/playbooks/roles/ 2>/dev/null || true

- name: Deploy ${{ matrix.app.name }}
run: |
cd ansible
export ANSIBLE_ROLES_PATH="$GITHUB_WORKSPACE/ansible/roles"

ansible-playbook playbooks/deploy-python.yml --syntax-check\
--vault-password-file /tmp/vault_pass

ansible-playbook playbooks/deploy-bonus.yml --syntax-check\
--vault-password-file /tmp/vault_pass

- name: Cleanup
run: rm -f /tmp/vault_pass
if: always()
100 changes: 100 additions & 0 deletions .github/workflows/ansible-deploy-python.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
name: Ansible Deployment Python App

on:
push:
branches: [ main, master, lab06 ]
paths:
- 'ansible/vars/app_python.yml'
- 'ansible/playbooks/deploy-python.yml'
- 'ansible/roles/web_app/tasks/**'
- 'ansible/roles/web_app/templates/**'
- 'ansible/roles/web_app/defaults/**'
- '.github/workflows/ansible-deploy-python.yml'
pull_request:
branches: [ main, master, lab06 ]
paths:
- 'ansible/vars/app_python.yml'
- 'ansible/playbooks/deploy_python.yml'

env:
ANSIBLE_CONFIG: ansible/ansible.cfg
ANSIBLE_ROLES_PATH: ${{ github.workspace }}/ansible/roles
ANSIBLE_HOST_KEY_CHECKING: False
ANSIBLE_SSH_ARGS: '-o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
VM_HOST: ${{ secrets.VM_HOST }}
VM_USER: ${{ secrets.VM_USER }}
APP_NAME: 'devops-python'

jobs:
lint:
name: Lint Python App Ansible
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

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

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

- name: Syntax check Python playbook
run: |
cd ansible
export ANSIBLE_ROLES_PATH="$GITHUB_WORKSPACE/ansible/roles"
ansible-playbook playbooks/deploy-python.yml --syntax-check

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

deploy:
name: Deploy Python App
needs: lint
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup 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: Setup Ansible Vault
run: |
echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}" > /tmp/vault_pass
chmod 600 /tmp/vault_pass

- name: Setup roles
run: |
mkdir -p ansible/playbooks/roles
cp -r ansible/roles/* ansible/playbooks/roles/ 2>/dev/null || true
cp -r roles/* ansible/playbooks/roles/ 2>/dev/null || true

- name: Deploy Python
run: |
cd ansible
export ANSIBLE_ROLES_PATH="$GITHUB_WORKSPACE/ansible/roles"
export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook playbooks/deploy-python.yml --syntax-check\
--vault-password-file /tmp/vault_pass

- name: Cleanup
run: rm -f /tmp/vault_pass
if: always()
78 changes: 78 additions & 0 deletions .github/workflows/ansible-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: Ansible Deployment

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

env:
ANSIBLE_CONFIG: ansible/ansible.cfg
ANSIBLE_ROLES_PATH: ansible/roles
ANSIBLE_HOST_KEY_CHECKING: False
ANSIBLE_SSH_ARGS: '-o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
VM_HOST: ${{ secrets.VM_HOST }}
VM_USER: ${{ secrets.VM_USER }}

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

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

- name: Install dependencies
run: |
pip install ansible ansible-lint

- 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: Setup SSH
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

- name: Setup Ansible Vault
run: |
echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}" > /tmp/vault_pass
chmod 600 /tmp/vault_pass

- name: Run Ansible playbook
run: |
export ANSIBLE_ROLES_PATH="$GITHUB_WORKSPACE/ansible/roles"
export ANSIBLE_HOST_KEY_CHECKING=False
export ANSIBLE_SSH_ARGS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
ansible-playbook ansible/playbooks/deploy.yml --syntax-check\
--vault-password-file /tmp/vault_pass \

- name: Cleanup
run: rm -f /tmp/vault_pass
if: always()
Loading