From 0a06f2b4f226da1962280f89c88d1c405238d9ad Mon Sep 17 00:00:00 2001 From: Phoenix Date: Thu, 29 Jan 2026 15:49:28 +0300 Subject: [PATCH 01/16] Complete lab2 --- lab2c/app_go/.dockerignore | 7 + lab2c/app_go/Dockerfile | 21 +++ lab2c/app_go/README.md | 41 +++++ lab2c/app_go/docs/LAB02.md | 131 +++++++++++++++ lab2c/app_go/go.mod | 3 + lab2c/app_go/main.go | 257 +++++++++++++++++++++++++++++ lab2c/app_python/.dockerignore | 12 ++ lab2c/app_python/.gitignore | 14 ++ lab2c/app_python/Dockerfile | 19 +++ lab2c/app_python/README.md | 72 ++++++++ lab2c/app_python/app.py | 158 ++++++++++++++++++ lab2c/app_python/docs/LAB02.md | 111 +++++++++++++ lab2c/app_python/requirements.txt | 2 + lab2c/app_python/tests/__init__.py | 1 + 14 files changed, 849 insertions(+) create mode 100644 lab2c/app_go/.dockerignore create mode 100644 lab2c/app_go/Dockerfile create mode 100644 lab2c/app_go/README.md create mode 100644 lab2c/app_go/docs/LAB02.md create mode 100644 lab2c/app_go/go.mod create mode 100644 lab2c/app_go/main.go create mode 100644 lab2c/app_python/.dockerignore create mode 100644 lab2c/app_python/.gitignore create mode 100644 lab2c/app_python/Dockerfile create mode 100644 lab2c/app_python/README.md create mode 100644 lab2c/app_python/app.py create mode 100644 lab2c/app_python/docs/LAB02.md create mode 100644 lab2c/app_python/requirements.txt create mode 100644 lab2c/app_python/tests/__init__.py diff --git a/lab2c/app_go/.dockerignore b/lab2c/app_go/.dockerignore new file mode 100644 index 0000000000..55a3b7cb13 --- /dev/null +++ b/lab2c/app_go/.dockerignore @@ -0,0 +1,7 @@ +*.exe +*.log +.git/ +.gitignore +.idea/ +.vscode/ +docs/ diff --git a/lab2c/app_go/Dockerfile b/lab2c/app_go/Dockerfile new file mode 100644 index 0000000000..534bac98be --- /dev/null +++ b/lab2c/app_go/Dockerfile @@ -0,0 +1,21 @@ +FROM golang:1.22 AS builder + +WORKDIR /src + +COPY go.mod ./ +RUN go mod download + +COPY main.go ./ +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o devops-info + +FROM gcr.io/distroless/static-debian12:nonroot + +WORKDIR /app +COPY --from=builder /src/devops-info /app/devops-info + +ENV HOST=0.0.0.0 \ + PORT=5000 + +EXPOSE 5000 + +ENTRYPOINT ["/app/devops-info"] diff --git a/lab2c/app_go/README.md b/lab2c/app_go/README.md new file mode 100644 index 0000000000..36e81eb856 --- /dev/null +++ b/lab2c/app_go/README.md @@ -0,0 +1,41 @@ +# DevOps Info Service (Go) + +## Overview +Compiled-language version of the DevOps info service. It exposes the same two endpoints as the Python app and keeps the JSON response structure consistent. + +## Prerequisites +- Go 1.22+ installed + +## Build and Run +Run directly: +```bash +go run main.go +``` + +Build a binary: +```bash +go build -o devops-info +./devops-info +``` + +Windows build/run: +```bash +go build -o devops-info.exe +.\devops-info.exe +``` + +Custom config examples: +```bash +PORT=8080 go run main.go +HOST=127.0.0.1 PORT=3000 go run main.go +``` + +## API Endpoints +- `GET /` - Service and system information +- `GET /health` - Health check + +## Configuration +| Variable | Default | Description | +| --- | --- | --- | +| `HOST` | `0.0.0.0` | Bind address for the server | +| `PORT` | `5000` | Port to listen on | diff --git a/lab2c/app_go/docs/LAB02.md b/lab2c/app_go/docs/LAB02.md new file mode 100644 index 0000000000..71a016acd1 --- /dev/null +++ b/lab2c/app_go/docs/LAB02.md @@ -0,0 +1,131 @@ +# LAB02 - Docker Containerization (Go, Multi-Stage) + +## Multi-Stage Build Strategy +I used a two-stage Dockerfile: +1. **Builder stage** (`golang:1.22`) to compile the binary. +2. **Runtime stage** (`distroless/static-debian12:nonroot`) to run only the binary. + +This keeps the final image small and removes the Go toolchain from production. + +Dockerfile snippet: +```dockerfile +FROM golang:1.22 AS builder +WORKDIR /src +COPY go.mod ./ +RUN go mod download +COPY main.go ./ +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o devops-info + +FROM gcr.io/distroless/static-debian12:nonroot +COPY --from=builder /src/devops-info /app/devops-info +ENTRYPOINT ["/app/devops-info"] +``` + + +Image size output: +```text +tsixphoenix/devops-info-go latest 7fc572b1d863 4 minutes ago 17.7MB +``` + +## Build and Run Evidence +Build output: +```text +docker build -t tsixphoenix/devops-info-go:latest . +[+] Building 35.3s (16/16) FINISHED docker:desktop-linux + => [internal] load build definition from Dockerfile 0.0s + => => transferring dockerfile: 396B 0.0s + => [internal] load metadata for gcr.io/distroless/static-debian12:nonroot 1.8s + => [internal] load metadata for docker.io/library/golang:1.22 2.4s + => [auth] library/golang:pull token for registry-1.docker.io 0.0s + => [internal] load .dockerignore 0.0s + => => transferring context: 91B 0.0s + => [builder 1/6] FROM docker.io/library/golang:1.22@sha256:1cf6c45ba39db9fd6db16922041d074a63c935556a05c5ccb62d181034df7f02 22.6s + => => resolve docker.io/library/golang:1.22@sha256:1cf6c45ba39db9fd6db16922041d074a63c935556a05c5ccb62d181034df7f02 0.0s + => => sha256:1451027d3c0ee892b96310c034788bbe22b30b8ea2d075edbd09acfeaaaa439f 126B / 126B 0.4s + => => sha256:afa154b433c7f72db064d19e1bcfa84ee196ad29120328f6bdb2c5fbd7b8eeac 69.36MB / 69.36MB 8.8s + => => sha256:3b7f19923e1501f025b9459750b20f5df37af452482f75b91205f345d1c0e1b5 92.33MB / 92.33MB 10.0s + => => sha256:35af2a7690f2b43e7237d1fae8e3f2350dfb25f3249e9cf65121866f9c56c772 64.39MB / 64.39MB 8.1s + => => sha256:32b550be6cb62359a0f3a96bc0dc289f8b45d097eaad275887f163c6780b4108 24.06MB / 24.06MB 3.8s + => => sha256:a492eee5e55976c7d3feecce4c564aaf6f14fb07fdc5019d06f4154eddc93fde 48.48MB / 48.48MB 5.2s + => => extracting sha256:a492eee5e55976c7d3feecce4c564aaf6f14fb07fdc5019d06f4154eddc93fde 2.3s + => => extracting sha256:32b550be6cb62359a0f3a96bc0dc289f8b45d097eaad275887f163c6780b4108 0.8s + => => extracting sha256:35af2a7690f2b43e7237d1fae8e3f2350dfb25f3249e9cf65121866f9c56c772 2.5s + => => extracting sha256:3b7f19923e1501f025b9459750b20f5df37af452482f75b91205f345d1c0e1b5 2.0s + => => extracting sha256:afa154b433c7f72db064d19e1bcfa84ee196ad29120328f6bdb2c5fbd7b8eeac 5.1s + => => extracting sha256:1451027d3c0ee892b96310c034788bbe22b30b8ea2d075edbd09acfeaaaa439f 0.0s + => => extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 0.0s + => [internal] load build context 0.1s + => => transferring context: 6.51kB 0.0s + => [stage-1 1/3] FROM gcr.io/distroless/static-debian12:nonroot@sha256:cba10d7abd3e203428e86f5b2d7fd5eb7d8987c387864ae4996cf97191b33764 2.9s + => => resolve gcr.io/distroless/static-debian12:nonroot@sha256:cba10d7abd3e203428e86f5b2d7fd5eb7d8987c387864ae4996cf97191b33764 0.0s + => => sha256:069d1e267530c2e681fbd4d481553b4d05f98082b18fafac86e7f12996dddd0b 131.91kB / 131.91kB 0.6s + => => sha256:dcaa5a89b0ccda4b283e16d0b4d0891cd93d5fe05c6798f7806781a6a2d84354 314B / 314B 0.4s + => => sha256:4aa0ea1413d37a58615488592a0b827ea4b2e48fa5a77cf707d0e35f025e613f 385B / 385B 0.4s + => => sha256:dd64bf2dd177757451a98fcdc999a339c35dee5d9872d8f4dc69c8f3c4dd0112 80B / 80B 0.4s + => => sha256:52630fc75a18675c530ed9eba5f55eca09b03e91bd5bc15307918bbc1a7e7296 162B / 162B 0.3s + => => sha256:3214acf345c0cc6bbdb56b698a41ccdefc624a09d6beb0d38b5de0b2303ecaf4 123B / 123B 0.3s + => => sha256:7c12895b777bcaa8ccae0605b4de635b68fc32d60fa08f421dc3818bf55ee212 188B / 188B 0.3s + => => sha256:2780920e5dbfbe103d03a583ed75345306e572ec5a48cb10361f046767d9f29a 67B / 67B 0.3s + => => sha256:62de241dac5fe19d5f8f4defe034289006ddaa0f2cca735db4718fe2a23e504e 31.24kB / 31.24kB 0.6s + => => sha256:017886f7e1764618ffad6fbd503c42a60076c63adc16355cac80f0f311cae4c9 544.07kB / 544.07kB 0.7s + => => sha256:bfb59b82a9b65e47d485e53b3e815bca3b3e21a095bd0cb88ced9ac0b48062bf 13.36kB / 13.36kB 0.6s + => => sha256:fab8c4b3fa32236a59c44cc504a69b18788d5c17c045691c2d682267ae8cf468 104.22kB / 104.22kB 0.6s + => => extracting sha256:fab8c4b3fa32236a59c44cc504a69b18788d5c17c045691c2d682267ae8cf468 0.1s + => => extracting sha256:bfb59b82a9b65e47d485e53b3e815bca3b3e21a095bd0cb88ced9ac0b48062bf 0.1s + => => extracting sha256:017886f7e1764618ffad6fbd503c42a60076c63adc16355cac80f0f311cae4c9 0.5s + => => extracting sha256:62de241dac5fe19d5f8f4defe034289006ddaa0f2cca735db4718fe2a23e504e 0.1s + => => extracting sha256:2780920e5dbfbe103d03a583ed75345306e572ec5a48cb10361f046767d9f29a 0.0s + => => extracting sha256:7c12895b777bcaa8ccae0605b4de635b68fc32d60fa08f421dc3818bf55ee212 0.0s + => => extracting sha256:3214acf345c0cc6bbdb56b698a41ccdefc624a09d6beb0d38b5de0b2303ecaf4 0.1s + => => extracting sha256:52630fc75a18675c530ed9eba5f55eca09b03e91bd5bc15307918bbc1a7e7296 0.1s + => => extracting sha256:dd64bf2dd177757451a98fcdc999a339c35dee5d9872d8f4dc69c8f3c4dd0112 0.0s + => => extracting sha256:4aa0ea1413d37a58615488592a0b827ea4b2e48fa5a77cf707d0e35f025e613f 0.0s + => => extracting sha256:dcaa5a89b0ccda4b283e16d0b4d0891cd93d5fe05c6798f7806781a6a2d84354 0.0s + => => extracting sha256:069d1e267530c2e681fbd4d481553b4d05f98082b18fafac86e7f12996dddd0b 0.0s + => [stage-1 2/3] WORKDIR /app 0.1s + => [builder 2/6] WORKDIR /src 0.5s + => [builder 3/6] COPY go.mod ./ 0.1s + => [builder 4/6] RUN go mod download 0.5s + => [builder 5/6] COPY main.go ./ 0.1s + => [builder 6/6] RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o devops-info 8.1s + => [stage-1 3/3] COPY --from=builder /src/devops-info /app/devops-info 0.1s + => exporting to image 0.6s + => => exporting layers 0.4s + => => exporting manifest sha256:39177489cedb41b9d9f566a8be5d09c8ffe938f98b590aa0ebb987f1cf38d7a6 0.0s + => => exporting config sha256:d86ea6d9a836253c87a0ac2232aa6f03cdc8198146f9acdba1f3d31c617bca82 0.0s + => => exporting attestation manifest sha256:79e9867f53966cbf5943864985b72aeed88ea8a8349789577aee72d45045e5af 0.0s + => => exporting manifest list sha256:7fc572b1d86304a2634962e06610c7cf4295c4a466b6e52aed34f93550555008 0.0s + => => naming to docker.io/tsixphoenix/devops-info-go:latest 0.0s + => => unpacking to docker.io/tsixphoenix/devops-info-go:latest 0.1s + +``` + +Run output: +```text +docker run --rm -p 5000:5000 --name devops-info-go tsixphoenix/devops-info-go:latest +2026/01/29 12:37:42 Starting DevOps Info Service on 0.0.0.0:5000 +``` + +Endpoint checks: +```text +curl http://localhost:5000/ +{"service":{"name":"devops-info-service","version":"1.0.0","description":"DevOps course info service","framework":"Go net/http"},"system":{"hostname":"50a30efde177","platform":"linux","platform_version":"Distroless","architecture":"amd64","cpu_count":12,"python_version":"go1.22.12"},"runtime":{"uptime_seconds":79,"uptime_human":"0 hours, 1 minute","current_time":"2026-01-29T12:39:02Z","timezone":"UTC"},"request":{"client_ip":"172.17.0.1","user_agent":"curl/8.16.0","method":"GET","path":"/"},"endpoints":[{"path":"/","method":"GET","description":"Service information"},{"path":"/health","method":"GET","description":"Health check"}]} + +curl http://localhost:5000/health +{"status":"healthy","timestamp":"2026-01-29T12:39:31Z","uptime_seconds":108} + +2026/01/29 12:39:02 Request: GET / +2026/01/29 12:39:02 Response: GET / -> 200 (418.191µs) +2026/01/29 12:39:31 Request: GET /health +2026/01/29 12:39:31 Response: GET /health -> 200 (114.664µs) +``` + +## Technical Analysis +- The builder stage contains the full Go toolchain; the runtime stage does not. +- If I shipped the builder stage, the image would be much larger and include tools that should not be in production. +- A static binary lets me use a minimal base image. +- The final image runs as a non-root user, which reduces risk. + +## Challenges and Solutions +- I made sure the binary was static (CGO disabled) so it works in a minimal runtime image. +- Distroless images do not include a shell, so debugging is done in the builder stage, not in the runtime image. diff --git a/lab2c/app_go/go.mod b/lab2c/app_go/go.mod new file mode 100644 index 0000000000..7a7fcedd1c --- /dev/null +++ b/lab2c/app_go/go.mod @@ -0,0 +1,3 @@ +module devops-info-service + +go 1.22 diff --git a/lab2c/app_go/main.go b/lab2c/app_go/main.go new file mode 100644 index 0000000000..2abcd3938a --- /dev/null +++ b/lab2c/app_go/main.go @@ -0,0 +1,257 @@ +package main + +import ( + "encoding/json" + "fmt" + "log" + "net" + "net/http" + "os" + "runtime" + "strings" + "time" +) + +type Service struct { + Name string `json:"name"` + Version string `json:"version"` + Description string `json:"description"` + Framework string `json:"framework"` +} + +type System struct { + Hostname string `json:"hostname"` + Platform string `json:"platform"` + PlatformVersion string `json:"platform_version"` + Architecture string `json:"architecture"` + CPUCount int `json:"cpu_count"` + PythonVersion string `json:"python_version"` +} + +type Runtime struct { + UptimeSeconds int `json:"uptime_seconds"` + UptimeHuman string `json:"uptime_human"` + CurrentTime string `json:"current_time"` + Timezone string `json:"timezone"` +} + +type RequestInfo struct { + ClientIP string `json:"client_ip"` + UserAgent string `json:"user_agent"` + Method string `json:"method"` + Path string `json:"path"` +} + +type Endpoint struct { + Path string `json:"path"` + Method string `json:"method"` + Description string `json:"description"` +} + +type Response struct { + Service Service `json:"service"` + System System `json:"system"` + Runtime Runtime `json:"runtime"` + Request RequestInfo `json:"request"` + Endpoints []Endpoint `json:"endpoints"` +} + +var startTime = time.Now().UTC() + +func main() { + host := getenv("HOST", "0.0.0.0") + port := getenv("PORT", "5000") + addr := net.JoinHostPort(host, port) + + mux := http.NewServeMux() + mux.HandleFunc("/", rootHandler) + mux.HandleFunc("/health", healthHandler) + + handler := recoverMiddleware(loggingMiddleware(mux)) + + server := &http.Server{ + Addr: addr, + Handler: handler, + ReadHeaderTimeout: 5 * time.Second, + } + + log.Printf("Starting DevOps Info Service on %s", addr) + if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Fatalf("server error: %v", err) + } +} + +func rootHandler(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/" { + writeNotFound(w) + return + } + if r.Method != http.MethodGet { + writeMethodNotAllowed(w) + return + } + + uptimeSeconds, uptimeHuman := getUptime() + now := time.Now().UTC() + + hostname, _ := os.Hostname() + response := Response{ + Service: Service{ + Name: "devops-info-service", + Version: "1.0.0", + Description: "DevOps course info service", + Framework: "Go net/http", + }, + System: System{ + Hostname: hostname, + Platform: runtime.GOOS, + PlatformVersion: getPlatformVersion(), + Architecture: runtime.GOARCH, + CPUCount: runtime.NumCPU(), + PythonVersion: runtime.Version(), + }, + Runtime: Runtime{ + UptimeSeconds: uptimeSeconds, + UptimeHuman: uptimeHuman, + CurrentTime: now.Format(time.RFC3339), + Timezone: "UTC", + }, + Request: RequestInfo{ + ClientIP: getClientIP(r), + UserAgent: r.UserAgent(), + Method: r.Method, + Path: r.URL.Path, + }, + Endpoints: []Endpoint{ + {Path: "/", Method: "GET", Description: "Service information"}, + {Path: "/health", Method: "GET", Description: "Health check"}, + }, + } + + writeJSON(w, http.StatusOK, response) +} + +func healthHandler(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/health" { + writeNotFound(w) + return + } + if r.Method != http.MethodGet { + writeMethodNotAllowed(w) + return + } + + uptimeSeconds, _ := getUptime() + payload := map[string]any{ + "status": "healthy", + "timestamp": time.Now().UTC().Format(time.RFC3339), + "uptime_seconds": uptimeSeconds, + } + + writeJSON(w, http.StatusOK, payload) +} + +func getUptime() (int, string) { + seconds := int(time.Since(startTime).Seconds()) + hours := seconds / 3600 + minutes := (seconds % 3600) / 60 + hourLabel := "hours" + if hours == 1 { + hourLabel = "hour" + } + minuteLabel := "minutes" + if minutes == 1 { + minuteLabel = "minute" + } + return seconds, fmt.Sprintf("%d %s, %d %s", hours, hourLabel, minutes, minuteLabel) +} + +func getClientIP(r *http.Request) string { + if forwarded := r.Header.Get("X-Forwarded-For"); forwarded != "" { + parts := strings.Split(forwarded, ",") + return strings.TrimSpace(parts[0]) + } + host, _, err := net.SplitHostPort(r.RemoteAddr) + if err == nil { + return host + } + return r.RemoteAddr +} + +func getPlatformVersion() string { + if value := os.Getenv("OS"); value != "" { + return value + } + if data, err := os.ReadFile("/etc/os-release"); err == nil { + for _, line := range strings.Split(string(data), "\n") { + if strings.HasPrefix(line, "PRETTY_NAME=") { + return strings.Trim(strings.TrimPrefix(line, "PRETTY_NAME="), "\"") + } + } + } + return "unknown" +} + +func writeJSON(w http.ResponseWriter, status int, payload any) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + if err := json.NewEncoder(w).Encode(payload); err != nil { + log.Printf("json encode error: %v", err) + } +} + +func writeNotFound(w http.ResponseWriter) { + writeJSON(w, http.StatusNotFound, map[string]string{ + "error": "Not Found", + "message": "Endpoint does not exist", + }) +} + +func writeMethodNotAllowed(w http.ResponseWriter) { + writeJSON(w, http.StatusMethodNotAllowed, map[string]string{ + "error": "Method Not Allowed", + "message": "Only GET is supported for this endpoint", + }) +} + +type statusRecorder struct { + http.ResponseWriter + status int +} + +func (recorder *statusRecorder) WriteHeader(code int) { + recorder.status = code + recorder.ResponseWriter.WriteHeader(code) +} + +func loggingMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + recorder := &statusRecorder{ResponseWriter: w, status: http.StatusOK} + start := time.Now() + log.Printf("Request: %s %s", r.Method, r.URL.Path) + next.ServeHTTP(recorder, r) + log.Printf("Response: %s %s -> %d (%s)", r.Method, r.URL.Path, recorder.status, time.Since(start)) + }) +} + +func recoverMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + defer func() { + if err := recover(); err != nil { + log.Printf("panic recovered: %v", err) + writeJSON(w, http.StatusInternalServerError, map[string]string{ + "error": "Internal Server Error", + "message": "An unexpected error occurred", + }) + } + }() + next.ServeHTTP(w, r) + }) +} + +func getenv(key, fallback string) string { + if value := os.Getenv(key); value != "" { + return value + } + return fallback +} diff --git a/lab2c/app_python/.dockerignore b/lab2c/app_python/.dockerignore new file mode 100644 index 0000000000..b7738de7b8 --- /dev/null +++ b/lab2c/app_python/.dockerignore @@ -0,0 +1,12 @@ +__pycache__/ +*.py[cod] +*.log +venv/ +.venv/ +.env +.git/ +.gitignore +.idea/ +.vscode/ +docs/ +tests/ diff --git a/lab2c/app_python/.gitignore b/lab2c/app_python/.gitignore new file mode 100644 index 0000000000..8052e93c8b --- /dev/null +++ b/lab2c/app_python/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.py[cod] +*.log +venv/ +.venv/ +.env + +# IDE +.idea/ +.vscode/ + +# OS +.DS_Store +Thumbs.db diff --git a/lab2c/app_python/Dockerfile b/lab2c/app_python/Dockerfile new file mode 100644 index 0000000000..76219e6c10 --- /dev/null +++ b/lab2c/app_python/Dockerfile @@ -0,0 +1,19 @@ +FROM python:3.13-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +WORKDIR /app + +RUN useradd -m -u 10001 appuser + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY --chown=appuser:appuser app.py . + +USER appuser + +EXPOSE 5000 + +CMD ["python", "app.py"] diff --git a/lab2c/app_python/README.md b/lab2c/app_python/README.md new file mode 100644 index 0000000000..742a7439f4 --- /dev/null +++ b/lab2c/app_python/README.md @@ -0,0 +1,72 @@ +# DevOps Info Service (FastAPI) + +## Overview +Small service returning system info about the machine it runs on, plus a health check. + +## Prerequisites +- Python 3.11+ +- pip +- (Optional) venv tool + +## Installation +### Windows +```bash +python -m venv venv +.\venv\Scripts\Activate.ps1 +pip install -r requirements.txt +``` + +### macOS/Linux +```bash +python -m venv venv +source venv/bin/activate +pip install -r requirements.txt +``` + +## Running the Application +```bash +python app.py +``` + +Custom config examples: +```bash +PORT=8080 python app.py +HOST=127.0.0.1 PORT=3000 python app.py +``` + +FastAPI docs: +- `http://localhost:/docs` + +## API Endpoints +- `GET /` - Service and system information +- `GET /health` - Health check + +## Configuration +| Variable | Default | Description | +| --- | --- | --- | +| `HOST` | `0.0.0.0` | Bind address for the server | +| `PORT` | `5000` | Port to listen on | +| `DEBUG` | `False` | Enable auto-reload | + +## Docker +Command patterns (replace the placeholders with your values): + +**Build locally** +```bash +docker build -t /: . +``` + +**Run container** +```bash +docker run --rm -p :5000 --name /: +``` + +**Pull from Docker Hub** +```bash +docker pull /: +``` + +Optional env overrides: +```bash +docker run --rm -e PORT=5000 -e HOST=0.0.0.0 -p :5000 /: +``` diff --git a/lab2c/app_python/app.py b/lab2c/app_python/app.py new file mode 100644 index 0000000000..8935b94091 --- /dev/null +++ b/lab2c/app_python/app.py @@ -0,0 +1,158 @@ +""" +DevOps Info Service +FastAPI application module. +""" + +from __future__ import annotations + +import logging +import os +import platform +import socket +from datetime import datetime, timezone + +import uvicorn +from fastapi import FastAPI, Request +from fastapi.responses import JSONResponse +from starlette.exceptions import HTTPException as StarletteHTTPException + +# Config +HOST = os.getenv("HOST", "0.0.0.0") +PORT = int(os.getenv("PORT", "5000")) +DEBUG = os.getenv("DEBUG", "False").lower() == "true" + +SERVICE_NAME = "devops-info-service" +SERVICE_VERSION = "1.0.0" +SERVICE_DESCRIPTION = "DevOps course info service" +SERVICE_FRAMEWORK = "FastAPI" + +START_TIME = datetime.now(timezone.utc) + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(message)s", +) +logger = logging.getLogger("devops-info-service") + +app = FastAPI( + title="DevOps Info Service", + version=SERVICE_VERSION, + description=SERVICE_DESCRIPTION, +) + + +def _format_uptime(seconds: int) -> str: + hours = seconds // 3600 + minutes = (seconds % 3600) // 60 + hour_label = "hour" if hours == 1 else "hours" + minute_label = "minute" if minutes == 1 else "minutes" + return f"{hours} {hour_label}, {minutes} {minute_label}" + + +def get_uptime() -> dict[str, int | str]: + delta = datetime.now(timezone.utc) - START_TIME + seconds = int(delta.total_seconds()) + return { + "seconds": seconds, + "human": _format_uptime(seconds), + } + + +def get_system_info() -> dict[str, str | int]: + return { + "hostname": socket.gethostname(), + "platform": platform.system(), + "platform_version": platform.release(), + "architecture": platform.machine(), + "cpu_count": os.cpu_count() or 0, + "python_version": platform.python_version(), + } + + +def isoformat_utc(dt: datetime) -> str: + return dt.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") + + +@app.middleware("http") +async def log_requests(request: Request, call_next): + logger.info("Request: %s %s", request.method, request.url.path) + response = await call_next(request) + logger.info("Response: %s %s -> %s", request.method, request.url.path, response.status_code) + return response + + +@app.exception_handler(StarletteHTTPException) +async def http_exception_handler(request: Request, exc: StarletteHTTPException): + if exc.status_code == 404: + return JSONResponse( + status_code=404, + content={ + "error": "Not Found", + "message": "Endpoint does not exist", + }, + ) + return JSONResponse( + status_code=exc.status_code, + content={"error": exc.detail}, + ) + + +@app.exception_handler(Exception) +async def unhandled_exception_handler(request: Request, exc: Exception): + logger.exception("Unhandled error: %s", exc) + return JSONResponse( + status_code=500, + content={ + "error": "Internal Server Error", + "message": "An unexpected error occurred", + }, + ) + + +@app.get("/") +async def root(request: Request): + uptime = get_uptime() + now = datetime.now(timezone.utc) + + response = { + "service": { + "name": SERVICE_NAME, + "version": SERVICE_VERSION, + "description": SERVICE_DESCRIPTION, + "framework": SERVICE_FRAMEWORK, + }, + "system": get_system_info(), + "runtime": { + "uptime_seconds": uptime["seconds"], + "uptime_human": uptime["human"], + "current_time": isoformat_utc(now), + "timezone": "UTC", + }, + "request": { + "client_ip": request.client.host if request.client else "unknown", + "user_agent": request.headers.get("user-agent", "unknown"), + "method": request.method, + "path": request.url.path, + }, + "endpoints": [ + {"path": "/", "method": "GET", "description": "Service information"}, + {"path": "/health", "method": "GET", "description": "Health check"}, + ], + } + + return response + + +@app.get("/health") +async def health(): + uptime = get_uptime() + return { + "status": "healthy", + "timestamp": isoformat_utc(datetime.now(timezone.utc)), + "uptime_seconds": uptime["seconds"], + } + + +if __name__ == "__main__": + logger.info("Starting DevOps Info Service on %s:%s", HOST, PORT) + uvicorn.run("app:app", host=HOST, port=PORT, reload=DEBUG, log_level="info") diff --git a/lab2c/app_python/docs/LAB02.md b/lab2c/app_python/docs/LAB02.md new file mode 100644 index 0000000000..dd91a49278 --- /dev/null +++ b/lab2c/app_python/docs/LAB02.md @@ -0,0 +1,111 @@ +# LAB02 - Docker Containerization (Python) + +## Docker Best Practices Applied +- **Pinned base image**: `python:3.13-slim` keeps the image small and reproducible. +- **Non-root user**: the container runs as `appuser`, so the service does not run as root. +- **Layer caching**: dependencies are installed before copying the app so rebuilds are faster. +- **Minimal copy**: only `requirements.txt` and `app.py` are copied into the image. +- **.dockerignore**: excluded tests, docs, and virtualenvs to keep the build context small. + +Dockerfile snippet: +```dockerfile +FROM python:3.13-slim +WORKDIR /app +RUN useradd -m -u 10001 appuser +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt +COPY --chown=appuser:appuser app.py . +USER appuser +``` + +## Image Information and Decisions +- **Base image choice**: `python:3.13-slim` is a good balance of size and compatibility. +- **Final image size**: `` +- **Layer structure**: dependencies are installed in their own layer to benefit from caching. +- **Optimization choices**: small base image, no extra build tools, only required files copied. + +Image size output: +```text +tsixphoenix/devops-info-python beta 04eec5e16beb 5 minutes ago 228MB +``` + +## Build and Run Process +Build output: +```text +docker build -t tsixphoenix/devops-info-python:beta . +[+] Building 16.7s (11/11) FINISHED docker:desktop-linux + => [internal] load build definition from Dockerfile 0.0s + => => transferring dockerfile: 332B 0.0s + => [internal] load metadata for docker.io/library/python:3.13-slim 2.3s + => [internal] load .dockerignore 0.0s + => => transferring context: 133B 0.0s + => [1/6] FROM docker.io/library/python:3.13-slim@sha256:51e1a0a317fdb6e170dc791bbeae63fac5272c82f43958ef74a34e170c6f8b18 2.4s + => => resolve docker.io/library/python:3.13-slim@sha256:51e1a0a317fdb6e170dc791bbeae63fac5272c82f43958ef74a34e170c6f8b18 0.0s + => => sha256:8843ea38a07e15ac1b99c72108fbb492f737032986cc0b65ed351f84e5521879 1.29MB / 1.29MB 0.5s + => => sha256:36b6de65fd8d6bd36071ea9efa7d078ebdc11ecc23d2426ec9c3e9f092ae824d 249B / 249B 0.6s + => => sha256:0bee50492702eb5d822fbcbac8f545a25f5fe173ec8030f57691aefcc283bbc9 11.79MB / 11.79MB 1.5s + => => extracting sha256:8843ea38a07e15ac1b99c72108fbb492f737032986cc0b65ed351f84e5521879 0.3s + => => extracting sha256:0bee50492702eb5d822fbcbac8f545a25f5fe173ec8030f57691aefcc283bbc9 0.8s + => => extracting sha256:36b6de65fd8d6bd36071ea9efa7d078ebdc11ecc23d2426ec9c3e9f092ae824d 0.0s + => [internal] load build context 0.0s + => => transferring context: 4.60kB 0.0s + => [2/6] WORKDIR /app 0.1s + => [3/6] RUN useradd -m -u 10001 appuser 0.6s + => [4/6] COPY requirements.txt . 0.0s + => [5/6] RUN pip install --no-cache-dir -r requirements.txt 8.8s + => [6/6] COPY --chown=appuser:appuser app.py . 0.1s + => exporting to image 2.1s + => => exporting layers 1.4s + => => exporting manifest sha256:89257312508e9a26af1f7400253d9556816a0fc9230a414836bcedb8a4881c86 0.0s + => => exporting config sha256:a7d85cde725e6fdfb1dfbccbb9daadb4138561a5698ac01f5f6e2780b62994f3 0.0s + => => exporting attestation manifest sha256:82c962563c14aaa47813d2f1b62afb9806c83dbb0519256fd9954a50ea14fd3f 0.0s + => => exporting manifest list sha256:04eec5e16beb90a39cdac694238e9c6301410b6fa987d7b7788c03287ed57da0 0.0s + => => naming to docker.io/tsixphoenix/devops-info-python:beta 0.0s + => => unpacking to docker.io/tsixphoenix/devops-info-python:beta +``` + +Run output (container start): +```text +docker run --rm -p 5000:5000 --name devops-info tsixphoenix/devops-info-python:beta +2026-01-29 12:23:57,799 - INFO - Starting DevOps Info Service on 0.0.0.0:5000 +INFO: Started server process [1] +INFO: Waiting for application startup. +INFO: Application startup complete. +INFO: Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit) +``` + +Endpoint checks: +```text +curl http://localhost:5000/ +{"service":{"name":"devops-info-service","version":"1.0.0","description":"DevOps course info service","framework":"FastAPI"},"system":{"hostname":"d65d9dfde3f9","platform":"Linux","platform_version":"6.6.87.2-microsoft-standard-WSL2","architecture":"x86_64","cpu_count":12,"python_version":"3.13.11"},"runtime":{"uptime_seconds":98,"uptime_human":"0 hours, 1 minute","current_time":"2026-01-29T12:25:35.964833Z","timezone":"UTC"},"request":{"client_ip":"172.17.0.1","user_agent":"curl/8.16.0","method":"GET","path":"/"},"endpoints":[{"path":"/","method":"GET","description":"Service information"},{"path":"/health","method":"GET","description":"Health check"}]} + +curl http://localhost:5000/health +{"status":"healthy","timestamp":"2026-01-29T12:25:56.660917Z","uptime_seconds":118} + +2026-01-29 12:25:35,964 - INFO - Request: GET / +2026-01-29 12:25:35,965 - INFO - Response: GET / -> 200 +INFO: 172.17.0.1:54462 - "GET / HTTP/1.1" 200 OK +2026-01-29 12:25:56,659 - INFO - Request: GET /health +2026-01-29 12:25:56,661 - INFO - Response: GET /health -> 200 +INFO: 172.17.0.1:57328 - "GET /health HTTP/1.1" 200 OK +``` + +Docker Hub repository URL: +``` +https://hub.docker.com/repository/docker/tsixphoenix/devops-info-python/general +``` + +Tagging strategy: +``` +version tag +``` + +## Technical Analysis +- The Dockerfile copies `requirements.txt` first so dependency layers are cached between builds. +- If I copied the whole project before installing dependencies, every code change would bust the cache. +- Running as a non-root user reduces risk if a container is compromised. +- `.dockerignore` keeps the build context small, which speeds up the build and reduces image size. + +## Challenges and Solutions +- I verified the app binds to `0.0.0.0` so it is reachable from outside the container. +- I double-checked that only the needed files are copied into the image to avoid bloating it. diff --git a/lab2c/app_python/requirements.txt b/lab2c/app_python/requirements.txt new file mode 100644 index 0000000000..792449289f --- /dev/null +++ b/lab2c/app_python/requirements.txt @@ -0,0 +1,2 @@ +fastapi==0.115.0 +uvicorn[standard]==0.32.0 diff --git a/lab2c/app_python/tests/__init__.py b/lab2c/app_python/tests/__init__.py new file mode 100644 index 0000000000..792d600548 --- /dev/null +++ b/lab2c/app_python/tests/__init__.py @@ -0,0 +1 @@ +# From 90a03b930a867a6c226f7c46d6150a3f48046283 Mon Sep 17 00:00:00 2001 From: Phoenix Date: Tue, 10 Feb 2026 15:14:07 +0300 Subject: [PATCH 02/16] feat: add lab3 CI pipeline --- .github/workflows/go-ci.yml | 76 ++++++++ .github/workflows/python-ci.yml | 104 +++++++++++ lab3c/app_go/.dockerignore | 7 + lab3c/app_go/Dockerfile | 21 +++ lab3c/app_go/README.md | 41 ++++ lab3c/app_go/docs/LAB03.md | 17 ++ lab3c/app_go/go.mod | 3 + lab3c/app_go/main.go | 257 ++++++++++++++++++++++++++ lab3c/app_go/main_test.go | 54 ++++++ lab3c/app_python/.dockerignore | 12 ++ lab3c/app_python/.gitignore | 14 ++ lab3c/app_python/Dockerfile | 19 ++ lab3c/app_python/README.md | 78 ++++++++ lab3c/app_python/app.py | 158 ++++++++++++++++ lab3c/app_python/docs/LAB03.md | 58 ++++++ lab3c/app_python/pyproject.toml | 3 + lab3c/app_python/requirements-dev.txt | 5 + lab3c/app_python/requirements.txt | 2 + lab3c/app_python/tests/__init__.py | 1 + lab3c/app_python/tests/test_app.py | 66 +++++++ 20 files changed, 996 insertions(+) create mode 100644 .github/workflows/go-ci.yml create mode 100644 .github/workflows/python-ci.yml create mode 100644 lab3c/app_go/.dockerignore create mode 100644 lab3c/app_go/Dockerfile create mode 100644 lab3c/app_go/README.md create mode 100644 lab3c/app_go/docs/LAB03.md create mode 100644 lab3c/app_go/go.mod create mode 100644 lab3c/app_go/main.go create mode 100644 lab3c/app_go/main_test.go create mode 100644 lab3c/app_python/.dockerignore create mode 100644 lab3c/app_python/.gitignore create mode 100644 lab3c/app_python/Dockerfile create mode 100644 lab3c/app_python/README.md create mode 100644 lab3c/app_python/app.py create mode 100644 lab3c/app_python/docs/LAB03.md create mode 100644 lab3c/app_python/pyproject.toml create mode 100644 lab3c/app_python/requirements-dev.txt create mode 100644 lab3c/app_python/requirements.txt create mode 100644 lab3c/app_python/tests/__init__.py create mode 100644 lab3c/app_python/tests/test_app.py diff --git a/.github/workflows/go-ci.yml b/.github/workflows/go-ci.yml new file mode 100644 index 0000000000..e09a65c488 --- /dev/null +++ b/.github/workflows/go-ci.yml @@ -0,0 +1,76 @@ +name: Go CI (Lab03 Bonus) + +on: + push: + branches: [lab03, main, master] + paths: + - "lab3c/app_go/**" + - ".github/workflows/go-ci.yml" + pull_request: + branches: [lab03, main, master] + paths: + - "lab3c/app_go/**" + - ".github/workflows/go-ci.yml" + +concurrency: + group: go-ci-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + test: + name: Lint and Test + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: "1.22" + + - name: golangci-lint + uses: golangci/golangci-lint-action@v6 + with: + working-directory: lab3c/app_go + args: --timeout=5m + + - name: Run tests + working-directory: lab3c/app_go + run: go test ./... + + docker: + name: Build and Push Docker Image + runs-on: ubuntu-latest + needs: test + if: ${{ github.event_name == 'push' }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Set version (CalVer) + run: echo "VERSION=$(date +%Y.%m.%d)" >> $GITHUB_ENV + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: ./lab3c/app_go + file: ./lab3c/app_go/Dockerfile + push: true + tags: | + ${{ secrets.DOCKERHUB_USERNAME }}/devops-info-go:${{ env.VERSION }} + ${{ secrets.DOCKERHUB_USERNAME }}/devops-info-go:latest + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml new file mode 100644 index 0000000000..5284899721 --- /dev/null +++ b/.github/workflows/python-ci.yml @@ -0,0 +1,104 @@ +name: Python CI (Lab03) + +on: + push: + branches: [lab03, main, master] + paths: + - "lab3c/app_python/**" + - ".github/workflows/python-ci.yml" + pull_request: + branches: [lab03, main, master] + paths: + - "lab3c/app_python/**" + - ".github/workflows/python-ci.yml" + +concurrency: + group: python-ci-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + test: + name: Lint and Test + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + python-version: ["3.11", "3.12"] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: "pip" + cache-dependency-path: | + lab3c/app_python/requirements.txt + lab3c/app_python/requirements-dev.txt + + - name: Install dependencies + working-directory: lab3c/app_python + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt -r requirements-dev.txt + + - name: Lint (ruff) + working-directory: lab3c/app_python + run: ruff check . + + - name: Run tests with coverage + working-directory: lab3c/app_python + run: pytest --cov=app --cov-report=xml --cov-report=term + + - name: Upload coverage to Codecov + if: ${{ secrets.CODECOV_TOKEN != '' }} + uses: codecov/codecov-action@v4 + with: + files: lab3c/app_python/coverage.xml + token: ${{ secrets.CODECOV_TOKEN }} + + - name: Snyk scan + if: ${{ secrets.SNYK_TOKEN != '' }} + uses: snyk/actions/python@master + env: + SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} + with: + command: test + args: --file=lab3c/app_python/requirements.txt + + docker: + name: Build and Push Docker Image + runs-on: ubuntu-latest + needs: test + if: ${{ github.event_name == 'push' }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Set version (CalVer) + run: echo "VERSION=$(date +%Y.%m.%d)" >> $GITHUB_ENV + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: ./lab3c/app_python + file: ./lab3c/app_python/Dockerfile + push: true + tags: | + ${{ secrets.DOCKERHUB_USERNAME }}/devops-info-python:${{ env.VERSION }} + ${{ secrets.DOCKERHUB_USERNAME }}/devops-info-python:latest + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/lab3c/app_go/.dockerignore b/lab3c/app_go/.dockerignore new file mode 100644 index 0000000000..55a3b7cb13 --- /dev/null +++ b/lab3c/app_go/.dockerignore @@ -0,0 +1,7 @@ +*.exe +*.log +.git/ +.gitignore +.idea/ +.vscode/ +docs/ diff --git a/lab3c/app_go/Dockerfile b/lab3c/app_go/Dockerfile new file mode 100644 index 0000000000..534bac98be --- /dev/null +++ b/lab3c/app_go/Dockerfile @@ -0,0 +1,21 @@ +FROM golang:1.22 AS builder + +WORKDIR /src + +COPY go.mod ./ +RUN go mod download + +COPY main.go ./ +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o devops-info + +FROM gcr.io/distroless/static-debian12:nonroot + +WORKDIR /app +COPY --from=builder /src/devops-info /app/devops-info + +ENV HOST=0.0.0.0 \ + PORT=5000 + +EXPOSE 5000 + +ENTRYPOINT ["/app/devops-info"] diff --git a/lab3c/app_go/README.md b/lab3c/app_go/README.md new file mode 100644 index 0000000000..36e81eb856 --- /dev/null +++ b/lab3c/app_go/README.md @@ -0,0 +1,41 @@ +# DevOps Info Service (Go) + +## Overview +Compiled-language version of the DevOps info service. It exposes the same two endpoints as the Python app and keeps the JSON response structure consistent. + +## Prerequisites +- Go 1.22+ installed + +## Build and Run +Run directly: +```bash +go run main.go +``` + +Build a binary: +```bash +go build -o devops-info +./devops-info +``` + +Windows build/run: +```bash +go build -o devops-info.exe +.\devops-info.exe +``` + +Custom config examples: +```bash +PORT=8080 go run main.go +HOST=127.0.0.1 PORT=3000 go run main.go +``` + +## API Endpoints +- `GET /` - Service and system information +- `GET /health` - Health check + +## Configuration +| Variable | Default | Description | +| --- | --- | --- | +| `HOST` | `0.0.0.0` | Bind address for the server | +| `PORT` | `5000` | Port to listen on | diff --git a/lab3c/app_go/docs/LAB03.md b/lab3c/app_go/docs/LAB03.md new file mode 100644 index 0000000000..2fc772a8e3 --- /dev/null +++ b/lab3c/app_go/docs/LAB03.md @@ -0,0 +1,17 @@ +# LAB03 - CI/CD (Go Bonus) + +## Multi-App CI Summary +I added a separate workflow for the Go app with its own path filters. This keeps Python and Go CI independent and avoids running jobs that are not needed. + +## Path Filters +- Go workflow runs only when `lab3c/app_go/**` or its workflow file changes. +- Python workflow runs only when `lab3c/app_python/**` or its workflow file changes. + +## Workflow Evidence +Add real links after CI runs: +- ✅ **Go workflow run:** `` +- ✅ **Docker image on Docker Hub:** `` + +## Notes +- Go CI uses `go test` and a basic lint step. +- Docker builds use the same CalVer tag scheme as Python. diff --git a/lab3c/app_go/go.mod b/lab3c/app_go/go.mod new file mode 100644 index 0000000000..7a7fcedd1c --- /dev/null +++ b/lab3c/app_go/go.mod @@ -0,0 +1,3 @@ +module devops-info-service + +go 1.22 diff --git a/lab3c/app_go/main.go b/lab3c/app_go/main.go new file mode 100644 index 0000000000..2abcd3938a --- /dev/null +++ b/lab3c/app_go/main.go @@ -0,0 +1,257 @@ +package main + +import ( + "encoding/json" + "fmt" + "log" + "net" + "net/http" + "os" + "runtime" + "strings" + "time" +) + +type Service struct { + Name string `json:"name"` + Version string `json:"version"` + Description string `json:"description"` + Framework string `json:"framework"` +} + +type System struct { + Hostname string `json:"hostname"` + Platform string `json:"platform"` + PlatformVersion string `json:"platform_version"` + Architecture string `json:"architecture"` + CPUCount int `json:"cpu_count"` + PythonVersion string `json:"python_version"` +} + +type Runtime struct { + UptimeSeconds int `json:"uptime_seconds"` + UptimeHuman string `json:"uptime_human"` + CurrentTime string `json:"current_time"` + Timezone string `json:"timezone"` +} + +type RequestInfo struct { + ClientIP string `json:"client_ip"` + UserAgent string `json:"user_agent"` + Method string `json:"method"` + Path string `json:"path"` +} + +type Endpoint struct { + Path string `json:"path"` + Method string `json:"method"` + Description string `json:"description"` +} + +type Response struct { + Service Service `json:"service"` + System System `json:"system"` + Runtime Runtime `json:"runtime"` + Request RequestInfo `json:"request"` + Endpoints []Endpoint `json:"endpoints"` +} + +var startTime = time.Now().UTC() + +func main() { + host := getenv("HOST", "0.0.0.0") + port := getenv("PORT", "5000") + addr := net.JoinHostPort(host, port) + + mux := http.NewServeMux() + mux.HandleFunc("/", rootHandler) + mux.HandleFunc("/health", healthHandler) + + handler := recoverMiddleware(loggingMiddleware(mux)) + + server := &http.Server{ + Addr: addr, + Handler: handler, + ReadHeaderTimeout: 5 * time.Second, + } + + log.Printf("Starting DevOps Info Service on %s", addr) + if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Fatalf("server error: %v", err) + } +} + +func rootHandler(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/" { + writeNotFound(w) + return + } + if r.Method != http.MethodGet { + writeMethodNotAllowed(w) + return + } + + uptimeSeconds, uptimeHuman := getUptime() + now := time.Now().UTC() + + hostname, _ := os.Hostname() + response := Response{ + Service: Service{ + Name: "devops-info-service", + Version: "1.0.0", + Description: "DevOps course info service", + Framework: "Go net/http", + }, + System: System{ + Hostname: hostname, + Platform: runtime.GOOS, + PlatformVersion: getPlatformVersion(), + Architecture: runtime.GOARCH, + CPUCount: runtime.NumCPU(), + PythonVersion: runtime.Version(), + }, + Runtime: Runtime{ + UptimeSeconds: uptimeSeconds, + UptimeHuman: uptimeHuman, + CurrentTime: now.Format(time.RFC3339), + Timezone: "UTC", + }, + Request: RequestInfo{ + ClientIP: getClientIP(r), + UserAgent: r.UserAgent(), + Method: r.Method, + Path: r.URL.Path, + }, + Endpoints: []Endpoint{ + {Path: "/", Method: "GET", Description: "Service information"}, + {Path: "/health", Method: "GET", Description: "Health check"}, + }, + } + + writeJSON(w, http.StatusOK, response) +} + +func healthHandler(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/health" { + writeNotFound(w) + return + } + if r.Method != http.MethodGet { + writeMethodNotAllowed(w) + return + } + + uptimeSeconds, _ := getUptime() + payload := map[string]any{ + "status": "healthy", + "timestamp": time.Now().UTC().Format(time.RFC3339), + "uptime_seconds": uptimeSeconds, + } + + writeJSON(w, http.StatusOK, payload) +} + +func getUptime() (int, string) { + seconds := int(time.Since(startTime).Seconds()) + hours := seconds / 3600 + minutes := (seconds % 3600) / 60 + hourLabel := "hours" + if hours == 1 { + hourLabel = "hour" + } + minuteLabel := "minutes" + if minutes == 1 { + minuteLabel = "minute" + } + return seconds, fmt.Sprintf("%d %s, %d %s", hours, hourLabel, minutes, minuteLabel) +} + +func getClientIP(r *http.Request) string { + if forwarded := r.Header.Get("X-Forwarded-For"); forwarded != "" { + parts := strings.Split(forwarded, ",") + return strings.TrimSpace(parts[0]) + } + host, _, err := net.SplitHostPort(r.RemoteAddr) + if err == nil { + return host + } + return r.RemoteAddr +} + +func getPlatformVersion() string { + if value := os.Getenv("OS"); value != "" { + return value + } + if data, err := os.ReadFile("/etc/os-release"); err == nil { + for _, line := range strings.Split(string(data), "\n") { + if strings.HasPrefix(line, "PRETTY_NAME=") { + return strings.Trim(strings.TrimPrefix(line, "PRETTY_NAME="), "\"") + } + } + } + return "unknown" +} + +func writeJSON(w http.ResponseWriter, status int, payload any) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + if err := json.NewEncoder(w).Encode(payload); err != nil { + log.Printf("json encode error: %v", err) + } +} + +func writeNotFound(w http.ResponseWriter) { + writeJSON(w, http.StatusNotFound, map[string]string{ + "error": "Not Found", + "message": "Endpoint does not exist", + }) +} + +func writeMethodNotAllowed(w http.ResponseWriter) { + writeJSON(w, http.StatusMethodNotAllowed, map[string]string{ + "error": "Method Not Allowed", + "message": "Only GET is supported for this endpoint", + }) +} + +type statusRecorder struct { + http.ResponseWriter + status int +} + +func (recorder *statusRecorder) WriteHeader(code int) { + recorder.status = code + recorder.ResponseWriter.WriteHeader(code) +} + +func loggingMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + recorder := &statusRecorder{ResponseWriter: w, status: http.StatusOK} + start := time.Now() + log.Printf("Request: %s %s", r.Method, r.URL.Path) + next.ServeHTTP(recorder, r) + log.Printf("Response: %s %s -> %d (%s)", r.Method, r.URL.Path, recorder.status, time.Since(start)) + }) +} + +func recoverMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + defer func() { + if err := recover(); err != nil { + log.Printf("panic recovered: %v", err) + writeJSON(w, http.StatusInternalServerError, map[string]string{ + "error": "Internal Server Error", + "message": "An unexpected error occurred", + }) + } + }() + next.ServeHTTP(w, r) + }) +} + +func getenv(key, fallback string) string { + if value := os.Getenv(key); value != "" { + return value + } + return fallback +} diff --git a/lab3c/app_go/main_test.go b/lab3c/app_go/main_test.go new file mode 100644 index 0000000000..b8ba60fefa --- /dev/null +++ b/lab3c/app_go/main_test.go @@ -0,0 +1,54 @@ +package main + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestRootHandlerOK(t *testing.T) { + req := httptest.NewRequest(http.MethodGet, "/", nil) + rec := httptest.NewRecorder() + + rootHandler(rec, req) + + if rec.Code != http.StatusOK { + t.Fatalf("expected 200, got %d", rec.Code) + } + + var payload map[string]any + if err := json.Unmarshal(rec.Body.Bytes(), &payload); err != nil { + t.Fatalf("invalid json: %v", err) + } + + if _, ok := payload["service"]; !ok { + t.Fatal("missing service section") + } + if _, ok := payload["system"]; !ok { + t.Fatal("missing system section") + } + if _, ok := payload["runtime"]; !ok { + t.Fatal("missing runtime section") + } +} + +func TestHealthHandlerOK(t *testing.T) { + req := httptest.NewRequest(http.MethodGet, "/health", nil) + rec := httptest.NewRecorder() + + healthHandler(rec, req) + + if rec.Code != http.StatusOK { + t.Fatalf("expected 200, got %d", rec.Code) + } + + var payload map[string]any + if err := json.Unmarshal(rec.Body.Bytes(), &payload); err != nil { + t.Fatalf("invalid json: %v", err) + } + + if payload["status"] != "healthy" { + t.Fatalf("unexpected status: %v", payload["status"]) + } +} diff --git a/lab3c/app_python/.dockerignore b/lab3c/app_python/.dockerignore new file mode 100644 index 0000000000..b7738de7b8 --- /dev/null +++ b/lab3c/app_python/.dockerignore @@ -0,0 +1,12 @@ +__pycache__/ +*.py[cod] +*.log +venv/ +.venv/ +.env +.git/ +.gitignore +.idea/ +.vscode/ +docs/ +tests/ diff --git a/lab3c/app_python/.gitignore b/lab3c/app_python/.gitignore new file mode 100644 index 0000000000..8052e93c8b --- /dev/null +++ b/lab3c/app_python/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.py[cod] +*.log +venv/ +.venv/ +.env + +# IDE +.idea/ +.vscode/ + +# OS +.DS_Store +Thumbs.db diff --git a/lab3c/app_python/Dockerfile b/lab3c/app_python/Dockerfile new file mode 100644 index 0000000000..76219e6c10 --- /dev/null +++ b/lab3c/app_python/Dockerfile @@ -0,0 +1,19 @@ +FROM python:3.13-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +WORKDIR /app + +RUN useradd -m -u 10001 appuser + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY --chown=appuser:appuser app.py . + +USER appuser + +EXPOSE 5000 + +CMD ["python", "app.py"] diff --git a/lab3c/app_python/README.md b/lab3c/app_python/README.md new file mode 100644 index 0000000000..321559cad9 --- /dev/null +++ b/lab3c/app_python/README.md @@ -0,0 +1,78 @@ +# DevOps Info Service (FastAPI) + +[![Python CI](https://github.com/TsixPhoenix/DevOps-CC/actions/workflows/python-ci.yml/badge.svg?branch=lab03)](https://github.com/TsixPhoenix/DevOps-CC/actions/workflows/python-ci.yml) +[![Coverage](https://codecov.io/gh/TsixPhoenix/DevOps-CC/branch/lab03/graph/badge.svg)](https://codecov.io/gh/TsixPhoenix/DevOps-CC) + +## Overview +Small service returning system info about the machine it runs on, plus a health check. + +## Prerequisites +- Python 3.11+ +- pip +- (Optional) venv tool + +## Installation +```bash +python -m venv venv +.\venv\Scripts\Activate.ps1 +pip install -r requirements.txt -r requirements-dev.txt +``` + +## Running the Application +```bash +python app.py +``` + +Custom config examples: +```bash +PORT=8080 python app.py +HOST=127.0.0.1 PORT=3000 python app.py +``` + +FastAPI docs: +- `http://localhost:/docs` + +## Tests +Run locally: +```bash +pytest +``` + +Run with coverage: +```bash +pytest --cov=app --cov-report=term +``` + +## API Endpoints +- `GET /` - Service and system information +- `GET /health` - Health check + +## Configuration +| Variable | Default | Description | +| --- | --- | --- | +| `HOST` | `0.0.0.0` | Bind address for the server | +| `PORT` | `5000` | Port to listen on | +| `DEBUG` | `False` | Enable auto-reload | + +## Docker +Command patterns (replace the placeholders with your values): + +**Build locally** +```bash +docker build -t /: . +``` + +**Run container** +```bash +docker run --rm -p :5000 --name /: +``` + +**Pull from Docker Hub** +```bash +docker pull /: +``` + +Optional env overrides: +```bash +docker run --rm -e PORT=5000 -e HOST=0.0.0.0 -p :5000 /: +``` diff --git a/lab3c/app_python/app.py b/lab3c/app_python/app.py new file mode 100644 index 0000000000..8935b94091 --- /dev/null +++ b/lab3c/app_python/app.py @@ -0,0 +1,158 @@ +""" +DevOps Info Service +FastAPI application module. +""" + +from __future__ import annotations + +import logging +import os +import platform +import socket +from datetime import datetime, timezone + +import uvicorn +from fastapi import FastAPI, Request +from fastapi.responses import JSONResponse +from starlette.exceptions import HTTPException as StarletteHTTPException + +# Config +HOST = os.getenv("HOST", "0.0.0.0") +PORT = int(os.getenv("PORT", "5000")) +DEBUG = os.getenv("DEBUG", "False").lower() == "true" + +SERVICE_NAME = "devops-info-service" +SERVICE_VERSION = "1.0.0" +SERVICE_DESCRIPTION = "DevOps course info service" +SERVICE_FRAMEWORK = "FastAPI" + +START_TIME = datetime.now(timezone.utc) + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(message)s", +) +logger = logging.getLogger("devops-info-service") + +app = FastAPI( + title="DevOps Info Service", + version=SERVICE_VERSION, + description=SERVICE_DESCRIPTION, +) + + +def _format_uptime(seconds: int) -> str: + hours = seconds // 3600 + minutes = (seconds % 3600) // 60 + hour_label = "hour" if hours == 1 else "hours" + minute_label = "minute" if minutes == 1 else "minutes" + return f"{hours} {hour_label}, {minutes} {minute_label}" + + +def get_uptime() -> dict[str, int | str]: + delta = datetime.now(timezone.utc) - START_TIME + seconds = int(delta.total_seconds()) + return { + "seconds": seconds, + "human": _format_uptime(seconds), + } + + +def get_system_info() -> dict[str, str | int]: + return { + "hostname": socket.gethostname(), + "platform": platform.system(), + "platform_version": platform.release(), + "architecture": platform.machine(), + "cpu_count": os.cpu_count() or 0, + "python_version": platform.python_version(), + } + + +def isoformat_utc(dt: datetime) -> str: + return dt.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") + + +@app.middleware("http") +async def log_requests(request: Request, call_next): + logger.info("Request: %s %s", request.method, request.url.path) + response = await call_next(request) + logger.info("Response: %s %s -> %s", request.method, request.url.path, response.status_code) + return response + + +@app.exception_handler(StarletteHTTPException) +async def http_exception_handler(request: Request, exc: StarletteHTTPException): + if exc.status_code == 404: + return JSONResponse( + status_code=404, + content={ + "error": "Not Found", + "message": "Endpoint does not exist", + }, + ) + return JSONResponse( + status_code=exc.status_code, + content={"error": exc.detail}, + ) + + +@app.exception_handler(Exception) +async def unhandled_exception_handler(request: Request, exc: Exception): + logger.exception("Unhandled error: %s", exc) + return JSONResponse( + status_code=500, + content={ + "error": "Internal Server Error", + "message": "An unexpected error occurred", + }, + ) + + +@app.get("/") +async def root(request: Request): + uptime = get_uptime() + now = datetime.now(timezone.utc) + + response = { + "service": { + "name": SERVICE_NAME, + "version": SERVICE_VERSION, + "description": SERVICE_DESCRIPTION, + "framework": SERVICE_FRAMEWORK, + }, + "system": get_system_info(), + "runtime": { + "uptime_seconds": uptime["seconds"], + "uptime_human": uptime["human"], + "current_time": isoformat_utc(now), + "timezone": "UTC", + }, + "request": { + "client_ip": request.client.host if request.client else "unknown", + "user_agent": request.headers.get("user-agent", "unknown"), + "method": request.method, + "path": request.url.path, + }, + "endpoints": [ + {"path": "/", "method": "GET", "description": "Service information"}, + {"path": "/health", "method": "GET", "description": "Health check"}, + ], + } + + return response + + +@app.get("/health") +async def health(): + uptime = get_uptime() + return { + "status": "healthy", + "timestamp": isoformat_utc(datetime.now(timezone.utc)), + "uptime_seconds": uptime["seconds"], + } + + +if __name__ == "__main__": + logger.info("Starting DevOps Info Service on %s:%s", HOST, PORT) + uvicorn.run("app:app", host=HOST, port=PORT, reload=DEBUG, log_level="info") diff --git a/lab3c/app_python/docs/LAB03.md b/lab3c/app_python/docs/LAB03.md new file mode 100644 index 0000000000..3a1772878c --- /dev/null +++ b/lab3c/app_python/docs/LAB03.md @@ -0,0 +1,58 @@ +# LAB03 - CI/CD (Python) + +## 1. Overview +**Testing framework:** I used `pytest`. The syntax is clean, fixtures are easy to work with, and it is the default choice in most Python projects I see. + +**What tests cover:** The tests hit `GET /`, `GET /health`, a 404 case, and helper functions like uptime formatting. I focused on structure and types instead of exact machine values. + +**Workflow triggers:** CI runs on push and pull requests to `lab03`, `main`, or `master`, but only when `lab3c/app_python/**` or the workflow file changes. + +**Versioning strategy:** I chose CalVer (YYYY.MM.DD). It is simple, and this service is released continuously rather than as a library. + +## 2. Workflow Evidence +Add real links and outputs after you run CI: +- **Successful workflow run:** `` +- **Tests passing locally:** +pytest +============================================================================================ test session starts ============================================================================================ +platform win32 -- Python 3.12.2, pytest-9.0.2, pluggy-1.6.0 +rootdir: C:\Users\Phoenix\PycharmProjects\DevOps\DevOps-CC\lab3c\app_python +configfile: pyproject.toml +plugins: anyio-4.12.1, cov-7.0.0 +collected 5 items + +tests\test_app.py ..... [100%] + +============================================================================================= 5 passed in 0.36s ============================================================================================= +- **Docker image on Docker Hub:** `` +- **Status badge:** `` + +## 3. Best Practices Implemented +- **Dependency caching:** `actions/setup-python` caches pip packages to speed up installs. +- **Job separation:** tests run in one job, Docker build/push depends on test success. +- **Conditional push:** Docker images only push on `push` events (not on PRs). +- **Concurrency:** newer runs cancel older runs for the same branch. +- **Path filters:** CI runs only when the Python app changes (monorepo friendly). +- **Snyk scanning:** dependency scan runs in CI (requires token). + +Caching time saved: +``` + +``` + +Snyk result: +``` + +``` + +## 4. Key Decisions +**Versioning Strategy:** CalVer fits a small service that ships frequently. It is easy to read and does not require manual version bumps. + +**Docker Tags:** The workflow publishes `YYYY.MM.DD` and `latest` tags for the same image. + +**Workflow Triggers:** I used path filters to avoid running Python CI when only Go code changes. + +**Test Coverage:** Core endpoints and helper functions are tested. I did not try to cover every logging line. + +## 5. Challenges (Optional) +- Everything was clear, because of experience of setting up CI/CD in my company workspace. diff --git a/lab3c/app_python/pyproject.toml b/lab3c/app_python/pyproject.toml new file mode 100644 index 0000000000..efb9a85312 --- /dev/null +++ b/lab3c/app_python/pyproject.toml @@ -0,0 +1,3 @@ +[tool.ruff] +select = ["E", "F"] +ignore = ["E501"] diff --git a/lab3c/app_python/requirements-dev.txt b/lab3c/app_python/requirements-dev.txt new file mode 100644 index 0000000000..c6610506e3 --- /dev/null +++ b/lab3c/app_python/requirements-dev.txt @@ -0,0 +1,5 @@ +pytest +pytest-cov +requests +ruff +httpx diff --git a/lab3c/app_python/requirements.txt b/lab3c/app_python/requirements.txt new file mode 100644 index 0000000000..792449289f --- /dev/null +++ b/lab3c/app_python/requirements.txt @@ -0,0 +1,2 @@ +fastapi==0.115.0 +uvicorn[standard]==0.32.0 diff --git a/lab3c/app_python/tests/__init__.py b/lab3c/app_python/tests/__init__.py new file mode 100644 index 0000000000..792d600548 --- /dev/null +++ b/lab3c/app_python/tests/__init__.py @@ -0,0 +1 @@ +# diff --git a/lab3c/app_python/tests/test_app.py b/lab3c/app_python/tests/test_app.py new file mode 100644 index 0000000000..ff942f197e --- /dev/null +++ b/lab3c/app_python/tests/test_app.py @@ -0,0 +1,66 @@ +from datetime import datetime, timezone + +from fastapi.testclient import TestClient + +from app import _format_uptime, app, get_system_info, get_uptime, isoformat_utc + + +client = TestClient(app) + + +def test_root_endpoint_structure(): + response = client.get("/") + assert response.status_code == 200 + + data = response.json() + assert "service" in data + assert "system" in data + assert "runtime" in data + assert "request" in data + assert "endpoints" in data + + service = data["service"] + assert service["name"] == "devops-info-service" + assert service["framework"] == "FastAPI" + + system = data["system"] + for key in ["hostname", "platform", "platform_version", "architecture", "cpu_count", "python_version"]: + assert key in system + + runtime = data["runtime"] + assert isinstance(runtime["uptime_seconds"], int) + assert isinstance(runtime["uptime_human"], str) + assert runtime["timezone"] == "UTC" + + +def test_health_endpoint_structure(): + response = client.get("/health") + assert response.status_code == 200 + data = response.json() + assert data["status"] == "healthy" + assert isinstance(data["uptime_seconds"], int) + assert "timestamp" in data + + +def test_not_found_returns_json(): + response = client.get("/does-not-exist") + assert response.status_code == 404 + data = response.json() + assert data["error"] == "Not Found" + + +def test_helpers_are_consistent(): + system = get_system_info() + assert system["hostname"] + assert system["platform"] + assert system["python_version"] + + uptime = get_uptime() + assert uptime["seconds"] >= 0 + assert "hours" in uptime["human"] or "hour" in uptime["human"] + + +def test_format_and_iso_helpers(): + assert _format_uptime(3660) == "1 hour, 1 minute" + test_dt = datetime(2024, 1, 1, tzinfo=timezone.utc) + assert isoformat_utc(test_dt) == "2024-01-01T00:00:00Z" From a2e9be9d5dd85027499d187c052e307defd6ddbe Mon Sep 17 00:00:00 2001 From: Phoenix Date: Tue, 10 Feb 2026 15:16:40 +0300 Subject: [PATCH 03/16] fix: use env for secrets --- .github/workflows/python-ci.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 5284899721..2d040aed9a 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -23,6 +23,9 @@ jobs: test: name: Lint and Test runs-on: ubuntu-latest + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} strategy: fail-fast: true matrix: @@ -55,17 +58,17 @@ jobs: run: pytest --cov=app --cov-report=xml --cov-report=term - name: Upload coverage to Codecov - if: ${{ secrets.CODECOV_TOKEN != '' }} + if: ${{ env.CODECOV_TOKEN != '' }} uses: codecov/codecov-action@v4 with: files: lab3c/app_python/coverage.xml - token: ${{ secrets.CODECOV_TOKEN }} + token: ${{ env.CODECOV_TOKEN }} - name: Snyk scan - if: ${{ secrets.SNYK_TOKEN != '' }} + if: ${{ env.SNYK_TOKEN != '' }} uses: snyk/actions/python@master env: - SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} + SNYK_TOKEN: ${{ env.SNYK_TOKEN }} with: command: test args: --file=lab3c/app_python/requirements.txt From c547e13a2cd676f1a398888aaa5a9ce554a34109 Mon Sep 17 00:00:00 2001 From: Phoenix Date: Tue, 10 Feb 2026 15:20:13 +0300 Subject: [PATCH 04/16] trigger ci --- lab3c/app_python/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab3c/app_python/README.md b/lab3c/app_python/README.md index 321559cad9..e12a3ea6bc 100644 --- a/lab3c/app_python/README.md +++ b/lab3c/app_python/README.md @@ -1,7 +1,7 @@ # DevOps Info Service (FastAPI) [![Python CI](https://github.com/TsixPhoenix/DevOps-CC/actions/workflows/python-ci.yml/badge.svg?branch=lab03)](https://github.com/TsixPhoenix/DevOps-CC/actions/workflows/python-ci.yml) -[![Coverage](https://codecov.io/gh/TsixPhoenix/DevOps-CC/branch/lab03/graph/badge.svg)](https://codecov.io/gh/TsixPhoenix/DevOps-CC) + ## Overview Small service returning system info about the machine it runs on, plus a health check. From 48163c47a621cfaa6f410530fa486187f31896de Mon Sep 17 00:00:00 2001 From: Phoenix Date: Tue, 10 Feb 2026 15:21:49 +0300 Subject: [PATCH 05/16] fix: ci trigger path --- .github/workflows/python-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 2d040aed9a..7004955f17 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -2,12 +2,12 @@ name: Python CI (Lab03) on: push: - branches: [lab03, main, master] + branches: [lab3, main, master] paths: - "lab3c/app_python/**" - ".github/workflows/python-ci.yml" pull_request: - branches: [lab03, main, master] + branches: [lab3, main, master] paths: - "lab3c/app_python/**" - ".github/workflows/python-ci.yml" From dcf70721ea6c72e6bcd7b899e3f09c28b292b672 Mon Sep 17 00:00:00 2001 From: Phoenix Date: Tue, 10 Feb 2026 15:25:44 +0300 Subject: [PATCH 06/16] fix: snyk fix --- .github/workflows/python-ci.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 7004955f17..d61adcda2b 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -64,14 +64,16 @@ jobs: files: lab3c/app_python/coverage.xml token: ${{ env.CODECOV_TOKEN }} + - name: Install Snyk CLI + if: ${{ env.SNYK_TOKEN != '' }} + run: npm install -g snyk + - name: Snyk scan if: ${{ env.SNYK_TOKEN != '' }} - uses: snyk/actions/python@master + working-directory: lab3c/app_python + run: snyk test --file=requirements.txt --package-manager=pip env: SNYK_TOKEN: ${{ env.SNYK_TOKEN }} - with: - command: test - args: --file=lab3c/app_python/requirements.txt docker: name: Build and Push Docker Image From 25f225d6653b95a6e3482c4a6d52eb721ab5a18b Mon Sep 17 00:00:00 2001 From: Phoenix Date: Tue, 10 Feb 2026 15:32:15 +0300 Subject: [PATCH 07/16] fix: upgrade fastApi to resolve snyk issues --- lab3c/app_python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab3c/app_python/requirements.txt b/lab3c/app_python/requirements.txt index 792449289f..01c3cb3565 100644 --- a/lab3c/app_python/requirements.txt +++ b/lab3c/app_python/requirements.txt @@ -1,2 +1,2 @@ -fastapi==0.115.0 +fastapi==0.128.6 uvicorn[standard]==0.32.0 From 38c2836de01ad0ea82bac61635fdd0f05c0c1a7e Mon Sep 17 00:00:00 2001 From: Phoenix Date: Tue, 10 Feb 2026 15:45:35 +0300 Subject: [PATCH 08/16] docs update --- lab3c/app_go/docs/LAB03.md | 5 ++--- lab3c/app_python/docs/LAB03.md | 28 ++++++++++++++++++---------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/lab3c/app_go/docs/LAB03.md b/lab3c/app_go/docs/LAB03.md index 2fc772a8e3..2ae68b20de 100644 --- a/lab3c/app_go/docs/LAB03.md +++ b/lab3c/app_go/docs/LAB03.md @@ -8,9 +8,8 @@ I added a separate workflow for the Go app with its own path filters. This keeps - Python workflow runs only when `lab3c/app_python/**` or its workflow file changes. ## Workflow Evidence -Add real links after CI runs: -- ✅ **Go workflow run:** `` -- ✅ **Docker image on Docker Hub:** `` +- **Go workflow run:** +- **Docker image on Docker Hub:** ## Notes - Go CI uses `go test` and a basic lint step. diff --git a/lab3c/app_python/docs/LAB03.md b/lab3c/app_python/docs/LAB03.md index 3a1772878c..530353eaba 100644 --- a/lab3c/app_python/docs/LAB03.md +++ b/lab3c/app_python/docs/LAB03.md @@ -11,7 +11,7 @@ ## 2. Workflow Evidence Add real links and outputs after you run CI: -- **Successful workflow run:** `` +- **Successful workflow run:** https://github.com/TsixPhoenix/DevOps-CC/actions/runs/21865003310/job/63103839665 - **Tests passing locally:** pytest ============================================================================================ test session starts ============================================================================================ @@ -24,8 +24,8 @@ collected 5 items tests\test_app.py ..... [100%] ============================================================================================= 5 passed in 0.36s ============================================================================================= -- **Docker image on Docker Hub:** `` -- **Status badge:** `` +- **Docker image on Docker Hub:** https://hub.docker.com/repository/docker/tsixphoenix/devops-info-python/general +- **Status badge:** Works, shows green check ## 3. Best Practices Implemented - **Dependency caching:** `actions/setup-python` caches pip packages to speed up installs. @@ -33,16 +33,24 @@ tests\test_app.py ..... - **Conditional push:** Docker images only push on `push` events (not on PRs). - **Concurrency:** newer runs cancel older runs for the same branch. - **Path filters:** CI runs only when the Python app changes (monorepo friendly). -- **Snyk scanning:** dependency scan runs in CI (requires token). +- **Snyk scanning:** dependency scan runs in CI. -Caching time saved: -``` - -``` Snyk result: ``` - +Run snyk test --file=requirements.txt --package-manager=pip + +Testing /home/runner/work/DevOps-CC/DevOps-CC/lab3c/app_python... + +Organization: tsixphoenix +Package manager: pip +Target file: requirements.txt +Project name: app_python +Open source: no +Project path: /home/runner/work/DevOps-CC/DevOps-CC/lab3c/app_python +Licenses: enabled + +✔ Tested 13 dependencies for known issues, no vulnerable paths found. ``` ## 4. Key Decisions @@ -54,5 +62,5 @@ Snyk result: **Test Coverage:** Core endpoints and helper functions are tested. I did not try to cover every logging line. -## 5. Challenges (Optional) +## 5. Challenges - Everything was clear, because of experience of setting up CI/CD in my company workspace. From ab7845153448c2114b9236246b4c5d655cbdbd94 Mon Sep 17 00:00:00 2001 From: Phoenix Date: Thu, 19 Feb 2026 18:16:22 +0300 Subject: [PATCH 09/16] complete lab4 --- .github/workflows/terraform-ci.yml | 51 ++++++ lab4c/docs/LAB04.md | 190 +++++++++++++++++++++++ lab4c/pulumi/.gitignore | 19 +++ lab4c/pulumi/Pulumi.yaml | 4 + lab4c/pulumi/README.md | 50 ++++++ lab4c/pulumi/__main__.py | 102 ++++++++++++ lab4c/pulumi/requirements.txt | 3 + lab4c/terraform/.gitignore | 21 +++ lab4c/terraform/.tflint.hcl | 3 + lab4c/terraform/README.md | 59 +++++++ lab4c/terraform/main.tf | 101 ++++++++++++ lab4c/terraform/outputs.tf | 9 ++ lab4c/terraform/terraform.tfvars.example | 5 + lab4c/terraform/variables.tf | 26 ++++ 14 files changed, 643 insertions(+) create mode 100644 .github/workflows/terraform-ci.yml create mode 100644 lab4c/docs/LAB04.md create mode 100644 lab4c/pulumi/.gitignore create mode 100644 lab4c/pulumi/Pulumi.yaml create mode 100644 lab4c/pulumi/README.md create mode 100644 lab4c/pulumi/__main__.py create mode 100644 lab4c/pulumi/requirements.txt create mode 100644 lab4c/terraform/.gitignore create mode 100644 lab4c/terraform/.tflint.hcl create mode 100644 lab4c/terraform/README.md create mode 100644 lab4c/terraform/main.tf create mode 100644 lab4c/terraform/outputs.tf create mode 100644 lab4c/terraform/terraform.tfvars.example create mode 100644 lab4c/terraform/variables.tf diff --git a/.github/workflows/terraform-ci.yml b/.github/workflows/terraform-ci.yml new file mode 100644 index 0000000000..42a0c50418 --- /dev/null +++ b/.github/workflows/terraform-ci.yml @@ -0,0 +1,51 @@ +name: Terraform Validate (Lab04) + +on: + push: + branches: [lab04, main, master] + paths: + - "lab4c/terraform/**" + - ".github/workflows/terraform-ci.yml" + pull_request: + branches: [lab04, main, master] + paths: + - "lab4c/terraform/**" + - ".github/workflows/terraform-ci.yml" + +jobs: + validate: + name: Format, Validate, Lint + runs-on: ubuntu-latest + defaults: + run: + working-directory: lab4c/terraform + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Terraform + uses: hashicorp/setup-terraform@v3 + with: + terraform_version: "1.9" + terraform_wrapper: false + + - name: Terraform Format Check + run: terraform fmt -check -recursive + + - name: Terraform Init + run: terraform init -backend=false + + - name: Terraform Validate + run: terraform validate + + - name: Setup TFLint + uses: terraform-linters/setup-tflint@v4 + with: + tflint_version: latest + + - name: TFLint Init + run: tflint --init + + - name: TFLint + run: tflint --format compact + continue-on-error: true diff --git a/lab4c/docs/LAB04.md b/lab4c/docs/LAB04.md new file mode 100644 index 0000000000..5af0ddc8e7 --- /dev/null +++ b/lab4c/docs/LAB04.md @@ -0,0 +1,190 @@ +# LAB04 — Infrastructure as Code (Terraform & Pulumi) + +## 1. Cloud Provider & Infrastructure + +- **Cloud provider:** Yandex Cloud. +- **Rationale:** Used Yandex Cloud for this lab because of the free tier +- **Instance:** standard-v3, 2 cores 20%, 1 GB RAM, 10 GB disk. +- **Zone:** ru-central1-a. +- **Estimated cost:** Effectively $0 with the free tier for this kind of usage. +- **Resources created:** + - 1× VPC network + - 1× subnet + - 1× security group (SSH 22, HTTP 80, 5000) + - 1× compute instance (Ubuntu 22.04) + - Public IP + +## 2. Terraform Implementation + +- **Terraform version:** Terraform v1.14.5 +- **Project structure:** `terraform/` — main.tf (provider, Ubuntu image data source, VPC, subnet, security group, instance), variables.tf, outputs.tf, terraform.tfvars (gitignored). Auth via service account key path in tfvars +- **Key decisions:** Variables for folder_id, zone, SSH key path, and SSH CIDR so the same code works across environments. Data source for the latest Ubuntu 22.04 LTS image. Security group restricts SSH to our IP only; HTTP and 5000 are open for the app. +- **Challenges:** Getting auth right at first; I ended up putting the key file path in terraform.tfvars). Also hit the VPC network quota once and had to extend it. + +**Terminal output:** + +- `terraform init`: + ``` +terraform init +Initializing the backend... +Initializing provider plugins... +- Finding yandex-cloud/yandex versions matching "~> 0.100"... +- Installing yandex-cloud/yandex v0.187.0... +- Installed yandex-cloud/yandex v0.187.0 + ``` +- `terraform plan`: + ``` +terraform plan +data.yandex_compute_image.ubuntu: Reading... +data.yandex_compute_image.ubuntu: Read complete after 0s [id=***********] + +Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the +following symbols: + + create + +Terraform will perform the following actions: + + # yandex_compute_instance.lab4 will be created + + resource "yandex_compute_instance" "lab4" { + ``` +- `terraform apply`: + ``` +terraform apply +data.yandex_compute_image.ubuntu: Reading... +data.yandex_compute_image.ubuntu: Read complete after 0s [id=***********] + +Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the +following symbols: + + create + +Terraform will perform the following actions: + + # yandex_compute_instance.lab4 will be created + + resource "yandex_compute_instance" "lab4" { + ``` +- `SSH to VM`: + ``` +The programs included with the Ubuntu system are free software; +the exact distribution terms for each program are described in the +individual files in /usr/share/doc/*/copyright. + +Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by +applicable law. + +To run a command as administrator (user "root"), use "sudo ". +See "man sudo_root" for details. + +ubuntu@fhm24d5clqr3oh7b101s:~$ + ``` + +## 3. Pulumi Implementation + +- **Pulumi version and language:** Pulumi v3.222.0, Python 3.x. +- **How it differs from Terraform:** Same logical resources (VPC, subnet, security group, VM), but defined in Python. You get normal Python (loops, functions, types) and the same state/plan/apply workflow. +- **Advantages:** Felt easier. Outputs are straightforward. +- **Challenges:** Initial setup took a bit: venv, `setuptools<82` for `pkg_resources`, and provider auth. + +**Terminal output:** + +- `pulumi preview`: + ``` + pulumi preview +Previewing update (dev) + +View in Browser (Ctrl+O): + + Type Name Plan Info + + pulumi:pulumi:Stack lab4c-vm-dev create 2 messages + + ├─ yandex:index:VpcNetwork lab4c-network create + + ├─ yandex:index:VpcSubnet lab4c-subnet create + + ├─ yandex:index:VpcSecurityGroup lab4c-vm-sg create + + └─ yandex:index:ComputeInstance lab4c-vm create +Diagnostics: + pulumi:pulumi:Stack (lab4c-vm-dev): + import pkg_resources + +Outputs: + public_ip : [unknown] + ssh_command: [unknown] + +Resources: + + 5 to create + ``` +- `pulumi up`: + ``` + pulumi up +Previewing update (dev) + +View in Browser (Ctrl+O): + Type Name Plan Info + pulumi:pulumi:Stack lab4c-vm-dev 2 messages + + ├─ yandex:index:VpcNetwork lab4c-network create + + ├─ yandex:index:VpcSubnet lab4c-subnet create + + ├─ yandex:index:VpcSecurityGroup lab4c-vm-sg create + + └─ yandex:index:ComputeInstance lab4c-vm create +Diagnostics: + pulumi:pulumi:Stack (lab4c-vm-dev): + import pkg_resources + + [Pulumi Neo] Would you like help with these diagnostics? + +Outputs: + + public_ip : [unknown] + + ssh_command: [unknown] + +Resources: + + 4 to create + 1 unchanged + +Do you want to perform this update? yes +Updating (dev) + ``` +- SSH to VM: + ``` + The programs included with the Ubuntu system are free software; +the exact distribution terms for each program are described in the +individual files in /usr/share/doc/*/copyright. + +Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by +applicable law. + +To run a command as administrator (user "root"), use "sudo ". +See "man sudo_root" for details. + +ubuntu@fhm8nea1kubnsde4ooqn:~$ + ``` + +## 4. Terraform vs Pulumi Comparison + +- **Ease of learning:** Terraform is easier if you only care about “describe resources in a file and apply.” HCL is small and focused. Pulumi is easier if you already know Python and want to use normal code; +- **Code readability:** Both are readable. Terraform is very declarative: you see resources and attributes. Pulumi looks like normal code, so you can structure it with variables and functions. +- **Debugging:** With Terraform, you rely on plan/apply messages and sometimes `terraform state`. With Pulumi, you get Python stack traces and can add prints or a debugger; the program runs in your environment, which helps. +- **Documentation:** all services are well documented +- **Use case:** I’d pick Terraform when the team is standardizing on it, when you want maximum portability (HCL, big ecosystem), or when you’re mostly gluing provider resources. I’d pick Pulumi when the team is code-first, when you want to share logic with the rest of your app (same language, tests, refactors), or when you need loops, conditionals, or abstractions that are clumsy in HCL. + +## 5. Lab 5 Preparation & Cleanup + +**VM for Lab 5:** + +- **Keeping VM for Lab 5?** No. +- **Plan for Lab 5:** Will recreate a cloud VM when needed + +**Cleanup status:** +``` +terraform destroy +Destroy complete! Resources: 4 destroyed. +``` +and +``` +pulumi destroy +Previewing destroy (dev) + +View in Browser (Ctrl+O): + + Type Name Plan + - pulumi:pulumi:Stack lab4c-vm-dev delete + - ├─ yandex:index:ComputeInstance lab4c-vm delete + - ├─ yandex:index:VpcSubnet lab4c-subnet delete + - ├─ yandex:index:VpcSecurityGroup lab4c-vm-sg delete + - └─ yandex:index:VpcNetwork lab4c-network delete +``` diff --git a/lab4c/pulumi/.gitignore b/lab4c/pulumi/.gitignore new file mode 100644 index 0000000000..25c1585ba2 --- /dev/null +++ b/lab4c/pulumi/.gitignore @@ -0,0 +1,19 @@ +# Pulumi +Pulumi.*.yaml +!Pulumi.yaml +.pulumi/ + +# Python +__pycache__/ +*.py[cod] +venv/ +.venv/ +*.egg-info/ + +# IDE +.idea/ +.vscode/ + +# OS +.DS_Store +Thumbs.db diff --git a/lab4c/pulumi/Pulumi.yaml b/lab4c/pulumi/Pulumi.yaml new file mode 100644 index 0000000000..a3e2d9124e --- /dev/null +++ b/lab4c/pulumi/Pulumi.yaml @@ -0,0 +1,4 @@ +name: lab4c-vm +runtime: python +description: Lab 4 - VM on Yandex cloud + diff --git a/lab4c/pulumi/README.md b/lab4c/pulumi/README.md new file mode 100644 index 0000000000..5c263e239d --- /dev/null +++ b/lab4c/pulumi/README.md @@ -0,0 +1,50 @@ +# Lab 4 — Pulumi (Yandex Cloud) + +Same infrastructure as the Terraform stack: one VM, VPC, subnet, security group (SSH, HTTP, 5000). + +## Prerequisites + +- Pulumi CLI 3.x +- Python 3.9+ +- Yandex Cloud account (same auth as for Terraform: `YANDEX_TOKEN` or service account key) + +## Config + + +```bash +pulumi config set folder_id your-yandex-folder-id +pulumi config set ssh_cidr "YOUR_IP/32" +pulumi config set ssh_public_key "$(cat %USERPROFILE%\.ssh\id_rsa.pub)" +``` + +```powershell +pulumi config set ssh_public_key "$(Get-Content $env:USERPROFILE\.ssh\id_rsa.pub -Raw)" +``` + +Optional: `pulumi config set zone ru-central1-a` + +## Setup + +1. Log in to Pulumi: `pulumi login` +2. Create stack: `pulumi stack init dev` +3. Install deps and run: + + ```powershell + python -m venv venv + .\venv\Scripts\Activate.ps1 + pip install -r requirements.txt + pulumi preview + pulumi up + ``` + +4. SSH to VM: + + ```powershell + ssh ubuntu@$(pulumi stack output public_ip) + ``` + +## Cleanup + +```bash +pulumi destroy +``` diff --git a/lab4c/pulumi/__main__.py b/lab4c/pulumi/__main__.py new file mode 100644 index 0000000000..54482de1c3 --- /dev/null +++ b/lab4c/pulumi/__main__.py @@ -0,0 +1,102 @@ +"""Lab 4 - Create VM on Yandex Cloud (same as Terraform).""" +import os +import pulumi + +config = pulumi.Config() +key_file = config.get("yandex_service_account_key_file") +if key_file: + os.environ["YANDEX_SERVICE_ACCOUNT_KEY_FILE"] = key_file + +import pulumi_yandex as yandex + +folder_id = config.require("folder_id") +zone = config.get("zone") or "ru-central1-a" +ssh_public_key = config.require("ssh_public_key") +ssh_cidr = config.require("ssh_cidr") + +# Ubuntu 22.04 LTS +image = yandex.get_compute_image(family="ubuntu-2204-lts") + +network = yandex.VpcNetwork( + "lab4c-network", + name="lab4c-network", + folder_id=folder_id, +) + +subnet = yandex.VpcSubnet( + "lab4c-subnet", + name="lab4c-subnet", + network_id=network.id, + zone=zone, + folder_id=folder_id, + v4_cidr_blocks=["10.0.1.0/24"], +) + +sg = yandex.VpcSecurityGroup( + "lab4c-vm-sg", + name="lab4c-vm-sg", + network_id=network.id, + folder_id=folder_id, + description="Allow SSH, HTTP, and port 5000 for Lab 4", + ingresses=[ + yandex.VpcSecurityGroupIngressArgs( + description="SSH", + port=22, + protocol="TCP", + v4_cidr_blocks=[ssh_cidr], + ), + yandex.VpcSecurityGroupIngressArgs( + description="HTTP", + port=80, + protocol="TCP", + v4_cidr_blocks=["0.0.0.0/0"], + ), + yandex.VpcSecurityGroupIngressArgs( + description="App 5000", + port=5000, + protocol="TCP", + v4_cidr_blocks=["0.0.0.0/0"], + ), + ], + egresses=[ + yandex.VpcSecurityGroupEgressArgs( + description="Any", + protocol="ANY", + v4_cidr_blocks=["0.0.0.0/0"], + ), + ], +) + +vm = yandex.ComputeInstance( + "lab4c-vm", + name="lab4c-vm", + zone=zone, + folder_id=folder_id, + platform_id="standard-v3", + resources=yandex.ComputeInstanceResourcesArgs( + cores=2, + memory=1, + core_fraction=20, + ), + boot_disk=yandex.ComputeInstanceBootDiskArgs( + initialize_params=yandex.ComputeInstanceBootDiskInitializeParamsArgs( + image_id=image.id, + size=10, + type="network-hdd", + ), + ), + network_interfaces=[ + yandex.ComputeInstanceNetworkInterfaceArgs( + subnet_id=subnet.id, + nat=True, + security_group_ids=[sg.id], + ), + ], + metadata={ + "ssh-keys": f"ubuntu:{ssh_public_key}", + }, + labels={"lab": "lab04"}, +) + +pulumi.export("public_ip", vm.network_interfaces[0].nat_ip_address) +pulumi.export("ssh_command", pulumi.Output.concat("ssh ubuntu@", vm.network_interfaces[0].nat_ip_address)) diff --git a/lab4c/pulumi/requirements.txt b/lab4c/pulumi/requirements.txt new file mode 100644 index 0000000000..c2955fc5a6 --- /dev/null +++ b/lab4c/pulumi/requirements.txt @@ -0,0 +1,3 @@ +pulumi>=3.0.0 +pulumi-yandex>=0.13.0 +setuptools>=65.0.0,<82 diff --git a/lab4c/terraform/.gitignore b/lab4c/terraform/.gitignore new file mode 100644 index 0000000000..df419991b7 --- /dev/null +++ b/lab4c/terraform/.gitignore @@ -0,0 +1,21 @@ +# Terraform +*.tfstate +*.tfstate.* +.terraform/ +.terraform.lock.hcl +terraform.tfvars +*.tfvars +*.tfvars.json +crash.log +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# Credentials +*.pem +*.key +*.json +!package.json +credentials +.env diff --git a/lab4c/terraform/.tflint.hcl b/lab4c/terraform/.tflint.hcl new file mode 100644 index 0000000000..75d15f14aa --- /dev/null +++ b/lab4c/terraform/.tflint.hcl @@ -0,0 +1,3 @@ +plugin "terraform" { + enabled = true +} diff --git a/lab4c/terraform/README.md b/lab4c/terraform/README.md new file mode 100644 index 0000000000..aee3cb8444 --- /dev/null +++ b/lab4c/terraform/README.md @@ -0,0 +1,59 @@ +# Lab 4 — Terraform (Yandex Cloud) + +Creates one VM (free tier: 2 cores 20%, 1 GB RAM, 10 GB disk), VPC, subnet, security group (SSH, HTTP, 5000), and outputs public IP. + +## Prerequisites + +- Terraform 1.9+ +- Yandex Cloud account +- SSH key pair on your machine (e.g. `ssh-keygen`); you will use the **public** key path in Terraform + +## Authentication + +Use one of these (do not commit secrets): + +1. **OAuth token (quick):** + `set YANDEX_TOKEN=your_oauth_token` (cmd) or `$env:YANDEX_TOKEN = "..."` (PowerShell) + +2. **Service account key file:** + Create a service account in Yandex Cloud Console, create an authorized key (JSON), then: + `set YANDEX_SERVICE_ACCOUNT_KEY_FILE=C:\path\to\key.json` + or in `terraform.tfvars`: `yandex_token` (prefer env vars). + +3. **Folder ID:** + In Console: Cloud → folder → copy ID. Set in `terraform.tfvars` as `yandex_folder_id`. + +## Setup + +1. Copy and edit variables: + - **Windows:** `copy terraform.tfvars.example terraform.tfvars` + - **Linux/macOS:** `cp terraform.tfvars.example terraform.tfvars` + Edit: + - `yandex_folder_id` — your folder ID + - `yandex_zone` — e.g. `ru-central1-a` + - `ssh_public_key_path` — full path to your `.pub` file (e.g. `C:\Users\You\.ssh\id_rsa.pub` or `%USERPROFILE%\.ssh\id_rsa.pub`) + - `ssh_cidr` — your IP/32 (e.g. from https://ifconfig.me) + +2. Initialize and apply: + ```bash + terraform init + terraform plan + terraform apply + ``` + +3. SSH to VM (no `-i` needed if you use the same key as the one in metadata): + - **PowerShell:** `ssh ubuntu@$(terraform output -raw public_ip)` + - Or: `ssh -i C:\path\to\your_private_key ubuntu@` + +## Cleanup + +```bash +terraform destroy +``` + +## Files + +- `main.tf` — provider, network, subnet, security group, instance +- `variables.tf` — folder_id, zone, ssh_public_key_path, ssh_cidr +- `outputs.tf` — public_ip, ssh_command +- `terraform.tfvars` — your values (gitignored) diff --git a/lab4c/terraform/main.tf b/lab4c/terraform/main.tf new file mode 100644 index 0000000000..5152f76f06 --- /dev/null +++ b/lab4c/terraform/main.tf @@ -0,0 +1,101 @@ +terraform { + required_version = ">= 1.9" + required_providers { + yandex = { + source = "yandex-cloud/yandex" + version = "~> 0.100" + } + } +} + +provider "yandex" { + zone = var.yandex_zone + folder_id = var.yandex_folder_id + service_account_key_file = var.yandex_service_account_key_file +} + +# Ubuntu 22.04 +data "yandex_compute_image" "ubuntu" { + family = "ubuntu-2204-lts" +} + +resource "yandex_vpc_network" "lab4" { + name = "lab4c-network" +} + +resource "yandex_vpc_subnet" "lab4" { + name = "lab4c-subnet" + network_id = yandex_vpc_network.lab4.id + zone = var.yandex_zone + v4_cidr_blocks = ["10.0.1.0/24"] +} + +resource "yandex_vpc_security_group" "lab4" { + name = "lab4c-vm-sg" + network_id = yandex_vpc_network.lab4.id + description = "Allow SSH, HTTP, and port 5000 for Lab 4" + + ingress { + description = "SSH" + port = 22 + protocol = "TCP" + v4_cidr_blocks = [var.ssh_cidr] + } + + ingress { + description = "HTTP" + port = 80 + protocol = "TCP" + v4_cidr_blocks = ["0.0.0.0/0"] + } + + ingress { + description = "App 5000" + port = 5000 + protocol = "TCP" + v4_cidr_blocks = ["0.0.0.0/0"] + } + + egress { + description = "Any" + from_port = 0 + to_port = 65535 + protocol = "ANY" + v4_cidr_blocks = ["0.0.0.0/0"] + } +} + +resource "yandex_compute_instance" "lab4" { + name = "lab4c-vm" + platform_id = "standard-v3" + zone = var.yandex_zone + folder_id = var.yandex_folder_id + + resources { + cores = 2 + memory = 1 + core_fraction = 20 + } + + boot_disk { + initialize_params { + image_id = data.yandex_compute_image.ubuntu.id + size = 10 + type = "network-hdd" + } + } + + network_interface { + subnet_id = yandex_vpc_subnet.lab4.id + nat = true + security_group_ids = [yandex_vpc_security_group.lab4.id] + } + + metadata = { + ssh-keys = "ubuntu:${file(var.ssh_public_key_path)}" + } + + labels = { + lab = "lab04" + } +} diff --git a/lab4c/terraform/outputs.tf b/lab4c/terraform/outputs.tf new file mode 100644 index 0000000000..2821ecd1bc --- /dev/null +++ b/lab4c/terraform/outputs.tf @@ -0,0 +1,9 @@ +output "public_ip" { + description = "Public IP of the VM" + value = yandex_compute_instance.lab4.network_interface[0].nat_ip_address +} + +output "ssh_command" { + description = "Example SSH command" + value = "ssh ubuntu@${yandex_compute_instance.lab4.network_interface[0].nat_ip_address}" +} diff --git a/lab4c/terraform/terraform.tfvars.example b/lab4c/terraform/terraform.tfvars.example new file mode 100644 index 0000000000..f36767e4d3 --- /dev/null +++ b/lab4c/terraform/terraform.tfvars.example @@ -0,0 +1,5 @@ +yandex_folder_id = +yandex_zone = +yandex_service_account_key_file = +ssh_public_key_path = +ssh_cidr = "1.2.3.4/32" diff --git a/lab4c/terraform/variables.tf b/lab4c/terraform/variables.tf new file mode 100644 index 0000000000..0d121ae84c --- /dev/null +++ b/lab4c/terraform/variables.tf @@ -0,0 +1,26 @@ +variable "yandex_folder_id" { + description = "Yandex Cloud folder ID" + type = string +} + +variable "yandex_zone" { + description = "Yandex Cloud zone" + type = string + default = "ru-central1-a" +} + +variable "ssh_public_key_path" { + description = "Path to your SSH public key file" + type = string +} + +variable "ssh_cidr" { + description = "CIDR allowed for SSH" + type = string +} + +variable "yandex_service_account_key_file" { + description = "Path to Yandex service account JSON key" + type = string + default = null +} From ad335a4f860b8c19bd2fdd82f51f44c01bc8624b Mon Sep 17 00:00:00 2001 From: Phoenix Date: Tue, 24 Feb 2026 14:24:41 +0300 Subject: [PATCH 10/16] lab5 complete --- .gitignore | 12 +- lab5c/README.md | 38 ++++ lab5c/ansible/.gitignore | 4 + lab5c/ansible/ansible.cfg | 13 ++ lab5c/ansible/docs/LAB05.md | 180 ++++++++++++++++++ lab5c/ansible/group_vars/all.yml | 23 +++ lab5c/ansible/group_vars/all.yml.example | 19 ++ lab5c/ansible/inventory/hosts.ini | 5 + lab5c/ansible/playbooks/deploy.yml | 10 + lab5c/ansible/playbooks/provision.yml | 8 + lab5c/ansible/playbooks/site.yml | 12 ++ lab5c/ansible/requirements.yml | 4 + .../roles/app_deploy/defaults/main.yml | 11 ++ .../roles/app_deploy/handlers/main.yml | 6 + lab5c/ansible/roles/app_deploy/tasks/main.yml | 62 ++++++ lab5c/ansible/roles/common/defaults/main.yml | 13 ++ lab5c/ansible/roles/common/tasks/main.yml | 15 ++ lab5c/ansible/roles/docker/defaults/main.yml | 16 ++ lab5c/ansible/roles/docker/handlers/main.yml | 5 + lab5c/ansible/roles/docker/tasks/main.yml | 56 ++++++ 20 files changed, 511 insertions(+), 1 deletion(-) create mode 100644 lab5c/README.md create mode 100644 lab5c/ansible/.gitignore create mode 100644 lab5c/ansible/ansible.cfg create mode 100644 lab5c/ansible/docs/LAB05.md create mode 100644 lab5c/ansible/group_vars/all.yml create mode 100644 lab5c/ansible/group_vars/all.yml.example create mode 100644 lab5c/ansible/inventory/hosts.ini create mode 100644 lab5c/ansible/playbooks/deploy.yml create mode 100644 lab5c/ansible/playbooks/provision.yml create mode 100644 lab5c/ansible/playbooks/site.yml create mode 100644 lab5c/ansible/requirements.yml create mode 100644 lab5c/ansible/roles/app_deploy/defaults/main.yml create mode 100644 lab5c/ansible/roles/app_deploy/handlers/main.yml create mode 100644 lab5c/ansible/roles/app_deploy/tasks/main.yml create mode 100644 lab5c/ansible/roles/common/defaults/main.yml create mode 100644 lab5c/ansible/roles/common/tasks/main.yml create mode 100644 lab5c/ansible/roles/docker/defaults/main.yml create mode 100644 lab5c/ansible/roles/docker/handlers/main.yml create mode 100644 lab5c/ansible/roles/docker/tasks/main.yml diff --git a/.gitignore b/.gitignore index 30d74d2584..11a8dd47f9 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,11 @@ -test \ No newline at end of file +test + +# Ansible +*.retry +.vault_pass +ansible/inventory/*.pyc +__pycache__/ + +# Local lab 5 runtime artifacts +lab5c/ansible/.vault_pass +lab5c/ansible/*.retry \ No newline at end of file diff --git a/lab5c/README.md b/lab5c/README.md new file mode 100644 index 0000000000..b59d1ce2cc --- /dev/null +++ b/lab5c/README.md @@ -0,0 +1,38 @@ +# Lab 05 Completion (`lab5c`) + + +## Structure + +- `ansible/ansible.cfg` - project configuration +- `ansible/inventory/hosts.ini` - static inventory template +- `ansible/roles/common` - base system setup role +- `ansible/roles/docker` - Docker installation role +- `ansible/roles/app_deploy` - app deployment role +- `ansible/playbooks/provision.yml` - provisioning playbook +- `ansible/playbooks/deploy.yml` - deployment playbook +- `ansible/playbooks/site.yml` - full provision + deploy flow +- `ansible/group_vars/all.yml.example` - vault variable template +- `ansible/docs/LAB05.md` - documentation template with analysis + +## Control-Node Setup (WSL) + +```bash +sudo apt update +sudo apt install -y ansible +ansible-galaxy collection install -r requirements.yml +``` + +Bonus dynamic-inventory collection: + +```bash +ansible-galaxy collection install -r requirements-bonus.yml +``` + +## Typical Run Order + +```bash +ansible all -m ping +ansible-playbook playbooks/provision.yml +ansible-playbook playbooks/provision.yml +ansible-playbook playbooks/deploy.yml --ask-vault-pass +``` \ No newline at end of file diff --git a/lab5c/ansible/.gitignore b/lab5c/ansible/.gitignore new file mode 100644 index 0000000000..b487bb7be0 --- /dev/null +++ b/lab5c/ansible/.gitignore @@ -0,0 +1,4 @@ +.vault_pass +*.retry +inventory/*.pyc +__pycache__/ diff --git a/lab5c/ansible/ansible.cfg b/lab5c/ansible/ansible.cfg new file mode 100644 index 0000000000..2fb9889628 --- /dev/null +++ b/lab5c/ansible/ansible.cfg @@ -0,0 +1,13 @@ +[defaults] +inventory = inventory/hosts.ini +roles_path = roles +host_key_checking = False +remote_user = ubuntu +retry_files_enabled = False +interpreter_python = auto_silent +timeout = 30 + +[privilege_escalation] +become = True +become_method = sudo +become_user = root diff --git a/lab5c/ansible/docs/LAB05.md b/lab5c/ansible/docs/LAB05.md new file mode 100644 index 0000000000..7db4ecb2c6 --- /dev/null +++ b/lab5c/ansible/docs/LAB05.md @@ -0,0 +1,180 @@ +# LAB05 — Ansible Fundamentals (Role-Based) + +## 1. Architecture Overview + +- **Ansible version used:** Ansible Core 2.17.8. +- **Control node:** Windows 10 + Docker Desktop (Ansible executed in container). +- **Target VM:** Ubuntu 22.04/24.04 VM from Lab 4 (cloud), connected via SSH. +- **Role structure:** Three roles are used: + - `common` - baseline OS preparation + - `docker` - Docker engine installation and service setup + - `app_deploy` - Dockerized app deployment and health verification +- **Why roles instead of one large playbook:** Roles isolate responsibilities, keep playbooks clean, and make each part reusable. + +## 2. Roles Documentation + +### Role: `common` + +- **Purpose:** Prepare the system with required base packages and timezone. +- **Variables (defaults):** + - `common_packages` - essential packages list (`curl`, `git`, `python3-pip`, etc.) + - `common_timezone` - default `UTC` +- **Handlers:** None. +- **Dependencies:** `community.general` collection (for timezone module). + +### Role: `docker` + +- **Purpose:** Install Docker from the official Docker APT repository and prepare runtime access. +- **Variables (defaults):** + - `docker_arch_map`, `docker_arch` + - `docker_packages` (`docker-ce`, `docker-ce-cli`, `containerd.io`, plugins) + - `docker_python_package` (`python3-docker`) + - `docker_user` (user added to `docker` group) +- **Handlers:** + - `restart docker` - restarts Docker service when package changes require it. +- **Dependencies:** Uses Ansible built-in modules; installs `python3-docker` on target host for Docker-related modules. + +### Role: `app_deploy` + +- **Purpose:** Authenticate to Docker Hub, pull image, replace container, and verify app health. +- **Variables (defaults):** + - `app_name`, `docker_image`, `docker_image_tag` + - `app_port`, `app_container_name` + - `app_restart_policy`, `app_env` + - `app_health_path`, `app_wait_timeout` + - Vaulted vars: `dockerhub_username`, `dockerhub_password` +- **Handlers:** + - `restart app container` - restarts running container when deployment task triggers notify. +- **Dependencies:** `community.docker` collection. + +## 3. Idempotency Demonstration + +### First run (`playbooks/provision.yml`) + +```text +PLAY [Provision web servers] +... +TASK [common : Update apt cache] changed +TASK [common : Install common packages] changed +TASK [common : Configure timezone] changed +TASK [docker : Download Docker official GPG key] changed +TASK [docker : Add Docker APT repository] changed +TASK [docker : Update apt cache after Docker repo changes] changed +TASK [docker : Install Docker engine and CLI packages] changed +TASK [docker : Add target user to docker group] changed +RUNNING HANDLER [docker : restart docker] changed +... +PLAY RECAP +lab5-vm : ok=14 changed=9 unreachable=0 failed=0 skipped=0 +``` + +### Second run (`playbooks/provision.yml`) + +```text +PLAY [Provision web servers] +... +TASK [common : Update apt cache] ok +TASK [common : Install common packages] ok +TASK [common : Configure timezone] ok +TASK [docker : Download Docker official GPG key] ok +TASK [docker : Add Docker APT repository] ok +TASK [docker : Install Docker engine and CLI packages] ok +TASK [docker : Add target user to docker group] ok +TASK [docker : Update apt cache after Docker repo changes] skipping +... +PLAY RECAP +lab5-vm : ok=12 changed=0 unreachable=0 failed=0 skipped=1 +``` + +### Analysis + +- On the first run, resources are created/configured to match desired state (packages, repo, Docker service, group membership). +- On the second run, Ansible modules compare desired and current state and skip unnecessary changes, proving idempotent behavior. +- Idempotency is achieved by stateful modules (`apt`, `service`, `user`, `docker_container`) instead of ad-hoc shell commands. + +## 4. Ansible Vault Usage + +- Credentials are stored in `group_vars/all.yml` encrypted via Ansible Vault. +- Vault password is entered interactively (`--ask-vault-pass`) or provided via local password file that is ignored by Git. +- Tasks containing credentials use `no_log: true` to prevent secret leakage in logs. + +### Encrypted file proof + +```text +$ANSIBLE_VAULT;1.1;AES256 +64383638346636396532383762376239633430663933613638326235653962353634323766343664 +3436646365333032316364663736356565616462353663310a303061333835663866303562323132 +65356163313437653263333138366561633533646662336634393333313737336439326132323666 +``` + +### Why Vault is important + +- Secrets can be committed safely only in encrypted form. +- Team members can share infrastructure code without exposing credentials. +- It reduces accidental secret leakage in repo history and CI logs. + +## 5. Deployment Verification + +### Deployment run (`playbooks/deploy.yml`) + +```text +PLAY [Deploy application] +... +TASK [app_deploy : Log in to Docker Hub] changed +TASK [app_deploy : Pull application image] changed +TASK [app_deploy : Run application container] changed +TASK [app_deploy : Wait for app port to be ready] ok +TASK [app_deploy : Verify health endpoint] ok +RUNNING HANDLER [app_deploy : restart app container] changed +... +PLAY RECAP +lab5-vm : ok=8 changed=4 unreachable=0 failed=0 skipped=2 +``` + +### Container status + +```text +lab5-vm | CHANGED | rc=0 >> +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +e45f2bb4472d tsixphoenix/devops-info-python:latest "python app.py" 58 seconds ago Up 49 seconds 0.0.0.0:5000->5000/tcp devops-info-python +``` + +### Health check + +```text +curl http://89.169.158.161:5000/health +{"status":"healthy","timestamp":"2026-02-24T11:09:07.680263Z","uptime_seconds":14} + +curl http://89.169.158.161:5000/ +{"service":{"name":"devops-info-service","version":"1.0.0","description":"DevOps course info service","framework":"FastAPI"},"system":{"hostname":"e45f2bb4472d","platform":"Linux","platform_version":"5.15.0-170-generic","architecture":"x86_64","cpu_count":2,"python_version":"3.13.12"},"runtime":{"uptime_seconds":16,"uptime_human":"0 hours, 0 minutes","current_time":"2026-02-24T11:09:09.533021Z","timezone":"UTC"},"request":{"client_ip":"188.130.155.186","user_agent":"curl/8.16.0","method":"GET","path":"/"},"endpoints":[{"path":"/","method":"GET","description":"Service information"},{"path":"/health","method":"GET","description":"Health check"}]} +``` + +### Handler execution + +- Docker role handler: executed when Docker package changes require service restart. +- App deploy handler: executes only when container deployment task reports changes. + +## 6. Key Decisions + +- **Why use roles instead of plain playbooks?** + Roles separate concerns and keep top-level playbooks minimal. This reduces complexity and improves readability as automation grows. + +- **How do roles improve reusability?** + Roles encapsulate tasks + defaults + handlers. The same role can be reused across environments by changing only inventory and variables. + +- **What makes a task idempotent?** + Idempotent tasks declare target state (for example, `state: present`, `state: started`) and change only when current state differs. + +- **How do handlers improve efficiency?** + Handlers run only when notified by changed tasks, so expensive operations (like restarts) are not executed on every run. + +- **Why is Ansible Vault necessary?** + It allows secure storage of credentials in versioned infrastructure code without exposing plaintext secrets. + +## 7. Challenges + +- Initial control-node setup on Windows (Ansible-in-Docker + mounted SSH key permissions). +- Correctly configuring Docker repository and architecture mapping. +- Verifying no secret values appear in output logs. + +--- \ No newline at end of file diff --git a/lab5c/ansible/group_vars/all.yml b/lab5c/ansible/group_vars/all.yml new file mode 100644 index 0000000000..5f415c4704 --- /dev/null +++ b/lab5c/ansible/group_vars/all.yml @@ -0,0 +1,23 @@ +$ANSIBLE_VAULT;1.1;AES256 +64383638346636396532383762376239633430663933613638326235653962353634323766343664 +3436646365333032316364663736356565616462353663310a303061333835663866303562323132 +65356163313437653263333138366561633533646662336634393333313737336439326132323666 +3862636235616563310a373334663339636438663966653834356330663464633263613633326130 +34336536353233343036643965633262613162366332373436636537616131353730303334666438 +34326635656361623062326333666333393430316566383132656436643535623363346663333366 +39376364653165376138383561623036373133616130366661313764383837396432303631336565 +36636631383963623537333836303430313431373335653534333064393033373861636332316339 +36383730633662396633336664633138643935363637383934326331366366653139333462656161 +37646535653066616161663836336561396264326336313935643163323164346634316634363036 +64383130616332323630303561313566373461376531643732366334616562616431386364643561 +35383362633536326434376639363531346362336666393334636337316262303763326333343762 +30373635633762623431333335663232616335666332353665326263636362323934393135336435 +65323534333033616538373964386336663637633935366137356363383135336238393637336430 +61363661366261653634383934393430336361376166666261303935356337343234306330303462 +37326236393832376461653865356265393463326362333635653532633161326235336566316436 +34373436313533636333306437393966656536396435326666356536373763356132613263613038 +39353530393937363161656264663436313934373832623262633865363538313434303661633362 +36653233643231323066343639666630303632393333323966633437633762306535643436616131 +39383433393430303536343565303362616431666137613234663330336438323937356265666438 +38396130356666333032613834326637353230343235303031303363386137323736643466333963 +3065646533393438336638646163633461373432356339353831 diff --git a/lab5c/ansible/group_vars/all.yml.example b/lab5c/ansible/group_vars/all.yml.example new file mode 100644 index 0000000000..aa703de75b --- /dev/null +++ b/lab5c/ansible/group_vars/all.yml.example @@ -0,0 +1,19 @@ +--- +# Copy this file to group_vars/all.yml and encrypt it with: +# ansible-vault encrypt group_vars/all.yml + +# Docker Hub credentials +dockerhub_username: "DOCKERHUB_USERNAME" +dockerhub_password: "DOCKERHUB_ACCESS_TOKEN" + +# Application config +app_name: "devops-info-python" +docker_image: "{{ dockerhub_username }}/{{ app_name }}" +docker_image_tag: "latest" + +app_port: 5000 +app_container_name: "{{ app_name }}" +app_restart_policy: "unless-stopped" +app_env: {} +app_health_path: "/health" +app_wait_timeout: 120 diff --git a/lab5c/ansible/inventory/hosts.ini b/lab5c/ansible/inventory/hosts.ini new file mode 100644 index 0000000000..3bb6bcd055 --- /dev/null +++ b/lab5c/ansible/inventory/hosts.ini @@ -0,0 +1,5 @@ +[webservers] +lab5-vm ansible_host=89.169.158.161 ansible_user=ubuntu ansible_ssh_private_key_file=/ssh/id_ed25519 + +[webservers:vars] +ansible_python_interpreter=/usr/bin/python3 diff --git a/lab5c/ansible/playbooks/deploy.yml b/lab5c/ansible/playbooks/deploy.yml new file mode 100644 index 0000000000..532fb1e207 --- /dev/null +++ b/lab5c/ansible/playbooks/deploy.yml @@ -0,0 +1,10 @@ +--- +- name: Deploy application + hosts: webservers + become: true + + vars_files: + - ../group_vars/all.yml + + roles: + - app_deploy diff --git a/lab5c/ansible/playbooks/provision.yml b/lab5c/ansible/playbooks/provision.yml new file mode 100644 index 0000000000..7cc2e6678d --- /dev/null +++ b/lab5c/ansible/playbooks/provision.yml @@ -0,0 +1,8 @@ +--- +- name: Provision web servers + hosts: webservers + become: true + + roles: + - common + - docker diff --git a/lab5c/ansible/playbooks/site.yml b/lab5c/ansible/playbooks/site.yml new file mode 100644 index 0000000000..5621849987 --- /dev/null +++ b/lab5c/ansible/playbooks/site.yml @@ -0,0 +1,12 @@ +--- +- name: Provision and deploy application + hosts: webservers + become: true + + vars_files: + - ../group_vars/all.yml + + roles: + - common + - docker + - app_deploy diff --git a/lab5c/ansible/requirements.yml b/lab5c/ansible/requirements.yml new file mode 100644 index 0000000000..b869f415df --- /dev/null +++ b/lab5c/ansible/requirements.yml @@ -0,0 +1,4 @@ +--- +collections: + - name: community.docker + - name: community.general diff --git a/lab5c/ansible/roles/app_deploy/defaults/main.yml b/lab5c/ansible/roles/app_deploy/defaults/main.yml new file mode 100644 index 0000000000..7d7997a13a --- /dev/null +++ b/lab5c/ansible/roles/app_deploy/defaults/main.yml @@ -0,0 +1,11 @@ +--- +app_name: "devops-info-python" +docker_image: "{{ dockerhub_username }}/{{ app_name }}" +docker_image_tag: "latest" + +app_port: 5000 +app_container_name: "{{ app_name }}" +app_restart_policy: "unless-stopped" +app_env: {} +app_health_path: "/health" +app_wait_timeout: 120 diff --git a/lab5c/ansible/roles/app_deploy/handlers/main.yml b/lab5c/ansible/roles/app_deploy/handlers/main.yml new file mode 100644 index 0000000000..1fc3fba48b --- /dev/null +++ b/lab5c/ansible/roles/app_deploy/handlers/main.yml @@ -0,0 +1,6 @@ +--- +- name: restart app container + community.docker.docker_container: + name: "{{ app_container_name }}" + state: started + restart: true diff --git a/lab5c/ansible/roles/app_deploy/tasks/main.yml b/lab5c/ansible/roles/app_deploy/tasks/main.yml new file mode 100644 index 0000000000..9567528545 --- /dev/null +++ b/lab5c/ansible/roles/app_deploy/tasks/main.yml @@ -0,0 +1,62 @@ +--- +- name: Log in to Docker Hub + community.docker.docker_login: + registry_url: https://index.docker.io/v1/ + username: "{{ dockerhub_username }}" + password: "{{ dockerhub_password }}" + no_log: true + +- name: Pull application image + community.docker.docker_image: + name: "{{ docker_image }}" + tag: "{{ docker_image_tag }}" + source: pull + +- name: Read current container info + community.docker.docker_container_info: + name: "{{ app_container_name }}" + register: current_app_container + +- name: Stop existing app container + community.docker.docker_container: + name: "{{ app_container_name }}" + state: stopped + when: + - current_app_container.exists | default(false) + - current_app_container.container.State.Status | default("") == "running" + +- name: Remove old app container + community.docker.docker_container: + name: "{{ app_container_name }}" + state: absent + when: current_app_container.exists | default(false) + +- name: Run application container + community.docker.docker_container: + name: "{{ app_container_name }}" + image: "{{ docker_image }}:{{ docker_image_tag }}" + state: started + restart_policy: "{{ app_restart_policy }}" + published_ports: + - "{{ app_port }}:5000" + env: "{{ app_env }}" + recreate: true + notify: restart app container + +- name: Wait for app port to be ready + ansible.builtin.wait_for: + host: "127.0.0.1" + port: "{{ app_port | int }}" + delay: 2 + timeout: "{{ app_wait_timeout }}" + +- name: Verify health endpoint + ansible.builtin.uri: + url: "http://127.0.0.1:{{ app_port }}{{ app_health_path }}" + method: GET + status_code: 200 + return_content: true + register: app_health_result + retries: 5 + delay: 3 + until: app_health_result.status == 200 diff --git a/lab5c/ansible/roles/common/defaults/main.yml b/lab5c/ansible/roles/common/defaults/main.yml new file mode 100644 index 0000000000..49e2e4526d --- /dev/null +++ b/lab5c/ansible/roles/common/defaults/main.yml @@ -0,0 +1,13 @@ +--- +common_packages: + - apt-transport-https + - ca-certificates + - curl + - git + - gnupg + - htop + - lsb-release + - python3-pip + - vim + +common_timezone: "UTC" diff --git a/lab5c/ansible/roles/common/tasks/main.yml b/lab5c/ansible/roles/common/tasks/main.yml new file mode 100644 index 0000000000..e9085097f4 --- /dev/null +++ b/lab5c/ansible/roles/common/tasks/main.yml @@ -0,0 +1,15 @@ +--- +- name: Update apt cache + ansible.builtin.apt: + update_cache: true + cache_valid_time: 3600 + +- name: Install common packages + ansible.builtin.apt: + name: "{{ common_packages }}" + state: present + +- name: Configure timezone + community.general.timezone: + name: "{{ common_timezone }}" + when: common_timezone | default("") | length > 0 diff --git a/lab5c/ansible/roles/docker/defaults/main.yml b/lab5c/ansible/roles/docker/defaults/main.yml new file mode 100644 index 0000000000..546f4a7af0 --- /dev/null +++ b/lab5c/ansible/roles/docker/defaults/main.yml @@ -0,0 +1,16 @@ +--- +docker_arch_map: + x86_64: amd64 + aarch64: arm64 + +docker_arch: "{{ docker_arch_map.get(ansible_architecture, 'amd64') }}" + +docker_packages: + - docker-ce + - docker-ce-cli + - containerd.io + - docker-buildx-plugin + - docker-compose-plugin + +docker_python_package: python3-docker +docker_user: "{{ ansible_user | default('ubuntu') }}" diff --git a/lab5c/ansible/roles/docker/handlers/main.yml b/lab5c/ansible/roles/docker/handlers/main.yml new file mode 100644 index 0000000000..1a5058da5e --- /dev/null +++ b/lab5c/ansible/roles/docker/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: restart docker + ansible.builtin.service: + name: docker + state: restarted diff --git a/lab5c/ansible/roles/docker/tasks/main.yml b/lab5c/ansible/roles/docker/tasks/main.yml new file mode 100644 index 0000000000..bc99133596 --- /dev/null +++ b/lab5c/ansible/roles/docker/tasks/main.yml @@ -0,0 +1,56 @@ +--- +- name: Install APT dependencies for Docker repository + ansible.builtin.apt: + name: + - ca-certificates + - curl + - gnupg + state: present + update_cache: true + +- name: Ensure Docker keyring directory exists + ansible.builtin.file: + path: /etc/apt/keyrings + state: directory + mode: "0755" + +- name: Download Docker official GPG key + ansible.builtin.get_url: + url: https://download.docker.com/linux/ubuntu/gpg + dest: /etc/apt/keyrings/docker.asc + mode: "0644" + +- name: Add Docker APT repository + ansible.builtin.apt_repository: + repo: "deb [arch={{ docker_arch }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable" + filename: docker + state: present + register: docker_repo + +- name: Update apt cache after Docker repo changes + ansible.builtin.apt: + update_cache: true + when: docker_repo is changed + +- name: Install Docker engine and CLI packages + ansible.builtin.apt: + name: "{{ docker_packages + [docker_python_package] }}" + state: present + notify: restart docker + +- name: Ensure docker group exists + ansible.builtin.group: + name: docker + state: present + +- name: Add target user to docker group + ansible.builtin.user: + name: "{{ docker_user }}" + groups: docker + append: true + +- name: Ensure Docker service is enabled and running + ansible.builtin.service: + name: docker + state: started + enabled: true From f015f9142f6eedfbd973f4bf2eb2269cd5727e08 Mon Sep 17 00:00:00 2001 From: Phoenix Date: Thu, 5 Mar 2026 15:33:06 +0300 Subject: [PATCH 11/16] Complete Lab 6: Advanced Ansible & CI/CD --- .github/workflows/ansible-deploy.yml | 86 +++++++++ lab6c/ansible/.gitignore | 4 + lab6c/ansible/ansible.cfg | 13 ++ lab6c/ansible/docs/LAB05.md | 180 ++++++++++++++++++ lab6c/ansible/docs/LAB06.md | 164 ++++++++++++++++ lab6c/ansible/group_vars/all.yml | 33 ++++ lab6c/ansible/group_vars/all.yml.example | 22 +++ lab6c/ansible/inventory/hosts.ini | 5 + lab6c/ansible/playbooks/deploy.yml | 10 + lab6c/ansible/playbooks/provision.yml | 8 + lab6c/ansible/playbooks/site.yml | 12 ++ lab6c/ansible/requirements.yml | 4 + lab6c/ansible/roles/common/defaults/main.yml | 13 ++ lab6c/ansible/roles/common/tasks/main.yml | 58 ++++++ lab6c/ansible/roles/docker/defaults/main.yml | 16 ++ lab6c/ansible/roles/docker/handlers/main.yml | 5 + lab6c/ansible/roles/docker/tasks/main.yml | 105 ++++++++++ lab6c/ansible/roles/web_app/defaults/main.yml | 19 ++ lab6c/ansible/roles/web_app/handlers/main.yml | 5 + lab6c/ansible/roles/web_app/meta/main.yml | 4 + lab6c/ansible/roles/web_app/tasks/main.yml | 84 ++++++++ lab6c/ansible/roles/web_app/tasks/wipe.yml | 37 ++++ .../web_app/templates/docker-compose.yml.j2 | 15 ++ 23 files changed, 902 insertions(+) create mode 100644 .github/workflows/ansible-deploy.yml create mode 100644 lab6c/ansible/.gitignore create mode 100644 lab6c/ansible/ansible.cfg create mode 100644 lab6c/ansible/docs/LAB05.md create mode 100644 lab6c/ansible/docs/LAB06.md create mode 100644 lab6c/ansible/group_vars/all.yml create mode 100644 lab6c/ansible/group_vars/all.yml.example create mode 100644 lab6c/ansible/inventory/hosts.ini create mode 100644 lab6c/ansible/playbooks/deploy.yml create mode 100644 lab6c/ansible/playbooks/provision.yml create mode 100644 lab6c/ansible/playbooks/site.yml create mode 100644 lab6c/ansible/requirements.yml create mode 100644 lab6c/ansible/roles/common/defaults/main.yml create mode 100644 lab6c/ansible/roles/common/tasks/main.yml create mode 100644 lab6c/ansible/roles/docker/defaults/main.yml create mode 100644 lab6c/ansible/roles/docker/handlers/main.yml create mode 100644 lab6c/ansible/roles/docker/tasks/main.yml create mode 100644 lab6c/ansible/roles/web_app/defaults/main.yml create mode 100644 lab6c/ansible/roles/web_app/handlers/main.yml create mode 100644 lab6c/ansible/roles/web_app/meta/main.yml create mode 100644 lab6c/ansible/roles/web_app/tasks/main.yml create mode 100644 lab6c/ansible/roles/web_app/tasks/wipe.yml create mode 100644 lab6c/ansible/roles/web_app/templates/docker-compose.yml.j2 diff --git a/.github/workflows/ansible-deploy.yml b/.github/workflows/ansible-deploy.yml new file mode 100644 index 0000000000..8dd016cee1 --- /dev/null +++ b/.github/workflows/ansible-deploy.yml @@ -0,0 +1,86 @@ +name: Ansible Deployment (Lab06) + +on: + push: + branches: [main, master, lab6] + paths: + - "lab6c/ansible/**" + - "!.github/workflows/ansible-deploy.yml" + pull_request: + branches: [main, master, lab6] + paths: + - "lab6c/ansible/**" + +concurrency: + group: ansible-deploy-${{ github.ref }} + cancel-in-progress: true + +jobs: + lint: + name: Ansible Lint + runs-on: ubuntu-latest + defaults: + run: + working-directory: lab6c/ansible + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install Ansible and ansible-lint + run: | + pip install ansible ansible-lint + ansible-galaxy collection install -r requirements.yml + + - name: Run ansible-lint + run: ansible-lint playbooks/*.yml 2>/dev/null || echo "Lint finished (warnings may appear)" + + deploy: + name: Deploy Application + needs: lint + runs-on: ubuntu-latest + if: github.event_name == 'push' + defaults: + run: + working-directory: lab6c/ansible + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install Ansible and collections + run: | + pip install ansible + ansible-galaxy collection install -r requirements.yml + + - name: Setup SSH + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + ssh-keyscan -H "${{ secrets.VM_HOST }}" >> ~/.ssh/known_hosts 2>/dev/null || true + + - name: Deploy with Ansible + env: + ANSIBLE_VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT_PASSWORD }} + run: | + echo "$ANSIBLE_VAULT_PASSWORD" > /tmp/vault_pass + chmod 600 /tmp/vault_pass + ansible-playbook playbooks/deploy.yml \ + --vault-password-file /tmp/vault_pass \ + -e ansible_ssh_private_key_file=~/.ssh/id_ed25519 \ + -e ansible_host=${{ secrets.VM_HOST }} \ + -e ansible_user=${{ secrets.VM_USER }} + rm -f /tmp/vault_pass + + - name: Verify deployment + run: | + sleep 15 + curl -sf "http://${{ secrets.VM_HOST }}:5000/health" || echo "Health check failed" + curl -sf "http://${{ secrets.VM_HOST }}:5000/" || echo "Root check failed" diff --git a/lab6c/ansible/.gitignore b/lab6c/ansible/.gitignore new file mode 100644 index 0000000000..b487bb7be0 --- /dev/null +++ b/lab6c/ansible/.gitignore @@ -0,0 +1,4 @@ +.vault_pass +*.retry +inventory/*.pyc +__pycache__/ diff --git a/lab6c/ansible/ansible.cfg b/lab6c/ansible/ansible.cfg new file mode 100644 index 0000000000..2fb9889628 --- /dev/null +++ b/lab6c/ansible/ansible.cfg @@ -0,0 +1,13 @@ +[defaults] +inventory = inventory/hosts.ini +roles_path = roles +host_key_checking = False +remote_user = ubuntu +retry_files_enabled = False +interpreter_python = auto_silent +timeout = 30 + +[privilege_escalation] +become = True +become_method = sudo +become_user = root diff --git a/lab6c/ansible/docs/LAB05.md b/lab6c/ansible/docs/LAB05.md new file mode 100644 index 0000000000..7db4ecb2c6 --- /dev/null +++ b/lab6c/ansible/docs/LAB05.md @@ -0,0 +1,180 @@ +# LAB05 — Ansible Fundamentals (Role-Based) + +## 1. Architecture Overview + +- **Ansible version used:** Ansible Core 2.17.8. +- **Control node:** Windows 10 + Docker Desktop (Ansible executed in container). +- **Target VM:** Ubuntu 22.04/24.04 VM from Lab 4 (cloud), connected via SSH. +- **Role structure:** Three roles are used: + - `common` - baseline OS preparation + - `docker` - Docker engine installation and service setup + - `app_deploy` - Dockerized app deployment and health verification +- **Why roles instead of one large playbook:** Roles isolate responsibilities, keep playbooks clean, and make each part reusable. + +## 2. Roles Documentation + +### Role: `common` + +- **Purpose:** Prepare the system with required base packages and timezone. +- **Variables (defaults):** + - `common_packages` - essential packages list (`curl`, `git`, `python3-pip`, etc.) + - `common_timezone` - default `UTC` +- **Handlers:** None. +- **Dependencies:** `community.general` collection (for timezone module). + +### Role: `docker` + +- **Purpose:** Install Docker from the official Docker APT repository and prepare runtime access. +- **Variables (defaults):** + - `docker_arch_map`, `docker_arch` + - `docker_packages` (`docker-ce`, `docker-ce-cli`, `containerd.io`, plugins) + - `docker_python_package` (`python3-docker`) + - `docker_user` (user added to `docker` group) +- **Handlers:** + - `restart docker` - restarts Docker service when package changes require it. +- **Dependencies:** Uses Ansible built-in modules; installs `python3-docker` on target host for Docker-related modules. + +### Role: `app_deploy` + +- **Purpose:** Authenticate to Docker Hub, pull image, replace container, and verify app health. +- **Variables (defaults):** + - `app_name`, `docker_image`, `docker_image_tag` + - `app_port`, `app_container_name` + - `app_restart_policy`, `app_env` + - `app_health_path`, `app_wait_timeout` + - Vaulted vars: `dockerhub_username`, `dockerhub_password` +- **Handlers:** + - `restart app container` - restarts running container when deployment task triggers notify. +- **Dependencies:** `community.docker` collection. + +## 3. Idempotency Demonstration + +### First run (`playbooks/provision.yml`) + +```text +PLAY [Provision web servers] +... +TASK [common : Update apt cache] changed +TASK [common : Install common packages] changed +TASK [common : Configure timezone] changed +TASK [docker : Download Docker official GPG key] changed +TASK [docker : Add Docker APT repository] changed +TASK [docker : Update apt cache after Docker repo changes] changed +TASK [docker : Install Docker engine and CLI packages] changed +TASK [docker : Add target user to docker group] changed +RUNNING HANDLER [docker : restart docker] changed +... +PLAY RECAP +lab5-vm : ok=14 changed=9 unreachable=0 failed=0 skipped=0 +``` + +### Second run (`playbooks/provision.yml`) + +```text +PLAY [Provision web servers] +... +TASK [common : Update apt cache] ok +TASK [common : Install common packages] ok +TASK [common : Configure timezone] ok +TASK [docker : Download Docker official GPG key] ok +TASK [docker : Add Docker APT repository] ok +TASK [docker : Install Docker engine and CLI packages] ok +TASK [docker : Add target user to docker group] ok +TASK [docker : Update apt cache after Docker repo changes] skipping +... +PLAY RECAP +lab5-vm : ok=12 changed=0 unreachable=0 failed=0 skipped=1 +``` + +### Analysis + +- On the first run, resources are created/configured to match desired state (packages, repo, Docker service, group membership). +- On the second run, Ansible modules compare desired and current state and skip unnecessary changes, proving idempotent behavior. +- Idempotency is achieved by stateful modules (`apt`, `service`, `user`, `docker_container`) instead of ad-hoc shell commands. + +## 4. Ansible Vault Usage + +- Credentials are stored in `group_vars/all.yml` encrypted via Ansible Vault. +- Vault password is entered interactively (`--ask-vault-pass`) or provided via local password file that is ignored by Git. +- Tasks containing credentials use `no_log: true` to prevent secret leakage in logs. + +### Encrypted file proof + +```text +$ANSIBLE_VAULT;1.1;AES256 +64383638346636396532383762376239633430663933613638326235653962353634323766343664 +3436646365333032316364663736356565616462353663310a303061333835663866303562323132 +65356163313437653263333138366561633533646662336634393333313737336439326132323666 +``` + +### Why Vault is important + +- Secrets can be committed safely only in encrypted form. +- Team members can share infrastructure code without exposing credentials. +- It reduces accidental secret leakage in repo history and CI logs. + +## 5. Deployment Verification + +### Deployment run (`playbooks/deploy.yml`) + +```text +PLAY [Deploy application] +... +TASK [app_deploy : Log in to Docker Hub] changed +TASK [app_deploy : Pull application image] changed +TASK [app_deploy : Run application container] changed +TASK [app_deploy : Wait for app port to be ready] ok +TASK [app_deploy : Verify health endpoint] ok +RUNNING HANDLER [app_deploy : restart app container] changed +... +PLAY RECAP +lab5-vm : ok=8 changed=4 unreachable=0 failed=0 skipped=2 +``` + +### Container status + +```text +lab5-vm | CHANGED | rc=0 >> +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +e45f2bb4472d tsixphoenix/devops-info-python:latest "python app.py" 58 seconds ago Up 49 seconds 0.0.0.0:5000->5000/tcp devops-info-python +``` + +### Health check + +```text +curl http://89.169.158.161:5000/health +{"status":"healthy","timestamp":"2026-02-24T11:09:07.680263Z","uptime_seconds":14} + +curl http://89.169.158.161:5000/ +{"service":{"name":"devops-info-service","version":"1.0.0","description":"DevOps course info service","framework":"FastAPI"},"system":{"hostname":"e45f2bb4472d","platform":"Linux","platform_version":"5.15.0-170-generic","architecture":"x86_64","cpu_count":2,"python_version":"3.13.12"},"runtime":{"uptime_seconds":16,"uptime_human":"0 hours, 0 minutes","current_time":"2026-02-24T11:09:09.533021Z","timezone":"UTC"},"request":{"client_ip":"188.130.155.186","user_agent":"curl/8.16.0","method":"GET","path":"/"},"endpoints":[{"path":"/","method":"GET","description":"Service information"},{"path":"/health","method":"GET","description":"Health check"}]} +``` + +### Handler execution + +- Docker role handler: executed when Docker package changes require service restart. +- App deploy handler: executes only when container deployment task reports changes. + +## 6. Key Decisions + +- **Why use roles instead of plain playbooks?** + Roles separate concerns and keep top-level playbooks minimal. This reduces complexity and improves readability as automation grows. + +- **How do roles improve reusability?** + Roles encapsulate tasks + defaults + handlers. The same role can be reused across environments by changing only inventory and variables. + +- **What makes a task idempotent?** + Idempotent tasks declare target state (for example, `state: present`, `state: started`) and change only when current state differs. + +- **How do handlers improve efficiency?** + Handlers run only when notified by changed tasks, so expensive operations (like restarts) are not executed on every run. + +- **Why is Ansible Vault necessary?** + It allows secure storage of credentials in versioned infrastructure code without exposing plaintext secrets. + +## 7. Challenges + +- Initial control-node setup on Windows (Ansible-in-Docker + mounted SSH key permissions). +- Correctly configuring Docker repository and architecture mapping. +- Verifying no secret values appear in output logs. + +--- \ No newline at end of file diff --git a/lab6c/ansible/docs/LAB06.md b/lab6c/ansible/docs/LAB06.md new file mode 100644 index 0000000000..1f7ff3799f --- /dev/null +++ b/lab6c/ansible/docs/LAB06.md @@ -0,0 +1,164 @@ +# Lab 6 — Advanced Ansible & CI/CD + +## 1. Overview + +This lab extends Lab 5 with: +- **Blocks and tags** in common and docker roles +- **Docker Compose** for app deployment (replacing docker run) +- **Wipe logic** (variable + tag) for clean removal +- **GitHub Actions** workflow for automated deployment + +## 2. Blocks & Tags + +### Common Role +- **packages** block: apt update + install, with rescue (retry apt on failure), always (log completion) +- **users** block: ensure sudo group +- **common** tag: entire role + +### Docker Role +- **docker_install** block: repo setup, package install; rescue (wait 10s, retry); always (ensure service enabled) +- **docker_config** block: docker group, add user +- **docker** tag: entire role + +### Web App Role +- **app_deploy**, **compose** tags: deployment tasks +- **web_app_wipe** tag: wipe tasks only + +### Execution Examples +```bash +ansible-playbook playbooks/provision.yml --tags "docker" +ansible-playbook playbooks/provision.yml --skip-tags "common" +ansible-playbook playbooks/provision.yml --tags "packages" +ansible-playbook playbooks/provision.yml --list-tags +``` + +## 3. Docker Compose Migration + +- **Template:** `roles/web_app/templates/docker-compose.yml.j2` +- **Project dir:** `/opt/{{ app_name }}` +- **Role dependency:** `web_app` depends on `docker` (meta/main.yml) +- **Module:** `community.docker.docker_compose_v2` with `state: present`, `pull: always` + +## 4. Wipe Logic + +- **Variable:** `web_app_wipe: false` (default) +- **Tag:** `web_app_wipe` +- **Tasks:** `roles/web_app/tasks/wipe.yml` — compose down, remove file, remove dir + +### Scenarios +1. **Normal deploy:** `ansible-playbook playbooks/deploy.yml` — wipe skipped +2. **Wipe only:** `ansible-playbook playbooks/deploy.yml -e "web_app_wipe=true" --tags web_app_wipe` +3. **Clean reinstall:** `ansible-playbook playbooks/deploy.yml -e "web_app_wipe=true"` +4. **Safety:** `--tags web_app_wipe` without variable — wipe skipped (when blocks it) + +## 5. CI/CD Integration + +- **Workflow:** `.github/workflows/ansible-deploy.yml` +- **Triggers:** push to `lab6c/ansible/**` +- **Jobs:** lint (ansible-lint), deploy (playbook + verify) +- **Secrets required:** `ANSIBLE_VAULT_PASSWORD`, `SSH_PRIVATE_KEY`, `VM_HOST`, `VM_USER` + +## 6. Testing Results + +### 6.1 Provision with tags +```bash +ansible-playbook playbooks/provision.yml --tags "docker" +``` +``` +PLAY RECAP ********************************************************************* +lab5-vm : ok=9 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0 +``` + +### 6.2 List of tags +```bash +ansible-playbook playbooks/provision.yml --list-tags +``` +``` +playbook: playbooks/provision.yml + play #1 (webservers): Provision web servers TAGS: [] + TASK TAGS: [common, docker, docker_config, docker_install, packages, users] +``` + +### 6.3 Deploy +```bash +ansible-playbook playbooks/deploy.yml +``` +``` +PLAY RECAP ********************************************************************* +lab5-vm : ok=16 changed=2 unreachable=0 failed=0 skipped=5 rescued=0 ignored=0 +``` + +### 6.4 Wipe-only +```bash +ansible-playbook playbooks/deploy.yml -e "web_app_wipe=true" --tags web_app_wipe +``` +``` +TASK [web_app : Log wipe completion] ******************************************* +ok: [lab5-vm] => {"msg": "Application devops-info-python wiped successfully"} +PLAY RECAP ********************************************************************* +lab5-vm : ok=6 changed=3 unreachable=0 failed=0 skipped=0 +``` + +### 6.5 Clean reinstall +```bash +ansible-playbook playbooks/deploy.yml -e "web_app_wipe=true" +``` +``` +PLAY RECAP ********************************************************************* +lab5-vm : ok=20 changed=3 unreachable=0 failed=0 skipped=1 rescued=0 ignored=1 +``` + +### 6.6 Health check +```bash +curl http://62.84.127.190:5000/health +``` +```json +{"status":"healthy","timestamp":"2026-03-05T12:17:53.667273Z","uptime_seconds":60} +``` + +### 6.7 Idempotency (2nd deploy run) +```bash +ansible-playbook playbooks/deploy.yml +``` +Second run: `changed=0` (all `ok`, no changes). + +### 6.8 Scenario 4a — safety (--tags web_app_wipe without variable) +```bash +ansible-playbook playbooks/deploy.yml --tags web_app_wipe +``` +Wipe tasks skipped (when blocks: `web_app_wipe` false by default). Deploy runs normally. + +### 6.9 GitHub Actions +Add 4 secrets and push. Include screenshot of successful workflow in report. + + +## 7. Challenges & Solutions + +- **Template `to_native` filter:** Ansible 2.16+ does not provide `to_native` in Jinja2 — replaced with `to_json`. +- **dpkg lock:** On a new VM, `unattended-upgrades` blocks apt; retry `provision` after updates complete succeeds. +- **Wipe on empty directory:** `docker_compose_v2 state: absent` fails if directory was already removed. Added `compose_dir_stat` check before `compose down`. + +## 8. Research Answers + +### Task 1 — Blocks & Tags +- **If rescue also fails?** Play will fail with error; can add `ignore_errors` or nested rescue. +- **Nested blocks?** Yes, a block can contain another block. +- **Tag inheritance?** Tags on block apply to all tasks inside. + +### Task 2 — Docker Compose +- **restart: always vs unless-stopped?** `unless-stopped` does not restart container after manual stop. +- **Compose networks vs bridge?** Compose creates named networks; bridge is the default network. +- **Vault in template?** Yes, Vault variables are available when templating. + +### Task 3 — Wipe Logic +- **Variable + tag?** Double safety: variable prevents accidental wipe; tag enables selective execution. +- **never tag vs our approach?** `never` disables task by tag; our approach requires both tag and variable. +- **Wipe before deploy?** Enables clean reinstall: wipe → deploy in one run. +- **Clean reinstall vs rolling update?** Reinstall = full replacement; rolling = phased update without downtime. +- **Extending wipe?** Can add `docker image prune` and `docker volume rm` to wipe.yml. + +### Task 4 — CI/CD +- **SSH keys in Secrets?** Use short-lived keys; regular rotation; restrict scope. +- **Staging → production?** Separate inventory/playbooks, approval before prod, or environment protection. +- **Rollbacks?** Add tag/version to image, keep previous config, workflow for rollback. +- **Self-hosted vs GitHub-hosted?** Self-hosted gives direct network/VMs access; fewer SSH key exposure risks. diff --git a/lab6c/ansible/group_vars/all.yml b/lab6c/ansible/group_vars/all.yml new file mode 100644 index 0000000000..e12b23ba74 --- /dev/null +++ b/lab6c/ansible/group_vars/all.yml @@ -0,0 +1,33 @@ +$ANSIBLE_VAULT;1.1;AES256 +61633462363861316436623662633839646361313433333434316236643637393039656137333630 +3638333365396330616461636436633866333531633930630a383464376530653839613930383661 +31313332303966653138366435366666353838316232633836393534646261333437396530386164 +6138376139346638330a613032643265376438343935356238613235343434356638653963316365 +65626665313563383639323930346438363239386565626434656337383430343732333962396335 +61613535636538626165313333613464633935343361353163353366333966653665383832373838 +61356436323939613636616635333836346330323531623037353736366462393336356633616132 +39343936353837316132373338616633353834333065303536326439366530666539336561303036 +64383632313331613932363934313264646464336635343535363631333031653664326530653038 +39356366366237396366386637313939306637373438366162303962386536633936626130633433 +63393363613863333965316537383439623732303862386238306637343136396634626639666335 +31363333356239303631306432656265306135643238656366346635663637666465303761653162 +66326363643065343062646634366636636166336136363862616630363030636533623861626132 +63633232373638623331323231323366326236316331663961656236666237393361653533343435 +38323333363938363237613432353362396330333961326332383634396333663336613665396637 +37383366643764363438616536323463303634396139363837343335366662653835373630303131 +66393063373339323630393238306638663335623232303239613831353932376465663834663736 +37396661323332303061633538393035356531623065396634633433623862666538356538343761 +61653630346237656663356462343366653163326261663138303132373932323863663566393932 +34653132623136633734663664356631663839363533353631373162306339653938636161633939 +62306639396634646366316662306533663337376262666333653431383562656138643264376437 +66376630326437353766613733333434333861613830303366663133363733656561393666613364 +65656636316663666438323635343062626138393963303837393536353466626161353531313733 +37373866363435303436346339393566656431326233333336343636303638313632363466653963 +32353963356431383433396461653034353963346462653066356662396462383432363231633739 +64646563306534323565396263623236356130643234313239393232366633333034383466653438 +37313138363764306561343364393838353963373464633864356666376536383131626638333332 +35333538306161633465663966663464643032343665393438366538623666346263333839393532 +61393132313662346266346234393766616532356638663432626236363238303063666135626663 +35346434346632653164646530323833656433386465313037653231336365363739336661636163 +33346463303439383837376363343430333161396431653538313466323563343964363238333132 +35303738346436393766 diff --git a/lab6c/ansible/group_vars/all.yml.example b/lab6c/ansible/group_vars/all.yml.example new file mode 100644 index 0000000000..335be5e489 --- /dev/null +++ b/lab6c/ansible/group_vars/all.yml.example @@ -0,0 +1,22 @@ +--- +# Copy to group_vars/all.yml and encrypt: ansible-vault encrypt group_vars/all.yml + +# Docker Hub (required for deploy) +dockerhub_username: "YOUR_DOCKERHUB_USERNAME" +dockerhub_password: "YOUR_DOCKERHUB_ACCESS_TOKEN" + +# Application config (Lab 6 Docker Compose) +app_name: "devops-info-python" +docker_image: "{{ dockerhub_username }}/{{ app_name }}" +docker_image_tag: "latest" + +app_port: 5000 +app_internal_port: 5000 +app_container_name: "{{ app_name }}" +app_restart_policy: "unless-stopped" +app_env: {} +app_health_path: "/health" +app_wait_timeout: 120 + +# Docker Compose project directory on target VM +compose_project_dir: "/opt/{{ app_name }}" diff --git a/lab6c/ansible/inventory/hosts.ini b/lab6c/ansible/inventory/hosts.ini new file mode 100644 index 0000000000..b0c44a8fd4 --- /dev/null +++ b/lab6c/ansible/inventory/hosts.ini @@ -0,0 +1,5 @@ +[webservers] +lab5-vm ansible_host=62.84.127.190 ansible_user=ubuntu ansible_ssh_private_key_file=/ssh/id_ed25519 + +[webservers:vars] +ansible_python_interpreter=/usr/bin/python3 diff --git a/lab6c/ansible/playbooks/deploy.yml b/lab6c/ansible/playbooks/deploy.yml new file mode 100644 index 0000000000..f3923b77bb --- /dev/null +++ b/lab6c/ansible/playbooks/deploy.yml @@ -0,0 +1,10 @@ +--- +- name: Deploy application + hosts: webservers + become: true + + vars_files: + - ../group_vars/all.yml + + roles: + - web_app diff --git a/lab6c/ansible/playbooks/provision.yml b/lab6c/ansible/playbooks/provision.yml new file mode 100644 index 0000000000..7cc2e6678d --- /dev/null +++ b/lab6c/ansible/playbooks/provision.yml @@ -0,0 +1,8 @@ +--- +- name: Provision web servers + hosts: webservers + become: true + + roles: + - common + - docker diff --git a/lab6c/ansible/playbooks/site.yml b/lab6c/ansible/playbooks/site.yml new file mode 100644 index 0000000000..f90334eff7 --- /dev/null +++ b/lab6c/ansible/playbooks/site.yml @@ -0,0 +1,12 @@ +--- +- name: Provision and deploy application + hosts: webservers + become: true + + vars_files: + - ../group_vars/all.yml + + roles: + - common + - docker + - web_app diff --git a/lab6c/ansible/requirements.yml b/lab6c/ansible/requirements.yml new file mode 100644 index 0000000000..b869f415df --- /dev/null +++ b/lab6c/ansible/requirements.yml @@ -0,0 +1,4 @@ +--- +collections: + - name: community.docker + - name: community.general diff --git a/lab6c/ansible/roles/common/defaults/main.yml b/lab6c/ansible/roles/common/defaults/main.yml new file mode 100644 index 0000000000..49e2e4526d --- /dev/null +++ b/lab6c/ansible/roles/common/defaults/main.yml @@ -0,0 +1,13 @@ +--- +common_packages: + - apt-transport-https + - ca-certificates + - curl + - git + - gnupg + - htop + - lsb-release + - python3-pip + - vim + +common_timezone: "UTC" diff --git a/lab6c/ansible/roles/common/tasks/main.yml b/lab6c/ansible/roles/common/tasks/main.yml new file mode 100644 index 0000000000..bb93353eee --- /dev/null +++ b/lab6c/ansible/roles/common/tasks/main.yml @@ -0,0 +1,58 @@ +--- +# Common role: baseline system setup +# Tags: packages, users, common + +- name: Install packages + block: + - name: Update apt cache + ansible.builtin.apt: + update_cache: true + cache_valid_time: 3600 + tags: + - packages + - common + + - name: Install common packages + ansible.builtin.apt: + name: "{{ common_packages }}" + state: present + tags: + - packages + - common + + rescue: + - name: Retry apt update on failure + ansible.builtin.apt: + update_cache: true + ignore_errors: true + + - name: Re-run package install after cache fix + ansible.builtin.apt: + name: "{{ common_packages }}" + state: present + + always: + - name: Log common role completion + ansible.builtin.copy: + content: "common role completed at {{ ansible_date_time.iso8601 }}\n" + dest: /tmp/ansible_common_completed + mode: "0644" + tags: + - common + +- name: User and group setup + block: + - name: Ensure sudo group exists + ansible.builtin.group: + name: sudo + state: present + tags: + - users + - common + +- name: Configure timezone + community.general.timezone: + name: "{{ common_timezone }}" + when: common_timezone | default("") | length > 0 + tags: + - common diff --git a/lab6c/ansible/roles/docker/defaults/main.yml b/lab6c/ansible/roles/docker/defaults/main.yml new file mode 100644 index 0000000000..546f4a7af0 --- /dev/null +++ b/lab6c/ansible/roles/docker/defaults/main.yml @@ -0,0 +1,16 @@ +--- +docker_arch_map: + x86_64: amd64 + aarch64: arm64 + +docker_arch: "{{ docker_arch_map.get(ansible_architecture, 'amd64') }}" + +docker_packages: + - docker-ce + - docker-ce-cli + - containerd.io + - docker-buildx-plugin + - docker-compose-plugin + +docker_python_package: python3-docker +docker_user: "{{ ansible_user | default('ubuntu') }}" diff --git a/lab6c/ansible/roles/docker/handlers/main.yml b/lab6c/ansible/roles/docker/handlers/main.yml new file mode 100644 index 0000000000..1a5058da5e --- /dev/null +++ b/lab6c/ansible/roles/docker/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: restart docker + ansible.builtin.service: + name: docker + state: restarted diff --git a/lab6c/ansible/roles/docker/tasks/main.yml b/lab6c/ansible/roles/docker/tasks/main.yml new file mode 100644 index 0000000000..990a1dc49c --- /dev/null +++ b/lab6c/ansible/roles/docker/tasks/main.yml @@ -0,0 +1,105 @@ +--- +# Docker role: install Docker engine from official repo +# Tags: docker_install, docker_config, docker + +- name: Docker installation + block: + - name: Install APT dependencies for Docker repository + ansible.builtin.apt: + name: + - ca-certificates + - curl + - gnupg + state: present + update_cache: true + tags: + - docker_install + - docker + + - name: Ensure Docker keyring directory exists + ansible.builtin.file: + path: /etc/apt/keyrings + state: directory + mode: "0755" + tags: + - docker_install + - docker + + - name: Download Docker official GPG key + ansible.builtin.get_url: + url: https://download.docker.com/linux/ubuntu/gpg + dest: /etc/apt/keyrings/docker.asc + mode: "0644" + tags: + - docker_install + - docker + + - name: Add Docker APT repository + ansible.builtin.apt_repository: + repo: "deb [arch={{ docker_arch }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable" + filename: docker + state: present + register: docker_repo + tags: + - docker_install + - docker + + - name: Update apt cache after Docker repo changes + ansible.builtin.apt: + update_cache: true + when: docker_repo is changed + tags: + - docker_install + - docker + + - name: Install Docker engine and CLI packages + ansible.builtin.apt: + name: "{{ docker_packages + [docker_python_package] }}" + state: present + notify: restart docker + tags: + - docker_install + - docker + + rescue: + - name: Wait before retry after GPG/repo failure + ansible.builtin.pause: + seconds: 10 + prompt: "Retrying Docker repo setup..." + + - name: Retry apt update + ansible.builtin.apt: + update_cache: true + + always: + - name: Ensure Docker service is enabled and running + ansible.builtin.service: + name: docker + state: started + enabled: true + tags: + - docker + - docker_config + +- name: Docker configuration + block: + - name: Ensure docker group exists + ansible.builtin.group: + name: docker + state: present + tags: + - docker_config + - docker + + - name: Add target user to docker group + ansible.builtin.user: + name: "{{ docker_user }}" + groups: docker + append: true + tags: + - docker_config + - docker + + tags: + - docker_config + - docker diff --git a/lab6c/ansible/roles/web_app/defaults/main.yml b/lab6c/ansible/roles/web_app/defaults/main.yml new file mode 100644 index 0000000000..0e150a57fe --- /dev/null +++ b/lab6c/ansible/roles/web_app/defaults/main.yml @@ -0,0 +1,19 @@ +--- +# Application config +app_name: "devops-info-python" +docker_image: "{{ dockerhub_username }}/{{ app_name }}" +docker_image_tag: "latest" + +app_port: 5000 +app_internal_port: 5000 +app_container_name: "{{ app_name }}" +app_restart_policy: "unless-stopped" +app_env: {} +app_health_path: "/health" +app_wait_timeout: 120 + +# Docker Compose +compose_project_dir: "/opt/{{ app_name }}" + +# Wipe logic: set to true to remove app completely. Also requires --tags web_app_wipe for wipe-only. +web_app_wipe: false diff --git a/lab6c/ansible/roles/web_app/handlers/main.yml b/lab6c/ansible/roles/web_app/handlers/main.yml new file mode 100644 index 0000000000..f8bfe8ed4f --- /dev/null +++ b/lab6c/ansible/roles/web_app/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: restart app container + community.docker.docker_compose_v2: + project_src: "{{ compose_project_dir }}" + state: present diff --git a/lab6c/ansible/roles/web_app/meta/main.yml b/lab6c/ansible/roles/web_app/meta/main.yml new file mode 100644 index 0000000000..a5177c0f80 --- /dev/null +++ b/lab6c/ansible/roles/web_app/meta/main.yml @@ -0,0 +1,4 @@ +--- +# web_app depends on docker - Docker must be installed before deploying containers +dependencies: + - role: docker diff --git a/lab6c/ansible/roles/web_app/tasks/main.yml b/lab6c/ansible/roles/web_app/tasks/main.yml new file mode 100644 index 0000000000..063676e3cf --- /dev/null +++ b/lab6c/ansible/roles/web_app/tasks/main.yml @@ -0,0 +1,84 @@ +--- +# web_app role: deploy containerized app with Docker Compose +# Tags: app_deploy, compose, web_app +# Dependency: docker role (installed automatically via meta/main.yml) + +# Wipe logic runs first when explicitly requested +- name: Include wipe tasks + include_tasks: wipe.yml + tags: + - web_app_wipe + +# Deployment block +- name: Deploy application with Docker Compose + block: + - name: Log in to Docker Hub + community.docker.docker_login: + registry_url: https://index.docker.io/v1/ + username: "{{ dockerhub_username }}" + password: "{{ dockerhub_password }}" + no_log: true + tags: + - app_deploy + - compose + + - name: Create application directory + ansible.builtin.file: + path: "{{ compose_project_dir }}" + state: directory + mode: "0755" + tags: + - app_deploy + - compose + + - name: Template docker-compose.yml + ansible.builtin.template: + src: docker-compose.yml.j2 + dest: "{{ compose_project_dir }}/docker-compose.yml" + mode: "0644" + tags: + - app_deploy + - compose + + - name: Deploy with Docker Compose (up) + community.docker.docker_compose_v2: + project_src: "{{ compose_project_dir }}" + state: present + pull: always + tags: + - app_deploy + - compose + + - name: Wait for app port to be ready + ansible.builtin.wait_for: + host: "127.0.0.1" + port: "{{ app_port | int }}" + delay: 2 + timeout: "{{ app_wait_timeout }}" + tags: + - app_deploy + - compose + + - name: Verify health endpoint + ansible.builtin.uri: + url: "http://127.0.0.1:{{ app_port }}{{ app_health_path }}" + method: GET + status_code: 200 + return_content: true + register: app_health_result + retries: 5 + delay: 3 + until: app_health_result.status == 200 + tags: + - app_deploy + - compose + + rescue: + - name: Log deployment failure + ansible.builtin.debug: + msg: "Deployment failed, check logs above" + + tags: + - app_deploy + - compose + - web_app diff --git a/lab6c/ansible/roles/web_app/tasks/wipe.yml b/lab6c/ansible/roles/web_app/tasks/wipe.yml new file mode 100644 index 0000000000..fbeb835e4f --- /dev/null +++ b/lab6c/ansible/roles/web_app/tasks/wipe.yml @@ -0,0 +1,37 @@ +--- +# Wipe web application: stops containers, removes compose file and app directory +# Runs only when web_app_wipe=true AND tag web_app_wipe specified +# Usage: ansible-playbook deploy.yml -e "web_app_wipe=true" --tags web_app_wipe + +- name: Check if app directory exists + ansible.builtin.stat: + path: "{{ compose_project_dir }}" + register: compose_dir_stat + +- name: Wipe web application + block: + - name: Stop and remove containers with Docker Compose + community.docker.docker_compose_v2: + project_src: "{{ compose_project_dir }}" + state: absent + when: compose_dir_stat.stat.isdir | default(false) + + - name: Remove docker-compose file + ansible.builtin.file: + path: "{{ compose_project_dir }}/docker-compose.yml" + state: absent + ignore_errors: true + + - name: Remove application directory + ansible.builtin.file: + path: "{{ compose_project_dir }}" + state: absent + ignore_errors: true + + - name: Log wipe completion + ansible.builtin.debug: + msg: "Application {{ app_name }} wiped successfully" + + when: web_app_wipe | default(false) | bool + tags: + - web_app_wipe diff --git a/lab6c/ansible/roles/web_app/templates/docker-compose.yml.j2 b/lab6c/ansible/roles/web_app/templates/docker-compose.yml.j2 new file mode 100644 index 0000000000..7285e18cf1 --- /dev/null +++ b/lab6c/ansible/roles/web_app/templates/docker-compose.yml.j2 @@ -0,0 +1,15 @@ +--- +# Generated by Ansible - do not edit manually +# Template: roles/web_app/templates/docker-compose.yml.j2 + +services: + {{ app_name }}: + image: {{ docker_image }}:{{ docker_image_tag }} + container_name: {{ app_container_name }} + ports: + - "{{ app_port }}:{{ app_internal_port }}" + environment: {{ app_env | default({}) | to_json }} + restart: {{ app_restart_policy }} + {% if app_extra_hosts is defined and app_extra_hosts %} + extra_hosts: {{ app_extra_hosts | to_json }} + {% endif %} From a43ffc68f05995a25256f85bc77dce66b7d8dfc8 Mon Sep 17 00:00:00 2001 From: Phoenix Date: Thu, 5 Mar 2026 15:43:51 +0300 Subject: [PATCH 12/16] docs: workflow screenshot --- lab6c/ansible/docs/workflow.jpg | Bin 0 -> 35396 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lab6c/ansible/docs/workflow.jpg diff --git a/lab6c/ansible/docs/workflow.jpg b/lab6c/ansible/docs/workflow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd8ac1af348dea682cc5842a3d77cc9e03d5315d GIT binary patch literal 35396 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 Lsnj=1zh3-5mQPQ0 literal 0 HcmV?d00001 From 44d9b5f1fc70863b5f48cc0fe0b700fa843190ed Mon Sep 17 00:00:00 2001 From: Phoenix Date: Mon, 9 Mar 2026 18:23:30 +0300 Subject: [PATCH 13/16] lab7 complete --- lab3c/app_python/app.py | 57 +++++++++-- lab7c/docker-compose.yml | 110 +++++++++++++++++++++ lab7c/docs/LAB07.md | 200 ++++++++++++++++++++++++++++++++++++++ lab7c/docs/dashboard.jpg | Bin 0 -> 69272 bytes lab7c/docs/query.jpg | Bin 0 -> 102789 bytes lab7c/loki/config.yml | 43 ++++++++ lab7c/promtail/config.yml | 29 ++++++ 7 files changed, 432 insertions(+), 7 deletions(-) create mode 100644 lab7c/docker-compose.yml create mode 100644 lab7c/docs/LAB07.md create mode 100644 lab7c/docs/dashboard.jpg create mode 100644 lab7c/docs/query.jpg create mode 100644 lab7c/loki/config.yml create mode 100644 lab7c/promtail/config.yml diff --git a/lab3c/app_python/app.py b/lab3c/app_python/app.py index 8935b94091..bb284df8a7 100644 --- a/lab3c/app_python/app.py +++ b/lab3c/app_python/app.py @@ -5,6 +5,7 @@ from __future__ import annotations +import json import logging import os import platform @@ -28,11 +29,12 @@ START_TIME = datetime.now(timezone.utc) -logging.basicConfig( - level=logging.INFO, - format="%(asctime)s - %(levelname)s - %(message)s", -) logger = logging.getLogger("devops-info-service") +logger.setLevel(logging.INFO) + +handler = logging.StreamHandler() +handler.setLevel(logging.INFO) +logger.handlers = [handler] app = FastAPI( title="DevOps Info Service", @@ -75,9 +77,38 @@ def isoformat_utc(dt: datetime) -> str: @app.middleware("http") async def log_requests(request: Request, call_next): - logger.info("Request: %s %s", request.method, request.url.path) + start_time = datetime.now(timezone.utc) + logger.info( + json.dumps( + { + "timestamp": isoformat_utc(start_time), + "level": "INFO", + "service": SERVICE_NAME, + "event": "request", + "method": request.method, + "path": request.url.path, + "client_ip": request.client.host if request.client else "unknown", + "user_agent": request.headers.get("user-agent", "unknown"), + } + ) + ) response = await call_next(request) - logger.info("Response: %s %s -> %s", request.method, request.url.path, response.status_code) + end_time = datetime.now(timezone.utc) + logger.info( + json.dumps( + { + "timestamp": isoformat_utc(end_time), + "level": "INFO", + "service": SERVICE_NAME, + "event": "response", + "method": request.method, + "path": request.url.path, + "status": response.status_code, + "client_ip": request.client.host if request.client else "unknown", + "user_agent": request.headers.get("user-agent", "unknown"), + } + ) + ) return response @@ -99,7 +130,19 @@ async def http_exception_handler(request: Request, exc: StarletteHTTPException): @app.exception_handler(Exception) async def unhandled_exception_handler(request: Request, exc: Exception): - logger.exception("Unhandled error: %s", exc) + logger.error( + json.dumps( + { + "timestamp": isoformat_utc(datetime.now(timezone.utc)), + "level": "ERROR", + "service": SERVICE_NAME, + "event": "exception", + "method": request.method, + "path": request.url.path, + "error": str(exc), + } + ) + ) return JSONResponse( status_code=500, content={ diff --git a/lab7c/docker-compose.yml b/lab7c/docker-compose.yml new file mode 100644 index 0000000000..838b56994c --- /dev/null +++ b/lab7c/docker-compose.yml @@ -0,0 +1,110 @@ +version: "3.8" + +networks: + logging: + name: logging + +volumes: + loki-data: + grafana-data: + +services: + loki: + image: grafana/loki:3.0.0 + command: -config.file=/etc/loki/config.yml + ports: + - "3100:3100" + volumes: + - ./loki/config.yml:/etc/loki/config.yml:ro + - loki-data:/loki + networks: + - logging + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:3100/ready || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s + deploy: + resources: + limits: + cpus: "1.0" + memory: 1G + reservations: + cpus: "0.5" + memory: 512M + + promtail: + image: grafana/promtail:3.0.0 + command: -config.file=/etc/promtail/config.yml + ports: + - "9080:9080" + volumes: + - ./promtail/config.yml:/etc/promtail/config.yml:ro + - /var/log:/var/log:ro + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + networks: + - logging + depends_on: + - loki + deploy: + resources: + limits: + cpus: "0.5" + memory: 512M + reservations: + cpus: "0.25" + memory: 256M + + grafana: + image: grafana/grafana:12.3.1 + ports: + - "3000:3000" + environment: + # Development defaults. For production, override via .env or secrets. + GF_AUTH_ANONYMOUS_ENABLED: "false" + GF_SECURITY_ADMIN_USER: "admin" + GF_SECURITY_ADMIN_PASSWORD: "${GRAFANA_ADMIN_PASSWORD:-admin}" + volumes: + - grafana-data:/var/lib/grafana + networks: + - logging + depends_on: + - loki + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:3000/api/health || exit 1"] + interval: 15s + timeout: 5s + retries: 5 + start_period: 20s + deploy: + resources: + limits: + cpus: "1.0" + memory: 1G + reservations: + cpus: "0.5" + memory: 512M + + app-python: + image: tsixphoenix/devops-info-python:latest + ports: + - "8000:5000" + networks: + - logging + labels: + logging: "promtail" + app: "devops-python" + environment: + HOST: "0.0.0.0" + PORT: "5000" + deploy: + resources: + limits: + cpus: "0.5" + memory: 512M + reservations: + cpus: "0.25" + memory: 256M + diff --git a/lab7c/docs/LAB07.md b/lab7c/docs/LAB07.md new file mode 100644 index 0000000000..4adc7aca91 --- /dev/null +++ b/lab7c/docs/LAB07.md @@ -0,0 +1,200 @@ +# Lab 7 — Observability & Logging with Loki Stack + +## 1. Architecture + +- **Loki**: log storage and query engine (TSDB on filesystem, 7‑day retention). +- **Promtail**: collects container logs from Docker and ships them to Loki. +- **Grafana**: visualizes logs and dashboards using LogQL. +- **App (FastAPI)**: `devops-info-service` container, logging JSON to stdout. +- All services run in `lab7c/docker-compose.yml` on a shared `logging` network. + +## 2. Setup Guide + +### 2.1 Stack deployment + +```bash +cd monitoring +docker compose up -d +docker compose ps +``` + +Services: +- `loki` on `3100` +- `promtail` on `9080` +- `grafana` on `3000` +- `app-python` on `8000` (mapped to container 5000) + +### 2.2 Verification + +```bash +# Loki readiness +curl http://localhost:3100/ready + +# Promtail targets +curl http://localhost:9080/targets + +# Open Grafana (local) +http://localhost:3000 +``` + +In Grafana: +1. **Connections → Data sources → Add data source → Loki** +2. URL: `http://loki:3100` +3. **Save & Test** → “Data source connected” +4. Go to **Explore**, choose **Loki**, run `{job="docker"}`. + +## 3. Configuration + +### 3.1 Docker Compose (`lab7c/docker-compose.yml`) + +- Defines network `logging` and volumes `loki-data`, `grafana-data`. +- **Loki**: + - Image `grafana/loki:3.0.0` + - Mounts `./loki/config.yml` to `/etc/loki/config.yml` + - Persists data in `loki-data:/loki` + - Health check on `/ready` + - Resource limits and reservations set. +- **Promtail**: + - Image `grafana/promtail:3.0.0` + - Mounts `./promtail/config.yml` + - Mounts `/var/lib/docker/containers` and `/var/run/docker.sock` read‑only. +- **Grafana**: + - Image `grafana/grafana:12.3.1` + - Port `3000:3000` + - Admin user/password via env (for dev: `admin` / `${GRAFANA_ADMIN_PASSWORD:-admin}`). + - Health check on `/api/health`, resource limits. +- **app-python**: + - Image `tsixphoenix/devops-info-python:latest` + - Port `8000:5000` + - Labels `logging="promtail"`, `app="devops-python"` for Promtail/Loki labels. + +### 3.2 Loki (`lab7c/loki/config.yml`) + +- `auth_enabled: false` for local testing. +- `server.http_listen_port: 3100`. +- `common`: + - `path_prefix: /loki` + - filesystem storage for chunks and rules. + - in‑memory ring for a single instance. +- `schema_config`: + - `store: tsdb`, `object_store: filesystem`, `schema: v13`, daily index. +- `storage_config`: + - `tsdb_shipper` index in `/loki/index` with cache. + - filesystem chunks in `/loki/chunks`. +- `limits_config.retention_period: 168h` (7 days). +- `compactor`: + - cleans up old logs with `retention_enabled: true`. + +### 3.3 Promtail (`lab7c/promtail/config.yml`) + +- `server.http_listen_port: 9080`. +- `positions` stored in `/tmp/positions.yaml`. +- `clients` send to `http://loki:3100/loki/api/v1/push`. +- `scrape_configs` for **Docker**: + - `docker_sd_configs` on `unix:///var/run/docker.sock`. + - `relabel_configs`: + - `container` label from `__meta_docker_container_name`. + - `app` label from container label `app`. + - `logging` label from container label `logging`. + +## 4. Application Logging (JSON) + +In `lab3c/app_python/app.py`: +- Switched to **JSON log lines** using the standard `logging` module. +- HTTP middleware logs: + - `timestamp`, `level`, `service`, `method`, `path`, `status`, `client_ip`, `user_agent`. +- Logs are written to stdout and collected by Docker, then by Promtail. + +Example JSON log line: +```json +{ + "timestamp": "2026-03-05T12:20:00Z", + "level": "INFO", + "service": "devops-info-service", + "method": "GET", + "path": "/health", + "status": 200, + "client_ip": "127.0.0.1", + "user_agent": "curl/8.6.0", + "message": "request" +} +``` + +Screenshots used in the report are stored in `lab7c/docs/`, for example: +- `lab7c/docs/grafana-explore.png` — Explore view with `{app="devops-python"}`. +- `lab7c/docs/grafana-dashboard.png` — dashboard with all four panels. + +## 5. Dashboard & LogQL + +### 5.1 Explore queries + +In Grafana Explore (Loki data source): + +- All logs for Python app: +```logql +{app="devops-python"} +``` + +- Only error logs: +```logql +{app="devops-python"} |= "ERROR" +``` + +- Parse JSON and filter by method: +```logql +{app="devops-python"} | json | method="GET" +``` + +### 5.2 Dashboard panels + +Dashboard panels created (LogQL examples): + +1. **Logs Table** (all apps): + ```logql + {app=~"devops-.*"} + ``` +2. **Request Rate** (time series): + ```logql + sum by (app) (rate({app=~"devops-.*"}[1m])) + ``` +3. **Error Logs**: + ```logql + {app=~"devops-.*"} | json | level="ERROR" + ``` +4. **Log Level Distribution**: + ```logql + sum by (level) (count_over_time({app=~"devops-.*"} | json [5m])) + ``` + +## 6. Production Configuration + +- **Resource limits**: all services have `deploy.resources` limits and reservations. +- **Grafana security**: + - Anonymous access disabled (`GF_AUTH_ANONYMOUS_ENABLED=false`). + - Admin credentials configured via environment variables / `.env`. +- **Health checks**: + - Loki: `/ready` endpoint. + - Grafana: `/api/health` endpoint. +- **Retention**: + - Loki configured for 7 days (`retention_period: 168h`) with compactor cleanup. + +## 7. Testing + +1. Start stack: `docker compose up -d`. +2. Generate logs: + ```bash + for i in {1..20}; do curl http://localhost:8000/; done + for i in {1..20}; do curl http://localhost:8000/health; done + ``` +3. In Grafana Explore, run: + - `{app="devops-python"}` + - `{app="devops-python"} | json | method="GET"` + - `{app="devops-python"} | json | level="ERROR"` +4. Check dashboard panels render data. + +## 8. Challenges + +- **Docker TSDB configuration**: required reading Loki 3.0 docs to use `tsdb` with filesystem correctly. +- **Docker discovery**: Promtail needed correct Docker SD and relabeling to get `app` and `container` labels. +- **JSON logging**: changing logging format without breaking existing behavior and keeping logs parseable in Loki. + diff --git a/lab7c/docs/dashboard.jpg b/lab7c/docs/dashboard.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05843cfab416a2df7b8caeeba7014ad7538c50bd GIT binary patch literal 69272 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⪼ZbmgW&i_)McZcT;{kO`z2*ikaoQb46gNL1 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

peLONZ!%$3EZiLY!JBSKfoFbkuv$5x9m*C+P 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 G@BS~g8+Y^o literal 0 HcmV?d00001 diff --git a/lab7c/loki/config.yml b/lab7c/loki/config.yml new file mode 100644 index 0000000000..6a9219da04 --- /dev/null +++ b/lab7c/loki/config.yml @@ -0,0 +1,43 @@ +auth_enabled: false + +server: + http_listen_port: 3100 + +common: + path_prefix: /loki + storage: + filesystem: + chunks_directory: /loki/chunks + rules_directory: /loki/rules + replication_factor: 1 + ring: + instance_addr: 127.0.0.1 + kvstore: + store: inmemory + +schema_config: + configs: + - from: 2024-01-01 + store: tsdb + object_store: filesystem + schema: v13 + index: + prefix: index_ + period: 24h + +storage_config: + tsdb_shipper: + active_index_directory: /loki/index + cache_location: /loki/cache + cache_ttl: 24h + filesystem: + directory: /loki/chunks + +limits_config: + retention_period: 168h + +compactor: + working_directory: /loki/compactor + retention_enabled: true + delete_request_store: filesystem + diff --git a/lab7c/promtail/config.yml b/lab7c/promtail/config.yml new file mode 100644 index 0000000000..eb99e73798 --- /dev/null +++ b/lab7c/promtail/config.yml @@ -0,0 +1,29 @@ +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: http://loki:3100/loki/api/v1/push + +scrape_configs: + - job_name: docker + docker_sd_configs: + - host: unix:///var/run/docker.sock + refresh_interval: 5s + + relabel_configs: + # Container name label (without leading slash) + - source_labels: [__meta_docker_container_name] + target_label: container + regex: "/(.*)" + replacement: "$1" + + # Propagate container labels as Loki labels + - source_labels: [__meta_docker_container_label_app] + target_label: app + - source_labels: [__meta_docker_container_label_logging] + target_label: logging + From 7fdc5f849b393d8909c450a78869cf0455c63b76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC?= Date: Mon, 9 Mar 2026 18:30:42 +0300 Subject: [PATCH 14/16] Update LAB07.md --- lab7c/docs/LAB07.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lab7c/docs/LAB07.md b/lab7c/docs/LAB07.md index 4adc7aca91..f898ad53f1 100644 --- a/lab7c/docs/LAB07.md +++ b/lab7c/docs/LAB07.md @@ -120,10 +120,7 @@ Example JSON log line: } ``` -Screenshots used in the report are stored in `lab7c/docs/`, for example: -- `lab7c/docs/grafana-explore.png` — Explore view with `{app="devops-python"}`. -- `lab7c/docs/grafana-dashboard.png` — dashboard with all four panels. - +Screenshots are stored in `lab7c/docs/`. ## 5. Dashboard & LogQL ### 5.1 Explore queries From 060f86ef93c7804499aad34341519d139300814b Mon Sep 17 00:00:00 2001 From: Phoenix Date: Thu, 19 Mar 2026 15:09:02 +0300 Subject: [PATCH 15/16] lab8 complete --- lab3c/app_python/app.py | 90 +++++++++++++- lab3c/app_python/requirements.txt | 1 + lab7c/docker-compose.yml | 1 - lab8c/docker-compose.yml | 142 +++++++++++++++++++++++ lab8c/docs/LAB08.md | 93 +++++++++++++++ lab8c/docs/grafana-app-dashboard.json | 161 ++++++++++++++++++++++++++ lab8c/docs/grafana-dashboard.jpg | Bin 0 -> 82699 bytes lab8c/docs/metrics-endpoint.jpg | Bin 0 -> 258312 bytes lab8c/docs/prometheus-query.jpg | Bin 0 -> 34017 bytes lab8c/docs/prometheus-targets.jpg | Bin 0 -> 63783 bytes lab8c/loki/config.yml | 42 +++++++ lab8c/prometheus/prometheus.yml | 23 ++++ lab8c/promtail/config.yml | 26 +++++ 13 files changed, 576 insertions(+), 3 deletions(-) create mode 100644 lab8c/docker-compose.yml create mode 100644 lab8c/docs/LAB08.md create mode 100644 lab8c/docs/grafana-app-dashboard.json create mode 100644 lab8c/docs/grafana-dashboard.jpg create mode 100644 lab8c/docs/metrics-endpoint.jpg create mode 100644 lab8c/docs/prometheus-query.jpg create mode 100644 lab8c/docs/prometheus-targets.jpg create mode 100644 lab8c/loki/config.yml create mode 100644 lab8c/prometheus/prometheus.yml create mode 100644 lab8c/promtail/config.yml diff --git a/lab3c/app_python/app.py b/lab3c/app_python/app.py index bb284df8a7..763238476c 100644 --- a/lab3c/app_python/app.py +++ b/lab3c/app_python/app.py @@ -10,13 +10,58 @@ import os import platform import socket +import time from datetime import datetime, timezone import uvicorn from fastapi import FastAPI, Request -from fastapi.responses import JSONResponse +from fastapi.responses import JSONResponse, Response +from prometheus_client import ( + CONTENT_TYPE_LATEST, + CollectorRegistry, + Counter, + Gauge, + Histogram, + generate_latest, +) from starlette.exceptions import HTTPException as StarletteHTTPException +# Use a custom registry so we don't clash with the default one (avoids "Duplicated timeseries" when the app module is loaded more than once). +_prometheus_registry = CollectorRegistry() + +# Prometheus metrics (RED: Rate, Errors, Duration) +http_requests_total = Counter( + "http_requests_total", + "Total HTTP requests", + ["method", "endpoint", "status"], + registry=_prometheus_registry, +) +http_request_duration_seconds = Histogram( + "http_request_duration_seconds", + "HTTP request duration in seconds", + ["method", "endpoint"], + buckets=(0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0), + registry=_prometheus_registry, +) +http_requests_in_progress = Gauge( + "http_requests_in_progress", + "HTTP requests currently being processed", + registry=_prometheus_registry, +) +# Application-specific metrics +devops_info_endpoint_calls = Counter( + "devops_info_endpoint_calls", + "Endpoint calls for DevOps info service", + ["endpoint"], + registry=_prometheus_registry, +) +devops_info_system_collection_seconds = Histogram( + "devops_info_system_collection_seconds", + "System info collection time in seconds", + buckets=(0.001, 0.005, 0.01, 0.025, 0.05, 0.1), + registry=_prometheus_registry, +) + # Config HOST = os.getenv("HOST", "0.0.0.0") PORT = int(os.getenv("PORT", "5000")) @@ -75,6 +120,32 @@ def isoformat_utc(dt: datetime) -> str: return dt.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") +def _normalize_endpoint(path: str) -> str: + """Normalize path for metric labels to keep cardinality low.""" + if path in ("/", "/health", "/metrics"): + return path + return "other" + + +@app.middleware("http") +async def log_requests(request: Request, call_next): + start_time = time.perf_counter() + endpoint = _normalize_endpoint(request.url.path) + http_requests_in_progress.inc() + try: + response = await call_next(request) + status = str(response.status_code) + http_requests_total.labels( + method=request.method, endpoint=endpoint, status=status + ).inc() + http_request_duration_seconds.labels( + method=request.method, endpoint=endpoint + ).observe(time.perf_counter() - start_time) + return response + finally: + http_requests_in_progress.dec() + + @app.middleware("http") async def log_requests(request: Request, call_next): start_time = datetime.now(timezone.utc) @@ -152,8 +223,21 @@ async def unhandled_exception_handler(request: Request, exc: Exception): ) +@app.get("/metrics") +async def metrics(): + """Prometheus metrics endpoint.""" + return Response( + content=generate_latest(_prometheus_registry), + media_type=CONTENT_TYPE_LATEST, + ) + + @app.get("/") async def root(request: Request): + devops_info_endpoint_calls.labels(endpoint="/").inc() + t0 = time.perf_counter() + sys_info = get_system_info() + devops_info_system_collection_seconds.observe(time.perf_counter() - t0) uptime = get_uptime() now = datetime.now(timezone.utc) @@ -164,7 +248,7 @@ async def root(request: Request): "description": SERVICE_DESCRIPTION, "framework": SERVICE_FRAMEWORK, }, - "system": get_system_info(), + "system": sys_info, "runtime": { "uptime_seconds": uptime["seconds"], "uptime_human": uptime["human"], @@ -180,6 +264,7 @@ async def root(request: Request): "endpoints": [ {"path": "/", "method": "GET", "description": "Service information"}, {"path": "/health", "method": "GET", "description": "Health check"}, + {"path": "/metrics", "method": "GET", "description": "Prometheus metrics"}, ], } @@ -188,6 +273,7 @@ async def root(request: Request): @app.get("/health") async def health(): + devops_info_endpoint_calls.labels(endpoint="/health").inc() uptime = get_uptime() return { "status": "healthy", diff --git a/lab3c/app_python/requirements.txt b/lab3c/app_python/requirements.txt index 01c3cb3565..d663691063 100644 --- a/lab3c/app_python/requirements.txt +++ b/lab3c/app_python/requirements.txt @@ -1,2 +1,3 @@ fastapi==0.128.6 uvicorn[standard]==0.32.0 +prometheus-client==0.23.1 diff --git a/lab7c/docker-compose.yml b/lab7c/docker-compose.yml index 838b56994c..4ad8163ebd 100644 --- a/lab7c/docker-compose.yml +++ b/lab7c/docker-compose.yml @@ -62,7 +62,6 @@ services: ports: - "3000:3000" environment: - # Development defaults. For production, override via .env or secrets. GF_AUTH_ANONYMOUS_ENABLED: "false" GF_SECURITY_ADMIN_USER: "admin" GF_SECURITY_ADMIN_PASSWORD: "${GRAFANA_ADMIN_PASSWORD:-admin}" diff --git a/lab8c/docker-compose.yml b/lab8c/docker-compose.yml new file mode 100644 index 0000000000..129dc3058e --- /dev/null +++ b/lab8c/docker-compose.yml @@ -0,0 +1,142 @@ +networks: + logging: + name: logging + +volumes: + loki-data: + grafana-data: + prometheus-data: + +services: + loki: + image: grafana/loki:3.0.0 + command: -config.file=/etc/loki/config.yml + ports: + - "3100:3100" + volumes: + - ./loki/config.yml:/etc/loki/config.yml:ro + - loki-data:/loki + networks: + - logging + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:3100/ready || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s + deploy: + resources: + limits: + cpus: "1.0" + memory: 1G + reservations: + cpus: "0.5" + memory: 512M + + promtail: + image: grafana/promtail:3.0.0 + command: -config.file=/etc/promtail/config.yml + ports: + - "9080:9080" + volumes: + - ./promtail/config.yml:/etc/promtail/config.yml:ro + - /var/log:/var/log:ro + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + networks: + - logging + depends_on: + - loki + deploy: + resources: + limits: + cpus: "0.5" + memory: 512M + reservations: + cpus: "0.25" + memory: 256M + + prometheus: + image: prom/prometheus:v3.9.0 + command: + - "--config.file=/etc/prometheus/prometheus.yml" + - "--storage.tsdb.path=/prometheus" + - "--storage.tsdb.retention.time=15d" + - "--storage.tsdb.retention.size=10GB" + - "--web.enable-lifecycle" + ports: + - "9090:9090" + volumes: + - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro + - prometheus-data:/prometheus + networks: + - logging + healthcheck: + test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:9090/-/healthy || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + deploy: + resources: + limits: + cpus: "1.0" + memory: 1G + reservations: + cpus: "0.5" + memory: 512M + + grafana: + image: grafana/grafana:12.3.1 + ports: + - "3000:3000" + environment: + GF_AUTH_ANONYMOUS_ENABLED: "false" + GF_SECURITY_ADMIN_USER: "admin" + GF_SECURITY_ADMIN_PASSWORD: "${GRAFANA_ADMIN_PASSWORD:-admin}" + volumes: + - grafana-data:/var/lib/grafana + networks: + - logging + depends_on: + - loki + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:3000/api/health || exit 1"] + interval: 15s + timeout: 5s + retries: 5 + start_period: 20s + deploy: + resources: + limits: + cpus: "0.5" + memory: 512M + reservations: + cpus: "0.25" + memory: 256M + + app-python: + image: tsixphoenix/devops-info-python:latest + ports: + - "8000:5000" + networks: + - logging + labels: + logging: "promtail" + app: "devops-python" + environment: + HOST: "0.0.0.0" + PORT: "5000" + healthcheck: + # python:3.13-slim has no curl; use Python + test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:5000/health')"] + interval: 10s + timeout: 5s + retries: 5 + deploy: + resources: + limits: + cpus: "0.5" + memory: 256M + reservations: + cpus: "0.25" + memory: 128M diff --git a/lab8c/docs/LAB08.md b/lab8c/docs/LAB08.md new file mode 100644 index 0000000000..5fab199c43 --- /dev/null +++ b/lab8c/docs/LAB08.md @@ -0,0 +1,93 @@ +# Lab 8 — Metrics & Monitoring with Prometheus + +## 1. Architecture + +The app exposes metrics at `/metrics`. Prometheus scrapes that endpoint every 15 seconds, stores the time series, and Grafana queries Prometheus to draw dashboards. + +Rough flow: + +- **App** → exposes `/metrics` in Prometheus text format +- **Prometheus** → scrapes app, Loki, Grafana, and itself on the same Docker network (`logging`) +- **Grafana** → uses Prometheus as a data source (`http://prometheus:9090`) and shows RED metrics (rate, errors, duration) plus app health + +So: app and other services are scraped by Prometheus; Grafana only talks to Prometheus (and Loki for logs from Lab 7 if you use that stack too). + +## 2. Application instrumentation + +The Python app lives in `lab3c/app_python`. I added `prometheus-client==0.23.1` to `requirements.txt` and wired up metrics in `app.py`. + +**What’s exposed:** + +- **http_requests_total** (counter) — total requests with labels `method`, `endpoint`, `status`. Used for request rate and error rate. +- **http_request_duration_seconds** (histogram) — request duration with `method` and `endpoint`. Used for latency percentiles (e.g. p95). +- **http_requests_in_progress** (gauge) — how many requests are in flight right now. +- **devops_info_endpoint_calls** (counter) — per-endpoint usage (e.g. `/`, `/health`). +- **devops_info_system_collection_seconds** (histogram) — how long it takes to gather system info on the root endpoint. + +Paths are normalized to `/`, `/health`, `/metrics`, or `other` so we don’t blow up cardinality. A middleware records the start time, bumps the in-progress gauge, runs the handler, then records duration and status and decrements the gauge. + +The `/metrics` route just returns `generate_latest()` with the right content type so Prometheus can scrape it. + +## 3. Prometheus configuration + +Config is in `lab8c/prometheus/prometheus.yml`. + +- Global scrape interval: 15s. +- Four jobs: **prometheus** (self), **app** (`app-python:5000`, path `/metrics`), **loki** (`loki:3100`), **grafana** (`grafana:3000`). + +Retention (15d, 10GB) is set on the command line in `docker-compose.yml`, not in this file. + +## 4. Dashboard + +The custom dashboard is in `lab8c/docs/grafana-app-dashboard.json`. It has seven panels: + +1. **Request rate** — `sum(rate(http_requests_total[5m])) by (endpoint)` (requests per second per endpoint). +2. **Error rate (5xx)** — `sum(rate(http_requests_total{status=~"5.."}[5m]))`. +3. **Request duration p95** — `histogram_quantile(0.95, ...)` over the duration histogram. +4. **Active requests** — `http_requests_in_progress`. +5. **Status code distribution** — `sum by (status) (rate(http_requests_total[5m]))` (pie chart). +6. **Uptime (app)** — `up{job="app"}` (1 = up, 0 = down). +7. **Request duration heatmap** — `rate(http_request_duration_seconds_bucket[5m])`. + +When you import the JSON in Grafana, it will ask for a Prometheus data source; pick the one you added (URL `http://prometheus:9090`). + +## 5. PromQL examples + +- `rate(http_requests_total[5m])` — request rate over the last 5 minutes. +- `sum(rate(http_requests_total[5m])) by (endpoint)` — same, broken down by endpoint. +- `sum(rate(http_requests_total{status=~"5.."}[5m]))` — 5xx error rate (RED: errors). +- `histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))` — 95th percentile latency in seconds (RED: duration). +- `up{job="app"}` — 1 if the app target is up, 0 if down. +- `http_requests_in_progress` — current number of requests being processed. + +## 6. Production-style setup + +In `lab8c/docker-compose.yml`: + +- **Health checks**: Prometheus uses `wget` on `/-/healthy`; the app uses `curl` on `/health`. Loki and Grafana keep their existing checks. +- **Resource limits**: Prometheus 1 CPU / 1G; Loki 1 CPU / 1G; Grafana 0.5 CPU / 512M; app 0.5 CPU / 256M. +- **Retention**: 15 days and 10GB via Prometheus command-line flags. +- **Volumes**: `prometheus-data`, `loki-data`, `grafana-data` so data survives restarts. + +## 7. Testing + +- Run the app locally from `lab3c/app_python`, then hit `http://localhost:8000/metrics` — you should see the usual Prometheus text output. +- Run the stack: `cd lab8c && docker compose up -d`. Open http://localhost:9090/targets and check that all targets (prometheus, app, loki, grafana) are UP. Run a few queries in the Prometheus UI (e.g. `up`, `rate(http_requests_total[5m])` after some traffic). +- In Grafana, add the Prometheus data source and import the dashboard from `lab8c/docs/grafana-app-dashboard.json`. Generate some traffic to the app and confirm the panels show data. + +Screenshots to put in `lab8c/docs/`: + +- `metrics-endpoint.jpg` — browser or terminal output of `/metrics`. +- `prometheus-targets.jpg` — Targets page with all UP. +- `prometheus-query.jpg` — e.g. result of `up` or `rate(http_requests_total[5m])`. +- `grafana-dashboard.jpg` — the custom dashboard with live data. + +## 8. Challenges and fixes + +- **Middleware order**: Metrics need the response status and duration, so the metrics middleware runs the handler first and then records counter/histogram/gauge. The logging middleware is separate and doesn’t affect the numbers. +- **Cardinality**: We only use a few endpoint labels (`/`, `/health`, `/metrics`, `other`) so we don’t get thousands of series from random paths. +- **Docker**: Prometheus config is mounted at `/etc/prometheus/prometheus.yml`. All scrape targets use service names on the `logging` network (`app-python:5000`, `loki:3100`, `grafana:3000`). + +## 9. Metrics vs logs (Lab 7) + +Logs (Loki) answer “what happened” — individual requests, errors, stack traces. Metrics (Prometheus) answer “how much” and “how often” — rates, percentiles, counts. You need both: use metrics for dashboards and alerts, and when something spikes, dig into the logs for context. diff --git a/lab8c/docs/grafana-app-dashboard.json b/lab8c/docs/grafana-app-dashboard.json new file mode 100644 index 0000000000..e9e2cb5c54 --- /dev/null +++ b/lab8c/docs/grafana-app-dashboard.json @@ -0,0 +1,161 @@ +{ + "annotations": { + "list": [] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, + "fieldConfig": { + "defaults": { "unit": "reqps", "min": 0 }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 }, + "id": 1, + "options": { "legend": { "displayMode": "list", "placement": "bottom" } }, + "targets": [ + { + "expr": "sum(rate(http_requests_total[5m])) by (endpoint)", + "legendFormat": "{{endpoint}}", + "refId": "A" + } + ], + "title": "Request Rate", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, + "fieldConfig": { + "defaults": { "unit": "reqps", "min": 0, "color": { "mode": "palette-classic" } }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 0 }, + "id": 2, + "options": { "legend": { "displayMode": "list", "placement": "bottom" } }, + "targets": [ + { + "expr": "sum(rate(http_requests_total{status=~\"5..\"}[5m]))", + "legendFormat": "5xx errors/s", + "refId": "A" + } + ], + "title": "Error Rate (5xx)", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, + "fieldConfig": { + "defaults": { "unit": "s", "min": 0 }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 8 }, + "id": 3, + "options": { "legend": { "displayMode": "list", "placement": "bottom" } }, + "targets": [ + { + "expr": "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, endpoint))", + "legendFormat": "p95 {{endpoint}}", + "refId": "A" + } + ], + "title": "Request Duration p95", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, + "fieldConfig": { + "defaults": { "unit": "short", "min": 0 }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 8 }, + "id": 4, + "options": { "legend": { "displayMode": "list", "placement": "bottom" } }, + "targets": [ + { + "expr": "http_requests_in_progress", + "legendFormat": "in progress", + "refId": "A" + } + ], + "title": "Active Requests", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, + "fieldConfig": { + "defaults": { "unit": "short", "min": 0 }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 16 }, + "id": 5, + "options": { "legend": { "displayMode": "list", "placement": "bottom" } }, + "targets": [ + { + "expr": "sum by (status) (rate(http_requests_total[5m]))", + "legendFormat": "{{status}}", + "refId": "A" + } + ], + "title": "Status Code Distribution", + "type": "piechart" + }, + { + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, + "fieldConfig": { + "defaults": { "unit": "short", "min": 0, "max": 1 }, + "overrides": [ + { "matcher": { "id": "byValue", "options": "0" }, "properties": [{ "id": "color", "value": { "fixedColor": "red", "mode": "fixed" } }] }, + { "matcher": { "id": "byValue", "options": "1" }, "properties": [{ "id": "color", "value": { "fixedColor": "green", "mode": "fixed" } }] } + ] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 16 }, + "id": 6, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "auto" }, + "targets": [ + { + "expr": "up{job=\"app\"}", + "legendFormat": "app", + "refId": "A" + } + ], + "title": "Uptime (app)", + "type": "stat" + }, + { + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, + "fieldConfig": { + "defaults": { "unit": "s", "min": 0 }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 24, "x": 0, "y": 24 }, + "id": 7, + "options": { "legend": { "displayMode": "list", "placement": "bottom" } }, + "targets": [ + { + "expr": "rate(http_request_duration_seconds_bucket[5m])", + "legendFormat": "{{le}}", + "refId": "A" + } + ], + "title": "Request Duration Heatmap", + "type": "heatmap" + } + ], + "refresh": "10s", + "schemaVersion": 39, + "style": "dark", + "tags": ["devops", "app-metrics"], + "templating": { "list": [] }, + "time": { "from": "now-1h", "to": "now" }, + "timepicker": {}, + "timezone": "browser", + "title": "DevOps Info Service - Metrics", + "uid": "devops-app-metrics", + "version": 1, + "weekStart": "" +} diff --git a/lab8c/docs/grafana-dashboard.jpg b/lab8c/docs/grafana-dashboard.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b30001e68ebbfaf855ea83058c6722e37e6ca593 GIT binary patch literal 82699 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%0Dao{#xK-(TeNF5d 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 np;TaeLo7dx=W^_UIC^&v*}6S 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

v8u|M#ZS*0~-&ifi^>wAmQV&1c$YQqOK;&Cf!OM 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

aG3P7OJ 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 z z7<@VM&U%WoUGB_HT;e>t^Q2Ym9zM)uP#ikA^wU+p`~AiPw6*@R?f%O}_=C#+J^QVh zLRjO(0p7{Gf9D<34*Yde^Y7(Ien7% zxuxaFuALtEaptt9JNKTe4v#yeZzs|4iE&iw?B0pJ0`@;<#>(I&TiBh>u5T%2Cujx7#qsh5o7zpUvS@ET zsEAjJu$!doU5YN)pVG~XGBch%gD5LqJ0jq%zZ%?pV<@U`U zB52_-_!ZEd+$i6oVoAO=!CPFf@g5te!tLX+)BJYz;M=%Xe0!eN{}ZBX_mt<4;g2>V$!*_V z?H>akZ9X5ayStCQ0!A3a?JD$`*F&*RTe@4f%0vZ)>6=q?vnvr=1y|&qefj>I;T2Gy zrQ%D}L03*m(`P|4NJ?l=1)F6|AEj%fXD`5gQBe9NK!Ca0tuN}tzA6CxDQC_kL|k?A{t0uV zE1=W3DpgIf?iJ7!AH$4A)!Rwy!$1Uv3?D5lF)F+RzVtWD1kt`S6zHjgZ zx5^dYxViATxl9v+qs$5h2~w*T?zs%uxxV#pXUx|2x6J72caKO93<6H*u}0OcS-3r0 zxa+6O%?(PKb*f7S1UD=3OeD_hzGw^*EZ-Q*)X7W;VB>tFMhlNIOJj|SQi~4rIj-ih zP5;ExIq%tAB|lKa+<$>#TS3Ek-~3!TaWtd0vz+{8*to|zsXlf$CnBqFf5Bpvujx$U zo4igpKQAF!eEQ+A^w~p7u$M(s05R?6L-Y&GFhBYIuGai^d&!O-S5{1{Uo=Bqz`>{H zQ4+=L^i?VKireL1t(Yg3MgD`jyhfPivdKMdc8viC-BR!GM!G=)7Gj-0w zW_8Yb_{}CZc+vn1=TL1enQav27z-yqzP>r-;^?E3oyqA;;k>4Ci}%-_1WA2vy!xRB z15y-OeJpxOjgFkgVzrJ-he}TUC2%EQ3>X!G(!qg#&H>o*B=8*VvYE8{qvffm4&#w; zanPr-f}^9FuK*XFD!aRpL9rpaVY6-%#_t++M-9ES8;P2-FSjl!t#-F$&vM!4gEySL zWBDm8VM-&|qEu#Z|146F{JCq>U>VDRFJU^znSn)9`@v+_VY>Q;5t-Gh7S%;z>qq@7 zK(=}5>QOKCfOMS@-`w1fXRxOmtNp<*MtVReQg3k4G6kDXP(~X4lL@)lcA+Le%OO{r zhNovFAUQb8SSGA ztMI8=S<0fA^k8o)j$KZ}(9RSgl@Rl45YmD=$%uhCi! znxk!1(8X8kW%+nY5!^VTf9Gh%d7p8@!rm}Uy1nN>h+D3`ebgfBO3OTV_<2`f0Grel z-O%*Pu)`Xb-JbvYu!!!sS-v^H-n_|aO+1HVF8z?KK{@tpP@~hj(W&Y_)rRZvXgcaK zb8ybN7o@qC_mazL2|Me~Ivg)bwL`RY;`Um&moC0~!`d!e9eh-+rCO%l#uD9$4Y!l# zvYD+HEA2G<9i4lp7J1lky4s4wreAT{_zZEp}6`)RKDN!3qSEVtNEB|Ma zwa-yD{uD?(SfbEIaKs@@VZV{VnP-pU-GdKMFYA_^cL{1qy$((nU5X>S&;_NkF{{7Ss;D0={|x z7lRzg01z+`;64a6)L+-eAfPD7U`VLU!bHT%Q|L-6`SoYuBtnKpj!uDSOf0M-iC=zM z5CS(-1VO0pYp$*(m5~mi9C?IS5fVJWits-JBXrN)x>wevEqMizTriIa=d0z{Q(6712f27wJm*-C}dKJBw~L*ko;b& z$Oo}}xmnkSsH3jressS*i=b{Vt%|%Bda`HCTi3ZdCh3mZksfis=qFd3i zvN`!fR#h+7UOv{{_3{jLjozxhEc4{;b@8%q*xmOdif#I$RZ|-S*K790`B#7drn4(yRp#Wd8u+yh!Pb0wsbdnqyjXN2xVAeF{)fg!oLg}Cz$wNcGdnpV1_8qixFM<_q2?c5zU>r0A&4X?>*jD3_~jYG?Kr@I-7b z59un#Sg7cL=)S4ASkB`3@Qq2o#~*?|LWk68v(duA%*jV;VabX3tyb-YXl-LFeZech z;-N;O;fuQW#q+3-552nn!oV|9w|PeyjsOm#OX_ znBn>sy4xnMk+Sh^m-noLCa$)gwx!@kgx0Jz-X4~IE_@F|Uby=bKNxFFUID`7-FsQ`q~U;spTj5td=Uc%3IPh-F9mLSf&(8w;6@`DG7C6xAQMrANm!Nh zkxTlD(>fI6>$ zu1q|7MxPcC^T8q6?$k_h185&e=aKLShC)RR#J!Tj)91W^X2H{PW_tn_XU^|+e!T7J zz#hK>+T&GpmfBOEsgw~w#vEq}Hsztrc@iA{{jx-l;Gp0IX z(LCwQHSZ3dO660=%wuha@PJc%LWf}ExK#d$FRq6Df>rWhx%gOHSqo9zB_Y0V&dxE} zJj$R4BaBQ2O&$kt^+?yI0t38L%N4?$UIEhA1l^Fm;r3qmbp}6Yl>|j*wWWP-T6=10 zYAS`dy>Hvt#2dGrKcdV?!Jy-QEjRDk3R$DUY%O`4&vwVPX*_}3RtB~vvqa)%T;gqw z`|yObUq5bhZABVz3oaDkHUX8gSlrXuAR>>qCi+g4k7f5%qEtXmaC8733t?AY;Y;BX z1X)8b-(rawkvT|eNv`^%2{x(DJs(2;a`TjNfYrg1%^vdg8_7Ur1PFtoz$JQPx7N(l4EWN%42JMD{1I0IPb zzBg-88aoDQ325=M8dW3S#}}B1vAG&H^%Ka%x0*ao9V;Tu$<97!k?~8u0}|5n zeejESAgp+fAP=Gxxw-3xQ^K(=b-k1KcLlI`M*D%r`SKE*B6xu&xPDvDzrN$)&YbNX z_6ZpGt^NLRg;48Llkf^Cy=jEoOBh|hmvLwQuqx-oUiby-?j#*tu&LY1!lU*TFzqll zcDRE+nz5g9PtNW$uJ~m!GFWs?)?F(C2RF&vyyk%#=kqX0(%p`oj#7vu1_6>y62>lg znG+%$VgwtkUBUfR)v-oXX{h36l-54GuQNw=MfBO$yLz3)bfJPiET%2XwM;Jan#bC# z7^YzrOZPcx45`x4y%O%X%Ia|SEmUwE928%{P2=H1VoyG`@ax^qaR{dLjHk@ zuVq#hF!V!&AG+?0>ts*7f<@tybkgNHPu;%tZT0-ITl?BiVh-vlvrV@~lQwl^*ZF@3 zq4x@4ZqjS}Kil1LUZVOBH3~?o_FhvpZ^aRQz`aqk546@h$iOZ$EOF`Rq8o1kK8VUE zfy`|yQ`|o0-|GwH*c>;PCwn|(QUku;p5EJao8_+&f)N_*p=*09a~{nfKgMSWfn^`w z+p0}RZPdX2D?Tk7*MZBo53*Thd;?{2m93)3TdWww^ppOO5L8P~(`r;?8Gt zu1ZGt49J}7J~pwYz-qV|`POr?ewemVpvu3ukXYb_TjDVr zWNliwReY}i5C*L%s}WX9bl606`dVf%Fca~ zF0i$yGg)VpZ?5S!Xc(W3Gj9-D0)shw1*}gQlf-G|*_aP~z6iLMH?pbtU*u5mak z@Oh}0p7ECiHbyXk8EImlN%nmld^MFS{$(7ti3wk>usB`)Ec>9$6R8uTy)IJ(9~;V` zcgTYDB?{+m41-gNv7%e3t)FH;UYKOkR~WXEpb89LFGR5v{>PauE?nJ7jDiF8H($I$4kOpz?jRw!r$w+mZ}hOM=a=GQ`n1Lhxb!V%v+5)Rot`r-$t zu7OUQnmlqn@IH0X7pY@2%(?M?GJ6H6ow*_;Tm`u zta3G3LG^|llweYqWQG6-Sl!(0hdv!ohBDU zS-GncG2%TaHm$7@57MUIWP!Upt{$d}6*e4mFE)9iz2bBw4rO9-O62zslB%Nm!&8E& zxZ+?L`%s?m9zo;B2-D3V;M}g!zhzhCdG%p+ne|D0%eJa@Q3umwCr{%@XS1|g(0N7^ zWaMV<><^uY3oU~Ep^hkvqNvMTs#RY0t^FXA_y}|l8-k?L>J^|_(bwDzhb451N}F=$ zhI5jobx#&vvJf;>v7PyX^ZZz9?q6Vp-&N48`f2F)YR82Sc|PUE&Q)0wjXZzp-Pp<1 zbO!KQh$4zYetB|OV$nKG4{I;;PV9$chM~ei*sVm^mss40>Vkgh$d*B_W2&#`A(C34 ze)dob7X{D82y0~G@hROiRbKQ}<ryK9!xSE8#Yjy&smaQ8*>dPD+l%;bPOM=v?FhxPV+%Ggk%o+%V_EgGNQt zB9F>g4fy&7Zi;B`%6Dft2X!adF2XuioeIsn5=K!}89h>l)imO??Y+A;f?ymv&#ETx zv3BU}H9jpc5#}qLNv2P^X8mx(2`Cu4+fEYrV6LgzGUzvxK@?K=iH~hQmJc{8>04MK zjpmitH66DFD8rdOGeZ1UFV7Aumq_`Vv6HyZ^I@{f+h3KK57!r$z8y+Baaw zGEc0#+_ZAD)7|af%57IK%4!pNCGL9;OVXs`+W4%5GF1;MP3!tdspnFQ*^SYz)V1`E zCM|Ak)CE$eMt*rsQB`qa5?!eyS~g-j8=_$$XuYJ)`}XF~BJU+Qs-iV>6+=m_yw-(+ zcdTq=qus7?OI`b&n?61Vaa&r+)0RIX9HjM=3a!5XagX0^24)6m%1|B!UzNb`l*F!B z!tD;1slqJ{t=p!i3}hu2XDj=$X7tT4a&TuiATl#SgFrdN%5~95W#}E8oBc>}Z{H$e z8g6QTeM~h$w|L0$7i^C)?$R?b5Nto*Dzxd|H~Mn1@bDuGiI%h|PFfnQ81tNDcJE4M zGO|*&;(LQIW|foo%dYDMch+%rtagJHkLDyyOw9T?!6%a6xOlM7v}YOXEDlGJ(%NBP z+WPUTvt^MPuwSBp_I!q5frvO_(Q0JR;f8-pndk7Fo%X$TOJ8?>OI|jvwP#8<#jqv6^c>k)$Y)&V;2ro)D*eJ5=68gqrhCs}uQ z+zIsSY*@0ons!Z!mPj9t)Bm5*sPk}QI!t7&|}T@L1$-DcPr((W@tjz z1;!b}obag7K?;?axXF{J?1NEdaYG1B!Ni9$dt>j|JVNg&0glaGmu)sj8(Og&zpp-6(DY+`#!c5HN35xZWvmiN5oL8C zZcSX`zp<*BQ_f9?50eOIKCu(*6ronzfEVH|ZG^`y8))h%+l$gX)}b@>k#$1Cm@57Z z?*}|v;Dt}h0B>*Y7~?tUo1Z5bvFriX{d~|3lE0CJy$#0B4;pz7LEbpPuIm+TfZWT*Q8fvjt@;SN~mzhzkW~#q>+0i?K-s>mC9+eiMymKUZ4GO{;K8L3hI2 z8)cadSsk~6USUM_9%g1IN6=>DUZFwW0@l4G8BR?^yKvW`tc5*u94UEfndFx@2r%iL zTw)F&v5x*7N~HsLMWz9)^ESB6{Al=8J8*F()gbb_DBz-6@-2QONhZk4z8qC6k8jF;bgBBVfZ-c#Yz;)!`W z;pa_#YdR?!!mq&+;{$0A*EDLNkBqaEv!IGBNa49_b4cc`dK70yv*Cq z4?41bZqN?ObPBhm4}-rZz6xq{rf%UG-LX3H%ZwXgma4q#E$!~sQ9IQB5mytGHFZe^ zbl&((XcI(FNOHN-U^u@OnVoZM{gu`y21)_ZnR9VbNkF}Ab|VY7w^6zf8RSE$6w{9+ zzWizw)VfD>4T;6@LYo&e!*f(gUP$~9i{U#{*yD7=_Nlh9FuoeJQ`LzhzWf~y7}8q# zs@a7)#VCrl8dsyHLr(7?1;3F2?(aT@+26VS1CP?t(5FRC$?K#1qmj4ltqA7B7IbX% zxE3zn0H2Alz)F!O+J7bV#l3mzTW^S?oMrzOjbP?7s5G3(_(WgPtB9*N&3!pYj&J#B z)85OAa=UwPMP3LdPUT}+$S)0M7R+bs@|k>Yxr35(ckkGDUCu7ku0<<=gXvz*!78za zSF>dlk&Yp?u0v3j9p>zTdN00$ID)h1P-|LRpj4cd$n|odhw6a%=&~X)X)|WUYivmJ zu);TlKZ%2(ST1(KU}ybW>w^)?HIbpe1+r*Mrk@4_7hL|GHQppq5UrwOMbdUM$&G_rkE5AvcKu8V`qGYYBLYGxnk=pU~g-T@OWyQ<*}IPA};zI47#iOo_|1lw3|xND|fL4R{yLHS#v$4#MhC zZ#J9tJ*KK$9;%{B$&ho;twy>K<#f}UG2(4eG^s1NJ!i#z`Rcyhz%nzg zoxBhr!%lULc~6ErZj7ag(?Ac^yU5cWBtOspok-8>yH+lHH49MP0ZHiS0gy3)eEw$x z)Xz4bNK)|2Vv;*}C%;rjZa^;3Yr&vjQJTRy;^o&}t!YF(TY4xfLTp1jO z9P$QFQwDn(8w0g_6L7Za)JJM_!vwhl1w*Sevrymhv~s}cW-%;s+hu=hUofVlpQ`bB zS|r|<-nCquQ5w=I|X zlN&*SnrTs+zMX|!o7j-?xN0k`8np*~#YM7o3^K%G({3pBMFzny@{ymV_awoKRLxjAvC4=nz`KW@J*EjU zSD@AHE~J!=hDcDVfG=AQHe+!fSTjZ4EGjL#lm!RK7%bI2;2G`;EazNZlMj^%D^jN2 zunDY33##W@g5|lq{qSia*U#w9y6bel&4I7j`m`bcb5=qM+y~HGXRNR|}_Nm)r zq?Ar+OiLu4>jrG_gsf{xzXIgnknDWCwi~wTne7n+t0crFRc)!fkgR^prnxMn%__5>;YKuMwtAKXHoBS&@#6Pu%2 z$Ui7OBS&|zBo?5w=6!MXy!%?wjx%(0&)c6+uET>VZ*Y-R$k+ykd%PDC$Xz+8gX%U+=yx=Tu^d)kx#DF zQqfD(#@C%@V?}5kPm1XM=O#Qijl=!}&D%(P0f@3g=pHNa@zkU_>=IGm0Mm1`r^PI8 z+GQ1qGUZBNs7X;*$CR?N1TVs{(vgM?gc@;V5J`GgW!jqdvS_)NA?Z=}UC$(@9Io<@ zY2#Bcni6*GR5jLGA=mS9ZrPsigPUH+RkPSFhlOFq67kKy!*Cpwg1c3F8TJ3mPy}?3?DBjgUSYSIAFt}(g>kqLK zLrSu@+dr7EribVbI)8AfJ|Zh1Cb_8*XYF89d+l!^3T3>lwsDpHONMM1HUK8Jxb5x;|j{@04Y zTs<=Ybsk;T;x|%z8b?SpXPf{>x~wHi2lTYat|H-QSN(d+q`P@!Tcb+owZ*9e_R66q z#+G>n-~)(~e~CBI#S4eX`0fSTQn$Fc@J9wPK-$0|coqXrb8)$dF1g|3FI&IffBDzXki!`$yi>+3Dm#b28^bRfXt$u`Se{J|qk zRq{$y621?{6o3b%giNQ2lau15BQ2bj=1yprq|T9`_>tAg#OPMS+1*2h*pcqWS1dt0 zgTzNdNmE3r;vGO(Y+wdH>Qo_$9OS~Lvz^38d+5RT4ONuHu(YVz#FD?g`#9Cq$1eSp zMPeLWpptp*lw*crw=^n#M**%8Q6i95D?t$_o`qEMgmJAtpC$8Y__q8@X4HskMLOc; zzK@%e={j9=7;ewxBZ(A1Y1XZl+R;t*2DFlVTw0xkjMTNmxtkbL`noW8np)$XYvxI| zv~#wX$=3e&EKWHov``oq)W#LpVylm{y?E1$?^oWx0zyp3JNxrks$~sVpnIVEK8hQ> zi!w!*MrAJ(=D9N_6ixLe9NXt%Rhw(o6!;Oh;wq9Y zg@zr$hU%~pbxQ$E`1ZHtFw6#%FT#DoBc)GCDaF(>Dk+)TXPK0=Y-F0AQUV|y0= z#7Mw@NktGv>6B6m8oi_i+%DV%7#LM$txp?A^lI^~^DYj6n=FOb1;a8ayu$fql;Ypcw^_x2yz-Jq$c z^FH!N--6cq-l9|1jH6o_QMN9=HbKz6<3Hj2_RG7HP=zSS4Yj3`=?1R;VOQ*CXL>vY z?__@{?PH63`U`t`U)kunzt(ZO;rs|6Duw!w(FG<}DC}sjfDP9~deotqxE)guQqneT z{Gp)}2}x%b-o(V!|2vrLhl%6Q{fXmQ3f_s*bssh8FL|yLH8S+&R1PfFE8GY>u{kje zZjd<_6v`uX1IPu)%vImyZ4ZikXJGHUkUPpk`k~ErBGyJYTK#TZn5JngmWT$Qzg(er z$GqJd6n%@!DzBCL8dj6qA?AQ_iLB~V zhG2r&lSuM;8_M0o9mHvJmLV6jj~TMq*^q|?Md4&F!9Ccs*TkurW>IZgVLgWJvS^~q zZla=siZbAx`=ab1&*jljze&o#;Ts+ou`@e#LRRz|nbd~Fij1&Y6MRg^TQc4uOSxyJ z>BpZf*0yW^{PDX}C$o~>wKu#5gDS^cBl3Ebja_bO6;*2JHGIQYKpS5F-LcqH#IyDnezC@M|k>zFJ4+Uz2H4L)m2L!nLT-)Iv%s$w52-I5?roZhkD@WX(7v z@i~-DZYJmG5^myZxj5rd(4ihQgDSVMPo|SZ(-W&B16C95dxhmYxCLscaaPghMbj$k z25X4HWjO$a8SVbkF zeVR%InEkJyrlPx6)7x@>1AoIo&y7)a(l!_3gkR z6MJLZNE{Rri0zOy`XiUsw+8v~D+n;M&D9>Ei#>C8n$R?srjm#jJ{L8}xI%@ADT}Bq z?BuYwva{z!X(kI}2n~H1FJM0h9x-Gsw7!dp7DwX{v0BzKN`~7-Qq?XgX+yw1G=`=b zuj!lW3C5&gXunF8eu@5ATKT1YeCDfINdUS|vWDANeP&{u@-TJDseEoO!we&j-C9sM zRfGvHl`P6xCy8Yl z>uZGsg-kc0M15v{X)`LZbx?4g)S`))Hh;-rP#kRs(t@<00)=)2`mYB{+1hduHgqbA zG{@zePQzamLQMB`H&nQkgKUJ3j$~UkS$VKo@EqIjlNh$RTfwy~c&0z7kK-Y{=Yr4= z)1*)n4*+L=qIBgpDz`t0kWucDu4VCWI3T&l(GYjp+d!q1WgsC2dtYw2U6D}bVg-+D zv^yGhor%{xt|W?DD_cX)x)2yv=JiF)yJlBY3(3of=%ab^hkYbk*zLxAR%_QpuG6S` zR7z0awupnKc14M-PF3X_1W691nC!0y8v#|(<$1}z-~nF;zN+BvbB7JFku|dIed=RL zKq+seX?qXPCSM4DRFDM&4LmX}maKkhvNFPl8by;C)ppKB*=L3r$z}qXBts{vQY|G& z@d_|?cGX7Bn`op7b&`kC#8jYk%=&PTuP_lIBPFE+<8w?6ccNB3Y*$suuJNGLKkQwI z*5jsJ;f7*mD#OS^;Z~5RS)|JoB!Qd5DFZXIF~9iGl9GR^`nN#efeb(fC2?H24KE59D7^-7w;#kUb1{&2V zcqvtdGWRA;yjbG77P$^S9l7E%+OVXKlCZ7-T#^j_c+CVQ29tE1p3@@~Y35^OK~A#v zmQm*zXIt1U)3-g`)n1+U5_%4lvbCscm!`qjZl%P9`ev$`Sg{owE=yPEgxN-l@Fq*X;<6!(zMP=RVsuzuzqcm-$3F7Rv8cBxL zt;O{8!8b2^bdUu{^ER^43gtV{&fbu74P6zJmGSTpIjKU~Qhi)dhdh+?nU~UyYA$7o zgQ=9ZQlB|8`8M39q&U*Oh>f>6NR>2|MxETDCWF2q(_kfI^+6i;HVA*=>p-@)xOeQX z@*5Ry&FAR0wr~=4Lg7(Wr!qJAnRf{#LJFj{LrH^5k%G*fFwE4JvR7TPC!+RljS}&R zB1awc#ycF!Vj?DESl3SIBrpvkdxV%UC}_S@;^iu2o6O=h z^@dsTW76>BQA(Dyy7(Va3)e{ArAoV*VaQDj6DO45^)b2lwVFm5aIoglX#`n@gxHx4 zDtP$ORh2%XOvVH;I>9{chBrr|kq^V41gXL(TP77e2o|wgTZ4}#f;*V$e1c)e$uG?I z5TMhUKw(zx-WZ46Z5{j$BPK`1?{plm>%F}|@bP-E=3gxG3OFcJS(@h=)H=pDsd9^} z{~JibSV@g_C9b)l%ay!J3bKChcj}s)$UajC3>Z&- z0UbYZ4Gvxb9?J|(hxnvLu5pReJd#p>L)yIpUV^*-YRB)V-4g&3K;-k!H{(En{Q{08 z{QD-+TnF8qg1+!`iO#o<{P20j7N|^ zgMu@G0sx-@NP+(*0)S)c{rmWv_#achnJ)Ze8K6l@fXe4TOaCP;5CF6+`M(X2NHq*V zV30010GpVjS-)Q`6f{u~wCdlvP`{t`-*f-=D*c3k zLG(Mke>5wxRo9c}aPj>E23agK)9;r4(}L&U2cdX6h>Bts@zW2V|4>-;FPEC{&u-4o zpj4u8(3fwR0Kr(I5r0&aDBTnon^7neNHp6y+#d-2THBuv@8>sUd>>JRMusVP?xz+0 zxaEIP#ebHK^p^~Ef0hr#5gJY?7!MHmXF?F41HnZmem?hq0zdT*5PsT#{r}+)uYe$M z3zHrhXln`-Xh9YP9B6s6Qb3if}no4^v{#LFjy;&SGD58(PXh^?C!7NU!ahtxim~Qt? zXF|k2EB{$v@?gQEw?3l`!v+jia)0?yI0g)wbrxOALAp_*5Ev`fQOTVoe_5FJ>AIcrOMs3P@*`U3^EeO>c-*-SD^7E9FI|@68JkglC8IR z{qkWQn&tOG@*;WW&z~Z_)QF{rxya74;N-4~qle zn((@7rkim85iWy8I?4C~8OiC0HmFov;ZN;acIMnmLjq|9XLBqgw>~i0Pf`ZyWKz-B zAv2)nt^{2{3`)N~_O)MDm9tnkfE7JfPNz7cJV0M(wz=F!WxlvtR_A>)z4bpb`U;pq z;FaXgmFh+*nAtPnx41`yN^ASUw#|Cgh~O-KxvgZzx9~pGCT%zK*z)!!ma&;Gc?FQ(Es`k^&YYr& zXu>^wa86%O)#Gd};wu53hi?AVe6|iRGkiIjMQ<&!4IQ^%HRgSo&#zBUsmbXY+cQ(wE8>A7&fm7_o*PT6#7IGiP`#W-stFvM}ObqAC1BQb(V~&shd*arQKC>x)o18NW9QlSO$VYE}bbl6E zFyo=-!)iGkh)`p@MGRnNU~pN6eBk`iJPaG*kMW>OX_c=mC%O2;*V9JW_!uAL_9DQP zK45D7Ci0U?FM;!9`8r&B5=Ez5{_};1F7?1CY#m8KiXxAtlWya3; zlrzIsrQyypVaAzErz<#&;U5I{btY)&c%J=xwC8RwzV=XPxe+Sm1#!8P&a8+OH<KvOblXQ`s{6qsZG}+}aR~ z1OdlI+M|lj)|pNTqCR5Rl3N@$WH=}B%wsNJJpE2FK%T}H$M??p6_E4>6Y=mRgXB$^ z&#Dio18bE&a6I`>7mTYN=mU-(x%QLybJ)aygPk+8+XMQ7ozptvSP$M`pBsN#(+_}l zz*puYJM0|7_8r{WhC4+@^)X1a_xiXW3*KgPtHmvi(;p|j0gRyK=WQW!VbvYCo}`Z--3K%9bUr4B z7|>4OY_y9XL6Qhl;tmc^B$5-loLyP^UVjf>LtM^65DWx-E<^Tl4zrsGHq|C!43UqM zamh210&Lpw!x~_Z@{#!KC_{qQXH;!-$#3Do3tB5l+1R%n{}m4aKtpqauYkYmSm3wk zzv$RsPl^1dV}UC6>>P0#Re;fO{L*9f-XzP#RB+zN$ppN*o^x7dxr&Q4}^$eC5kz z!Mw7Vv05e;Oq*ops1xF<>it_s=f?U`#jnCFifN;!au#=)zDdfyOyXUYssNH;-d`A{ zVUY414kFn_y^kalen(r?$6Sx1mp4{lXe52YD~w&{-Vaq^(b=}}{whFOgGNXb_GUiz=}jlT>hk7SXPaC$E|g*Zt$65WtXVmlgk1 ziDLAA($5+qx7*ggZ$yJ7IQD%vo$ps9kg@rbW*ST%g{58bLIOrJXc#1>FL`qKB+kRQWx(GAhu)W7G$-z2=PIr}O2)W=ZR~Is6J%MNa(-$^nuH`-uf7x<<^@?|tjkwD%X%?tLzQR`J{|v94iRLd)??nK0{;`Q@Avw=h-|yqo~UYRSM2hr=gM9e z=f)jzS3~ci3?^$aBe4vF9KU8Q=fyhLSky+gr(*LccP@f}uhGpr>HT!}j}3UWq37ELfkC`dYB> zNsRj>+uN0|q4Z_C<8l3T#O*NUpF(I}#psp8nFF|k^E0LY=+r-gw7hVlV9~I)Wu;Vk z?OgC5Amd=vr(bW9rpo>RFa#@Kr8aH-z~~dR+OIw@p1Thu{H&Khr-pSpxypC;@$L94 zPnK2o8MMZBSQga8;h!p7z7Da?joI+}PI{9u7*`FUzeqQEZSa;m-?(;V!SYEx{?b>Y zQ%mc)eSL!}sk?%~Wfx|1q&baWazATj*Vz^16ed_pjeceiz7Ae%TizFV=TPDnawwnj zEy57f-F?KUC7V^g`diK?8}1r)pwg%VqJ7;04=h81nud6LV&g`B`yWuF_&ZmeH62qd z+VeWLnmpy-yjami)aN0E%71&1S33ZeJwH}rUsV^y#t2Nu@nvLSh^E7%noq9aRQJpr z{9%_ZKd;~#{xm@4!hypQ=Qm#BV_!QzJaN1&;CtxiTFE=Ry*k?}O@>+nJ>~xWho&b- zbY2GnL6EykPfulFn0C+P)FbwkXQ*l%*(h7hus+#_I)b?zGaF}~_8o)EU+SGqTlyGv zxsERT{h3Nv#C+-W%+I^~BBS4qN0dL>$w;x?K#@v zOrg9=GH=_d;L`GiGc5QYUVS$54Y9`+0OYjMUNLN$^C%;U(>~Y*A zh}H~HTeiz<+cp9wr~;~+Ag9TJb}J_k%**s1oAXstNLAVjxu1CY$41)>JAuyf?xhW< z`hPYXpGOiCkQQ&YyDN9DzC{~q!>@}2Gqf%cIcM*pP6zVym`Wb<@rFwslx6iC08dva zjK3>jBIfyp&sS4|)&^JyH62c-U;SP?FWYFjXUL+3vZ{&GM+?6|C~1{O zgHQmmO^~m8)Z|hfFVfp08IgxowLgZFRqb+>-ZreuGMB(h>zw%m&=Jgs&(H~F9@lM( zjxc~DGB#M!`$r=+b9Y%?U3XoL9)vQP*ciCMWzW=+Q|A3@NsW+S(%UM(j+EQ}o-+U` zdS6sKJ9zl|M0q`U)A~orha?6)Sii$xGOTPt;z|er94epIVu-GOKYAEb0u(kb7P?QT zPi8te$>YgxOQkzn{)~xh6wp#b-)s@jL#zwg>R9dEKg!j10a5R^l;CfP2|H_)HFVZa zGa8|}y|=-!RT&3q{|j@Bj>#_Pb3+WTtjO{9RCB)pdi zD&=WP@2)HV7A4_>Zo=ZKv(fFBE|bJJ7%2lsjXWIW4u)(m#~?Z?ftdQF1F#Mrnj2340m`f5s+3+f0#_{B@7IupWdxDV}rZ4tVcQG z=jb)FPrPt`RK8_uR+a^DAA*U)AN)9pb*5HR!Bw3XjU{58*#K01$WTs1(Mi69>JvHF zAdBxh5F~`Hws!EWxeBsvq)pOONjJZlQf#6+i*#~9o-lPH>Q=jVTRc7~X6tH()!`WG z9itH3)thPZ!GiuQvAn2cn<6}OGHI6j>=w2rM|%ET3Y26C zGzi=HCTNS)BtvnakBm3__EFU>IOT$1h8>(w1^6%*1L38BzxU>sbMx^g{At5Z0=6`5N!%(A zlNt|wB^15tds3Bl(KlXZC?fcj_93-ais__M{2ek84HsyJzG)DAa_yKHvUk2o>h91q z*CkSq?DVAh{j2m45oIKI)C1D0xsiQ7;xxHo7U7wV&nEY@{u|D_r#0!S>gObeDL)B} znWm4BDbLUoKfS5?_Or)U&K~#hhAJEDg|)5gtJ{||6x!z=mme6L**W$NPN_a@51d$I z?#tz7S42J`R0TAyb^rS#ar*`n_X=w*X5M7EhPiv2JVD;J^VlqWeVUGFZMj7A#!Du z=y(U;fYrM_0)YuvpI3Km%E?6`TN|L*#yypgo-&9kej0L@AqdP2qu4Pw1-M)rn{Q^_T4e7R7ZJ& zCx4~2P104gv@!$v*v4wej2Yq>l;g1mFHB5k#s2*_+p^y?nS=%$&T4h{#`xX+A7c9D^O{mDEt&k31e#-etw9K@+8hM26!DD#V4BI{Kpqojc)h(C$2&S< zmI)nnAxAb$^OYFrk(^$26^xJ;Msk0>#JizJa*M|CYs&~{5UCjy9Qy%XW!|5FWPR}X zuAl%{E6yXD{}qh@G_QF-TWDNY50{jUR%2Bco}oP=?srty8mv-{r6$`=55z<3a4x2^;aS05AT5!{_F@@{rXim;Mh$|5_3~$l z|L{(yTkosr-cGz`xY=G$=dz5S&rg^C<&Z%O|8i=7eP4%ubnV{%)g%|liWIrszH?ti z`T4?hd6`22Ei&YkZT;hp<9fCKf=xmEmkYzlRs-)e6aK$070x4rYfR%f>dqc|Me`pZ zn!kPPF7Xig1E_2n^W~6qH&_POSl+X6_FA1l>9%yr^g$zpddT@*H*`E=g3|{2 zN~y^`FTX%=(t*}3v5BTxa1jujzzctw=5=iPAW{KVhU4$ymI*?bfdUrHh z?Lw-OlGuiB$jQE|^Z^~gp#%;5v#E+)`xTqZl3?jt#lf>gGy(_GxC46OwoI3#7t3QZ z8;ifWe1fRD);-N{^3@jHAwWyh0Mspr3V9lgg=yj~I}u=|m^fVVvc&Znf^1>agcq%! z`$!X2a8}w92J)tnFt;eU6K79)rjrGD6sKp_pmYH|Tc|@|LEO-jt&5X@j_j2?QHA#%o`*g7gfxL!w=Qp2#beKjw!MSEwb3MK-!paJb3>E9RcY;AF>`OYpK^#{QsRYY|HhaxEPbq;l1s;Npxu@+^1(u$#{0sTU{ zbhfxNkHKoy==1H!i+YOzgQB2LHO*?qNf_328-bx{f=QmyJ||##k!Zya|M~kj%zaSb z?g1Fb!e(o#lx%-gtD0a+Q_&REv%LuFPkI+8GA zT57ldE_TW~{1Ft;3}7~3n>uIaA!sXzZd+Fu0ZVXfVolzJ-hI0!FCzg5H3p>D>8I>- zJQGMO=!s38{MCbFQ_A(BZ@mEzj|M;pFSy!ox9e3^TkS%)X~^1Z z7obzZ4d#=AxwC^SxcMvaNdU!)ZrCf;?uu(*-46ij`X>Z$pBltDI*uHaO){}`b{rfp zm=r2(P3JP67WH1$)4Sw>CCI>`39bzfK>gX7gaPiXn{V+}@6Qu~WB@55GLwk*fw1sA zp4YFD_`caTK^K4ousgSHyoaB@lcY?L<7T7X3?Hy3StXLTC9KyG9JU6a0dbKK)1|b} zp$HT(j@iF_;|3xWIfTg+N2<^*qZO_dasmav_KI*Ct-Q%PZs4NiJI23^b9acaHX6?D z#)YY4R|;bP>zJfRYjU}gX2Y)mcuTA471i7@lp7N%7Q7ulngiYV1pfH-#;#G6NvSNS z(%ROeG=bBw5qnu%liE6-m49=I#eZ`) zxF{3x)+hV09sk^nW?$Q4_B`H%&okFdAiSSh^w(q+xryoktYbrNrP;g1sVQ2lO7u3jr{QqKt6nNFgXVU0PW9 zs96o{w~<~371diaqIXStHxva@(9k}^c+9Lmi0`r!&Pz%X8#B=fK4x!!L=ru%eo=G| zV+#-BH5R5=*%`5bRKaj|%~#~&dSttXl_&0ij6?c~DCItwOr1OGK;;04F8cce z4R-G2EJUgEYn>Q8Bw2q^h?42r7`Nwx7;ccRe}U?rx4Wi4klU#m(+;}e+jvjc`vvOHcsxrq(X{jqch(#NYnM>*ltEfI zN_ErgO%(7-)!7r5Q$7w32i!o-{Wx4B6lmAB6lfx$eZA0iuFr#^G6| zwI*0SfJ8@Vef_?MK9pXip@F4n1+174fmG#h%w~*9T=c~B-azR1XeTFs-3DKP;BH8# zzcS99KE&j7a6h)m1hKG8a-wec=T=EDrllIMz$RC5`}k zdTNeH+gpK)B;QTTCy-#eD#_eoM$_SsMQ z4{s$^VQ|;=v^R?6C6mGVnGWb^dIHxkGP2 zJnVsjo9pa^pKM+O_Xy{#EBjKKD-VsQ6!Bh>XQ`->u zs#~D{bFU13z@w>Kd~6o3AQ-Gr6a%>>>}i#j%%WxeroNLnju$z8w(|w0jw|{6T}ikj zjL;|}ogyww7xYy%xnl#44^!*BZ}p5usv0>m@=&QD7IxBlZr{<}Xdp-cGF3#yhH5-` zxvoG5(gzg__qL4^t+6nW*%;5q?kD~q}S99pUZ1>1UUW)Dt zd)-R%`!IJP2hcs3iAPO`D3@}HFfzEeFYvPP#W*2_(6R@Mz9(LaDiFnCP&!F5M5f`0 zvR_Z;rN>LsI;;z(=Y%iYH}_bWFDdO&AHX4f8O}+3zi%@4n}x71`@l{;a7(=-6pi|< zG-=&>$?MR+LUp5?zmO-%gEFiEkScNQfCciJ(Nq9((J`co-E!EOaT{rg?+cjntc<*q z;GK)0js>z!k^79psI=0m)|(dT6wl6g-o0lrV&T|iqRBMvFW_MHCc5e#^Og$b2T}?JV#kRT0KBH2wDdtJ3V^bRP z{KsUfFhwFT=2khytPox;(bgSav_otp)%!9&U~k@4I;WavH znhRhCXOU;RQkyk-gipr1OV>sZr6l6|{V2~#0&q3f_-mA18M!X2-p&dq&`*BoUFirV z1)GJ9dM)YvMSszxz|1dfNL#Dsa*xB3LxRd%e?LbxgYf@Gcl1aLqz(1urlHm7aM<7# zMh{?v#(Oj9KHkD?e3(32P_2$Ljvo3BDak{&5}nIWMX2)$lg^#q6I%Yd(j=zKoL#l$ zE8X=g3@Czui1(~+u>DE)52vM7A1Wrj!+>=z6&KCj0gbq_I00aypjf~i?%CP6;AHKU z4ukB6@kFx+3ULq#xMP3x`P2DD*oFqoeTtX)x6bxRHmX>&xanQlRN=enTfw-n$=~4p z>JY{(Fyj*(w;+XQ^SSS!+WE&!K7T*5YI6>j$Gk=3scmbgjb)s4u00L`sMP>&nw-5|8-2*AHYmxSq`Lo-*4PyDde9n zgykL1tQl7&-P!40k2k)tnPkZihuBIwaNi+{H>aekBOzK8XK4nR@{<$IO9BNzTNtP( zE{)PUq-rT)%>hjUV1QeD=JyT{?8j#fkLzs!tfUp1n3JMA!1o;7O7NN$4d3iP7NlOX{ zi}6D~002-O0EmHk1pt_u*;q*nzI~>sr2GtS9smXT-5E`7Ym0m64_ye>$>=@q5X~QA z{O!ocI=a@{5R^U0ADI;-b4Z!cAuziBJ^bPp*1Cr|Z((~I3mXW|yIa^wR+<+A>pA%Tx;3}8L(nyolY#h;AbfHr^@0xQk(zNXQuY7+5$sczAdy z=mbOrxJ1~vc(}JjpkQEOAHqIFfP+K8MMXx%{fEs>69Dzm0}EIHG!zNo0V)(UD%4F2 z0Pl9JLEjF$rLZg$sZLr%MeP?KBtqRK0W@7Zhvu+0*)N*1ItvR(y2B z3-0!VQFB+&c|&=oCBBYkAP@jeXWbiOI>*T)(0f%(=iUz@=6(WwREva2SFxTFU*Im@ zbahRq+vb0|cXH%-qM{~q%oBf&b(j_-(O`d`8zcF{&CM;w_~YWSV*{_7qno58$Z3|e z(`h?qZTs+=sQ<8y-Lwo$r;%WoOY2gWz@^`Osd)en{ewFF5(VWqYmq!LwsQmUaQQN3 zrFi1je6A1^zGB9VEj+7f_1HS`f*p?gpRz#KS#}`n-?BuB7sj8hw`M=~2mcG$5Qf7_ zMK9mqS|}|{;@?>;il&a=BK-5Ptj}CFrJS?FrHHQ5r=COl*&BeEo#YV4?oqoAf(773 zN_{;!b1z}PE2y`WtX2Pw@A2uY+4@yHk{$v6*uVx}s3?B`S3feH25C1P8ui)45_X}x z3}V8f14C^;rfO_Y6@45p#`fNUp0Iy^8|Uj^2EZQz&{$OHC#QQePMjC*#;vw1LE9ml zizmzUZIV5fyNb;WmIC}*fpL479}O@+ZliGK_5}uB8&n_Q@X)sx)?=R>x8S&2w3lfI zrc|bpcENsDI}11{WMJ6m>Njp9ESqQ0ZqX_B7M#|MV@)FtW+3g*?R(Xk0tKP<&sc~0 zS&DMAhM_`&zS7p(GseyCI;;3i%BNrc>uqU#G9iuTnEina0!YOZOgCmnlTYv6|i1A9zaH3yY&jV8}}KpEZ-clE|1vPFxM?8^_$J!&+MJ z39x20KsgD%PktqdP!JL|H!<*jgOkxIrT^54@9b~M5>P)5r=YDX);{NL1FPx}2e-&N zmh3LP?&!hUH<|Xu>~dj5^_d*U!2%wR8aX(WMbUyMUCtuoAJdRYyJZeXCpR#sF!MD? zN2hQiQp-f3FVHf0ZPYW9K&o_8pw=F(h-864f z-AM~P9p1I6on)suUAqC8Y&+(=cWAqwCz)I`YY6?OtA6gZuGWjBhmxGr8|C;fIo228 zgsbLrYJz#O`hne=1xGPOV}{B}?S0P@T!GUrpz`5q6XqD`k|n!ZmxioMH}}KtLl#xc zL&5b6sP$7wC%Ikyv*Ya28bk*F`sdR9!#=bwGbg8VJ-=7j*VSDQ@HQKp?k{Y z2EaCVUW%e=<}JG!gYmd}D*H;AB&zUss_qQ#L zp<8X-R~**Fc8WmXsONChLWK?*$?7;a2`>?kzFyC%t%0)Yx+)tXH{&kCTU2$zqjztR`s)t1<+o}s7*KJct z<%8IIX3Xr6>};!AyIN+gNm*pX^QJ+Eg*4@vK;V>8j4!a7w!tTaXUyTir2s2_r&2>< z5LxgC;HU0(H~51d`;VibhkD5y3-wbf{0crA0QA(MIkypQzQMo#ueV*bek&_uU&coM z8KL1no%U|p>C1JUs9nd#_oXGMvHr(x_g5G=th3n%n|&JYbX88t*v`FVb;!DHc5XaT zO@|U4}Tt-bCZ8X;O~z3c}X9t8%$g(ZepvD(Ge82IXdh`8iR`^ z0H&~Wi>G2{{gH_54?5SfO?IhP&y2btHu}BH{YUt}6Uu)WprCxvjcNzO*((ckovRRzfbMMm0(QEvPh@W^$l~ zou*I8$-KBxR^690Db=EFel#)W)8IYJ494Snf4aBj=y+s4RCfhNZr^wA zLvASIa0Wo%^RBtc;{zqR)d%meU|@gA4k|2Item7|+>^$a;U{OPCos23UIj(B_@PFO zKam^ODA_OQzX6_vMV+GR-J=!M>Nz^V6^64AIv90pA>^6+IyuG+_24Bj;$Ipp;nya? zaoZkwUqX7{cC6ngJc*<0QHt{N}r zCV?uTud4Tx+6Mo!p@OFy1IMlUSkKA0t?AW=zl;8Fk+`o2XNlF5$@&_xrm~h5S1imw zzxah^03UI=c#id){Wig+e!^G>m&@PGi7+$l=;uTam3%L_Aq4LC1@+ zB?5Qx%uHJ0J|tId;!q>y1Qcgl|7 z8^Ga*`+dQBN>aqJWJ)y6Hf!m#&-dAvEX+-rfaW-XnR%5xwOUF%#u(e{TID>c#yS=wr9+0kVTEhl*d} z^_LqY_%r3t;F2GXuc^c{1(la53b<&NmbLz#)^F+l0*B~$FP1UouQdy;U-d$pZx~F` zxRlg|<=8l!7~;)AOP{v(Rum`|x*nvMTsO`&(c|J<@W*N&%Y z{T1ig`YH`vZ+j2lmRhrW+g1m?tq99ds_0xB_;x&mMT);P{QSPX^P>y5llnt&OUw6{ z+BLF781)M3hMf8O<^uj|i>sp@VI9$5#x7|lYnROFyLnjo-2B_DOu}yI;J~P(H9Uu_J%d;+iSZnd zbihZo5Q6RQ-izJ2Zt(dP0S{bMz}z@N-3O?$6w0OLvHYpApP2bQOaHHOAzDg06aW;= zg9lL14Z+=e;{`;ypgMfR}lt^@le)$aR(cwe21RAlgwOj`9$JpG zAqtb)NHYM1Pxvo;Tx>hg0_BcQa0rmK)2xbn4LatC(It}36&V*U(#_><>PUz`9#&OG zur=tUl!Ezh05y1l?Sj?~K4gn{I253d9@CA}+|-4Vo!uAjwVbEDEzh3vCV1hqUcm$f zL|;jScM>8nXz98=3)5bZ5M;r}-=tU14kO)PxdCi{RO-+^cxuZ}T}nakDIvh=!z`&w zCfZSU_}+EAw17nbSQ>1ot*Fx+jb31$}z-*-(OokJNTq4#3)N|g_N6}em87I?GvT7*j z>u$EQadhbBm_v9RmI4zy?Pg=4-5K?v@<4B)Od&EPEj*m9BsJuJ9$#vf5=e zS=R~=)+#?lSxy0J77N!F8c|}PIAs&PurLVj^$g})s=^LOdXAx7WF0#(J|4cH#SycT z(j~^W6DHSZaTS-YZ{xdJ9nzUBe;F6WL7>E-7e^2idK5uor~(#Rc9FPt@5S1^0pO{x zvK?^C-2f17+Z%M=%z3s+x*Rp|`35k=7v4?D%)@-mWH5FyRaq18H*HYP4WQqSb<1*m zskmJ`xSb%F1OMN_KW`0!Ykom=%fDgykJJ2F{{vfR^c7#K^wto-|s{dg1W}$t4MjmdINm`37r~O08F9uXj=(dRSxSqD}UgmzE zh!Cu!N>S-1@PHrgNS&R2up=s5k4z^&O{1|{ayV^OW*+Qtdly9#1-dge#OO38=W43=;Ox4c=^|^gr}4=>!@6ncpU}Q9jbK!|?^ddgR{XzMwQ7AjRbA9>gYM zzh>bDm7r;LBA>C|mZkXyusK6i?e|n#s21x6(Ayb=GLD_zh=< z)SBL~T9i9kpv<({Zk;gN&K5dBY;FV=y~1=`)X)K$2DYU;i2KVgDv(aH@TcS}1^F(6 zT1N3Ly0|&{yoLAEZD0Ah)(<@opgORuwl1ZloY1&Ty{>g8RV23Kz`X$&gll(C7J4G$ z#dlaHkOfB#IlTp!D5OI+NBWNgC}anBrxrR#LZZ(y+hQo0jP0HOt?) z%e&38m-Sp7nBxX)MKOd0C2LIck_eR4Z-TsiW6u-^dSQwe1$~bM8F%ldGnck=suN|I zNwsz~kVOzUplh9YS}o|>@Hw{(%r25;Pta~T4RM^3Hte%!Gw)!_Y3dw^koRp@?e^JDsAuzNAObR4oC0;g)E1UQ11FzuEbq<L*;!oz~Jv5+2SFd_B^?8Bfo zCS0Qiu9)l^HINc_6h?JznK(ErkKX_&jNQG}hr4~CxoR60vC5`H(v{xv;+1I!pS$?< zkS$03a2I6m8acM{Uqx_EvpS6HYE>(o`a@nXi4*0AL;dv4dXZ3Q39zGK9e2d}tKXhb zs8CVF8#1E({iRMu0s29Xvtr9CneS(FIHSk<_Y=HdEHRMHdZ}}1MPCQ!@m%{UZ&({y z<@s5@P0EEk4^GE)jI%~|f&3G?swH;ft|sTCT=%wp!`}Iae!`hvR=Cvf@hOSqs4|o`#)DBk`>fiHh*PyU1^XoNji1-$FSB<}C9hdG> z5`C#l{WY>A`ZwV3!^K(m+>#bQtZH1QSjmU70W?UZ)+RKlDiP&u=cyuVMpkGv zFBW!*QkFW z+a@xvQ$=WOE!jndq$M#>TP`0rQ;>j^j@iCltyLz_3^8sb1yHsV751e(%Y)m4jA zm}GYexe8x&B-ATZcai>3Ag_CsF4*XofG;K5kz2eHM)K2ObQdn(33A<9t4|D9=msO* zb6jUkSr3=Ya>FBofi!_2T&DkiuOZ9w%WeV*c_Ywo(IJ`Qf4cKq5mhs;xnp`Ry<!%K&4vw&B4s9dpYB4Gp^XV5ui1Z2YcasFp>0YRHQRYVe zj-~&+&N|-@{{DFtv>4AWK^+ST{tH66siv+I-tS@{{3!dwc`Z?HLBgPAmG2E-SjAd} zD+S%#7ql43@!i-}V?WR9y6o)_F6$IxFuVn0I;`qHjyzV!ds*xbO%&iE0VMUZVYq&x z<4G5kfSBTb&r!gZyBz_E@h?(W$Jb+$<9779LdOJqMRD0ocGudD{Ur+;>gIf(JJ&aa zuYXy~@aihpIGd(kX(C-)@un;6(LR6=isAv1i{kW4^n?@ury7zvVu;SLuX2l1Lz3f( zr?>j;++R{WyU#85f1jWXk^HfS?t1M8ARR_PAv|c4^otX$RWU%qE)kIqVwVUT7#qme z-Nc`~0aWsp9Q_6^TKKrIgqSxC@J4Xvs;*u#WY&m%=cr z{PH4A(BL29#!;JCcVGHCoidau3?XJsyNC&`dZ?Nx?(1lA{WS14(E|{Itcu5M-A1dF zu9hPqa_OBg`jcb5z1|s>R)W!eE8<#Cv-8_S1lU##d+-95=(PRTJvM2#i|AbOV9o{e zF;3)JYw{iPCdigHchfI!IP4(M4=c=1hJvfW{C?U0Wnk!(52ud+E&|Es`z(d8%Ifa|cWd)k86`BS=u+H~#l^|_P%TU~*-AdYVwPNEwj zXUYC}>|TG1R<+O`>o^;xv*9bZu#drQmX_>pyvT&q8tbYG@{aCoC7f!Eg+b_#j)X|@ z<29O@Pc16KFB%qcuLTF$EJ?M$1>bKP!&fr;I?T*?b?wCZ38EN%)^tS*yOa6FwxY`z z4-)Vvtd}W{C~2d@smQ3Sbp{1!MK3zOy3lE~I0oP)7TW)zh?`#Nh{EJz9x{}_-fMpS zgrrKnU0|moPkYHlV}IN4;F({;5+kOg_Gpm1&pkKqaicyj&Lm(|op$j^G`D%#HizrN z!mV-5lj5H>9kbN5qi_T8^J0zkU~Y<2JLdoceRA4;0(=O`q&2n0KZJ5bCUdeZx$kkX zbDEHcmj;Lt&1-hGTbjAC$QHVxX|GQCj)U*j9$PvG0{xeL=j`tHLMj;|{C2?iZmCWc$Ti7%Syoxx)ZFw_ZLd-%IN@j7wX8E=7TO3Stk~F8VF4_0^7h|}x zTzOfd$jTj)*?1U>#m3+!mI=*|`pydi<Kx`+5RoHVgWm2w74!qDdx~d?Z zxL%i(W+RZ4pw(#DbbzX>RKC9i|8t$`h~#rJn?idU?YXv+hNv2Xu5oo?^ng&1-113^ zoSepR*jzYml)rz8mEQyfsljT8+uQ3mfo&2powZ+8j+s*r+>lnxu9Afrutm1B+6|)Z zMRre6IYip!`lGq?Tp~XP_ZWY1C!avI9#DDc{NBS%fRx(Z7 zj;ibiVEUU4R@w37-A;?{j5KPWZkU|=3q37gguCb6Z~`Z{L=ks%TkCcFs|d(J7(9^E zO$Jl|v_nFO26jw*I~bo{vh(_HANusz$cgM2N97BD3>GZIkKI?R=NHCu>gSgon2^)u<1>1z z-D-CZLZYhZAIhwlbaSOkDuBRWtk5<($-;%nA_BuDM@vi}MVvnkbcy4Mc%lk1jK7a9lGVp>1uJ zeXZ)ryx?)-E`qnzEhH~*01bz! z-~4)1GWTJr@o)*% zDPfAobGN;AxzJ!NyDb`hVt1$@v*;B4^X*l=(zw_WI`i5XitO8Ng!CVzFOMP60$D_{ zbeds$<(T1tbdvmtu-RQ-rjC2Qgh?M}z}BUxiX3{LI-nINj!J5u37ZZnDGDWuGNdDq zEp9szwK!e6&*WJ=jgAnL6WhxMt&vf)v*1w3>}0x~olr23U?F!8e!3b1nVnCe(dc<$ zP@WOLk$V3T{nhJtdn9jRNg1Uz2N*0Y@8;)&+xbZ`sKiWQ;G4QW$ssM5X2N7Y?_qGk zFz@44r15QUlHCGLU|>4j*Fgp5l5fBSYa2^&UHMD;cc~EJpcXIGjnsXd7ik^8e zL;7U%y~iU`S=6Fj*d;dKtV$ET6I4yU3gKC=4U4zuVPFzvW>kBZS(@tiewFnSZ&li% zMvpD%hCD@=uj{3$A!7nEA~yKR!d*?mg{4TIO0?$6^-jOr;SZ3@ZqNo+TzCR21lR}i z+qHqkBxXYDzDbg$HeHA!(#)$TAcWc3l#tTB;baBGyxSsqC-Pp+_+#u4zDt0x!5Yld>m478(^4s>r2K# z44P#dZ*wzW@c^Y?lUV6JrTeX&Cu-95{8=yugag zrR|qBKlDyU?7;lA7zJXY6?~1nRalbCG!a7|d5b(^tPTdqZu{padpm6)r7>aa7>=Tw zWbW8vVRXiRY_=>beav5Bwdml}6Vvy--qP)gufhqd4?|bKi{C@Uk1RYjl~0k9k}NCS zRTa`XWKn3v23fwV&u#j6nkXZ+Lhe!{N`jnXA zO&AOc8i~}$FPg>Z&q!areP?0G_*(jXBdnIyz``CGuZ*?FPq%*_@;s0SWwU2)71v~1 znm6-wnWSe^iiH1(GY?^P(x2zr-tFMxLdOFR4^OHyhh%-&PR>IPe3bY!fn{&j_P2=3 zs_jP*TW8?T@{O;JhK;TxK+?=eml`{hUD{~VCJ*dwhh=i5;$x>S9Zy(owpx7{lRm82 zyYgCa>~Q2jgC$;}WsPB4oNj$qlW1z#JB-}0g-smNLj69t37_ETs_!r%#-tjPv9MwA zbepY)$E@!L0Gr)sMnt9}^|b&GeT*%g`G?CT!N;%T{Jo*N99rCZ9j?S*Vr~EyTwfP5 z0TDWsQ(N6dp8H!g>GUXc>xm0u6M1ds(dzE9Hvq$}dGAEB$Lm7;K#usuK;L}X< zv1xQ?D)z7Ht4ZXGmd$<)Nu5A0-S{mTY&N!BM5UtB$e; zXO#+JVVj%D;0?>wV!pbFWd=eE~ zOtuA%YahnoHGS_cBE?xVO=bDqf~`%qtSQ45nQkuiiR{a|-U>JI*DCIap}N3_9yG=R z)yGxAckVh`0MB-~zN5m7l^(>yP2Lgg!Y0{+;O9$GhiJ`=Y`gr8+Wpy2dT=UfFe z1N~-Z>0$$Ohb#FEqk2vtfBH2#mZ zu%4*R&XebAn%T-}Q_HF%fYI#t)SLpC_=1SL#ycPK<-fk>$sUt;bqdBT3+O`3mD@G= zu%@wVDQz9Q`^xlmX%{+HR22x1p}@A*lW;u%9;$m1lI}if60lL#Z#lhoj7wR!i->93 z1H(iAXDkT9oAUZkPEyM-vhw+jsHBwrhvolo2Hb_dy!Cp5{^H$lJPysjib8*}{g+t3 zPxH@(2#V6qJ+C^zn>-bo7tH{;)mjb0c6^1BmJnav7X*F>>S#8&_DZZOw$5iRV{JD8 zMYC@UTU>$H1C`kUkSkvB^xB#>5-8%QFW_{Y-?osR@N&$sGWm&DMegAV_~ZE9oc;m|n8lgw%8PeGp|=NSYR&#Awo!8azqZUS;lu(UI9 z(9`fPdW9@hQ32siN{b?wTv|i>#y&Ad^16gJSvNb=;S=wJM<7M!C4A4^J|VS>rvR(i zf~S4VP^1FuQn(t-%ltl2|Aj^mb-oUP8K%67N~hwrJ8FaGHe%OzWe%E>1?A?_)@b_< zl9iHu{CtCI795v%grb984;n_BU25Po<&Aye783$E%u3|pwZqH1CZ55-kkU3=kTjae zg%KJ}5W7ZqP4Gt@RF})&mE+A;lwC=JWURi~rfv0%S%pge=%XUCQz(k%lJCD~+Q7RcgKy#u3@0 z^Jfdh(ii;fOolbtrbZ!VRMT!NQm~OuZix!J_=-sSi#5?QnF67Xu5s?Dhdp3#=B78* z?eA38mr2(2M2uOC44TF??a1eJg}lr9vDmi9DWUv|7WM?QOnE9G>$2fUO4Pg~a$dij z%+SgO_aAsuyy;(#oLD=0E9h{{OLPTn-weO1>T|cxL~dm6$)6s|94gzfw|7yX;Gj$q z+VFe{$DD7GX(fDSlKsPZy#2J$&_TEFE!Y5eM$%FE2>&Fs`z>)Mnt9mal}CUoE&O-R zf(%c!X=&X)@m5{+D5uY?at5ZVSREl`hblRlVl$0#I-4$bvU_sqJZD>WDAW8cSExi2 zGtN0otV3ybS5J1G7uzRV^O+7<&I(fMH=IXhi9W`u5BSM`X8$M=TbHcD?KeVo3|m1a zZEj<>>3B{db)i{9<9kZ)FvF^_QByj1N;14_U1BRTBZ?>8N26N?wGZZd!jwI{k+<|t zww}tdOiK63uCX}EDMw8Mc*YjN)%X}8XY|!VH|y()EK>!orq#(7qDuXoY|z2B9_8tG zv$;oNJDZsE_4wWgx$J4(n_M6B-PG|%M1nR5{4>&Djk2-U^fOY1>1uI&=4HTn5Reo{ zzIFguU7k0?=znK^13*b!7{;r1A(qXcs(}?5 zO14>0uL_L+nv2uU+_Ut|!@$Twj9-{`jDDkQg8B_$oQi!O!u071=iz1KGjeO_SGgCG zb22l#zt#8F7zbW8=>msLYYr_EjKnd-cc!+BC4qZK+fCfGH-M=e;_q1YK@X=c3o*z~ zqwT#fO}wdw?C_iU4_DNNCvj$qJRR96WVDsn*n-(EVZA>al#!oRh_{R96Ks10meC)9 zN-@u`dK^S;&S{Sd} zl-eT7;5BAsP2+!zR?vfN<_#*47i@PoU)%u5I1sxv{07y^i7q8}YRY2fj2hT-%zR5>Gx{R`E-2ew0=y+Hb7oceJ&E^HT$HMSYJcj$%MVfL3L63#i^W7hfv z%`Wedw^Fn?N&^~KEp;4Zd!Kw5MzYh^+d?H5;fm^)vXn#vp5>$-dCvB<(IMni=La-u z-T)#eZD%<$R-q%3fAnqElAM*7cV>hdQwAdG1{-7W+7pited3r`@cI%oj@2|_iH5}kb<+(keP1l4dBsr z#3OCGc`~@EQ%Q6o>dBdUa=33DFZ+tjzuT2`g;BTcfctL%LD3`+DSYP3c3qSx;NB2f z+;R6~=y8*UC)+H<%ID8kmjyKO$@xRxTL*QN&k9woE?+w*_8$@&-AaIhBX?3_Z4HAw zBw#{)sedRIc_&-KQ%AZAL4?fUiHlfO+L7p24Y)KJ)JTy1^zYV>H(3XNqBZzab;7^q zhhD7bO3jbY@~c#=%2!OgrlKmS%;cy49sHBlczMU9j$H4&4cVOU9Mw*K7DQj74ajoQ z5ldb?ee{q!%}@%f;O?D$UH3T-i&T2;6RrVaOWGIDSW-WSuOE3Hs- zw|pC7|E4i0Q!>*y2yy}VT+LlruqspNIPZN+V<>P&Dtp-G+kW|1DSat~7HF#u+LWxF zb^pdFv(a~O1o;Ra)?z!cFBenW**>eZnk*fWCj}MECysVHHT6vPKavdy>LaPP!bQwE zgZu}PuhPxJUS91u&1KhN-zYy$1~3TZ`t9s%V7`1bKk=DpuI$_8N2vnvOPdQvQjasc z25l}mNy!*p5hepE(3EVT>p0tiJMYeP$gs8;u!!wbS<@p$=Q$O<0&5YhxibeQhBdR`Je!cl_`fX|BJaP0tW~?Y&uz_N)#P?tt1BW`33a3dama_&CAy%9>sK;0di|5i-__!iL(&QNQ+%GDU)y zS{;{qT#&5*N822Net7=0%x4$L8jUb+`Hqa!LeTb+9T2UQhV6R^t9bi~y^2J>yfm|+ zrlAX|NS#}9c4=Ysr3zI+P_MgK^Vfx-$_GQvYV!6{NBX6lGZC%~a)QDNnXP`~-JsQ7 zYRZa$3{&!l^OyAcj$3jf-@t*BJR-v<>f7I7W!8JrVr?f6^)-xj!R}$k>|IByZA{S! zmu(!K?{eiUBx58V;yYs37VjQ_%%G ztTS!8E84wbu1*|$w!Ivd3kD*zl3p*Sg(54OvhQ|J-|m$u&2{S}Lend8&jaBt_1@9w zHlAf_X=3X_&9FwS#Jf8z2=`vmhWkw5kMdGY%Dtur?@GY}E*#AF-xOfe3iX&J^2VDw zBX4}m7cX}RIhx?)PNSWv9cwRLj9+D0Xxgl+NNQW`z$)(1yyDZTZyOPe6|XV%rxh@+ zwM|%T{**XyNg8hG8r$wh`Y6E1MbHdaYjt2XK!fy9?1vtC>7qQPc^j~+b6oX@^5bH$ zti?h6Y>sD?>fLY-z1WR?qrBKMNn?A#QdlYOD zpvF~c7*IX1nmDGsR6(FPPF@vBi@!yB3VGcsxc5m-NHM7XUL-8*Yh;FA>wLwkX^`u` zoFPL)lR=ksHKLD@cmseJjF1xyg%ydlLawEdWhz*_60QU-HuZ3W3LA}i&{O+XOsaoGi8<=#%PbKO*q7 z?mlO#3T_!M4W%(7;t4sJpjO1o0guXCL+!oqGx3CF`2cmUr0I+o<$H#LVx76Ph>u}y z{zeCpW%i35#Z#KH&{XUxRU+q{yq!so?rHFP<&atG?gVaO>foaJa~|?V);yO&Dqf3( zMM8Ulw33G5O#Yy@X%;)`it1;@m9Es z>kqQ=t0AS+tMa(L%_1#Ish~cDr=oOa;Ivv`{b`Byw)Z9ZnM&l9RS6*qH7*0U@CZJ% zrK4T{u))*eHaVm{x!s2Z;K$!U0jxf7362TN0ZFF_$8ucU8mTdw#md(nV_R60tSR@K z#cLwt87Q`GHX`OMnm0!9@02};F+Z2V{vQnR2q||@f`$)S-Z}pJ_n&P6vAc1Wwsq^N zCGoNgTzdiMk(`^Y530nQ#pi@~6WcvZ-#-A=cMQ>G`kyryuaR~iy<*;JcK5J$@z*~_ zwTfNkA*A!r^)A%|uR91>F5;XhLr#@w-Kf@iGtHx^AIM~Xn<<%{c8G1~I5V;A%iPMd z;tIUWE=o{FB+D>=mJtf;!y``0qud{tv|pBo0oze|E(dBVVm^4x{zD{zXQn4_@e;b^~dU_p^1EtsOZZ=?L z*i$x4h!kN2Y;wHpe|YTS{11tsw@{)NXx3e!nV zjUGILgzLv@ZC-dMPpMwkM4C`Vqmi#-_PX14R35&SEZuY+FN=Sy0dj4IjhOQ_J4PIy zR5{rmv|uvSG7Zb-9}X(8 z(B9YGlLaZ{iiA1T6?^Pph@gw&D>>I-%0C_vUH5+t^n0u}_3jpSVI&V(7cDad9AXMALSxwy{>tF-HkC!f&lT+@Y= z`@zHFOwE~y^q$M8ecQao_08*VO?GqxeXFT9%Ygm}XR$KuN)p9!Dz3|J$13jcm@5z^ zQ0aj!AWqr|hgsZ*Y+ZU5KuKDYu{x+7r|r_nH#s)$_PX8Au-aAc=o_BYybr3&^-!+} zx`wZhqGyRK(7Ohe3@=p0eFBapiedhH<0~#HZuf~1Q}HMjxk^>Snrhh>#c|7Y4LM)D zqgedO=k@GL?B8{XRb8=-QvkEl_)p2cP4QnvInB&)%H=zDb@tn`n{P-;&1yay*L^u` zxKi?z^2>_IjnYfDqzO#Gc!) zuoj5myDlkh#a74kG;K+n%*9()z{7Jl05~g4M=i*udr4FAhgmx}fTg+!4XK!2LcZ_N zWMgG<@%D{zvvbuMjiSwSC=&KKFk_nFT!uAPNqg&=O7Y#8?W^xwY~N-^>sj}10F!o5 zVvDIJ_|^?CgB>+pgSM`Mh1;T^noSpjFvTC7S@*EJ8E${kYIj@%W9;;wDvdUWgQgL= zSlsGqGE6AHQ+7l6GF{ks=vq>^c`MxRaKPWR-Dh2=v?l>Zd5l z{R~=3&NEiq8y@fZEQ`0d%9_c;j_rfGX@BIXvP|glkBE6%PuR>H#}(@ludtEhA%7P_ zK8!pm`u0r#d%MhdfrRhV&X%UxOn&)BKqBp$EjE&~k~SM#&;d8P2( z6mM?OD--4RWoW?(sqKNZPq|C)6eRj; zLqnNTDS`$Tjy9_dr)rM6lp*>e^F6Gqmnk0EYCX>0Pat>Ar;up;H?n@Ti~YzIubkeT zX3ddp#7LgatYPY-Zg1O$lF}7{gT7e&0loAr`L_#C2SAvb^S5i%uh#@~|c?6$C;qmuXW~e$(UL4s#!+p` z$v-tI-v?9vwL;#-2a`27PgNaxHXg!mjc0l7RSm^r#;U86r+v=QAl9;`C(S4CZvb+o z{QW@7hJDyy;1`bN-+lL{k)9Q;P_sY#3-4T3a-eQ=2b8lVe#- zH#i+(a4s(w2>?~3XI#{AG0C3|v}Z1(3wOYU#22a^Ur-FXcJn3^fEA=fJgeWf z%V{>9o@p~H4x(!;x;7^*o@w?1>+MB^K%fsB!EgxMHYVoRNnUbZAP z3BR4v(#jU3iMcD>YpX~__ubKAK#5CD8`5b1Ip)wtt~BJOEhgqjY5VsI z+o56SYLtPY5ctx5>aVtST#Q5ZTuTz!n0=ioeCXx@q(VVF_~82;_{Oj{f!=UubN}UO zRqKgju_i>D$bP2}pMZM(4juM?v}1R75^d-2AY4_%(vhb&Ri^2+n6VIbh)1b)0XdI& zAAmh1{hjC$f3J1`U&7ncNy9VI+BbTG0)6HD4{;^i-fQ;4ok|pwy)AlHtAcV+O@{%M z@qE;4(ZSdZz-=!H&Zt4G?Rq|({DXX3>_I}Ug;1xy_`G{7+!J#e%OX}?O$Qna$kTc1 z-4aK{aBLah)CIl8-s}d*!jA6noYkJL#@0a-=^!D&p++W{9EcoOHsoWc<}J$qUA&op z4PB|ExGdSxJluY~p*gqtQJC;3Vrzm9=|Yo0Uq@m=LWK26*Lh*Hd2@1JVK^Kb;t8y( zUBlKiFEc&`*%((c7L>lqbK~Na0~W=aOiXuq{D{K0ncglao?cHr5$vH)qbKqPeQXYI z+i=4RH6iIxk2u5{D%qE|ejTn7D*qg!toCa#Kro{q@PMfx#c|V)N63I3C9f(pZ{#dR z{-oZaMN>6S&US`7=AuoNHs69vt2$t*J8N&&c&%vl8W#h~1_6#q`DEM=t}G7|iwcva zhC?UW@S`3ORpEk5)ct!#)o_RL=P=5pZ!@1%NF!avY?(f*ylFwxWGGIKJA+&7>!=Q% za&5lj!Ny7Y`m#J;VyXdhtyXcO7_X;l0yr$FJwYDL$)}I14&K#KPi405l^e)q z^P)As+UP#Tp$yu|55ZbIY^yPr#CMCU5+)DxL! zQJcJNl^YLPRVXK3uBo=!PTKi@?7an8T*!8HLAoM0iiLtZD7nK^T2&b{Z{`+j-vp4#=*UbRYg?Nzd?)~;Gh)ovBR z)rC&ih(Xg+P^`4^KzoFUMl+OQQm~FQbg+WW{c3c_ch_gx%L&T8w=?1;$(`5v{@}dj zIy$aUp5n{gtdIqu%NDRe#(caV#@zuqRhOFHugV`Ht3DubE1jEZJ;Q!gIPVmnKUmgf zH}jR&O)4>mT=l7=Py<^?7 z-#wD3^`D%qoG;Ip#dd{>XcRRGL;g>9OyPT`*?@rW;t^4h5m0_r^n!p#vwy&CE~OFI zISzCUgj7<)k14pAE&nPWQG$ldD7gZ9K^aS4ufEAQX*XWJO>1@SGxVG3ZVjV4R5gER z{Z@dqlvY>2VmOp5^3svlJRQrKYuPz|rEk~5$-Vd~w)>mbj@XLCjmdHSzPZ!TM!&*H zMJhyys@?7UeW>zFt2;-ws>D_HG+W>hRvkeX+3>gA%!3Bxp$;5|(u2KdzZ%I{qr@C9i8~BetX?5k)m@os5=%?cJ zz!1+~8tEHDTRdiE9fgI|Tu<(8lQ<&j$@S?$mk4z95HzJ>+sSeXV+k+_K)<5EVW3XK z20y_PHvAdvPptLP205LSt zQnH7qs-{R5G3sqeW9NMA92%CbCAwSluA~vK%AVX>i0}!KUq5)&K3uL}0o+bes#}ln zsjj)RHRu57ja8dF8;qO(KoY`tM%k1VnfL%K?|yjbVv?nBtF(iU;cXZDYQ;nNItpLY zU*_T18OxYWVzG#jwiYs-i@#g!=iU(%Yh>?$^+G~#lr7M8E8D#zWkKOrR9 zxjjc`sa&4;NI5vI!~orP#mZ({vxjub&7M6)D|#UCp>Dl>9h=^^-*!3PO7MF5(E_g8 zu;KdHwE3uGFLM%NU955fjXLwF9rgsvBjp6pK>XS_KWs1xe%yRUagi`M(WRJ0whp7BvW>E-g^JaCwZ~`6sYk_CJXLPlgJ4J3HY=_m}Da zI@kXfuz`8(@yAN7crAjVlM)2CEYnm^ubnTb)D3b>7oyv@g`Q`2XUf|tiK=TZ}tqKe0YB2tmSp{}7hPUGG* z{wC*y4Mv&yG6F^XS$@#;^Q@=Wj@mO*6ZCaF7Z9Q$B zj^LU=33HqTkr<;eyxf#ZO>$m?m?x1>VuxAK-`#`O+PwC8Df>}J!lm1lxXL^ZBP+0> z?7_|Ianc|uuQ_r~10Q4KXgY4iAbbOSfTq+4Jz2vq1ExWhEg@o3xD-gAlD{SjT{BVzlh z0v`MEn%4q7_oDalml^kvg~YVvi;+G)_RTtM5gY9*GE~dHdjLFqpGSo`dC;y%ogSg> zXoF=}fR-ODnif4kZG=v!ULTppO)g8EN2mUJS*K$S!jfwbs-n;6D3)fKU>e*@q>aRE zAdo0+ibwoGE$4B`Oh|_yzvrWysWerOYd(rPYYxIOi}Yz}eh-*~fY?UqfPO<_eF3p< z0}NWlh~^3=h@FX$4?+*a&q4{R+%EK(TE{5b)KifTp18OXb*-P=#?;yK4ScJPZcmVu zES&9gk%&2mVXBoGhoaMO!KCS^Y=RiPQbB86+x13YiQER#BR8m1w>9KkrPc+foIW~IW~nKw*RjO$YoxXim{w$ zPR>2|@3%)gT$ExPQ;>Zq7yLiR`Z{-}7)ta~<~@IX<8QccH8U!^`DLYn0W}l&LSxXSe zL+zAfDP2W$kY#Sx%kUXjzxLsE!p1Tk89&;&gj(r2&yLwg3otbRD_)MD8CRA!ov+tU zSa4JhBk%qtKc%J%Twb%IQf@-UrCrpD*ax>ytN4l0WuEx3b3Hxdu%@E8nZ<^A>rW*a z74@|G^Pa)a(t>?3r|VV>T?FQx8l5M1{IHrn+)A9ZqZ-4t`A}UhzTl|ye|7WyJ;jI% zjrlED^<>9X(X$Gqx{HtLU`qC^nz}D8pm@3ooc$hOv!%wxQ3)Nt7!-*zozd3u1ksF0 zWQP-|+Dg22)6#ZH8nU%>8_w2oUy!uOyAEy+88U%X8N{z~cjss5-3s^jpAAhJ#ziBF zf3>jg(@gK(HlnoUDcnq~y^vtwAGqJgUKqT8iR%(ySY%fa8AS92>kLD1P~wHOV_yGK z0|=_S6aH+X;0rQXom@S~gm?de6;sIJy7Lv)kD4(!d92eAW0X$FGH4~O)u|a8#S{8W z&XYh%KTSm<6oO0sjA6o-1{M~TZR0L!kyx5+EV1_XF+wC#D z>biOLy}E7AcX%Oe&Z~egxTvncMiRd zwBnECphGzwMgqbUFfVyg*W`K4PFe5yBE_nYbM!%*;NO5Y?l({JJYR-~VXzHqbE%Tp3-c+oDukh#u1!a0$wg%E8bSYsl%^e#IG-YaOLH?NIy) z4?<{fU?BU(dw_RoLCmLcN%~L&MD-z=2auE!GueoOnQ=`aLmEL?zH-f`F^%(M}gYUD9kFrG&>@k ziggBE)7xN8>xmkWb}joEF<}9&PQiW}!{^Omo5YV!wlmU2y$n5+;~Fm*B>2H`FtBoA z+5jn7p^zYWKtZD>G_7#!X!w8uAg^HyrqGhoD%smlUV-HFpHI03N*k=W71&xXB#jBy zV7^@WRDC(d0@9S{H=yVg(R%k<2rywiVQim`E^o$iqPH~Wj$EZrLL7|A5+F$bMr)65 zf28!S{u<9~?^>`3s=|6F{hYQYIKHs4Z9Bp-2^nhWki94{9h>Q_G_1;!s)8T9P8s_3 z)oCm+fnPH|rBOWveOixT|6XZs5RZ<&*b_zzYyxnTpXkGV4Dlx_d!*Z`-X`xpL+Es+ z7iJqJpjq!jjHMbpaw88FRF<|`w~CON-N-3;a<0asnOPy5{CWd8RM?EnC}zxs5vn{N z*hw_iuTA1n9zDSg1mD+w0NNS0PubJBFy_b@QPldpgpRrnbU)0h{4oIC;79U|u?efE zExCGX5hzjkGzyZoU{482$oZ%c=1NOLx|y=JRjTaX%24(W)_nuOcO0eAa7Y^kH=?`Y zui^7)9IA&GG{iw?-Gb$Wm3|8V^-~A8V$r*R-Qs^lC8TBE6O+!0+sDJQp7RAtTRNYH ziq`PH{v{hwzjAB}^`~bKVwK4`;XgiqKH*N6tRRQ6Dbyg_LB`|6y7vOArcuIqL$4$Z zs^po%ZnykpBo!Y3ufoqO&x{@%&$(srI2rW*)newampK1tVaGx@0%_`aVUJQp>Gu=5 z)X@KZ`;7z)XOeIMsezu=*Zx16#U=9=FvwXpZ+cSBbidm=1v!)(I89E0ko;o9o&?F@ z_El+?VWpSra9d6XH`a~m_wQGy#xO${F*vB@ZCUP2Sv$Txp1@&+N2E@^kYrJ=3#^Zi z!(A0Q@{V%S2i52)^;B3l?Td*0B^vW5ae{~;yG6GI+_o>mU~#I-N}lxe%-(%eacxiE zof3hdPbXzQ6hUoUDcz~o+}VnDdFk6(H7lOX8NH^Tcucn)>RX_7cIbP+KdI~{CSJev zt~4_$0cjv6GM7EkKMc~C6M2KCr1L6Eo&epV@Xfge<|*k$olgB_+xMth@V5Ws<9h&K z&wu}x72oHPxALQc_S&-)3~bIuq&DRjn%Q9G2iN+Km7LSNJHBa+(W02n5tJW)#;+$* zygeszerB0uvvxfBRqNG~J%x%t@$)t}B`sr5KFmq5VdVP<9>=j`KIu1EKk|o8W2}T& z7H#@S)6`7p>K3{2iveKvawHv#!>5*8Jt)#SG$vPeV~+37Ic(J2>cv^W#c!QA86;2F zf@Fe5BQwB8Pr2{NGm~*hh73_=vfCfl%i+yzMM{(H~y?~-Q%&dGLVhIZ~WXvFRrxNCPmpDs?~{f|$xUt&M0S^U@0+p`knGrFuJ zzaMn}-_xnm?-E!-9X(WHA}YrPL>T&H-*5f}DxvGIqm)I!yLGxTfdlma!4Ce{kB*5D z{X=R0!=hx!`Y`>R=CD+8gwboLUPt23z}V{|o*XAATNTb8O6(c~JJ~F1a<^Cm4-t^B zo{wepxMZ%y%JEXEP~H(zP|{H`Vj&=62G&6FXO|r9n8_JZ8%jOh$Q85CYr1u+SNL@( zn24*h9~^7-xJ(rR)aR9r(I;{ecWUh!lWW=8LDv}QO5NiH=eKN{8yty&*PsZam8ZKp z3St~)j~go{>))JKS8>Z1Bk#A)+aZq~VCUZUw9+o6Wo}5(8mm#~dK;st)LSwQOS+IE zFoT`wuHk|;CrmL8sMRn-L!>7k;wwnr%P80g)=QP0h+(LZk8cgt)Xj{tZ3NAJ7>eHG zQH7t0vMqus2GYBl1LIT3gL}viYc(}bsULGC9%jW$wH9@Pc)AA&kCo_nAsxmnwXe+S z1*G}n?p+dEx|yPIE=W#Jc{qagl`Z-_T9s}f8cIvr7;eeyBAXHhk?M9so7^B7g8?Oj zXS^;&-ygYw3K^2nwjV<86n0-DpJo-f$&jdQAb#!obLtD722wKLu8a4Pnl+Ib*@CTW z@+X5^h1pS92X)1jJcZPdcNjKnCLrF&QsScd~oj zjj71iG*)wFdciQw*2WeHL;O{ljDl^*aS%@W|XKAjXGpvc+B?b zl56`KckaqI-S*8~lX+HOmRp$e{KHFPoHOGTn!7j>mKE z7RY)}^~>t$viGr4ki18-w-^5kUXXa(T> z9gCz#iAr_v^G39QX$1;yZ&0V=3Lu)IFImp(YP_Y1b+DE2jf%CvV)Afdb;p#k!VU-$ zPugjXqLoG;`W0pv=Zy?92K3QDqkmy1+2jn!t0z!v1?9$OXH03C#SE1dGaaezcP$ht zhgFkh@$aG`GIBLI(#AWgwO}ylI_MCDh{Q>X~q%O&vc*e8z~7mC{V@a{QMS`ya4B^5HR`EvU&>Y zvy1FWh7v|th8g#gZyO`a6rg{!FaM zmMy6N7fTtRQ4VGZmJKnG*rNh0IR1)xpATm9IqMtXk&bV+^K12IydJ;{ zDj~iR?Q8!#c=Ww%U8Ul<^o66JIMs`5K|a*$Rn!)*DMcpHq(U%359U>6AFL!n`AAzt zXBytvUd2PVL2J*&@A}8}xF0{P$?7kTqgmGQ*vZMo{7jy)(lFB29alu5Au#Qr$)UAW z^fqgYT!IkhD_rxr-z}BzQDe^=Nc~p9Y*Uu=jncN!r8puPkZ@)zIUHuaQQoLP z^G2cJG6KR!3p300!e|U=9!W=@_98eME_lq{#qtB1;cuqzf_mH1Vx?1PR&pEYY!fAg zrN_WDGii3N%lH@Ji7{3ULOT1|OIzCQbO+DG7~=Zi3vKhnTl7YM@p5gLG8sSeeMmBS z%peN6EIAg{Pc9d5n5~Esxk$~mF?C_^^YA5{r7u{2l$L~V3Of9wt-5cL8T~;Os(?*i zQXTujCuQKfjijY{#+`Ss|14_{_x0ne=o*R(&iEfTuJslwqtLPD6y4g*l_*9fUziBn z5h3rcvwz>Fyyg>Y>6ABp2`VJl*nZu6PQFC1op=(?Ph|wzrDyKCm-Wk9^gH*z1O87y zyrPTG*5-}mClVH~aT_8BQca8cc$~=lYl&hEYEvY5e|5acoL8?B9 z;m@ykRw=|-b(vg^87|Srs#HYQ>m9a4;P!l|i+}MC2G{1c(c~6=PRuKF3@dvUZ}Y55<@8p_7PsgS zhsw-7(jRnd61Oic@P+1T>!vCDzm6iyO?3SR7+We>;gInoxAlJ1y#P&uQfm(+Dvn!9 zywiLHKhIuU@l~#qy}r1lSmO!@!?_T)VhF)+{e^uMu4D5$2m%=syf7tDjAq%WaZY7; zJj^hjdlckCN`3~6KopouJkjuAY^8l`?-OZ{s{Jg3E_QC3IW*;*mvAPG8G>j2*mq&r z{)B?)!;Erl5FRf?Qzsf1?~;3U5G_P1{36@u4k)Jdw)~d`$~VA|rO;2--*)7g^h4*5 zm!LI*dXgMX94_3%h#HF9kag1FH%M5g4L zl!{NTQi-!X{*=t7iLU)SEJk$e=qjR?sx^rY=$j{;u}wg5D!1$wE$`Dj!2u0Qmxav> z;1#0nW5wrFK{VwnavT;@@%S%807as~)U`oL_1q$1HEB~$L#M!k+5U0mRImyGdPsfs z>lvnq#@PH4-GS}2TVxj-Lc)6?{Le1XP~#ilycmn12Bu!a1bmuF7IIuh2jgPbd82kD`r|- z|B|~pdulnc+*6TgGoGhb>e9x$lIi(p6%Ytuu@__N0_7?pIAVJ%1^51;ON z$)>!cs-+yza>~bPwih1fgV@c6NhKk=azw^(`1UhMS@&C(={g;acTZ$=*C;WN)2{N3 zWnOQM6=6&T8e38L5XnlD%(>w&18)Yta9h<8GirROk%Zy^Y#YF>$YH$N55CX^SyqROVd#X=A*#viobgjOM4LBLQ|nl#T>523Fr zw^S?nVF?&EcAEC;wq1Pkuc{Z7mbXCaMl2c8cSEz$o-j5o#mE_Qv#n~vOf}{p5lunN zYE_lAl54fvyA%n|y37&;v{W>GC?L+*bc2@>cXA_d@VY^E;zM=lo!Wv3h9dVI!Dka1Vw5%QrqJo#zrzV9N@t> z#@>;A0>szo99Pn)=b^Q}AS$YkJyt=^FN*2D!hyaX{_m4^H=r{+0GYZI z{-%6D_{(>qQ6m5jB>@0Q0QL8h{YM7zC0Y)EO9mN$fK4flO#K#(3m$s{86bs5Ers4t;jFLtVbdNN%4EUZS07+)#;FU_tcJ5W|j_41}9~|Uvfml< zyEqpHs5(N`Mf8x&e#QNMM^M*E=WUWtz^Zi0{ZswI9|&(_9p49%-&6bz1jkb&VNnAB zLE!+ve}TxqWmWSV^sfWQRR4M!007&bkf#Feztf(N%>jhjfAeVfp}+C`84N(nmi&%I z2%?A6d6lwm_4f|SeKhjtUi&u~w#L<=@7_Kf(YI*F2tBA-Bf#HA4|i3*3gmd6?x#2b z-}C=_dK;k2qpma3BAk%p`}1d$zQ^eoW*^<0dRby%6z_-qmg#} zp6VyGak)yZwAwj>zyfcS*MAEB=MnG&a;$jpSrY;RD$4IVwg7lE+)^6mu5l1xVCDEe zwOQvf{Dj=WkMnWgwQB*Z*`)Om3`C{W`PGkHe07#0%EwiV)Ms=oJBf1%H}DJ$4^IttMhN$|heLvsTb}r{n6mtf!5dU7VgZ?kqvcO7nBo`}H-C z>!M9DBnB`e)H(P9nei0gAuz}sXy*qo}}6kPeQqRVb(@eVP%@cQ~e>-sL}Xo$Ni(U{hK577%luVE?=^Y70Z%N?|^> z2#5(S6e{1!KP*Gp5ujK=;c<0o{rCDZo@e9>5{ zpDdL&ueN*|q6X=JR?q4!DcF#b_E*zND^Ww7Db8*!i%*|$-(T#!RqS!GXYb(_F5uh9 zm`rn5wHy93XjSK8jNa+Nh%%NzBK;R&5GzvPpHuyHUjG2=n+YjqZhvc9V7kP6Y$xPv zZQX|IKi)90*)~1_(xX`Xa&wPY?Mz>&@?~~W>t1r$$w798t0!CwcLOc@a$8gSFGgG7cXP(^k@?ah)QGcedCj4=4TdH zi$#iMe-%te55Q6hCH0#TV4PdLAjcY}$~2-K=bIeQ_~_ z`X$l`?B3Hhjm#wpWGXV9Q)V$hlU-f>JoG+5P|tcLzR~C6D?9#xEp-_YLbHVtH81_+ z`a!GNXRhtTvVppZk4xM9UuDmp20mqLJ2?$3-+iH$z0~s|Wl~Lu8n5zzzmxb~amilk z!m+PnVY(hAS61dkK#sq|Bz$8Y?MJu!56pKdm$W2i&ZTU=S!2T__3 zuT}hQQQMJRTSVHD#A0eVpTz77el0uk<;73C4S{7ee>@K0qi|@wA{k-jOer{D*MB~$ zpSCmC>W|kY$PZW2tM%F82Hdl_PsY&qc~l-d<=w=MEB=d3{+n#_Yt$(W;-x|C&99}R z&=4Kr53M;4RkNPD3sE5|*k34|l{L@7X$Z6I-h}sEo^|6eVD2>zyZJV+WyOA?1tm{^~GQn6|x(rYj6L%kf-h9ZDU5JRI@>~*0qc4@~5sh zDlMFK{_3smf__)Z+K-O}Ja3f!+)sx%-mPAgck_j&-p=QXVpg5s{z$tR!);J;QD^&3 zFVMrJ_7nN4VwWM2A=ps@PeA$O<8J`_kO3*?=a~<8j>&HafoRFRx8`3Evax%`UvcUs zEtb!r7S)sq>P>z@GUBz~y|gS=z--`t6ISVG6H9LF8}*UD#M42s(9-DE;XrWsz3xPL zv{Tz;LeJ5`585E{8@fxVsr!EGwUvR!`>)fZ`w;{3X zl0RQAW_5kouB2kRPbTAYF?R#{-aiEIw-bCeI|daP9yOl~&0Z2>Uw0EKc#XcpBJ_{D z`dTvAtbbJdOxeCYpzFROp~jI-ZtW$u9{~O_7>MGy-dac@W*?cfH00DlDvQ-zP5bzg z0)g5fyk4+I5|1S^3K&uxpz`b?z`V(&fYa@bgu{rB$R|<48QRpPh2p=PLtvWaVU2y`-Ks{OVt(;ncpV zVgIFU_Uj$cZrSXPOQ$K9-uWf1qeAXjnePsK+u&E{TA$;j>W!qUl*n5Eq!H`xeInxT z;}oI}na_`YiJi%Aqpv;U5>HYX%PMOQa0+kIRW-4mK*SnsfAG_rY=C3m z0jMkK?WY?vjAh@G6h; zHb_|f9Y>yzRMjX%%;Lp>m6=}oP+e)6O*;cmP(JzN1mk9!M4WE`ZrTF!^*+(AJ_Xwk zQT-W-0vFN~Kz9rzl=(E;%ZJqulhw*Of7x z+Ac+hvx;PWeLuk^p@1q{*4nI0MU@e;&}Lco^1V(f155%uOrIZL;jb?XUN1H>XG#cO zz1DFyDHFqV$igkPUf=3$HzdgOGDB=0+|6nrEW3EczNc(Tu|6KRbT{U)MY7zdFNL*H zk3RIwaK@Qr7%!O2=O1s1p+Q1|q6N@w9ozXr@|Zrc)Dh~Y3%W2kVt=}8v=bxrT3N-p z^sIRfeFnwG1HKPWyg2!ZfBh}kh$uXk1vHqE5bvg{G$70fKfm-R5aSUe(R7BFuIoqr zK2Mvwe*z!Ec3brSLE690@lV)<{e5F}r$rTpEX$zVn-oglX3q1POUK57>uuDR4lP`C zUS0L@skDN0`&S^Z(j6_g3~;-0c{eVH3rXcHa#h)N-@xp?SzY*}28{9bVdZEijmP$A z(fGFoDZ-8}qpoK-p__m^>0*WDogowq9UoCB#8W^q(fl@~0F*mZho8>_*GJH3J0OeB z;2ZBIr#5H*sKa}scT|ipJ9(zX#C)MaldlRU63zoXl7E`;v`%3-m%G?xh&t~xQ7*sQHQKWbc+Cd+bBI_UWE zs(C9MuZ?aD7RVZM)-FcNoh91GW=EJ!9m11-s`orx!T-`nJFlE%Vr3pKwz!6GAy=A_ ze_e?DMnJUj+&3n=8bTdY*oLC`3!+I&rTiYxt#pozROyO*=6UWtfA;}eMlO=cTOVDsy%FZF9BU6AJaj~&GB8I^=6y{UaR91^*dg# zb&b+WTSy+R8lEnqJ7T!Df%H|DABc?s4Z@7q(^);6?`D`|lw*qVR?Js@az23dAGymi(%@(l_!a zakywyIjY21UF>*`Z0w;t)6sh%32lcs>7|C#Iv*X&)_wF}-Bmfd{*p@w`;eQ1^F`#< zW&n0p$C`pXOWj5K*{Bdg!FzA_M2aCwfK!gq8s`ItIiry%5fRO%nSe!d@`nf2h?^U+ zr_Lm*dLfB3Q_VRoN5rP53yGj^kQX}_cSHx^`&c|!JBLT&F z(um3xPd1Nm*FX;>*=aPWI&enjuNZX?*`VTsB{v{jh`w|0hq4aTq+=ooaDt$C%BSj!oY{(@Os{Xx3jpu z3jxywZ}%69!^i@~GfwR$XOosK>CrvzU8c`JBSzkaOuMw59N>2^?o$<}IPf%`6AY5F!{obj}La5-AGX&fs9?QTcdmDZJ3pZcNbDa9!%DVQlu(U_qYdZ&nU zjG_*8Y%?Z&9Oy$W`Xyj{y@_rMmwRDD;n|=n3E2nyt%bbTc1}t{0iKSj=W@ti;J^s&*Ny*cJ`_topLHqp&*nFQ9*AL)R`xq zPdNtn#a0_wSc-C?Ao zcVN5)2R(}vRjv8tnZGZ{EgF%U%I|R}*)#vBRPcoy2}-a!k*#RAZi2et8@rY*mG!4o zC-s|%x3M7udk{^YT-Nkby1jXfswK`ctR3*qLiR1_-j{pD0X$6@`~u4-tSZ~EzD?f@!%@kT!|L&1A8YfC?m8)pXxfJb zHJC>@1GcCDBBMLUewbGha=>#T#wt`vXB83>1$mM&R zG3d6PwvTKvg#`{?1!jNNT^)$EQ>>#N~}* z`v_HoFV+@}nDKfZ*?g9;HNI0@t1$?Xdc@+yalnL6=o5+6vom$@6obw{;Ts@y%pw38 zww)l%;)jPZ^%|4-Yq!3)0zHlN7xuB_DMrg7`Y9q?(puZFuuqJim(23jbrg-86g;kB zKrLJCBmIX%?`fqT6m<}f8}%@M&I#lRKTnwbq#YG87%BA>YhLa3CeH8@VoqYety|?q zId{Ca=B}JWFP3a`p>70#Hh_SZpp%Kdk_=GcJnanMrdfvDdbH;gf6gPLfVIys+$X7GJ* zs1+lFrh0iTQRg?9A_9n@bEu3cm#4h;D4K;fM9d1~l0^;gCu(xt^7?qp25;XvVv|$$Arz=P!QRy)Ug^~b3SdUK%>n*a?L_hy>qPs+IcCKk zfH@0GKTuG;KIJ1R?mbEQo+23w@m2Jf1!;h8&5k@R6E%Vnd7dv82Jr!+hKVKRbD&4e zcFU5ckfk%rlnO;N0K0Ag{C7rZU|b=QG9_XuY3*53E|wpmrg}~faA{3e3Lt<02IetX z>+Y0-4|PeKn!2By(9f?77N}u-RyOxb8nk}Z@ZO`(~d+sf3Wo82T`+A(Tk?b2cuh=?^Z z(M!o}A^;$VlvZs$t{45Om#Fv! z3=${&zoY+YNEKPM_Qhr?&lU0xqrOPd&U3-#Zvdjndu!B;IX9o*oZgflN<7T^n3bqD z;J2>`l^MP#adIbYyyC`GCh7FnKj%%(v2-liMhIxyQ2O4?g1Hf_3G%d}TId1S%nTZB z*ZVwb?CJApNl7Hsuh^NcoXA?}!vV~J&LkUvl16;OAkq<2HQTd7CQNPG#A$0ttRbp4 zdynBOq78$(hf`FpZ08YQy4AB=blSk>+}5oGI(X`cWxHw<39m8MZ)q6wNQ&I+CKyo9d8_vYB~cO?ipIL5mRtBbwGj5i-HFcHA*#%;lkBbbOSeeuVPVw(0>EL3L*@h%XC~PZ)8R&%PJ2I%5K5dpz z3`7cG=V`iUmdva>h2mqDdqhNmSu10GO)3H84AeYOMorA3=a>OZQR5JKlQ$PyDK$_B zG(1@Ck-Z~N=$kXV)|-IN#;n;9jq+N#9gkLIx2Hnj(Fx0ohd!OaF+v~jzAe@G1sZi2 zKL&49kGL?Mxm`+MTo7%Fq_QInjac0B9PsfY$M`;4R`w1B-|1&!co0czkyUVCVH0O1u%rlov4Jao zleLo9)qVv7ds+Y3@#rfSG!TmJk+%M-XCeV?Jbkkgp(RB@TUG~rJc9>?WL4f%2Nz+Q zYfXc1spH8pm`;i5HNEkXLPrf5U&}i4p>~MzlyCR4u#%$i5!y-Wojg6Dq9kP9YO6j- zIQ#}^IXdhncRb>(L#VA!cV_*H2g|XqtEzSDtxd-`IyF;5u(j=S*iSip>G)-hO8SVL z8vv~U_#vXrTvxOboIhI-vMt-6aX)j~U6* z#sBaKu9j4-<97G@(e>xAcjUDs`B774v}dd~Nv1?ewn!RCo|xdjjzUC9iN#%_Q8z}n zO)Q?mXs89KGZEf7?!=aCD~r&knhwAdpxI`@xYzj@k^LdUK9ac~Wc3Rtvt%x9q=M{m zC>v_cB-YD=FjM?vYA6b+hC&``zf$``VS@7EX-hl|iB-H7DxWn2jV?~aiMea+qtT5o#_6?9~>OWMTa{(9RlOD~( zZ^H(EDqK!Gl(v~5V>dDFLgBg0o`@A7FYUemu9!z2_#Z54-cD1Hg*M2%!Nt6Lh(yk|^3!3d@G z_4f1Nq`o_*jK}7Z{M40=Uuw1A;J(5qXS}Xb{thRkg@Uj7aWRVJClmP(NyRWkzAkaLd{#21 zGAMvb77ycUKDiKfS)Ocw95vBjb4iQtH@(9WqXWyeo`(27JPZbRbcok@`|7x^Za29A zU}I0Q(Y9h?b;aB5Cf`X*E!uwnR?^$g>pI}@`YR;I1|~02z!ImPc8{WF#;oKFQGRer zMhJ74CFkoF3YgkK{Qc3Lm#MLVd<87koH711DC$fwrsTQvs1*rohPiA>jVcX&D@6)3 zh(%uFbgk!YfW>`rAlgk2O`F?+A`YIPvck@tle4;jr9wPN@*6i&=CoZmG(VJqo73T z{fglh#9ZuRuK8iZ@GXI43m6v0vl^bBy@@phbkU5(_@WkzM-AGb(C}o?z1`;z*g`XU zk)%v`9ZZ+3oPwt1&;U)c8f=es-yemL;A86eg*syiP1!1=Ais2XJzAGIZ=@C=p|g6y z_{w?L4Nf0&$K#hd7!zsisY_bczT5YoDZZ49gchs3Sb-lrtc46khFFQ;PQh2?7H=@{ z!byQlec>2n?}i9<$elcjjPv+_d`uYkU?ti;RvBz8<5KoZtT#v$=$#dGs^n5br8p2B zWpcr#qh;hGe+u;H$o6B`lWSx)5VbBEOb6Xwouk(kRyt^k%5EWXE$f~54+~k6r;T86 z!Aq+d=d@)4gao5C#+ht9iT655Q14K4w`e>I@j%e$aw#Zwuu~)*YoxIiLd(p3C0}Hb zcnsm5KL~ul1vHR!d;1OG1q{^JsBnapD16QmzZ(FAi`AayX>D?5a<~bi_+RaP z2UL^YmUajPVggbOp$Y+{1p?N)|#2M{`IZ(?sIa^c~8kc>rKwy``PclQFeZE zE2cgfo)msrk%u&~pnk1L=oiKQuhXK*&Uf$QRfXMV#~ZM+1zt#K%5f=L+4X zgf1>k+|eDXQ~QUNVTSKM8yys3Ws2O+XV)d7Q1(mO3?4l~6?qP%&K2>`{6zP@yjqO2RzYx2$s&}V;x*4+B zcJJrfKiX8^Z{3b>4XkZWF&5(qZ}X3k*TM33!3+mEj(&azhA=27y5RSWa>ICitYW|A zT~5C_WAe@^CxuE7F(RDt(F8%IbUV(oE3qj*$9Ekw#LbpPd~;{OY{Bn=3GX=2SoIrW z@c4k)0KFi-U8W6l17syn!RUw_uJ$RvT+b;vrYL~WgxZEBiJEAA(SVMxC=7@FL1uANBjnZ`1K_($*7VF`8FDy)5Nav^X6nh;9}z~O zFn6!y4ahH%+UwdX_U1Wq99!WYc z@11SF8D}h>d5RD(MlQg;ED`^zn8OLHdO6Nck(0eHr(Llb$yzW|&=Ok98rDa=-#7=< zN6MJxp^YVNcFbaW#Be5@LoT9=$AfS^BX=xORufilyU4(H#ZaQgkVwua7hVB45~SFG;!BpBz@9aD?nq09ImIb&gv&ru8v*Fk6}H>5RT{;9;1bV?jc>zQ~H$&dkP^s+%vPmnX`0TCCLL2scrMxTcV%bd)E(-HojS5=%#2$@bH%)pAhU7e=s){gWMjaos+t4^yU7$Q`Jr${@g`2 ztD3(}5i6%D*ObilpT3LFx;g%c^VP-ff4%SIQbnZD)jZ`!~bfZsL|*s;VcUcSn+MXP*dVbpzNMb+Oor@rpZ zWxFet3Qw)FY-qiIHvIp_64zYbEukM_&5xx&9X_SM#JWxHlCw9V+IWIfar6Oy1uxG1*MoL-M4AqVd}-Sa30X}(>8{yy}V=3CBG~<<(%}} z*wTo=*a**q2Kz_Qw*c+(u){F%?pkJjh!#LeK|8c*hS*4A1YFaDuTu>V?-MZG)1q2h3OVoC`2rdok@H3{m-vJSyCRLOyJi5bqUf6W@(DxV5 zz1QT-TDILyesseU4;0ue{rFp#mT#A6fUvGJsmV&_b;i&%F+J zVkm1(-XI_9J-k9_CJtGJSH0JtUL*LOMKsBzw0hmAE7b0Rbz&tRa0K8CsEB0eAdHP= zeF{2a<2dAA`o#;7?@>@U zg{!q|Tt5hay2O^Zi7Lv+ph3@jBJR4^z-d%i;I7gnM>|jdOV9I=-NSGlXNJxChoaRF zf$K@mo%{gz(fB;=nS#Z(YsnQ%L{Rf=OoVt$dhF8gfVkjSXC+8nWZ^LDT%EYc*Mq(C zP+gr?(X%#kO*nWCd}j5R$eMq(Ko5{^bX-6?!=`RjD&s+U2S(;FGA^IsZ0A!yuP%qL zMwa3m!@ByQ6va4Ag|@Sa9|`&JvBLS+TrN@JW)T*rJ=I{-;E}{Dg|QC><8LgdiJUKqfYZ@hnRSRE7V+5^H!CmeSCBzw zVFkc|l+qF5@7e)zf^3>Nf^z~A#=yb=wVCivyx_TV8unTOtDE?69{#k#1dOcyxYvG` zN%p%V6D!>oE|cz(Q~Z$cDVV7wkBQHr)c*y3Y~*pIoc@L2*iJH&0PDz0-fzDS)cYp} z!2v=51RG*XYj3g@W2u(0P=3^zn3}=7&ohwNSX?j@(g}p@s3xlMM&no^t zIU04wB6d>$0}YbX>Nyt;e*VX=!*%_$J~)kal|NQ5nX8`jx6=Q_clj^R(XAExf4i)5 zrG9PBziZa}qxNvio^~EH_*?0pZJ>mV+`IkIzeuby3Kig^3^iqWY(+e#$M5+I&3dl! zqq+w>-30l2GCEwman_VvL;3rL>c(o5k`tQQ<%{P$a*`t;y)_wEJU7FRt3;Y!EA{UV zS6_$H^D(fR`JEP4_c88?rw~CDa3YFS?-#*!LgypO;W-SPdTFPN;sl$U3x1#en)sv;l?tY zMVG3WX*i&KOk~olD;dvH^L2BK8FMtYQHeWfB+=jCBd*b8-Qy>*ay%TkY3CX?{Q~1a z=PG#;-bA156tv)?Rp}U(WBlCaDKHX-VOo;RjR=K<+{7G+DdYN$6*8GR)g7tdI58YQ zv6SM6tRCIRbxx-k#om@7dT@u%5xcC3uzc@be?Xw2&MT%urRY$R3siK2c_m8&}r9*=3#6vw65f!#2M z-S&RQ)_P9xHL~J}=m1Lj!|gVrwZL%uti66_Hi#KmEo*J~8q`qG7SzkysBf|W7n#uw zGfm=7_9u7=xX~idyGug`jI8I*b8AhUWoN(plpTY4#Ao<9IJG7%K;Imi@>sgoUFZza zz1txHM!cfM!%=I11ppy3>bH(FQU@9`9B8)t3EM<$=SJ>B+i@UflIK*Va zmG>9dBjA-`;SU(w;?y>zH5oL)Lafthb&-uwR>B9yDLFt^HAFH5bDB<_&LKg1^G>Ke zr_+MGQPRh@!nfCi{GL_y|O>=kD;OYnTsQcH*oeQQ_n1V2(E zyoW~W;V`@lIR+!j#tTaqNDl`PM=9Y8Ax=>K1X)8+gNIT`L>-=<9O zDGy7oh2;rVSS46BK1rz;CWxNgI%)m1-HD&%ql#yp{VwRiJoimlC%+9YSS|U2Ydyw$ z)O82rUIJ3c5G%E$-8Id9lg?c2hgfY2fjsGFzeaUkiY zP!)yJ^j^x>xd>3-&uWt!na=iLd-ptEQhagN^jNoS7aCooIIN+|rbEJ_?Nnfw)O48R zcdFsFpGId>Ot+PIb58Aw7U>Pk2%4$E!z=|ZPk55xysa2fiTi;=8BUdwUM61k((w*A{e6LIS)cdS*$1LtG_x8O>#eICPg`_>5e%*A@E0Er*X;ivMu(#o#nT zl2gniiKkY8r#a%@g&gmOK&}uTe!BKjEK$32-q6IkJnC_HCz)S zO{zl-WvCq1rc-tf4pQuBlHlY1&d>d^FIjl`^4J5YyCO9CtPD$4bXgvLT~v-_4Q-Ds zymR@`36p=^d1fTA(NE6&Ql`LL+0&P;g__u`zktiUReNvrYX{ zQU4CGz-pv@d2{vkXy89j+O1IgtPfy5IequbfBd^7&e7@+m-B+TMa$;z+H(4`X$$s^ z{idzvHs4h9PW?(wUO?{8tO$B7FK-6*)q{62VM`4lz#fRLbL*G!CGaIHi>-c~NR7As zJQ}9kWFoP0*6t~F^3UXdp9fPk?U`pkqo%NBhG^cx>6njmM)A%qc>(*t7Q`^a`EbV1|TcMzAR2E5D(Al4VTS3*%1kn$#j+N1AZ zEw)=uA3NZm%6&)%&^4w?06$1JT<$+GhQVSzVFqFJJ*rlz;!n+w5s|f-@!Bh$FDqEx zGsKiXoXI&=$VpcVlLf-0$@U^2v53&3zy#Zy6&KOgU2-{ZxDHy{ve7l3hW;j+2YhcJ z%X}l;ilfoX4hTj$3Xxp~J7%CG;!QD=&`*j8u0QXhEJ8X2AAj>i8?ewtFt;*NI zkIaDYp0-OKn^KMZar#L0k?x%C+qj`>+LTvpik+7lf}L@neXw)a09=9R^CAW+COK^T zhr$|qXqU4t=b3qch*{(y=6(&VW@Lt;du7J2wf)Uh`&ZdBe7OT5rvH#7$;|RN!umuY zBfe>_@4=S)6n(x8T~$z-hZ9+UAKXUeT!Fc=@D171W@ zTIps35$4K>oErk2*5i-x0Dg8=fr|&<`=K?LqcCN8G0Y4C_;5P(j67a)-ev{o%P2SqDsY z1M=a${M3^4C*;~q8xK`&ifk1DrquT0`4nI-T;471z=y~Pq12~&;J~WJHpt`^l%!dURO+ki+}}mI%6k+9 z1Am;aI+A>|xy%$%##AYCl8?Fwz@c?loUHLz#`QC~g=LBUqaX(Juo`zF>N)K z1?VpqyeUKVrzP%D5$*;zoWTmOVs9N(^}9hJWfmr<<-*dEM*;p_k@O%$aG`-~HP`7B z)9;83w>%1%RR>?0*&Fjo(mMePlSttV@K^;dvew*p60!x6$`f1Dz2^G~ zE`a6*uck@M*C*GwEa*^N66KQpM+JGy(E_BYmynHJ{drNvcdn6(WmO#Roe9?|4@MPU zxz@jx!7{^PM9HHlI*#KrA8;u@zhyE3YwVTArJFheWrqXHN_9e50LUpx{Ti%OnNNiZ z5QECF{mxH3d@Dr5bZ*eTmeQeFv8knQ0;EmWU(3AN|;Z6`Wp^rI%Dft-7{40#e&}dR`cbil}!0j8$me zJW>fp0!TO<#JK|!cPXt07^h+1!-&M zyUi)Ooh&h_0G+bA)~jy}jris;@UF-#H_jn!5u%@3{kb=VDk*o_EhHpAXXJhmlRi^R zYI~7e_}kcECd+!;1$L;eW+AC2mk<;@Eip87K@uk@r0}z8p>2x9X9g<`e&$^Ti`#YX zd;f>#k2Mya;yU8;{hRETZ&bLmakj$&@&N^-X_?jc^0)nqOaM?xQKR9>q;FUujn?L; z!)~tU-|tiZqZIT$sGu4Bk+Wb+*fO;0m^dO9nvo$JShnE%kA^8I5baWH#CRB}g9T6! z=H`RhZ)W~m`WDKXH74`wNHX+xl2K~zTJYe%qk)`!u@k1Gkth`jBoEEk9yw~=)@3$T zv)LIsNnPK%SB#d%Z?j;7#&#WJ>ORVfq)={#_UO=dmcH>W3 zY|V7#K3)WVg(AQJplfTeylRZt8AJ)-q_XQm>VUx6O|~v^^H@bi?x^D)!H+|7K3`RPqMBi3z$# zfm&&+NNvcQ4BqLUkq&&c@n`n0Ea)rbFkpfQBntePS^w~%bLh~zZKGY|Apn9=S9C#*H#z zOJqGzepC0jYM_Y_i4_-|Z~94ui})GVpY!DJp&%;wnNnHHNTTOLw)GQFo+N?LY8PkeawY-Rff`aSo^D-u5&1@LZrW3V8I( z*{3}<-HPK9vPR7+EJRe$h}E>l@en@_Iexdg*ewFSU%NWWwgZt137unoB9dWwa7k&D zwi(seK5au$AP}%qE6QI%Bu(GSci*)}E)fyT*UciVDLpIg=i3;Cb2yKoUq_wD#*V^6 zZ`njDe=TKum>(kR8_9WkHs|@32Vz~dS?%*u+3~Q|sctpYSP_?b2p13)1CYXH#<3=f zXU<0klkQ?7uPT*7sr>eeYDsO9qrN=hxmw2_i`(*D;S+DR5U1V?EGYKLIiVE_Pge2fM(e5{RDPk;?bjAo$M4xTt7#efCqRDI=XOnZW@B$j1e3LWv+wXvT zwu*Ngv7ziGPC##O6iSW{=#OBMD{r7%skjs zv?YNcJ#N-8(W8#v%IZo4XXOk{R8)CKEe1ak$y`j!av`%Ez$ASF_U*+3_<@ zZ$d4T1;lq3c#34+P$n`9PXQe)})vb-LoDw-?&X)=L5TW395cH4@)AH}c@Th1vZQBTgLbx{CamW1`I^$M?nW0p;#K>ML-kfUz9 znE|>%v9CzQ*+U0~GqWna5qD*#se1gIt5vodpg)5JVk<1rx_W$?`HP`EMk#Mz28FDg zU|0QaHj+b1b0enb!&?Q`vqzu-Z=X6#eW}zh@duXzpF4m{eNJo+-XlrI(!dHHT#Lqu zChzG_rA++vT#cNFM=g;_7Uvy#CYpd@38%At?_)w2Fv;Hy?rN8GtN<#eC?b}ZYza3I z4Bw2asseikWN=Z@J?7VevjUJd_;bnrSgRYI%Yu_6ti#Rrol5n4D4sPOE4<`V^s~%j zwd{rGB<1*`K=A-fKKDlr>3aLK=nHx}D3rA@PNi94Q211GN1$G(j#Z4DwZFpGo;m2{ zro&+BeTkxOhEK0P%I8V(HqYcakv$CabinlLijo3%O2XQ-Q%+qil2ZQ^QJ`9G*3h(f zLHb!l*bT}PzSp{|cov977q_{<`B}xt8mcvc{Au9)+_}=nZ~UI}B_wkWS>L^zhr6EI zUgHBOr-r1%FjQHpLcPsF`%nh%Zo|N&u{INM#>7d8OEEH%g;`%^r&aN22516OF7i1z zx%HuE420rh1Qkd~(8EMOv2MJs9@AJAgMfjjJz61$VLLA`SJCPTKe83c7Qg{iKD^!r z1_7hpxaIW*A_>dY`zqvvoS~WVELxgAFU@KYGRXB68kl?jT76172N^QaVM*7y0J`jy zb%#KBu#VsJEmQPKKZu9N9%YL@^fIm{(`+}z2jKk90A)hlQ&HFP1$Kh-1niSSD~;$n83urT~N#9^^~D<(3<>P^gCO3)n{Mrtb94 z^6cLTjq#UIqSL)l`TTCK9a962C85j&|ILk_z4f&@aA70{ZR?Eu*kVqGM*`!uBl~L( z#GYGM>;<&wad)LOyV!iI&04Le;l9TWmFiMc*&rap} z_N*vtKytTp2}6Tv+`AUu6x<;n6dz=Wllq-Gwe-vG7h1UCpmp%UQt8v zJ3#GAg`oN60XJS-E-p92=0-kLkoL_2kz2`&QRwbWCN?sFmENom;Rdg!rpt(Vkw5@i zdnyo0 zI&#^CNfs8ImdZQN`zL5WO+T-`e7RZHm%S_PB7kvY?=O+5*TD*wZ)rxCSoXTBoWk=r z5q}VYlO#?S{B4KEq2-(OV_k>%o)D#XhQ(M2vt^}<`66)ny2J*`i5M3k!LNi%dZH9G zBl_+T1+|>GX#Pg_oYCqj#@nI4%ap%pNuj1D8myMa(zncR-=DbZ_Ne%8nZxo*SJ7cG z2r$@><=DUNFLEykmS@`BNyhwT$X@!->@osjqj9wRHGYHB#k-|J>-FND=vZtdX1lO= s`>zt|gC#{Vl1$y;;*ITbqBQT?sSK|(mP3Cg|LZ)EUD Date: Thu, 26 Mar 2026 14:38:09 +0300 Subject: [PATCH 16/16] lab9 complete --- lab9c/k8s/README.md | 168 +++++++++++++++++++++++++++++++++++++++ lab9c/k8s/deployment.yml | 67 ++++++++++++++++ lab9c/k8s/service.yml | 17 ++++ 3 files changed, 252 insertions(+) create mode 100644 lab9c/k8s/README.md create mode 100644 lab9c/k8s/deployment.yml create mode 100644 lab9c/k8s/service.yml diff --git a/lab9c/k8s/README.md b/lab9c/k8s/README.md new file mode 100644 index 0000000000..723ba24ece --- /dev/null +++ b/lab9c/k8s/README.md @@ -0,0 +1,168 @@ +# Lab 9 — Kubernetes Fundamentals + +This lab is complete for all **required** tasks (bonus not included). + +## 1) Architecture Overview + +I used **kind** (Kubernetes in Docker) because it is quick to run locally on Windows and good for repeatable tests. + +- Deployment: `devops-info-python` (3 replicas) +- Service: `devops-info-python-service` (`NodePort`, `80 -> 5000`, nodePort `30080`) +- Update strategy: RollingUpdate (`maxSurge: 1`, `maxUnavailable: 0`) +- Resources per pod: + - requests: `100m` CPU, `128Mi` memory + - limits: `300m` CPU, `256Mi` memory + +Traffic path used for local verification: +`kubectl port-forward` -> Service -> Pods. + +## 2) Manifest Files + +### `deployment.yml` + +Contains: + +- 3 replicas +- labels/selectors +- image `tsixphoenix/devops-info-python:lab9` +- readiness + liveness probes on `/health` +- resource requests/limits +- non-root security context +- rolling update strategy + +### `service.yml` + +Contains: + +- `type: NodePort` +- selector `app: devops-info-python` +- `port: 80`, `targetPort: 5000`, `nodePort: 30080` + +## 3) Deployment Evidence + +### Cluster setup + +```bash +kubectl cluster-info --context kind-lab9 +kubectl get nodes -o wide +``` + +```text +Kubernetes control plane is running at https://127.0.0.1:... +lab9-control-plane Ready control-plane v1.32.2 +``` + +### Deployed resources + +```bash +kubectl get all +kubectl get pods,svc -o wide +kubectl describe deployment devops-info-python +``` + +Observed: + +- deployment `devops-info-python` is `3/3 READY` +- service `devops-info-python-service` is `NodePort 80:30080/TCP` +- probes and rolling strategy are visible in `describe` + +### App is reachable + +```bash +kubectl port-forward service/devops-info-python-service 8080:80 +curl http://127.0.0.1:8080/health +curl http://127.0.0.1:8080/ +``` + +Example health response: + +```text +{"status":"healthy","timestamp":"...","uptime_seconds":...} +``` + +## 4) Operations Performed + +### Deploy + +```bash +kubectl apply -f lab9c/k8s/deployment.yml -f lab9c/k8s/service.yml +kubectl rollout status deployment/devops-info-python +``` + +### Scale to 5 replicas + +```bash +kubectl scale deployment/devops-info-python --replicas=5 +kubectl rollout status deployment/devops-info-python +kubectl get deployment/devops-info-python +``` + +Result: `READY 5/5, AVAILABLE 5`. + +### Rolling update + +Updated `RELEASE_ID` in deployment and applied again: + +```bash +kubectl apply -f lab9c/k8s/deployment.yml +kubectl rollout status deployment/devops-info-python +kubectl rollout history deployment/devops-info-python +``` + +Result: rollout completed successfully, revision history updated. + +### Zero-downtime check during update + +I called `/health` repeatedly during rollout. All responses were HTTP 200. + +### Rollback + +```bash +kubectl rollout undo deployment/devops-info-python +kubectl rollout status deployment/devops-info-python +kubectl rollout history deployment/devops-info-python +``` + +Result: rollback completed and previous revision was restored. + +### Service verification + +```bash +kubectl describe service devops-info-python-service +kubectl get endpoints devops-info-python-service +``` + +Result: service endpoints matched running pod IPs on port 5000. + +## 5) Production Considerations + +- Readiness probe keeps not-ready pods out of traffic. +- Liveness probe restarts broken pods. +- Requests/limits prevent noisy-neighbor issues and help scheduling. +- For real production, I would add: + - namespace isolation + network policies + - HPA + - ConfigMaps/Secrets + - PodDisruptionBudget + - Ingress with TLS +- Observability plan: + - metrics in Prometheus + - logs in Loki/Grafana + - alerts for 5xx rate, restarts, and pod availability + +## 6) Challenges & Solutions + +### No local cluster available initially + +- `kubectl` existed, but no running cluster. +- Fixed by creating a local `kind` cluster (`kind-lab9`). + +### First app rollout failed (CrashLoopBackOff) + +- Cause: old image/tag mismatch. +- Fix: built fresh image `tsixphoenix/devops-info-python:lab9`, loaded it into kind, and used that tag in deployment. + +### NodePort access from host in kind setup + +- Direct node IP access was unreliable in this environment. +- Used `kubectl port-forward` for stable local verification. diff --git a/lab9c/k8s/deployment.yml b/lab9c/k8s/deployment.yml new file mode 100644 index 0000000000..48e23cab7a --- /dev/null +++ b/lab9c/k8s/deployment.yml @@ -0,0 +1,67 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: devops-info-python + labels: + app: devops-info-python + app.kubernetes.io/name: devops-info-python + app.kubernetes.io/component: backend +spec: + replicas: 3 + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + selector: + matchLabels: + app: devops-info-python + template: + metadata: + labels: + app: devops-info-python + app.kubernetes.io/name: devops-info-python + app.kubernetes.io/component: backend + spec: + containers: + - name: app + image: tsixphoenix/devops-info-python:lab9 + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 5000 + env: + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "5000" + - name: RELEASE_ID + value: "v2" + resources: + requests: + cpu: "100m" + memory: "128Mi" + limits: + cpu: "300m" + memory: "256Mi" + readinessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 5 + periodSeconds: 5 + timeoutSeconds: 2 + failureThreshold: 3 + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 15 + periodSeconds: 10 + timeoutSeconds: 2 + failureThreshold: 3 + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: false + runAsNonRoot: true + runAsUser: 10001 diff --git a/lab9c/k8s/service.yml b/lab9c/k8s/service.yml new file mode 100644 index 0000000000..9a264cd259 --- /dev/null +++ b/lab9c/k8s/service.yml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: devops-info-python-service + labels: + app: devops-info-python + app.kubernetes.io/name: devops-info-python +spec: + type: NodePort + selector: + app: devops-info-python + ports: + - name: http + protocol: TCP + port: 80 + targetPort: 5000 + nodePort: 30080