{"id":35005567,"url":"https://github.com/gvozdenkov/devops-home-lab","last_synced_at":"2026-05-22T15:02:44.850Z","repository":{"id":320207000,"uuid":"1076082571","full_name":"gvozdenkov/devops-home-lab","owner":"gvozdenkov","description":"IaC repo for DevOps home lab based on ruspberry pi","archived":false,"fork":false,"pushed_at":"2025-10-22T13:42:01.000Z","size":6,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-22T15:41:20.299Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gvozdenkov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-14T11:32:40.000Z","updated_at":"2025-10-22T13:42:05.000Z","dependencies_parsed_at":"2025-10-22T15:41:29.496Z","dependency_job_id":null,"html_url":"https://github.com/gvozdenkov/devops-home-lab","commit_stats":null,"previous_names":["gvozdenkov/devops-home-lab"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/gvozdenkov/devops-home-lab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gvozdenkov%2Fdevops-home-lab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gvozdenkov%2Fdevops-home-lab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gvozdenkov%2Fdevops-home-lab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gvozdenkov%2Fdevops-home-lab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gvozdenkov","download_url":"https://codeload.github.com/gvozdenkov/devops-home-lab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gvozdenkov%2Fdevops-home-lab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28072372,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-27T02:00:05.897Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-12-27T04:36:29.494Z","updated_at":"2026-05-22T15:02:44.845Z","avatar_url":"https://github.com/gvozdenkov.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DevOps Home Lab\n\nTo learn and test k8s, gitlab ci, IaC and gitOps principals on raspberry pi home cluster\n\n## Architecture\n\nFor the start I use 2 Raspberry Pi to constract bare metal kubernetes cluster:\n\n1. Raspberry Pi 3B+ 1Gb for master node (control plane)\n2. Rspberry Pi 5 8Gb for worker node\n\n![2 pies on the board](README_img/pies.jpg)\n\n## Use devcontainers for dev:)\n\nWith `devpod`\n\n```sh\n# Clean fash build\ndevpod up . --dotfiles git@github.com:gvozdenkov/dotfiles.git\n\n# Recreate when changes in devcontainer.json, Dockerfile or any other env changes\ndevpod up . --dotfiles git@github.com:gvozdenkov/dotfiles.git --recreate\n\n# Complately restart workspace from a clean slate\ndevpod up . --dotfiles git@github.com:gvozdenkov/dotfiles.git --reset\n\n# Any time after build to connect to workspace with IDE\ndevpod up . --ide vscode\n\n# Connect to container via ssh and then execute commands for terrafrom and ansible\nssh devops-home-lab.devpod\n```\n\n### Terraform\n\nTerraform in this context acts as an orchestration and configuration management tool rather than a true infrastructure provisioner\n\n![terraform schema role](README_img/terraform.png)\n\n#### Replace / Add node\n\nIf some `pi` node breaks, or sd card breaks, or add new node:\n\n1. Go to `terraform/variables.tf`/`terraform.tfvars` and check/add new node setup params (mac address, os, tags, etc.)\n2. `terraform apply` new changes. This will generate cloud-init config files and script to write os on SD card for new node in `/terraform/raspberry-pi`\n3. Insert SD card and execute `/terraform/raspberry-pi/xxx-prepare-os.sh` script to write os to SD card\n4. Insert SD card to `pi` and this should work\n\n### Ansible\n\n```sh\ncd terraform/ansible/\n\nansible-playbook -i inventory.ini playbook.yml\n\n# use tags to run only specific tasks\nansible-playbook -i inventory.ini playbook.yml --tags lvm\nansible-playbook -i inventory.ini playbook.yml --tags lvm,raid\nansible-playbook -i inventory.ini playbook.yml --skip-tags packages\n\n# List available tags\nansible-playbook playbook.yml --list-tags\n```\n\n## Debug\n\n```sh\n# on pi5 host to check podman containers running via systemd servcies generated by quadlet .container files\nsudo -u containers -H sh -lc 'export XDG_RUNTIME_DIR=/run/user/$(id -u); systemctl --user status yoga-quote-api.service'\n# Show generated systemd unit file\nsudo -u containers -H sh -lc 'export XDG_RUNTIME_DIR=/run/user/$(id -u); systemctl --user cat yoga-quote-api.service'\n# Check logs\nsudo -u containers -H sh -lc 'export XDG_RUNTIME_DIR=/run/user/$(id -u); journalctl --user -u yoga-quote-api.service -e'\n\n# Check podman login to registry\nsudo -u containers -H sh -lc 'export XDG_RUNTIME_DIR=/run/user/$(id -u);cd /home/containers; podman login --get-login registry.gitlab.com || true'\n# Podman test pull\nsudo -u containers -H sh -lc 'export XDG_RUNTIME_DIR=/run/user/$(id -u);cd /home/containers; podman pull registry.gitlab.com/arty-gvozdenkov/yoga-quote-api:latest'\n\n# Check podman conatiners\nsudo -u containers -H sh -lc 'cd /home/containers \u0026\u0026 podman ps -a'\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgvozdenkov%2Fdevops-home-lab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgvozdenkov%2Fdevops-home-lab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgvozdenkov%2Fdevops-home-lab/lists"}