From 0ae2c02fa7091c88bf645c13a539cecbf8d4ea41 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 28 Jan 2026 19:42:01 +0300 Subject: [PATCH 01/20] chore: added lab1 structure --- app_python/.gitignore | 1 + app_python/README.md | 0 app_python/app.py | 0 app_python/docs/LAB01.md | 0 app_python/requirements.txt | 0 5 files changed, 1 insertion(+) create mode 100644 app_python/.gitignore create mode 100644 app_python/README.md create mode 100644 app_python/app.py create mode 100644 app_python/docs/LAB01.md create mode 100644 app_python/requirements.txt diff --git a/app_python/.gitignore b/app_python/.gitignore new file mode 100644 index 0000000000..c25d697d99 --- /dev/null +++ b/app_python/.gitignore @@ -0,0 +1 @@ +mkdir \ No newline at end of file diff --git a/app_python/README.md b/app_python/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app_python/app.py b/app_python/app.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app_python/docs/LAB01.md b/app_python/docs/LAB01.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app_python/requirements.txt b/app_python/requirements.txt new file mode 100644 index 0000000000..e69de29bb2 From 6c55c846d974ab1eea0a957a20ee6171f3f4d548 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 28 Jan 2026 19:51:22 +0300 Subject: [PATCH 02/20] setupped venv and flask settings --- app_python/.gitignore | 14 +++++++++++++- app_python/requirements.txt | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app_python/.gitignore b/app_python/.gitignore index c25d697d99..061f19a9c0 100644 --- a/app_python/.gitignore +++ b/app_python/.gitignore @@ -1 +1,13 @@ -mkdir \ No newline at end of file +# Python +__pycache__/ +*.py[cod] +venv/ +*.log +.env + +# IDE +.vscode/ +.idea/ + +# OS +.DS_Store diff --git a/app_python/requirements.txt b/app_python/requirements.txt index e69de29bb2..78180a1ad1 100644 --- a/app_python/requirements.txt +++ b/app_python/requirements.txt @@ -0,0 +1 @@ +Flask==3.1.0 \ No newline at end of file From 97278aab3d312d6725ab8952bcf2c58878085893 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 28 Jan 2026 20:21:53 +0300 Subject: [PATCH 03/20] completed main task --- app_python/README.md | 30 +++ app_python/app.py | 212 ++++++++++++++++++ app_python/docs/LAB01.md | 150 +++++++++++++ .../docs/screenshots/01-main-endpoint.png | Bin 0 -> 119208 bytes .../docs/screenshots/02-health-check.png | Bin 0 -> 202297 bytes .../docs/screenshots/03-formatted-output.png | Bin 0 -> 118365 bytes app_python/tests/__init__.py | 0 7 files changed, 392 insertions(+) create mode 100644 app_python/docs/screenshots/01-main-endpoint.png create mode 100644 app_python/docs/screenshots/02-health-check.png create mode 100644 app_python/docs/screenshots/03-formatted-output.png create mode 100644 app_python/tests/__init__.py diff --git a/app_python/README.md b/app_python/README.md index e69de29bb2..012f93598c 100644 --- a/app_python/README.md +++ b/app_python/README.md @@ -0,0 +1,30 @@ +# DevOps Info Service (Python) + +A small web service for the DevOps course that reports information about itself and its runtime environment. +It exposes system details, uptime, request metadata, and a simple health endpoint for monitoring/probes. + +## Overview + +This service provides: +- Service metadata (name/version/framework) +- System information (hostname, OS/platform, architecture, CPU count, Python version) +- Runtime info (uptime, current UTC timestamp) +- Request info (client IP, user agent, HTTP method, path) +- Health check endpoint (`/health`) + +Framework: **Flask** (Python 3.11+) + +## Prerequisites + +- Python **3.11+** +- pip / virtualenv + +## Installation + +```bash +cd app_python + +python -m venv venv +source venv/bin/activate + +pip install -r requirements.txt diff --git a/app_python/app.py b/app_python/app.py index e69de29bb2..f84815d96b 100644 --- a/app_python/app.py +++ b/app_python/app.py @@ -0,0 +1,212 @@ +""" +DevOps Info Service +Main application module (Flask) + +Endpoints: +- GET / : service + system + runtime + request info +- GET /health : health check (for probes/monitoring) +""" + +from __future__ import annotations + +import logging +import os +import platform +import socket +from datetime import datetime, timezone +from typing import Any, Dict, Optional + +from flask import Flask, jsonify, request + +# ----------------------------------------------------------------------------- +# App & Config +# ----------------------------------------------------------------------------- + +app = Flask(__name__) + +HOST: str = os.getenv("HOST", "0.0.0.0") +PORT: int = int(os.getenv("PORT", "5000")) +DEBUG: bool = os.getenv("DEBUG", "False").strip().lower() == "true" + +SERVICE_NAME = "devops-info-service" +SERVICE_VERSION = "1.0.0" +SERVICE_DESCRIPTION = "DevOps course info service" +SERVICE_FRAMEWORK = "Flask" + +START_TIME_UTC = datetime.now(timezone.utc) + +# ----------------------------------------------------------------------------- +# Logging +# ----------------------------------------------------------------------------- + +logging.basicConfig( + level=logging.DEBUG if DEBUG else logging.INFO, + format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", +) +logger = logging.getLogger("devops-info-service") + + +@app.before_request +def log_request() -> None: + logger.debug("Request: %s %s", request.method, request.path) + + +@app.after_request +def add_headers(response): + # Helpful defaults + response.headers["Content-Type"] = "application/json; charset=utf-8" + return response + + +# ----------------------------------------------------------------------------- +# Helpers +# ----------------------------------------------------------------------------- + +def iso_utc_now_z() -> str: + """Return current UTC time in ISO format with 'Z' suffix.""" + return datetime.now(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z") + + +def get_client_ip() -> str: + """ + Best-effort client IP resolution. + Prefers X-Forwarded-For (common behind reverse proxies). + """ + forwarded_for = request.headers.get("X-Forwarded-For", "") + if forwarded_for: + # "client, proxy1, proxy2" + return forwarded_for.split(",")[0].strip() + return request.remote_addr or "unknown" + + +def get_uptime() -> Dict[str, Any]: + """Calculate service uptime since START_TIME_UTC.""" + delta = datetime.now(timezone.utc) - START_TIME_UTC + seconds = int(delta.total_seconds()) + hours = seconds // 3600 + minutes = (seconds % 3600) // 60 + + hours_part = f"{hours} hour" + ("" if hours == 1 else "s") + minutes_part = f"{minutes} minute" + ("" if minutes == 1 else "s") + + return { + "seconds": seconds, + "human": f"{hours_part}, {minutes_part}", + } + + +def get_system_info() -> Dict[str, Any]: + """Collect system information using Python standard library.""" + return { + "hostname": socket.gethostname(), + "platform": platform.system(), + # platform.platform() gives a more descriptive string than version/release alone + "platform_version": platform.platform(), + "architecture": platform.machine(), + "cpu_count": os.cpu_count() or 0, + "python_version": platform.python_version(), + } + + +def build_endpoints() -> list[Dict[str, str]]: + return [ + {"path": "/", "method": "GET", "description": "Service information"}, + {"path": "/health", "method": "GET", "description": "Health check"}, + ] + + +# ----------------------------------------------------------------------------- +# Routes +# ----------------------------------------------------------------------------- + +@app.get("/") +def index(): + """Main endpoint - service and system information.""" + uptime = get_uptime() + + payload: Dict[str, Any] = { + "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": iso_utc_now_z(), + "timezone": "UTC", + }, + "request": { + "client_ip": get_client_ip(), + "user_agent": request.headers.get("User-Agent", "unknown"), + "method": request.method, + "path": request.path, + }, + "endpoints": build_endpoints(), + } + + return jsonify(payload), 200 + + +@app.get("/health") +def health(): + """Health check endpoint (for probes/monitoring).""" + uptime = get_uptime() + return jsonify( + { + "status": "healthy", + "timestamp": iso_utc_now_z(), + "uptime_seconds": uptime["seconds"], + } + ), 200 + + +# ----------------------------------------------------------------------------- +# Error Handlers +# ----------------------------------------------------------------------------- + +@app.errorhandler(404) +def not_found(_error): + return ( + jsonify( + { + "error": "Not Found", + "message": "Endpoint does not exist", + "timestamp": iso_utc_now_z(), + } + ), + 404, + ) + + +@app.errorhandler(500) +def internal_error(_error): + logger.exception("Unhandled error") + return ( + jsonify( + { + "error": "Internal Server Error", + "message": "An unexpected error occurred", + "timestamp": iso_utc_now_z(), + } + ), + 500, + ) + + +# ----------------------------------------------------------------------------- +# Entrypoint +# ----------------------------------------------------------------------------- + +def main() -> None: + logger.info("Starting %s v%s (%s)", SERVICE_NAME, SERVICE_VERSION, SERVICE_FRAMEWORK) + logger.info("Config: HOST=%s PORT=%s DEBUG=%s", HOST, PORT, DEBUG) + # NOTE: Flask built-in server is fine for lab/dev. + # For production you'd run via a WSGI server (e.g., gunicorn). + app.run(host=HOST, port=PORT, debug=DEBUG) + + +if __name__ == "__main__": + main() diff --git a/app_python/docs/LAB01.md b/app_python/docs/LAB01.md index e69de29bb2..5b0512e632 100644 --- a/app_python/docs/LAB01.md +++ b/app_python/docs/LAB01.md @@ -0,0 +1,150 @@ +# LAB01 — DevOps Info Service (Python) + +## 1) Framework Selection + +### Chosen Framework: Flask + +I chose **Flask** because: +- It is lightweight and easy to set up for a small service with 2 endpoints. +- Minimal boilerplate: perfect for a “foundation” lab where the focus is DevOps workflow (Docker/CI/K8s). +- Great learning curve and widely used in industry for microservices. + +### Comparison Table + +| Framework | Pros | Cons | Fit for this Lab | +|---|---|---|---| +| **Flask** | Simple, minimal, fast to implement, huge ecosystem | No built-in async, fewer built-ins than Django/FastAPI | Quick & clean | +| FastAPI | Modern, async-ready, auto Swagger/OpenAPI docs | Slightly more setup, concepts (pydantic/models) | Also good | +| Django | Full-featured (ORM, auth, admin, etc.) | Overkill for 2 endpoints | Too heavy | + +## 2) Best Practices Applied + +### 2.1 Clean Code Organization (PEP 8, structure) + +- Imports grouped (stdlib first, third-party next). +- Constants for configuration and service metadata. +- Helper functions: `get_system_info()`, `get_uptime()`, `get_client_ip()`, `iso_utc_now_z()`. + +**Example (helpers):** +```python +def get_uptime() -> Dict[str, Any]: + delta = datetime.now(timezone.utc) - START_TIME_UTC + seconds = int(delta.total_seconds()) + ... +``` + +### 2.2 Configuration via Environment Variables + +Implemented: +- `HOST` (default `0.0.0.0`) +- `PORT` (default `5000`) +- `DEBUG` (default `False`) + +**Example:** +```python +HOST = os.getenv("HOST", "0.0.0.0") +PORT = int(os.getenv("PORT", "5000")) +DEBUG = os.getenv("DEBUG", "False").lower() == "true" +``` + +Why it matters: +- Same artifact runs in different environments (local / CI / Docker / K8s) without code changes. + +### 2.3 Error Handling + +Added: +- `404` handler returning JSON +- `500` handler returning JSON + logging exception + +**Example:** +```python +@app.errorhandler(404) +def not_found(_error): + return jsonify({"error": "Not Found", ...}), 404 +``` + +Why it matters: +- Predictable API responses +- Easier debugging and monitoring + +### 2.4 Logging + +- `logging.basicConfig(...)` +- Debug request logging in `@app.before_request` +- Startup logs show config + +Why it matters: +- Logs are essential for observability (containers, CI/CD, production troubleshooting). + +## 3) API Documentation + +### 3.1 `GET /` + +Returns: +- `service`: name/version/description/framework +- `system`: hostname/platform/platform_version/architecture/cpu_count/python_version +- `runtime`: uptime_seconds/uptime_human/current_time/timezone +- `request`: client_ip/user_agent/method/path +- `endpoints`: list of available endpoints + +**Test command:** +```bash +curl -s http://127.0.0.1:5000/ | python -m json.tool +``` + +### 3.2 `GET /health` + +Returns: +```json +{ + "status": "healthy", + "timestamp": "....Z", + "uptime_seconds": 123 +} +``` + +**Test command:** +```bash +curl -s http://127.0.0.1:5000/health | python -m json.tool +``` + +### 3.3 Configuration Tests + +```bash +python app.py +PORT=8080 python app.py +HOST=127.0.0.1 PORT=3000 python app.py +DEBUG=true python app.py +``` + +## 4) Testing Evidence (Screenshots) + +Screenshots are stored in: +`app_python/docs/screenshots/` + +Required screenshots: +1. `01-main-endpoint.png` — Browser/terminal showing full JSON from `GET /` +2. `02-health-check.png` — Response from `GET /health` +3. `03-formatted-output.png` — Pretty-printed JSON output (example: `python -m json.tool`) + +## 5) Challenges & Solutions + +### Challenge 1: Correct client IP behind proxy + +**Problem:** `request.remote_addr` may show proxy IP. +**Solution:** Prefer `X-Forwarded-For` header when available: +```python +forwarded_for = request.headers.get("X-Forwarded-For", "") +``` + +### Challenge 2: UTC timestamp format with `Z` + +**Problem:** `datetime.isoformat()` returns `+00:00`. +**Solution:** Convert to `Z` suffix: +```python +datetime.now(timezone.utc).isoformat(...).replace("+00:00", "Z") +``` + +## 6) GitHub Community + +Starring repositories is a useful way to bookmark valuable projects and also signals appreciation/support to maintainers, improving a project’s visibility in GitHub search. Following developers (professor/TAs/classmates) helps with networking, discovering useful code patterns, and makes collaboration easier by tracking teammates’ activity and progress. diff --git a/app_python/docs/screenshots/01-main-endpoint.png b/app_python/docs/screenshots/01-main-endpoint.png new file mode 100644 index 0000000000000000000000000000000000000000..37f9f4b206df062a8480b2f7ef3ed84c4e445dfa GIT binary patch literal 119208 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 literal 0 HcmV?d00001 diff --git a/app_python/docs/screenshots/02-health-check.png b/app_python/docs/screenshots/02-health-check.png new file mode 100644 index 0000000000000000000000000000000000000000..dbaf3f82e22846273a8e509f21eecc426f643268 GIT binary patch literal 202297 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%0A9P%nDqQ{h#Q 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 UV~+k?QV?)m*D=)2(L_G|AA*#VNdN!< literal 0 HcmV?d00001 diff --git a/app_python/docs/screenshots/03-formatted-output.png b/app_python/docs/screenshots/03-formatted-output.png new file mode 100644 index 0000000000000000000000000000000000000000..e806eddcf2a19093bd026e3a29eff5624e20a746 GIT binary patch literal 118365 zcmb?@by!sG_Vy5pBB7vkCc-OYeVw{)urNOyO4cQ-?K4=~^6eb0N2 z=lA>m`L63**Tu{RX7&^7*=ybRy`H@TKgfw=q7$KmKp;#>2@wSl2+a!wLgjw+5ctdH zXtOZzhH57ysq_di_eTZ+!0(T(CDiOdARPPqAEX5%a%T|eB}h`_y^?eC?!233w8H}8 zC=N}D;KBR%hA14eCr{tZ1Q}(TMN&Ec=A%`W<^M%$pF6%AXQsnFs9?)A zjFVno(c69|&{Ff>4JO>5;*QdsC(7i-O{0w=DN1GCp%kVaep4;!PK+A8xlcPB$%tR z(RcUo;Bh_uEp$Jg>SYtmzsAM&01b`)=EeO8vvmtJt6Qc^jqktS+}xZ>76$Y{qC7Vi zR3+Ei@m#R_>vgN~hsjz=2YXszU&8C-q*cs_mVFT>q6cOPNQ>U@Yomf+ICM!McIk@{)ALFH#dJx z5X=1piL?dMs}@8=MXfd?9JyFFuv3n#@SD~&5dA;X_*qb&W#i1(IvMxHzop8-FfcGE z(rZU|JXp{waNIvUKi?P@C(m#?SYZD=*0sLMq*c?#wdmgJc2KXnjB{1*dbaYzpKK*F z$?~UM3NI6>-QEm`=hZs?M1hv{=g*&guL~bfzWbG#Gs59jSg|EJ(Ui43!%<})h;<8} z-5u08=YK#;uA+Q#?_K3gJJXhP1LugSF%pW+;pt0M}Ex8j(L)0^M~bJcc$+o=#2P=xsV_edaZZS9-8i$+-GqNo1# z>DKyZRc+Zs_E&;}sTCHp$F~=YcE@XyAdH77_XCF?G}6%b9--E$2?oYm#jGVI z2gi%_;YUgf98a^mbIczet{)QEx`wd$Hcl42PchRh4NfG+Nc{==1T51Emak9A+#}1< zdN0UtWBPk5AIKIYQ}9)OhG(l5rUL6HQi{`L=q1qiR^KQ1Q}u3K;$bAOUcdedc;~1I z1^X!;UdK$i86&g`SZFq)z%c06`BSKwmd1Z@t;VRn^DY(R*&=xKy*)q06yM;@!v6f1 zp`z5U&@9lWUz{dmzn`IDlNl_x_;St~_a};e`0$~6Hb&LJ;5FC0Jucz|jA+eK&SjXT zq@dVbsONLL*f+erK9dU%4-H-SMk9O4%KEK8iK~{w&-3=$W_yfQ+j-g7mN|U9%v4d^ z<4pPbYzO8D+688YnAiRdDWBt7FLPs=%l9(Y0&fY~4Hb}PmKjvM+AW!qzaf>@Xry6|V+DXh*V?VNz$uyoPt>e8`c67FWqveMED+4_L@BSwr!(7=`l7o4KHsZ8o7H!485xQIdI)Y zXO57~u!rc*-E!HzbwG-OOp7FhQ}n0w@CtJ)!f2kpFgJjKJDxSFVY38EtREg7{rLXf zE6vlku;OMAjF17AmY|@ZW%!Se>0-(JE+uoz%uV;S^G4Di1pxgeMh6b0ERLgL$H~j|5I-NS%{aT;s_L@=_ zamM~!yL{TC`hvjL^2&$ykfYWyG?UQOdJp>rX(14M#@H*vboY0k+3SH3p53KD^ZN+d zc6dXo{U#KQ*>H=^7xo4f?^*WN7ayOk;dC@pQ&acjZW^rFUl|#?ECdAH)-NL?BX_5k zuN%43H}a@!%5PODYZr+IlP&hcXN&pbiw)4{lRjD06eaoM!VVn_ov0`%#$gv+xZ8#X z2uJ)D2%A2UbfbWfk^%1yC-ILng9T44Z4cXLG�z_rhzq^tXiUL{YbJ?Mqp?CIvP zPkcPV`N5*RrR9sb%Upxu;bA8K8fC(}FT_ZP(+DXqGi%x^Hnr8obe9oG_Q|aLhb*Qz z*U+_HMwFt$v$-3@Li(LN#MYv1G=}r=I4B@Mrz3>We4#GEY0+ac-|nlQ9}YSB;BdOQ z%X*Be)XhHa6MQE7%U@sBjEty{j*fn1WvQ|wK z*~X?oa$@54@L)`C-y-8fpJvmfo%Qm7s@5Slx|7u4pN8jncrq!SnTdz*+?sVA&AI)L z7Le=%Lpo}gIUA;+Go$G^&mtAz9nMzFvVG75>Nvn-^(;_E z<=fy;0aqtxL^{sWuM7|}c$Dz@t#$9GWA}m zf#V%IV-2>!hj2XS7>|g60B4C0AD&iMSKl1>GG|oKGcc@8LZDPHUwSn)H3d1;thkVQ znsJ>HbcXQJJJLn*#lOwubFYl>H=gRKqc`T4IX>bP86;FDBn=GcI%{+OLg|ZLqB9Sd z*|!AUY+bd%^OC@Rc;^-x;X23h)+B;@mXD14em(oDbmb-bi&d+}K5!s~j}3a~o|Fb0 z*lmqa$z#j^nzpp9ye$x1w+Yl^Sp1v9l*BKeSoVPm;u?aR z#z%R$E_seI`;oZa2A{vF!VrgkX%RBnluc*rG^tr9kAU1vE-A!f7U1Ag%jg^~H8VgO zl5uI|J{f_mX37FDFP&oJ{J`ir&?g4aK#&%D1FnK(zRF{jj#Qw(^DS1>jyuU zXN-(?q1)DIG5CUOt{dt|BKF{isL1D30J}w|r5z~D0*g)o2;SRc*@{PDmHo@To8uS( zbtn}t`jI&YR~SF*CGfbzFk%I#y?r9G$Q~Id26Y7$Xi6$U*N7*n=?P8aFYdnZnSoHwd>Z-NKLo?1TkhhVQ(+F>q$p&yT%K4W+RX|W2H>UOynCI6|>Qvk@ou^t-< zb!%`55;4XF*9Xr|afjkxmj7kR3ONeuR+l zjNlX{bUFigBU2_p&(s()G0~uO{Pi&|0jGIUd9$>W*!>*9E*fVc6D3T~B`Hr*@A7;boc31PWGGc1*7GQme9P7x-HxX^U`~ zH{nC}VeSw7Us6!S>>RK6qN1WMt*$C=5Xs-8HZV9X7@t{1YEfLCIM8wduL#S9oC#fB z{AgyIwvKbdEEQ6m;-gZm&>0x}>bnJ@U4 zRzX5Kxra{MbGCV41`3Xr{rTGIdbi3f|5uYp#-*atidye~Rt@r^77QHX&%Hsi;5pna z)Z~dliaU`}bn6E<19;4-hG^H!(~2Iq)BB$?s57t zDPnS=lN_o^DcuA>KQDhW*8l)413;lan7ILndl9l~yWS{hC7;K06r`z$L&db+k3^F= zZES3?;K>|jc<XkPD(Ny1bp+A0n4`T2k?vYf|vC;9>EM^l7 zGZhxSxbpnEE>@Ui{8P(r^c);9o0}$KWCGjgJU#kAl%|?k;6RJ$jbpBie#=RKVHqRq zG?^YQh~5M+23T3>)g2Gc^XF@)>aL0O7b7u)CTbU^`*YO;Z4XQ@Fp@Usuk!$^Zk%9RV9C6bhsC|x?%vNCmZNS zP_xcbtcE3Rc}im=_|>ad_h_r{dzB`#XD4aX@6G+gdDdLD3VO-w0f{80bg#l`&!K=H z!jSzpGj8GrXc(Or#W+>zqAv{)Qq?NBf~kEc^nH!){mB-c-yKvLe1GPntiP~hhpPe% z(aHT;IJi0hH>3QmrQX6=#?1um!5uvC&3#yLy2(6L1;DypS(~vM*w*7v1PJ5W=;MkIyiP*mYLg z0%el9hglb7lQ@+(lfAvY*I+Qa>r+!9A#+u|z<_}7`ki5UTD23$iG6H*{n+I1jzT7Z zycNscmcBZd0JgPAwY|Pv4VU&H zZ)=+*(xoW?cm?a>wFg{8#n+ z8S(5yW&75+q@$e(l? z^yfCacP5#6+OmC6vI_JdQIWOlF@MtonXLBnWf|rjzWJ&^)if{syDM%d68EI;$LLVe z0#$&5JEhCy*uCn4pd?es%%kT>Xu4c|3ejc=trsdt{p`j0cSfo7-9&m1eY6LP{**$Vz z5y>7ragp)#^bE9~xp9+_2%x$wW>z#qh!glUHvxpp{A&JV!VZvo^jHX_qD46AbHjUL z)6%TiVu65v7!JK@HA?c3&{V0`*s;z7C>|$VNJxl<0D}|8R_bXLb3Wvi3o9b8Oy`_f zSy=%R$l9z`V>xQm#$lOip*EG2oYGl+F%!g`2|`LnwqIml>cYA6Q#6=Bz_qNuA@K&} zmwQo?H@LYqnx$1Ef6xGDT3%k}KcCVk5pW%2g)i`%&EE-F6olv?mZSmt8T#8GA|XLd zkEFozegUl8QyX`d>WnyRr!0QCY-FIw@3<9hNy2i%{0TcCitx~R0&#beS}qKbz>G;s z>NQUD=PY!I91pG+1ro z#-XhygiUlkE%+|L3f=#fmX2C$B&A}nx8fU&Tw6^k)|Dgo04#RgI#^n=ivp+^bjkHy zqC`vUI~zy&ttR*w(=bhQtGTw^a1|gL1UN5rMN*nB)bY$#T2BDktZ% zcD&rt#A3qoF1)UINq;VznD2&F2)R%(yQ?*uEKo3J0Lbst=g;qHuJ_8zkvhDrv+IWQ zyxvhUQPG$wD*?(=R|Bk;P%%n*{-dvk`5)l6wdc*7Exu3GD$Eo59oPy9i3kWbRmhbs zMl)qkw?_SoiddvU=Hxic07d{XY|k?M6+3%0pq7;AcVcCE0D*nMc{NnQcp&y{$cr9W z7*3`Kx^`Z?#skSXrLoONMD63*Won&!Gv%dyMgs0tYZy%d0gsMPPRw?p{MEM1TI)bG zQ028&1tQhm-JSd070fbC_;X=0qK%Em_?~Z3d%o9SNaYQe<)B8jl)J1)*&NwL&vJw| z0+VW&WAdI>t}t^)Y=CC3Vrm*`mi2G z@t|o%1|Z8>aw*5BEOc!jr!-PtSyxYjEU(8GP2(K`{M7tSj*il@(_Ef<@lF=3AcoV9 z1dAS^7f#Gf&xR|(ll;Y)iXIcxi!-X zBzuC;4)mDVg3rap#j%40^+4ddm#_eWZng%`p|}{iX4~HOAo`aol;X7T>dl+3V?ujQ ztP`KN6YHgbDy5l@;&8;j%Jszg263At913T1nAYr=+unMHq`kMvX7Exgal?**N)5R9 zyByZmx}zA>%L1GhT>OC~dIW^1Vkp8>rBJ(nr?7G0J}v-a)Z<5wbby@0IiA$B6SgI- z<^g?KyGWO+T+8ah)iE(#$Jvpy96xF9iE!PIBQX>3vLRj4334ESbJ(fu`jIJq;=RSn z3r#Fd+??o?NYy1q5V?lvccjFs)HyK|%F6uwk9nEmq&Yl*GG)+bVB1l|b9z#bM zsaZlGFW@mhOkyL&f+>>BPhgvq&Gc{pqAC4!w*;gC30YZ(PXh!p-axQ@3Q&ifpQ_3> z_jz)yD>9ke<_j=+Z-ETj%g}pzdWy6Dz2B@owp|l_TCj~B%>fYNOKoiK)0)oBW;nI6xsadIoJDhCvV+l*E4tyj_;dLmX zMKfn+WbDV8N}9dDezAa`PnFd<@r4#fMw$KP9B~$DY{p@&t9{-#G->V%jH?XHst1N@ zX&>Lf1p#=&V!I}BzBk(m4Dk^*cIB26&^89J@`3S7Hv$+K2vEH>Q-<|iq70tu&8IXa zflz%`N~4CRAH#(!bxcCzJ9qxtWv0>n&5V$uljtD9-~i3=Fmmv~(P}5@J`lCZb*>S? z#rmBk?pL;PM##jjQ~7&t{0aW#6-nW>7FesZ4ISHX)za&`pBDIzr9(z%VKKXWWU}^6 zmK9d%Ye%#DIvqIp*T^A@9*^}^O0OkP4xSKNG0}RUXY!j?%9lb#Mfi7QSPSJiZ<{L+ zc^oo31~cZ5lKP;7K^q%$?6Go5-8E_a++u+AslEh=8fT|Z=QesU7PsRcYwm-lUSNiM z_#mL#)W$;$qkd+SOEVk=FH}UWGBg@J>!}Qq-s(S0;<9oiaHpcCX4UV&kltj1I* z^5u&ZfBsvW6%k|<6c+$CCa@Z!1BzT(wTgH+nIXUrWa3%wg{2sxF64~V^g2L`1K^aHN>? zp=k1?>~Au7!_}8nRk_HNon>#Jq7yR>_+Pa^^9K}hcL|5b5rPVnkBWB8U`I8%+)wOii(2i0DItv@0J3XzoLy>YL>>9 zvU;y#R!Rx|zJd^H8f)$ElQ>RKp+I_14lfp=kZc%6T0`_#L8Rx-E;cp?3fdmJq;UFj zv}f7f8v`l5vRw0RfbMBjS`T#fUXYVX6Rg+V>&cajq6WM&T4AB#d3y%TYBlmZK&YtR z%1q*R*naNf;(`^P4`~!^gwG#vyPm!QbXuUg(wzUct*z}TKEAlmL(Dl|L4fqPwTXQD z_HB-LVVa`|2GsF_@fa`H;~?e*iiVmfk%@UyMxZ1P?kj;i;#5l59cq<=4lPp3#Tnfc zdpPd{*OL1JV1YbM?0BP1l`>=mw=DX0UKlcsxyLI&`3*Nc5wAgeRL0dND9A3GNp z7nh6Un6&f&Bvl8jNI79W)z?&1kqHUi!q@_Bz%+>f@lTU?AE?*dPZQt(ATujf!kPDo zrg{elE7g$8O706IDj95E{RQl%q6=PGZ#6j-#G4Dn$D^lxDOTbI(apjw*i8V(F??n93K!=j9+Cp4xdx?&FYfOJoxzz8Un;y|JF#owjg zF&#irS?)_rL*ieC9+lb@gd z^|u^lEqUyB!2i}l>hTig7u%zY5B9 zO+Wz{m{TH7a|uUBPGC_i|5?(_0_sTYmU9FU2!sjJAR{LB5LhLD7knkk6+sO519|-a zUP=C|Q-8fkF#h29|5MriabLds!+ynn_^W^Sqy5_yq{pl#@)EK-0W}M-i{YE7fA#|W z{Q=-L=KEa&n=!wDAG+B@9%1>i!+*MZf28zP>K#z6`osReRp$S9|9>BBA^p)3aH#aa z>VTU4=*h2-=^a4%x^S)&A5VLIBqLapJ5E%4!IzFecl~d#{ChwY2RcOKXZ-B7>X=8K?3$k=1cQYs0k2+>+B{Nb>=}aCLMQgnO zV0=6y8o8K5tV&e*wdU-{A^I8fotRIQ+o53HaWrMTBHAr zfvXOP417~WQhlT0EJd>V+mjCl?wV?u3yi`I5&a<^v|*|JUM=*=;ByY?yE`87UVf{7 z1ydyJcb8B7PAz;2OUt94obW_mTTOT*X{l*Rar6edhW0iKXnjtaeVdpotG?2>bwx)O z^XDuC|l%M5Z!ASp7n{u+*hd(}bw{l!Opv}b&$cG?<{4j1WV zs5Eyd+X%O={YcYOAt0HJcn;7`x=1V1nt_O0$X6n3XO@!U+KX2^cRfqG(SFZ*MJ$9L z4(%bu3}+~np46u~^4xILlFUT`hXp^M0V>dcEZQd=|7fDIYr)DG$XI11^f^dttnP~%;x3scxNWa)y4nH z;EINXscezF<1qX72(J62Q|KCZ0{)C_1!Y1To6TETFP@VJ2MXWgp=C&o6XA^vkq-Ew z6}Ttr8cL}vQM)Vtc;Q^utXVVXP%qK zcb6#5F8g66bo|0X%L_{rTcX}+2)a(f>w-V%qVsKI+12AH%v>4u;aM44wLa20{ZC>P3A(@K_vWs6`gay9b)F{)Ly2>#@xy&225 zX}P1Gy$9_wokfC)+0tG}M|mzwsKtu0Goh=`cYbD-JSS+h#(YKIj)Ta^cyN?U=1(;- zt8>$0;8z-El501;TN<+1HPARsrV+Dykd?6K!FXG52G=sW!zu%3Zgyd^sl_fYoqR35 zfQ*+Sm^d39d!38mTp$*R4~DcxVN{qkl}PQZetc zcNUe=Ik^)bqzEhS=Et3S+Fte`+zt(Lat=|k&cSiZ{{Y(EF zsF06q-KeSwJbx9L3mfC;=}RQViMUE&Q1X)K9P#HKR<P2N8NCGa9f@hMXkc(2hTCm^l%7Q@$SaN%7Op%V-N21A95P2Y#4w zZ*)czZHWC(1ZYanqp!`{@?jV^X}dGo=7SDf=z1tkUH-Gxt2ZlX3=U8C@c^N%h2v}V z#pw$JC|KBEM*r)2<%++8QR3_=k+@I`chT1-l|{o>Z)KAB!}1b(KXHzhRkrz{jo%`t zuzFzI^H;?uNK0RlWH8aY?opASK5}pji5hf0k2L2^Y|J7FrKtcs*3WQt@Z}#j1q3{Y zFYev!RGl<#%+8*i!3+=z&4Qsx@mw!H9dd^w7}J8G+D%y3EN51t%Y_baG$rSlkSwY! zxYG|R(x#RCTA~1N#n!`ip4m>C`1!+YW<5fq8{nYK?YSRqbJJn1#OB6onG9MoK~RXE z=Hs_Q$d9|a>DUfSBTG~ErcxRw=k599Tb7TLJLNocE#=PHSA*kftnC@yQwA zv81s3mSgy^Rt*F$5uo|@EUbXE8C7MMhy33uCsJy3s~JBY-eYhbA8fb4>vwr|6jEKj z=_E`}-N+h;PqwRc>%&(YXVpNjc0QeuKHIpGs~Jn+fh9-{{0)BOUGT zIm)tQu|_@&H&FP(BUVN~Nlfxc%~a0yn8wyt=p)FK!)E{-5n?gjCL;Q+jQxS)Q_NYI z;qbK4!{W0e!@-`qk*bU+0b>GgxXdtyj#F5nh{_}@jlng*E!Lq+AR$mvTtB5^K^^sY{cV8D_$0kF!HKIgBI2oj?Owom z$mYlbTG$MC3Z`ZUx2ps7(h}@fniopQOa9k^_R<=&7a||URaW1aHJVLM*U0w2`DpeX zmKG&>$Hq=ta_W6$}W_FV508;7i2w|Tsmtb!>>@(wbdJUbmRuQL0!kP9FgfN^6-|X!w z7GB?tSA?kkX1Aw`jCNBP-6Lr89;oWYU4vI`b-u?V&8lRFMb%;Yyw4NRJn*-+KFqCm zMP{9`Z^%g{gIwmP@sJGCY|q8rX{f#Ad5#teq)~$Refv;V%f))$(fzJ)?oglI-hc}r$f&~f)7S;SMSD2H ztTRyU30DJliJH7+GueKTetkACEXk`Yn11V)V-mW!f)ri6SiYmlCIm5)lX?d~H&C}_ z9R-CIP+rF{s_<1lMXaObZOxK5%;`Ng-GW#7oP--UfB1x7|9lf7wkT=_(jX;XFb9)+ zm~Pu4+Bz+y<*^_AXivbMyaI>FauZ75z*Wsg(0epa>v4e; zfJsv(^7UIwxVYXX35FWytZ-mp=xeuDnF=Ra9nHe$iV`jq!RCm8=;T}ineWgenc1FX zOp{x|H-!qF&v1knlWvbHQ`?jDYs6x}szcKb4Pl@1k#>i^vCC0`n=X-V1NCr=Awq}- zs-y%duy|?NS^?`>+Kcx72EUb;L@ao|1E4bOqQnHv69a?wp-SH?;`~o0!5~`($d?TM zzLhW09{zz_>bF+xvy-uU>ZMb6&0#s;YC?V$JPz3@pIYvfQ{#<_)?Sq;a{Vsxj}JtC z@$MlGl{29x<;z(w+Q9l}wKizMMti^abrZ_A+UvPe)=KvZGAJ7a_P@gu3hA{U&isuL z#GB*#%JY!;Q?{NEjpcE8X*qdm!3Ts(_c6%XVv8rh(7HIshaiaMXN{x@6ge7G4bI4@ z&S{at$W@wW38nM8Q_p7VDeq!Apt2e6rE?gfBV6V*wXKh?ugPEL=h=PzIy&5V+CY>% zx4Q6-ZtLx)Oy6T83Pih0u|jz zJ8QENMc>v<%L%Hl3|zrS8*z7UG}woSH_{xEx6eQuzezn8ceF5mL9I&eUzksn!65tP73Jn;!v23YU>8812?SK9+fDBU zVbr-jt*4}$%Hp|MH(THwyyV!|X--?*Fxy``dN3Nm8toEmo9#!~WPO~wURTcc^}Le3 zv(q!nirCfR$q!FTl>N!*0&j)5w^25)U%%GTzU82Cu=yCcNkKK?$(Sh0`HPe%J6M`_ z(X^J#touww@$yCovM;!v7h=-Q;iVYRHa$BJKcv2=QrEW9s~*l#vz;}0Z8Zt)g>#-3 zGln!pbGY~D5p}d2jXScfQ8BpJCd(?mbLG`&-hR}UYrpgZJAyeZ6Jv)oBnbkvf><4g zOTkS|DPr;UcxmEJ7^RP`Kssh0m_Ja71vswSUp zFMX1;j&i`LSEVoW?oCpX89v6QJk9w@g{W--JJw!Ct?XpfqxzII9qHCTJmsfa?K7K&woS^^J<(~DErOy7yk!H zNhq5%$2a2nHlDM2{0BgBM3or>SofQ2{%DC|uh}}7A!Jz*j(gmThvyzGiYUf@)}cMY zwAj*poSI_@?Ff71b1+$Q(`!qP`L5KcpWALDM58mvY~aFkCjaTwzqly6m=f++9JW2n zl8tG!`hkkcbDRHk17PI!k(ADBeL zO)myW;X&&=DapN}Jm9R4pUcen-_H!b*lA5g*0D)IWWuykA8Xbc-z8>5v0JI}{Li6{ zVfgy0W@}WY&QI7kI2$8DxCOQ!A*AB_8+*8|WP$z4J?$4sjli12b=mvbWi=j3AF3fV zfBnJP_ZlCX-rOzVOuq0{bt62LEa%S|oBIxIaSsR&hr}dTW&&cx`bNxEIW@=6D*?jF4s}&N18@t*FBOH$`x^@WF)lzq1`SZa_=mo~!sPZj!qGWwpA0P} z6jEP)VvxqWweYuI_ivw}TDv_wlq?xUX|~uL+0+<0CtJO6s$5>^?8G^e<`lypR4BB0 z*?jkqg-qu_en0fz-~0PO2H*qr7yhktE{c2<*X6nwnV5ADYZ??cr&rv+Fue-~P?_q2 z-r6y12u`;Y3pt7Z)60LogB;W=%w78Hg)zShu*BYRjj!IwryUN%{CN(3JgrnKHA?2O z>tIXyANtnQ7mvKWYw|Y*^xjmWad@@lCWAe`?DFG>3)IJjLdYo>_XdJ#LBKApKP=k> zgz-)Qxpq!+k*pGDch<|5DH=L}uwYICPq*l*;y+;$1}?bY8k6HSqw7G$^HT=wKd|op zJlPmAPeE?LI{o9Mz~TQ^#Kutf$P@b6ocvdWnYPjfVHwz1F0K;mng1mQ{_=A^YR?ZiPClp zA@iJ=tvf_UC%bt9rMUu#njp$FOgRiGw#sprKJQehoTB9 zJ-U}}|1rJv#r%BQOH-;qNJg#WJ2_sBII7`vI5+Qw@0zSKpJ4S{R3|g}lPEqH(|I{f z*UXn(J}EoeSz47Mu8vRq1PGZ(%A&@DZx0h#gEHN;jnAA6*$<9b1|9f%dwg@v>@S~i zDS-N3aW>ph^BbdkfBf&ZTL+gOOkY`&Z2A6B%fJ@5{P4q5(7L>-{BSZX9P(yK3WNa* z^L*do`;nb-YVeM{$AsjeX4g`1y5T_ZMHTTIkY5j$w}<+JRR`AekYhAY)JnRSs|MYb zo4aiyLel2_h6mqhx~sS%-%s!{?;9RPUzMd=RHoQ-cGR~Ky__f+v=6)D3rgf?O=|o7 zA!#qOqPe5oX5^>^b4hn~e(TD?yB@UTCuoUasn&nmp^2G7l`JAPVwElmt}qN>j*OkiXh z#{gb-AZrl#FcK9Fv_%{k9IT%ntW5bwJo?2D*%n3^kk;zqi9v$9vvhE7$OkuL@^ljD z=qnaD%ANwP*C<49&ApR@ylKkP9j5tx#%RAkk{}1N|7jP;!t21ccWkyP-0V9_Mr3$3 zrvp@2u!@h)#>+hQafYGp5!jHsp?tg7Olqxmih3^FJkBR)p(G{Ki>dDi1w_rQADZD& z&+O$gbn>`86GHit-%w}QUB9XLye%_Ah#^Jz)rB6D-~jT1;2=v)lKjV{V`yj+@`nBS zzNy@&%Jb8G6k5JKjj~Kr{VoCfx;fY%(JR}7BG7GFaE4pL)IHHhzRlcdQNb4Cd7br| zp)xHS*i`u=J>iz2?z976MOpfm;BwcT>~Olnol7hpu0`?qM6dv-aHTiq4rY_4>yoFAy*m|E|2uPa8*}0z&#_Z-TmBERv zAF{-^O#26#I|r;mt8wq}c4W~;w_#lH3F*q3nvoV{Ld6j3C$ zEifzig#ElU9BC6*#%{^pNER;fM_O|B8hlX_hUgpgm%cO5^83Qj2@gxNjYcP3X$7{H zBn_hUc}@TdDBaENj=!b6LhpRzH=dJ9+l)c|J`&uG^WF!C-3wBhnk2y&Yb&D`?1QIB z0fy&oEbe{E3S1ehqZT-&1zqZ)uh)=b_-K_ZHdvH@A1sC9^LE z^Nvg_@Iqrcbmxrg3;m{`Oh6G^IAIS%TYD{a_CT9PSf5}jLqOmloVI50Ek<3bz}^9g z1O_OwZEi8@Tdt+JTdqzWgzAw-_uZcVK9j&2beYK{f~%-EvgBYS^EKnjt_c_klwf! zqRW@Dr@uc4F_wl0mstj3S0|67{+Y77<|U6C9eL+o%<8`M!=+cd@@}1%ix*nDW)^JS zHLjoPdZ|YQZM}(`$A&Tr_cMFtY7^Wft)N&Iq9rF;pg&e%m1hh5kXZ3hJ&DzCPIxh% z)fd~7eI28+qXlizdNY!x1z8zF7}1b!4HCZ3J;4#W5yb{3cS2mVm15YBUP5v;q!cx!HW z*K0=Cz;9Ul$w;2~>*652%NDuDJQj3b@p;!n`;7(=`G^z4hIyJ~Sz{$zMDLH)cV>#c z-;m5+4^A19(IT9`MgPR<`SCIE^+HW#Ray^`u#M@4Uhy2PXA^N`K${VkFU8X7A$;H) zMIyhFE9I!Bu%Bx6S<`gmvmI~T7coJ(iDAx@)~t_6)%#3H$+b~2Cwb)8U4}a)s1@oK zJf~Y4uiZaGzq?s}#~D(7ewRpk7x9(r8&9;u@1RzQ>Ms_kI4}Eov%kG3!&zXc=DFvF zWxK206)aTL5WPC4He5AHMeEsqLUhID?o6i5!$#E3F+Vt`PF~oWx3l~K^L~o3I z&r=MeOr2tsCk>>iZkG5-C0fhgHr z*;srytdtC77g$N|BCeQKHy-Cp3E=l%J0!RydR&L+AyK5T_s*X*%tz4|1m7rvN5}5W zb4@1atl$eGBQ+-P&w!wm?Go(zN4N~oPodybMEHwnJC~YlSj|e@v3%$9KF2If{z|SH zUqQed(AM^|O&{33vqhw>j?<@s8+@_8ucoP)dR3J@S44GKKd;m=tzbK4>rN1bgPVXF z(J-ugQ6a6FS$agJ_}DZ{&^fUEz17?9oI3mK%o0eZbYH1ett`dcw{dg9R7sciNg{d_ zOKT$!X}%f{*GrF8GY;1VI|`U)%N>YXu;R=riw$zUsayZykI7@$tJF75;f zd-f4`0u39t2T9XAltR1Yy9u9F2LHeAqTkqhucY)Bhp619X2ZwBQ`x%ulN&cZS8}|g z9ngO@^BuPEYNJOg)m`6gI+T&Z#b}wk?i<;v13aSa_ijn4gLQkXi`HCCQsh5-0hUf> zu@+F)>tZufd$--?F5EsGPF24ylV9y_%wzcI%6}|x^)~T>RNH52I`EXAH)^X_OCxvs zbz;K7T>BPO#`p+ZF3~=rZ4S%<%k9LGVCqZ|Sno(c`V(*~v=TBWw>mf5-CEslabt@t zO3!Jj{i>>3Fx4p};N{>S@Y_@7u>s2><&@3rat09CW01d9E+2 z+F}ogimgM*eJAOv!+Qis$JkIuGNqkroOa|cEVWEV=ib%#?6*C*wX~3JmQRb^l)8Kp z5j8MjD7o7>mpI^&>uUeUz$hqe)3@+#0?AUCO3$C52=HoULfSH<4$?=AK=6f;G&i{a zaL;V>K#RNFT~Wed18?6|OV4((z2`&bt^uc231*CbI*-4f_3+PGZBb4vokMkRLw9eh zU*&RgQdeCm`<-!pt0{ct61StI4t{~{we!##jzYOfItMC9g|%IP4_61#xLuw#g{zRx z3|HIX3t1BPO@+~18SSYz2q-RVYvJ*)Ns4huuJ=RtM3hthyfQ`FaDP(R9kD$>4o7f+ z4wn%`&Nf0=A0w;t5IrAEZoCh| zYCZ;%d@*4v^dZka<;kQ`uvydaM5J|yxi_dc-~q9&g-23#~I=VZdb_55#wv?DgFyvBX@B%_Hx1H%fm#B{nxYptF`-ZwA*ng zLe=BC79k0()~^rB%+vrLdGardc+De-ubDY>6ihMyku}F*g19E#K#8>RP0&m#=2n(& zFK3RUL$=s;o$LCde_uJFt8`(Vqa0<1nKFD@)YK^@XQ%NxRlOssX)rHz;nS%`j>opy z^-LP?sl>F#@fCPT96yVJ{h!7_AiJsg7irse*d9O05hW%gbc?;J=%=d?ysi5`)zS<0 zOF>O(yy656#(&Du#*K1S;6!&?(M1l6OV8N4lyyEsat(H25X|jiJWJkbI8Om_64<6c^ zM|^L*9BABjRg2*?zs_m6!iS7@C{LaxReEMP$<^m$Z!FTl(-0YVqpQTq9+S`8@1HyK zx9P}T=PPraO`}?9dBkl}qT+V~g52_&-s>++A z4Z(EU)iU_dJN%iG#;li||1=Lwzk+9K+1W+m*3CNdEx+EG)dBqEG!$_lch&&5T5$q{ zZIT8cOhXfkjhQ!feb*_*b<+G#*bAGS3)j$qBYh zHqhmn;FZ_wP0q~!b^lpteg=4T3X>E;Dp<|aS~?YdIH7=8b~Y_p<)nu%S4q7Vu!Edm zS_w99*>4^GOO8B!fgMzJ9S0pWI}xBM^-PW5JiEoQ@^;l_b(Ve=dd4E7lF2waI>MJd zsv3+ro*ZAfPm7x%oARsmd5v*lhm2q#?=oOt{qsp|xN7V# z*6+SZm#5tHE7)AiySkj_zD@AymJqtdrrxkAZbSptr?y-yE;cEQKbI4V$R4PEY#?w& zl}m0F6=$(&M|R$W?7W$~6No!^)$?98Vhz*>hR)SbP(SH-%imn-?%NFAFzkONAk)9Q zG`_90VfDwqW1$i8p7d>dztI?|NF8pvkKBlWmToG)3<%6S^itJDZ!Npp`z@{=v4V|8 zYsF25Y^ zTSWi}*R7MOiLj^1Px)#hgvQk`CD~V1P5aC2&IJ0c_i_vdZZEBMv%X^00esLG|V8eilO@EK&z-xC1Yy@l0RgG z9I)a?HIl3$23sxRK-|O$!F$Yd)k^OS=zY!(&cXW2zyFx`?pZb(NTjfVi zVkv%%iU_0zO{qwpA%#}XwByEWv+r{@H)~^M<>S0+%5=48^4^~k`LBuRYl+>o(}Ve?5q}UuI(J9w%Gc2?Vuuga101OR0LM z`t;{g|HTW~Ytf5Lh0n={4KKYH2#uMs+Z@AQOJ{_JA2s!tf!n&`A|yZ4S^n1)&6sG4 z5sf|X2{zrw)w*bgCk9nk1qtzjL)~jvJ@B*KBqKgaAoojEnqz|ek+8MpmNvGfy}ypcCT={| zO=u`8VCM92#4=0`M5$HnhOieJOBVMZ5Ak!6WD~6=pA0QI$D}xM12{A5-;ZTNvee`W z6*``mdx*jMN3Uh1Cd>XUqoKL~E2msH&JBSPmTb}fWWx>Ie<{ktp z$_pjNbwW@T?(Y#Zvi=(tEC8r&0&r4{BXB;${u+vcSlys7e3L|@5&ewX(nlpL80=IQ za8Sw4z7~?{xX}+P`0ndr^$93+CK&I~DM)3x6+I??))|z+k%-T5><{S8@1E*Tf+>n+*4kk}=g_zthz9vsZvA05Szu z!%n6Tf7N=aGy|L$mvw0(64OTkbR zx1ig3jmpQ9dS5Gw=2&V6-F@}@0J|>!J~5UNi2$V^Kl)jt!UmiM6`OpJ{gUbP@&84X z|9>=j{dX#JKSgVK+)g6bqAm3ONg=31g(SqRV1N{(R8m02-999uIm|oB)5kSwVnr>E zbVP*1!IDwo&LD&5hScWjY+H*-y6fbN!0X2qgBY2mE`(J6qC+|uj0~FfRO^fVT*au ziQlHLAm#J*_fgv=`>0P3 zhc&DG4sx{88u<8N(UJirCM{WW9pyk9P@8P4zFS(SG7&VBW$er$KuRw~3iM)+SOIZ<#cI=$(1QXy8x{9`jhyO}h0pCh&CbtP0kR{KQk8T8 z4seu!@9y=R+!a&S(djShX0V%K|2)v=4_S^!csi>LoaKex+>}*_-Q~M2VDR$Y5bSpS z@OH3VAdBwH4$>hsy^ZGJW^`_7i|18B&S(j%iG=I+x^p?_gd|C&6*W&AdiN ze||52XSAk*o#VLwE@NYD8sTPGnm9S5CyjMLrK_3~E{&Gjw9sp-d*+%l_mZa2`z?0M|5e;Q7P46TrB%$(4qqn^q)FneN|E$Vy zZkL@r0c@M=>=%l+qy@N7&pQ`frJDY&H3SvJ#h-eP-?~sZreCb9%4L$j(5a55PW64? zO<`hKu17}?mzA2b*L;_KiQ7;bo7W4?Qk`19;N(4a6CAo4IsBF?XVk3PwL^}nX5c{= zQzpXUlasgM-Iw+YjMyX0oy4#*+e9}R=%PfW-+Yk!yL74wt;^&(oXs_3PQ2cBFBw+y4=YOQkUnA7xcCA$TKVvF78eV} z=gH{=epj+vydm}A1n%Gw>gLK^q4Hd%S+-HSc_vnvo>KWqM4J~Zn}zkY-Ad;)l9O3t z{EW7}a+<8n2)!%aw-m2`6%W~7-|(s{qQu1j{x66U&k{U*cV$ZweYWl9PK)Qgia>Ji z4T?tB8={*8jjot1-q^<@Vrvj8UkP46 zW>n-PY=>YX53J*{BLZXmy7JI1;y2j+nQI`#J44@8oSXLuk}ocRIZ|wcP4x<*MwL(o z7p` z@n4h4;@p_bLb)E8;z(estR1Q@qFRx_xgII-g`|(1c#VYic0Hh^@3`*oh{{u53dnm^ueUCY+92ajHq(=e zwZ;VdtrJ&?_Rdh&wySJwR4w@50(ZN0zlbN-66Z8HTw&F0WgRv`uSk}OeI{)Stp)Z^SQaqW0;OkZ9Y6k(k z6sF6!^CQqoJyBWSe=ZWd)r+0Rcef$hx20rz^SWBiCTmH(ulPTAkF>neSxEN)fp z>str)#(#oRgkL8Gi#i)1yDmjh9ah0gtqGRl;uaj@jv*cI42$nBL|GdVeQw($S;oBz zx-|~Y&!+HSNzt>-5Y5+F%Ikx7Uc`@0;@o^qa`3_*V#6aJpmJM5#sRKp=aHW6Cid{g zxv?(SFT&+{)9eX$vr>XDUCY{6Av&R@IwgI+UPbsHb-538Q)Y-u9#GcSt3}(UD;@>j zjbYD#Md(qg!%bbr+NNCi!c=nttXM$&Y4&RLgMbX@xBsC{J{IrbhT`rrz{_~oAl zyjYC9*kD=}-?aLt79}y9XGuFpFFhn!;ngX-e1uk8mq1j?PYU7$FxN^5)VnqYZrE8F zwik;Ax5{Mt{!%_vtTy2=YM7v-p3s^nG6zyxBL+2y)ZpxGsg=WvUod$m;F=ko|44O> z5I}X>OV^`1lofIsBWFXvR~%Xt1PlrpJSk1nkj2wIy!XBrYPOho6BrLCWkVWNhoN2- zos%2UZ52v+Y>QK*Yw(uB`XML3cU8C#`{h&qL#09dug($6xnqepPaCafgCB}bJ10rE zEpI#bC3ge`_$S}Eq?Wd7VEZ%F#8Iu4_eFpOJ3$%l;`&67kC2}H2>aJwp?iSU*#Mb7 z9#4jdt9250D7q0#-sQwr7<;q4lk9cy=gjx~4LmlIur`TG83Sf!h|lYL=_VJdrFjfn zPtP`HOG5oaU8)8+f)(h46(S-m3}i41TDFavyNH5Xyi{cequS%UCIKzyocSs9Z43!l=_w<|2}Cku58}-$ftUr^sQJd2UQUSKp`r`WAbV51o1clb zuC3jEl6(@D+HNyLa=1COJxC;eiCJRDQ?Gxw;6-x(&%9h#Tz>dHy&j3IDFm$;K!IX= zvHFXyDPDKkWU5-Zdb3Fke{CBX6r-7OgDAy-!y7xW_}iqLg0{}K`e7qnb)B&H!c zSWSjZN2$5;LgpNM{|oQDvP>q0?)%0(qdUNM-ReqmZanoAkj^-_n(XvbyOL;iKx&zB z_?qdia^H9@u$Rd%V)ye($9fxFVRxZ0>QOvn+1t0Fj~BfH!hBL>s=D=%(>JF3t}Y6R zS?!40TaoQo$t5BNR(JhhA@BXMRrNi!p@qk&SX(HGueA*97$q|N0)3)EV@FnvAWJ?m=aJyIw-t>*=4T5rR8ea_) zBim*KWbA{niPaWT1;vFeYLkhX&p7oCy9D*zs44paYPVOm2Y(X3_}`t@{@KQcwk>zK zAE@(f+5j7*UR~}KZuD3M3T@|P62nnBGZ!JA{M(YmR6XTdmeYUFXp}QEJZJ+(;H-i@ z|7Gzo?cI)1dgsxzgpLO9YOK4P_Fe>(yV=UyBlYEX(hkw_*?|+o?l%WT>}#K0IFm|? z5|{B-Jz;K<4u6fa5dhP=n7(1tXoJa%Sj zDOc9ntsjHSv00S-5E5fnz2K~Q`GC)*#+q+;4iRT_HD(SWTO*UWU`0ZpG0uW`$c23NPj@=ITnR(R0kB_^gTFp zDNg4+G>QH82#cVj!=1?~Wb=u3Q5}Yg2gN1rxbRsqNeg~iOb#Q)qj2PgsdZ*d*FgC~iza5hZfZjap%J);$= ztkqIftu6}9^@;4jI>c%=i!(ZZG58)IA7AK+K_{%bmA}EWrlJZIcv-1@$=EZ3)zAG; z2RJ2_lUUWHRSG@)=3l(434^P0aH6JbgJ)Azy^KjT)>?*SYGF}A zCJPGMX;}iUF}N_eXAGY+eKox5bwR*NxT&&8v?ak_1oRMzERQGFN!UD{I5BUbl@6Jp z{&-C#oh;Z$3fbU_$O%)SwA(18};ir=Z=Lh6Wu;(ol@orLVWWU322x zR;*|eSA3eE+Et7g+tL!_yE}INrlX)}K5ZKHFWx7yPP7(WQ@L`5&fe_{`20ILTku5W z*9Bg&TmE+`7A<^2=I3ejrV|32CGyd8`sGrKy11uj5`9Wv+;2`Wb%g$HRax>RZe8lD z6S?}k?=O+r&YgC7!dCM)myX_t|5s1f=QlY2hI!f1dy`Lp4R1j4cPHcGd*4C!&lAyk zjSZW6Q{%k?rQ~Pf=1{OT`2^i;s9Z zU%7`4Ve$~ePOogz4t}&VBVDCbd|@%UhW#hs<2ofCZ^VnPR?v$JGJbhCZ&!rPLL9== zIs3PHSx;_Nh4nUFA@QefRW`&|eY5}3MbHd@CG~$a)E1$=^Ma~jyk!(K?(vy-4A5Eb z-5xt5W2d=gBq3A9p$!aQhe}_V}=22PM z&jz7plRq3-mmt7fG@{gi_JSl11Z~CPwsWqtLwwtyOdjKU;$PL92Hl0oEpP58^3sk6 zUbso)lG~=?Ub}4=l+thvQszaz@2pXGu-5WwVRFbR=k3^Nq-%=j@^^#yC(ar?q38GE zm4T3OLvAxBX9M35j{?waz#-fdt&hd88&SCnvL~Emn!6$pD@10;;b8)|42H?##YDjJ zo05d0k>N!bm&m8$)F^!sX1}!}%8`mEQuFwv%(*T33X2Zm_ozFl`@RU{(z1#?4Gy8i zop62QwS*?2@SC5Sv<%hnH_Ituy&~bY;YOJw$lM;+t)b!e+YpnG<C%_)6ZOgd+ zJEMTL81LEf!YTaToNPRpKBF@v$_#~7)T!ybSVxQHvVpvr--{yJf8Ru`@Vc+m=vY;%{ZdV!fT3khu zNzBO4eMN+6SJ^LZ;Co!rh3=M@Kkvk}!B@$t0Wj`{=1zg^DXjwZoX$cv?jl}`O|1MB zq0=35ZWQ7sD3Z5Gq~6;Fu*SThpyo# zJ^}LL2h+WW8Y!#!&NdVhE2uet*R^4&ywUu&c0)p*sZ3y7nha^eoIj2Ds8)Ylo!4mX zWev8!zVy8Ex_|H#Ww?|OADD5eH&i%(wHt%3AnZ=d%WW2{_U{bZl%<2pO-zwIZITzg zZD1ML6(8xvH^7PSggNX`Zo@YaLz?`@O)qnmnLiD2xGl{%W)9&yZ05}#O-1ZE4Ns7+H zuaVgm!EFa(V)99BSV8v@n433)Q#=5;Zdfc{Gq|CuUSr=ZSN*v93%TcnCnegf+OwM9j^3Ah$qMw!!F~d1jNJFaBOq)rk-wz-;L|DCUrv_y zxBg;#oFmrFq~KM<;u>43;+e#qD6XRaO2(M{N8mfvJT?2DO=b95DG3T*Uyz}<<>rXJ z6~QTU`-6G0bb968|3#A}J_x@hF$cohr}xh+DdkiczMiuUko7ZI2@~w+P&16|MMb>a zQUA%4$eCNi>o5pN^N(DaZ^%Bc3S5nbd3%5#sM z4lCzWX;c?N*nOIO=?*#IjxX${FEslwpu;XeNt77SK_uDDZu5;1q$(zfJB*cpcF0=Y zZbvH*YXh-bA>`m4<6bd!)MnGf(47u05lW#v|yJAx8TYtA3_hNl>gu7T*Q&9x7H|${W^~@Lf zlKqCbG;)N&0=JQ;u|IlYyZ!3EaOO$R=V4&!4A~mu{Px?92YE#L*~Qm$ZBv=D+Kra` zhhN4((B!!qr_S%A#DKF|jNgrfJ2_=`A0V_P;NZTQii^l7u}Ka_f3tR zhi{8JN8lg`e54c7CS5w!8O{H{_YD#vqiNZ$c5|FRt29y-Jjix!*!N!us<(VBt~gIB zijG;>$LG|zTb(YhBgRB(4;*xUC*W}JRa6vtB&=dzlwtH(Lg%-?`S=H1z`WvqKFIIu z>;rvTmx!|XwgwT0b%iv7T6;^2WUPYObnToQq1mK=+s_37^z&dmVrON(X4Lbz5JoD`u0dP7t#Q| zZ86j#`)zmZv0tRqh8l{5exE%_xs57W?U_FLLonoCb27uqcXUi5Q}tX(=1n9hg>$G7 z$?I{epI!+wCp8c&oEkN}nXV$T5eKHl4*Ne3HC!pGFRyPbRa|q+ zIpRx3Ugz0iyySrM+<{j?|0Cn=A=t+&f8>l`94C_%YSiV7%AY))4kWcwKiVu;LVc9# z#iiq_veaYLiV8!dp3cTOaKfNZxLD@bNw!0%b|OGmG+h_sf_h$+QKd5);~84P3$ikq zz>nz4rh=HzDIT;x6F+kFR?Vby>ZxT8{m;fvKgHgi%GGk+9_ny~sPmDgT?^q8IJdfc zTeaEw!kxHIgTF%gd8^+(D&{(WoujEU|CLIlPnILB&!OG<|J zs)k7YrDyP)e_M0|#yoH_r_cl=l|S-g7@WQm6$EH`t2ma`{TeMtc-lbqI-hL392PRn z)%*g(!VpGj=39Qa!U~fi%vge3K>MQo)7SyK*zq@?>ucY1?)fft^3F z&U{nSzZ6oS7*UU*dx&B>`qv<>p?EZ`DbXPFy*l^ z%gfX{F|Clv@72zbZvHf!pXh^gSvb{oY(YN%56oVn^PvIBdK-2&aJ+oAP^&TOVThGp z$?Es1pRx|<02N**ud|FQ2gNeAwg!r?ob#M2jm#TfZ{|-Tl&%AsYrdVg$V@fptgRCx zJIHiS3Q7(+1#b7lmE6s^>M}P1ZAh5nTX9RM4u-;a$sN(toVDkju}0A1JpYZstKMb< z&4C#pX_6uT!e%T8xVwnj!{P{mdu{Hv*OAQxD6M`g};S zTaBy%GfAthPxd<3BkpT+E=G@vSp>Mj>amUJ;t!OPqp;fOP3wEHb9)>FWWSxk4&Uim z#oQRE(j2F-vSn#3I&=A^zS4~zbBZBSboyU3fCDI8=DK4=-Cu zm{0TbH+N_$ZQpHA>t_IKq=(n_5zL!LnaF#qZKwjx-l63#?}h=KNLvxVaP)0LUX&Wf zg3Gzxm^;9rq<{CaOKDl*d?DEU;*2X6!=z?mcQBa_HE*ux-Z*$COxT21Z=%yaFe48S z>nmjkq1Lg6V^;#nMG=T9GsaR=SNY-!Q$tnri?lnBja^|QP)C$R1&)z7s)-bTAyhpl zbTb$MhwKXWT}3^)CHFX^F#VjL2bf=34B9+DPDztsoWln6swg1 zWfm=8QJmJn4)d>csFa*RR!)GVg7_ZME*D)JTwbGQ>hxkA)+hA_&wUFu8iHV z&~osW>abH~1MgYRuVzc8tycXQPMmEBk9{u>tyIM$A7ES(ZgTUz2HOR9V$O8_%q3gc zhCbTDg&c6BCe4u@L11OgfTh&uWUf|709jTuFeGi22sm5fAE?eK>ahJ(9hQ+8GUlfC zzyEIHgx73tRthVD(MM zqV<%5L+abQ-7mGQXbaPe<|TK(W2B-in70JwV7Lu0-&Cfps_dVXwJ3XR;|*?K`%Qqv z23pSXK;^dp8%VR@tb4>xk)d{P;1_RaC7%lWmmDNvZzttOrI;PEo7~=e53($LXB}V^ zbM@-I?0k2CD>ce3(hUYE6!nnK%H&ZFK4QdV#Rq8osuvFTVH-LU1y~q4jKP;m*d)fE z9l12dn=I}KxG^~G?O#fhOBM8G4uBQ)!dDwWd&o|h0n+J)8jlnNy&uy@T;GhL7FMo) zS$u!Zxl+xD$vk7!g^H>2Uh<1il}np_V*5NmZw^l0S8ge@jrXV)@F=oNlSk%zHv=w^ zOan$*vPKQS-f{q1l(neWHmJ{(;&QqNI@mhB67BD?6?)E-yr6GL?YTz*!mFD=Urr&z z5Z81fdbdfos`(~bbiI8E@^uNWLp2Wl#nxOt(@hsK4~`yeI;DO*#NYYKUy((=Um8>F$W4;cmzV4(znW|S{N1v`my2|&(=_hv<|=5^PCnt6+ussan@A4 z^4IiWx-?iYvTX_zeSIn$ul@xONbr)MM8K1+>OpyNEfV#p`u(Mxg5szn(vK0cIw>p1 zahEAd*bQyE+?ZNz;rU&VLERCm!NSSq`fg+dqhGpesC{c=v^jhU#Yejsyn<`5#KkDw z*+Z>di$#DJw~a)T!MP={uO#aYAj&esQ6YD@)X8=a<&&4Xv(3GIz%|$#tTE>d03M2+ z1N;H6D?OpU3q-BhCrLR%nL()R`4McF7uP#nlkx(jvYiJ^23>ai$MwGvo7fxtru-+_ z)giu9GHPGUf1)C=FlMO2v&yeJf+|YZ!rFtIKMKoxNBa5QTmiJeHMy0$+ro{3EAvir zm!j`Xjk`Bg1KMGVS^U9zmVGuCl3>MsR5|S7^f~Ne>$}yFcJXG$_j{ zPwAnvjACn~0zN!soF8ayC6^c`zYFwD=D4?uBZ25mpExT*rgM!(I7XeZnx6LR0@FMr~DzL0`k<2pY23B#YpeTE?q{+OYN}jy;XT9I->9HFu ztS#^{d<6&!v}qISFhb7Olvy6Ug3va7bz=E#@=u8_j|M!svuQwi1IWt)(k1$83cqe% zhTp_BWY^p4Y6v}nPpRl$oNusSgP4KH|y4126m z#rUL?cYJ}^r0`pJ$LdH}$sKtyOjy1A7trHR`{cR8**=iMnLHK&xY8>d8r7>$jXli5-RCKnKn=+C96Mib3P(e{P>xlBrS)E>3%n#+ zKn6^d{|$bRy40tliQyxd0FD4H)v=`Omw}_`F>RocYltM*5-{Rd#}&_^W0T?Ke6RV> zd@dR)Dqd6fkgT`xpu@b>=!zg!9eK9j-(Hp#yG_CrHC>c|r__`ncA&06H#CVtw@!p# zu5yH1w-$$LK9Hv5?w;C$Eq414orKr9fxBqB|9myLBW3WhhMOc+6_jV7Q(|Fy^z5XDuCFW04Ebl zj^Cf=>6kW6aM=0Op-2ievUzW?#zQBxYFAx$sCF*0vLy4mk$I05n!n=IJV@j&1hug>R)Q?*ZZ218bB4P@9WHS32r3fOJpi!ortw@^ zw&NBmOnMAyl$qIedy!{%YW(*)4^n^(a_=k-*y7rFbAeip9^;qu3kG^k3iNG!#rVoj zSH$nB0$p}`DbOZg9bVa2n`bxbZU|Xa7|T+&5svPj__%j>wmqChETgL;&L1ye(2i}! zDGwB7uhV}>;+|D~%a6~hO6>WX;Dn?`Amz`6D*IhBuC88>A8~~bZ&z7a#W$_5fFuX#43>W@fl(0oNJrG=j#IIp0Gt6|8%&VN$B-|*8 z^kf`%)gMG~&bKU+41lK5859-PvpbRZtqVWgReI1ObJ!oDgd+}^2&H>#$|=KqI^nPl zj`KgPiWwolA*!QFe!-E|Ub9+zI}uh7Jg|Snmrv;A`ghWKWGtn=Qy1`PBRlig&RGcY z3+Sr0n7CFZI2BPVEe_D9C*!gQn8tse#q4}v+8AWt2BBL9LH#dZr^y83?UZl4Y+;dp^5tLQ5fOGdk$d&Gf9%gox?=E^lplUtXB(zEJ6;@5 zU3PAM{w;oxbjrMtak-7)f?=mq)m%H8Ut-jC{`GB~EHR;E0baOzE``v74mC&=Ha`eA z0#V?xtDIT_i>iOK;-PT`?oav}Xt8tZe0z zr(I&EWP?Dp`2sO&y_|#1Toh^9CxlTkR)YXiW=X-5VPV%nYl9XR4(Y5Og!f9NH@IV(e2cCs%ohHmj{L8Z@qiqSY>Cg!C1 zJx&Ptcog>~vr}m-D)EkiXghuK-TYd=3a@}g^TVAM&UTpm!su~L8a|b~C&)8vrOSCE z!>isbI7@ON z{v2^=_W6&Q>!fr4jw|T9E)ZJ=t->47ZgyMJ;RPvZuIIweWi3JpLZ9M8>~yDJL)ui->i zAd3q=1w$mPW=;{mK-mvIJ`vz3F~DsW^?mTas+z@BFZo=lO;*-((XFf~WsLyjNhRbf z%hkQ-Fz(AWkEoWW(mOj4ei+}S=#|Q_H9TxLJc3NbdsaJq8qUFw4DEVJS0aUU4yNzK zWe0v9$=nZ-Y5Nk$WAT!8n|@+>Z%(Pzjt%T#nqtNgY4&3OeK<%)ehz;Qq2O{1+P}~E z;vpcUuG6S0KG65dNu}YCX$BX!wZZCh-Akz|2NsbvOA;h7NtPrQLO)oNf#$M*`%A(w zsU`cF0^FZ-ss=|m$X6I^3^K!j!`_248uuE*x=`(pp1;7Ybyj9RAHvF@ z@(U8k;{Z4dXd_uSi8}bVO=qbv&0QJYU8u|k_gCCh{aAgjoo!lv+&}=3A z%;0jpRh_wRk|4`tu>S5SfFFXp*rEq67qt`q2DkCF28s3@kG4*QhU*UC_AoOfaZLrM z_yZD4<&Qv%f(ESg`GRfYh@s~TZd-?X;L)l}j8uF{xb(`uKM(l|!SvcAiG z&+>XW$KPs0W#Jbe`~L=Z-L;5DNf(I0>LQhIM=Hbhm z(oxY-evzf*r_uQ>pLsw!rwyM=`j44E7x;Lpk~S{rczU0)|Ne_cL-zkxyN;{=%A2zL z6WDJ67=WXy0XN8goIEEY(4DeDL!(;$|Eh0UCRm*ov3s*B8hVnFb@Q0gg3d?Lw4S#d z+4`^&@!ue65)V~=%VYe^_Tc0-vHMjWf+t9kx-`eC<&W=;EA%uqqQ5Xxz_LFdLb}#} zJ8s7At|5&zi!WM#GwRz5HRpRcH%y-Fak7Y|7uSg}=8u4nEVRhe<~ZLnNaOz_v+K?u zK4>YC$vgk90}V|DC#_}IpOddo7#DfY3Vr^s;QoHD{0XyK{o&wYM?&Ev{=}`GJ9@q; zyFYl3_|N!c_RIf98|2ZIGBDL4<$%#+t@3ETIaZZ%@HbD@V>xBVQ<}WmG{}DHzm`Ri zIS3kyY8?#K;q{fPJY)9r3TdQv2K1P_P%4>yqhA|!@ZsI?vk^vCN#_)mlgG*oAls5? zEQ*qqr5y0x&?W)|H5@-9-EeuTI#XLWx*|c_J))?VsfA6{9;Q&YpTR zHtDo?r28vVWupOO?q0D|V*Q_*jt+!*@sd<_5E|e61^;^K3Ld;R1fDblqbBySABP<| zzG-xglm6Wv_t_j1g0xz07;~BwN@TIy$IuF3MlGjCmP$NhSW;@a=h5+IG?o*6ra9lLZ}9^mo0gG`&S)C+N0W|9Ood6+PXP ze$hBuS8U?PMt8i497QACFdy6ob<FrD=RB|lH8J2gM9!R}BW%P|nQW^h!o>iyyfk z-~VGHv~IeEBPiu_>ba9kW^7ihx9GiJe9(INJTobK-8g-czDV+dEa90!Yw_D`EBEjG zRcyQ-HdQSA!qtL^bI~^nq?$uBcMfUZ)eY~X?ya>LMN)fFV0QKc&$-sHgoF)A7mM}t zQ=hnNvVLl)mA$gj!4qbkSqZ&2A8wtZ(~VGitbPsyngy{)SbHzA`j4YCdx(6l6ciWOUbQ! zx+TTl2?p0(>Yo`_gLcO`w#K>D#$&7`IDWcZGkW2Ts&C!KW6ZMXSV+woib@@qTNAbW zT;-q-MBNFb?1e35gW7J#88T2rzo#{(aQ6oIRz_GiH_EpC!()+SqngF=MMz%fpJXOEBuGh4^s%K)XD7;q2QarvNdO)Zydt+0$m7! zor^K<^4X7XaHVt>m%Pv`i<`f;wa5|lj%T|!S46%U^3Rs|Y+;~xlK8TOVQr^P8?wLj z&746+COeChnlCe`swq67xAg7mP8D@0JAHrkE&+$iO3_no>bYUEu3~ZFuBe*Xgp23$ z{u=&st*)CxzQ`Xo?oKwYc6X${o`$;=JPBcX{Z@c6PaF|l?=Qvt{EsBXTOg<;-?#=uy9k!N!=k4qAOH@%RAdX~G=*XL!k0JABL!ao+ZTf$w`oU0uYYwZT1b@gYs<7-RP zZgNENmbi>9>YNU*JqfHQw<`%c`|^ePr*{%oD)`!ri+P#_`0{h&N3V-NlrU)DW0~X^=rt=+k)5o8``qYvs|K6 zyYYQ3oz>J}SUnk!I>GF!GGt{I7`h|0=nDB6SY|k}Ylf z5QE|zm>yXo6qHgm5QqENHOnvYZD+6pFv@zav+&E-P_SY7rwOE#V5fQQut;WmoMuTs z!N2WUZhk;<_7591{)z3%FJaT4*wh@$Ke=qU_;rc`*O|(5j=T-{sq|d`w&{bhsd|yi zVJ7ALqnPT|qz~!Z3!C0t(PeMu*`mF_^KlCs#jRrZ5AwAGE)4$Mv|a#-*(|!ZKT-Ii z19x%$Hj2mA7(I3NKc4WZ$Afg!Y5^p@b24KG&+zTaloWX)1?#YnqN*^+5hO0iZF%pL zLP?#x{#Z1y7N6BD#Z}E-hH`z_KP(qSWye`%ym@zMjug5fuSaLPWty;M;InO;-t<)c z(Ov7D%VOttFGmn<_ys#%+ucexQ4$JY^1&sq!r++lc|)a;R|Xl9Mz^7=NpBu5Cd-9$ z$+x@{tTR%lUD}7UfJ%bwA3yCBa+V;vSz}Lxeaxg((SDmHsyAWFzY7c8U4>)fb-M%u zwrm?wm$1sN`1rj;{nCD{vSRaSl%O}|K&!<{tuA;(9J7Mm>)?M8{4HbVW5$mNvz~wX zr~~(bpP%1`(G)H&eJ5?uzfv@SIm^zd+POIK%SXL3qs8*KdvN=9aPtu>rkNNCb^wDG>H;U%*k z8x@Wiwa-2A#kZqABmwC))bxLa`eg63nyU+EP1~#Ef;h-OFl#;RY!rX?z@N&=&et(xa_|y0X?2@>N(&TE4sTaaUpQl zx`Vt0+3`<9&qP9X&G!>{U?kQtc|3OKi$w9+5yDxTk1f96fb}y|yEVk0Gx#qp%T86V zpO|no<(Gjjx1-Ps5NZWfp3;!H4GE{FJxg!Qe#uMK_*~uDGU;;T!}wwmfHCstDx;0@6)+6Ko3-qf?(w;jrMQ3zCxIBAJjBipN zT)Nt?(fmNHuqJYC6^~Z0^;|RX`PMkLO)x@MZ;7V42J+#<{0YHV1_-F+zAb5dD2p|3 zF%K2|Xec1ihcxX(z1sa5*jG=>Q|^bgl;E;)&%=9(5;vE=6F%0{0P&y)*=JB0N=}fy z?ss^;c6U$~=c6C#pOLi=8w7Hw=r7-3J?-UbStxM#akC&_BWguk%+e0VxObIbpLeV# zCyJnso!TcT(;VV4TYtILH}2=etJbE#lKJk6;M|o7`1DiVFl9bML%G`=oHB>z;?Id9 z{(mRPJ}XZG*W_P&+g%Of+kH@iL_2QpO&+dR3De**Vz)p3brIt&6YraB{7#JM!X4$` z4TS=m!9OY_zWtCiTfW_hq@<*SQOTvc1I+S@{KViC;4H%_^%CSulS3We5CA>iO4gjxSmJG9J}MNterR^u{ovUYm_pHEhWFh0IUZ*shgs8)=up?5Kh{%tM_4getD#}4M34dxu&5!aCK`!n0Kj2}eG&6b!) zS3JJ0W~LPU1o@u%)uro(A~1I%%t>_MF>W<1X^Z=lBtpoH1MD{2d@I{PSoAQ48@8UN zCE0X+B~sbC^Rl_zOuX{J+%kPf7hfmJH2+jkcRGABQY6;QSm9)GH3` z;Yzs|{AE_O$;yht8FFPdB~O~$!4`HdM&I+3_@Ae^3>TSa6{8X>pVdCmbC7TJ{9MF| ziZp*Y$1`5xw;sUD#_v**az@7o<36W7WK(x+zAG}hpi?%#ug7T&MNSq)7o14c=-8UO zQVT2!u!03KAzke1gW2CIP9)uX$y3hVURyupOu-w@zP#IBbjXFef13KhQ{~y5R~<7& z%0>Z4l#$lW(fJYV{s1=s0t|pdrVaNVM7-ig9WgS{5Z%u9*4CJ#$M2;@KTLV->HOTB zd1q&59@BO4!GiE`T$Qt_oT8#9gD_u!SZjW`N~6*~yZljb1Az-iS7rC>b?%?G0#(2N zI92#S0~~d%k<{_Z6Mv!W0GU;~e?#Dp5a}Z_A21$%@^-*D;L}^PN$PcB;IG*?kjLp? z^_)V*e@Gif|F{Qdpw-vHR~?z0ltWf8{^UV_vvsT z(H8==#FAz?!+_7HWWEZgrOu8iv0|RdG4sQ`eGvEM-A(Ns(!(;Q5um1t%gNe4DU;%| zDa41EGoQ%IwYF27o=C(W`;DDn|HWultv+Y?;4dwKTUTWUmo+h^OHyFTqfnfWZFOfT#~=en0z=H zI9dR3n{?~8*J)<1VK(jw29A#(L=D@fX92_~(AWIUm{(n~j|u>dEbk! zHP?H?Nc-*ULtry-@@MiU0Aaz_9Ai{|Eo;c;w3R^gkoyvZj@e~I;}cfksO`Eg-E!Kx zKxr5KW*Y4w>ve4-=$uFGeGq-uZ|B-SMn65z5qq|aCBsFR_L_TZ85_m5WaV~@i_Mp} z)6{zRZP~AGx0@?+3TYdkbzfaBaFbkjNnWejfYxdy z{}J%2u=22oo6vTT?c-azmYDnDEms&K=ei)OKR{t9WzgOwhN9UW1AXfl;xc|r?U9=-10Z$n-I7fhx}?Et%anj51LfnT!$;ARh`y9QJ~G> ze-AaIZEgCN{4A=rX13@qKvBTZ$1a)TNZxZu{BK5INO?Oz*~`7&Tr;HeSkBa!8{Yw) zDja<{E1-b?`vMdI1YWpMSC;~k5oV+Fc|?bpM5b-aMcd9)Cqf7`ae>*CuPV&*&^ zwXvVyV6Tg*COs=Nuv~MZLNkyl+HKc}$H5D#j+uaOP2F%G^n6;99i*CW%^CgHFy$Uy zXEW{r>GyN_Xr`M!AFkfe_ERt)>2%jIB+} zf+ZE`a~ZDCZq8Lt>lQAK-W3y40|A3t$tSwugP@HyNQ!hIj8 zdiX5nazyv*7KSo2J&s1D>)ywI`Qg6%BjD!qxMCH?Do;&a{CXgm7cO3`nY@oKc1e;< zNk)i$Y#brKr?|;!SDE&XqYt(6_}AC^o*430dE=p2eyd4nef~ZL<1In_CryadW@eY@ zEjJE5R~9RCxq>Qq@7;EP($oZGmktc#GP@EP)egq3l@AX+8fzU1e)s!4M}?er-iHrf z{>?+E;IA0g_A~9HD{9B@W6Ui(S-5#VaV6RTx8cnio3jW6|4n2Kt9w#Eb65P$`uxj1 zX5h$c^ylb1&yfNXXy~(zBB;DP$7mODn6=m&YrIQIBLl{`--pO=a?zOp&RaSBSWzCT zv>7G$vbm39T190wCq-gD(>Li=qz7lk-@F$pAosq=JaS}D;P$0!9*@A*k&@4khow9a z12RTrEg(1Tm0@-=G^+(Jud5wxup+2ZHRaRRB}A}0dV?e7A^Qh+w67~l0KiYw`A1O< z1bSRrkdd+AU;H8yKJK7vU|>IxTV7OClUrF?IWS||j2!^(QxtLNu(DoqXqZ2)#wf)7 zy%z;}ZGX85Ye?rG*SW?1W^biZSLK^n&rfBrv{4ip4X6{!k#Ych*b% z&S7oS4UZ@*7 zKm9Be+ycmj9P}*I$H^Yxg2G`k5EtOmraR9ay9g_5Al#7p81V1#f@CuwlmDROJTmjgSNvpl?_Ud^Lw$bEdN)b2LK}PR_ z?&RY#*x`!j#fj;B20-xsy9+}vfHYEMZ}B=c3_}6XAuf6?fj);Ye|)D8ay>x)M?@F4 zFTR)rD_)(0!HzoK&j8qn{kmS72zLA_pq8XBX{HV|Ic{xEvSK_@)3~GO)I1qW&pBo8 zzV5n)%nODk3_hK!75a`$>iMR7OYn|?x8nzo^ZOkwr;wX9L`d>2uKzMhGbB$TI)61; z;m_IAmvUVMpNC+LimY*0f!@JT6&+Ss~# z?`S4wU#nye+}Y#yJ~wfWkWpb zjQ3!3#rEFt7dtWFR{t7c?XPRA?Vq&xc1UbpoZB(gIS0;V8r4qJL6bYp2)x_=bJVt0 zz0pes){s_QW4jkV(#*ATKzntQYvy3Y<}h*>(zTmVx;9BFw6F>q0n5O?|9MJ`HA@qB zU0mOJH|07S1>Pk~+%r**08vj3yk$=L(%5-H2VKxiJ_Bz3c*F6YK!Q(BRoYQ4fF^T- z-S_3%sYo7LuFs!}on+^t=LIx89rwkXEG~RJ-1{5S#f(E;|JKnd>Mff+FONBWJ6vy9 zFz?Sh^H=O8-MYTa3n)6)`}1v5wdovvXE`F;@iCkJ%!p5(y5l%_P~ocu-LBoz{k=2{ zvIbMGTW=-2U#$>%lwbn&t15E^B+}3*xA2y@nBse{-8M4yAee<<%Je)~vjlmJY7ToB075 zJC{blCn}qqPgR>~>KDs4d=X06X&(?`&-wygbu+JlnCqHd(f$o$Bt2$l?hi@u;BzOK zhhv;tSvhE#NjSI8BU6fOY(9GP#cD5FT63jI!N_U5eVBQiyZo#hDsW(wgGVVGjgn7# zyM8a@y}beu(ZYWlG6uFBPK7me$9DXKUjFN%B6Fvdd&=G?LawkXmU9US|3I;M4St%N zZ54@}U96~gZet2y1O)J(2I0>o<8;9{#mfcSc>4FC@EQVtvudMR_%`Qq`6Zo~2Um`w zO+bjY(Ftr_vuYO7s0yEuQza^yL*bt7Ips8rqe;G--=P1s!_mTRd*t<6=`OmznMRA@ zoEmJs9eg=PVCR*2B^Am?PB5;hRft}zk`|URAF3ND$EF$CkXPs#b_^Rm8jjxctBj|)4kW!W3T7JmGZDYTRDO23NjU7rLM{x6G5t=*pE+=SkKSLH+a%cy7l$v?j{bzB7Ni-qfD_oZya?dVAR#)`DJC4R0Ih^Iv&BTL-mJ@L2mCNJ+K!xRd-6a&LyT2MG8 z1!%~==80Ym1VAbyvT2P+5zi{MO;JX?+jdKUyb3y(;Nvr`V)R1PX`DBzs*SuIhj7oE#7VZh`kSj_a{6ML+6}sCsiWd|(NxjT%o+ zg$pbA=!V8&DN|m`)^aJ>YuhUy0|St+KJZ9oM|I>xP6NhKMi44*9=qj`E)=VIWWT_5 z(E{2)c^yZepUidOo3_5UyELy4l8p~`aBcJP{o`$Or7;92*^7N|76r(eeKx)&_^hF* z+)t-&e!C^K@sUU`zQU#Z%^!Ub1aQG5E9?CYL#9^3xi96WE`T&38s+}J8{kYaPt#S; zXRYt*cI^!dmyJ1dvh`hQH4bUR6y?zgmR>*t;bwKnYhvuGGL(b?K;o*}39D>`=3+7I z0F~G_a0_vNgd%;lL|&r}vlY6(E*W}nLDdaRg%aG6jvNR-sl_A75G$zhz1sh^iI%^m z#tl`OPOzfz2EOc?bixsz4X4@GpFEB_a1gTn-DQ8&@Egs!(2m)Er(#8hF zu<%UwZ%*##=ht}1C*JBp+d>!z>ppTeEnWNiJvO;_|6*d*<_IlxSG*fN@1lL4Y#_Ls zv$h8_{;6lTd~VP9<@h=C3m^T8bR%yfre|Jt(j0A^!rc}0(o!X)9TeDY`1J~5HuId- zJwDuby)dMPvBF~4o3m)DWYH{@@t)3P>6FjGquR|TM7FGB#9MvsztiRarp$i%f33`> z&gU+z2H$~hE^$>=_Gd-G)}xc?>C_f&K=|yN26~b>6q}pwi{+()nd12he;E6YDBYDzFWd}HJ#*U$nTV-m#sk79* zLKj=WX3_WAPFmA~nJ_=bKHZ}Wqb6Cb2`bx$ zX3Bk@O>hUMitf0A$SejHFpH)pRdJF5wKdXMmq<>JKlD!YOLki*ih|*TMHP^^*=q8J9^O+Yq9*A*YIu*ak;SJ zZ*1>d3i^H0ta1gG3956^S_3&mFQ9b;%3D9W%=f+E_AJwuMc4 z#p2_2n^v=}gpNzUZ8SHT>KNh^z7CZq4Z=}tnVVky=cqmoqll(YU8?~f+}Cdi-b!(9nJDvLB{=a5cLhZYSk~6 z;3t5ruYow@1|Z*9$QJ!Nhp<^|tv;t%%0s=JS2Jh4PSKW)6>;yLGHs@tbnaAi`IB4&o{&863E$aEzS^UCt~t%k;oCVWrbvgecRjtm_#8Nq{@~<(l+Xti0U=zXNdJ5 z1$_To+X6`GgvCkPQf}E7a_gAYIKz6Y;C*^VNZO2VLs4#F&0G`2)k|G329AqLC|{ZA zgds@p8GU{7_8%OQ43pnIC9l?J=31$hrqVLdL0D&e1FyBQG+oN_J;@MCDZ#G{?Br7G z1Rbwm{`Td`+dE}IMvDPA!2!IEb%x;{wKzZ6ctZAcZz7(=B0-!b|CA?YT!#O+|Y2qqXWPj$WbelZcOu=H~IWr4bUHXjn z7$8|8Wapj_8hEBmzT0Q}VM_dG~CRwHeX)W{Q8+3UaUc&kjb5BXg(R>GB0Wl@|t-_xhTyo5&U^6=)Qv`f$TqmlD?-pFW+=pxE zZJE=d4OWq;T6CPs$HP4zg)7}RWl$>gKKxnAbCx~!O&DbpJo3SV%CmNiNf3@w>EreX zdwNzt0XqHTwvR#-Hvs8vj=d`08mts%3cw~cn=vifY65-ja*XmhBx^gwkE0Z8%O@dC z>fY*u6IU}^eiV=h=ffqP#$8gM?n9l!fF!J?CUdU1=|dF*@C=-nFPx|*a?)|~wi@34 zKH=qm)B zFPLga$AOo&D0SO_Cs% zS@18(lk#`K#q|H#DTG=WD9DIK-SFPA67KmSb9cvDk))d;^1tm0NF~*=)l^LtaR@1F z9F+}#K4|~=_nRAW$5|?n{%N4|IgPuXCk@-~wXQnA2wmeo{M+at=Ihe7qXh$OA7<+U-K?ZsQyweG&4=4@keQnj|qlSye*cpALMeOC%fu0GfWipBYPF zL=CCtE7mS-eWBB+^VRXwu@)7awfFdgw7xRvY+ka%Iu6`^ihRjkcZF`{{NdX2gUs+1 zK8c=u=IeK>=A1&Kx|e$UKZQ$R7sR$@w9kK>lbsb%Rz9Z(gn<_Fqu>Ps!E-pt{D$1Y z(5n34D;9$grOE!hYKmqm5g}aDG}gnmqvrNU^l~2u%7QiJbG0{Z88@|ZJil`C&CYWq z-UYI{r_B;@;O6ta@NyKgztmH>qUL>nnq`u%3zpR=5p3i0Q8Pmx@#$6|INH;HA>KdE zu>V_q-*S!wdx;nTkN^$5gS5v%YNc%#>u9JmF<%)w5iZb8VONyfYMxXglSC$3`Yrx^ECBleSY2ir5`r&~+{ zZWB1V#C?+mY+1oXKf|&XYS7@+@mzp}zp7gYrqI;t>c8vB1B>ynxpQEd=&nnr=6@8R zzxxOEHP7V+T|`>Otuwonh_ro*EW*c>NCzGI<2ri4UbI)p4AUAZ7$uzLaFiPv;n%JY zl`VZPrejta=HHCB`E?zsa=a*eUGsWiD>OYx8?^<%$Om!#XsREKhRUoKPe zKfEZm-G{E)>56Z+S4kvHi&C$2C+-z8c`bb6&CA=V86?lxI=ygX96z9KR3O1l>MCex zlM_P5z2q?+pP!>@$%KZ$KL29g`Ys*#=B`Xtlsk`eb^Kd3Vu2lNdmBFZl)0cd%W*5( zS)63Kp7~1f_kV43KBG!`gnmInFo?zoVrf{zW! z-f;8@(t^!?&1VGAYsG?MO75;hC8fExq1flId`CC0#6(qXb!^7(H!zNS``#0f_V#Jt z=w7XDsQSJnWxeAKg+2W|;&j{_z%ZZEOud&iI+*D5>4rcRETu66-yny@M2|Ecm0D?w z#e3$%7bo+X-}v8y?JugAW)v(gVT>*=k)k>Xlxa*2d=#X;Txh+c+}(Hfc^6?Rb}Q_n z0Ct$h|3gl}_@QI3%mxZAFqg7t3C0($! zD1O8qHJ#@bH*{%2JX9#}FuzFH{W@l#hvu64g8vfH1NSIa#Upfme>)ydfDcQ6?wBHE zU>6D1UNyq`%yw9d`bwv2LRCr^Jm`)>jS{41^CF*(Mbek!9S-W(9KTQ}x;t+vxLzO- zpSfH2OS3$saEIeG2*`?pB|!buf5_y4?11}N+kXE~$+|kWN1zn$2>97TAYs8Kf83gh z0I@M*8DVNP8*^v)aj>hiASRIFJJoJ4$F|2vcH~yBP`A5?69qYeKL!cMO^Bm@lw)cLLQ(lBZixp$PxS{gSMi<60j@AoN2|&p||H- zFqD2kR7E+6h3^-GP|#ma-`ym8ox5e{2Yep$832QUGIeeJ@}6DkA#+VOZ@p@CD`{LN z88^skP>q)GiN#&x&pf*TZLGfWOPG-Tm%)U?`6VccERy727(RrS9P%eUC&IL{ZCBl1swt0;{v6u^~dxm7H`G%W8Rpvjd(LEIuB7fu+2D)sw93&AsI{Tbg;jmKWQuBC*8@su{ zp$c^hE>7`dRH6kGD`j5+YJh-KN3u3Xa08n|!(zKEOAZ5mG5UV3zBWlmGw>!|IkA9k zQuNq6o9uo(DQE-inKm|*mD7x&<6%)G-6(ikvu%xlX1Dt=Tw;c%?_lz!-KjR?@;szg z>a-jTypxdsS;;Lw+V%0oFXb=+=}#zb+gu>khV{PZYPhC5H68THAIaU0bdiewT8QMD zgmHg-f;0exLt;47Y?C&e-y5byz7#bF%A`@b_^=-pDaJe(6V;!)bda{o(93@@xBrDD z^JjrowWVC`tCj?kgAJQEyj#RbF@44BZ=o4D)@S$PM`ku6zFhWrS<3F8xH@!dy-t>O z7N~K%L>+mG^g9{T{@Rmn|9?>Q==cp1a1=v1mzfQPAz%Ry;}SH>l27C-CI=8`Q52zY>K?0ABA2 zNPitbVeH1Xbh%)Ri=uhm{yS0p5-C1=b3fJ85pvSz00l_qjawAsP}#mj_)7)pNoI6J z5#>l&g`0MPIk;f4HrCsy6;hkokCRID**h=Ui_Be`tVu7=;g*AbpSrg?T3%4qWnKXz zASV0|RtILfx^}bj@{9<04D2iLF~omX51eC?cpQD*j#Y>yfM%&b3KG#%oEeMQCA46b z<#P574mc7C&$GTsLmxvKU47=7o)0c~V9RmnK8bTA=^UU=okD> zl+-WQX~zagxy_$WM8oq5UP?2?6gmE*@5Km>uJl7lm!aJZ)y2cVWT7yd8RxamaNCtz zi9XBgu0GQpB}qviu5KkgJxRM=o%--mQakhhb-7FRLQu4THLCJoyPx}3qgRM{$YdUP#C ztO)u2VfDG|lK%;!{Ged;`+I{R9?wV zCdu`E*JWup)!nr+bV~|TA|zSLmT;~lX%813rkVq~6tjWBYQQ&J{>Zd39 zlYo2Zr)|I{jza!`XU|Gd%CV}q23Q+X(db2_jd75^jsF8?l?08MgmLGGrom74$7BBD zp9{TuCcMf_v5}Lr@BPBS+XvuAmreMlpA8-I+MM6@qXjS#$&w&D{2G8gH{P?tWsqvM zkZ*l+I|v(y&)oA&A0WV8>94LY)|9E7fWXXkJXN-=r*14^6KLgMjk6~lDmN>6XSWyu z!aQ6e1z;7m_^Q8a4h%V{>;MXG@FeRG^<}36ct{+-s{+LHF_3zUSQ#Rg3J6rzPZX3k zmwVvh9>9^fbbT;oo(Xx_KS8P+}3 zi7qbDw=;&r=^$@*4Lwe9K62ts{k}XtS5y4-h?86G0%sPlZ{sIvym0c;z2bys$WjK< z$2b`hzVyZ)62VzS2<6}i;zn?qZ{ zlP;_kla)3oT)I)K#AQ-p99f|EvdgJqa%UZG0AFCR$vGhr@JZwICi}BQ&6_g{5vhhK zIJ&ATqxVkzceoo#9?OTy&Q`RJCF$&InjB=eI#ml~s=dT<5M8N^!5 zk(YD_?--EnJOzJ#eQPpk(cy59Nj1`7dzRq|kLu$3 zH56g?*DhuZk?%!IVPE=V8$7oeF(0LB_Y<%f$eBfKr|#A$-^vmOwxNdH+v~7+u9%Vu z7RqYz5`Mkf1C<>xdz?lFh+0=K3z|L}XiJN8qO=v|Zs4=7wa4m+L1>J_4@B*3yFGo@ zL=5vTvD)etFYCAa3@`V%t@=uMB;r&ZNQFmr=7N5w7c~!LXkhE2&{bGX-Yw0c*^!d0=J@tkyL}96pZZQTT^!U0WihNaJ7LA@8w$@B ztk3QCD3x?;AGyZa*{30fX>%`*Z{a^D7V2i)8U)k>&FHZ*ziN9K^*q+u+(V1qNhJkU9i8T?Iy%l?@!^=Q(=5+W0VI0GW!%Q;f zfaIT>Oc&2i?ZWVi*4A>#@GboBt4R>7Y3;gia-TrtRx3ivYl{k+y0AUn+0FSqck2*| zH^MEU`E0fchJ6r z*+u!0`8lao2iN_=U$W||^uiOOQ|}euIp|i6eEmox-yk^=!(p1i7C{5$EbVQ`n|TDK zZlf>=Hbm_+yB5GrVpxi2_RB`zi22{4?YrN+X%8!tO?yh!Ruw)rKhkD?r?n?Tc|qJ%5CWoU)7(5)yp*wL)Y4bsY~|pHJ}lX~MR5n;|24B|AfjRU5K8Cytb>_e7O6 zB)Cv_0?%F}^~s&$MSb|*lsUg&|JH)^fbVt5jIWN+wLM!0e|3m3d8F~zP(FoZ*eaEe zGZ?#-fyTapZ6+D-iNI1t@X-6gFv2VR;$+PS8bo<^>2-`^WYT^Z-=d<3injjk>-O>)?-OSz_dY?tH;{S!ic{A#upS*3 z^ZyvVu#lg$@7n_oJsM>|pSUdOG4|yybFJrr=XPVkSnnJBWK)n`8^IfoL)kkn)8h~S1x^~y&YM{ga5^4V4}zIqnQmhq>gjazx9*6X*| z*w|ygwiIw2jjuvYrQCU~0G3KPtfkpH{0p_!teE)CP*fsMa7dshW35EmCTL zQu@FoHR0D6^ppZ6wYM@HB)2~y_O@Xee4YN;yU1Ob^{Vgn#XhE3$=#RLKAY`)idZcS z0Y%6hzz{y=TpxIjL~aWK_n<=1;{@mf4E3EbliQhDS(?p72VxQu{cCFun_m9-nDmU~ zfv&CxjMw~J?kgTm4+s>ieEaH35REZg_tjVH*Hy-`tp!_)&4f4pOuwP2kT~%WZoH@1 z-Y_8}c|Y;Vl7xZorAx=YLpmbyZOd)PRs)1%m96l-aIl|(7V^|@5v-2^TVa`@G_Vh z9J!=`t0H7?+L7xTmbw;OS(ud7Y))9^B51=R2R#1Iw&v3TbzhkN2!RcU-zMPQ@3c5Y_;>uWea zZ6z#TWkota*R*YyKhLCqW$ps_{m=Wnf3$Sh)|873n#4{9m2E6`N%7stJ};}(x_gH6 zC8O-wEW^Ttd!1f`+Bq7|m3sb_p5CSk8*}DQ!L$sl9}IBdM5svH!}2QY68mI}gS|x8 zt4gM?pNwwz7=>4%TF5QrA%Ak)9Q8M#*d9(=}};&vxigZF`ih z+}DmUGqzTgY%Zso6EOZTqxW&Ro>%ZDxGI0F3F)UlXqG|Z-2tcRd{0}M)U=H}qD|Y9 zY~3x1kBZ)z>v*JLsF=>j*VhIH5S1Isz2s8tDdjYKz6e7@z9nOp+_$U>?PnMeHRU5> zZFy~>Y_!H@sndT&tgB{ZYT5OAmnOz_FzR(RuO5FuJU}rJbeortD^-t^I(y7By{nc#D-f+(siJ?j?4wcj9hSe8AJR?7^6tus>XRewT0!-y}JMy4l}BO>@K* zJe$*BdJ8jThiUa(9lY~`zpxJbvzaGWZLW$*>fTxhp0wqtj} z%u3n<0K)9gQi+wOvPO5f--C$i^?6+#Y|>4+T5flopI2q&jY7lbYgk?zy~=#U^3S{9 z-(Ax5Y2P##%aaW4mN(S%JaP2FQQ$}!a|@^`Ek7)5aKz zc53t>YMvFn3I#V_j&^6P%8utFEr@oY~(u zh)?p@5f`U%clzG?rHLZ{wU38er3u$PQIfSe)&CtviIoo*EjSp3SmC7#-$^9TLj7 zq6){Emw)C|N+d!nx5 z_iXsn?(P|rv`v>y>#z%#6K4-!ElDHH+IDr|;^w}jwhir11~?-^XtjNz2zE9}jJ7A62t|;n2k5RQYJPq`>HRK?9PQatLPA27k9WR(`{?26nb5qsSuQAv%k}VJ zTArGU3J#+pVl@EebzkgKJRP`;GM*|aCaER94has{`voVB;?QQViNed~( zH>5oWKgk$|rQixTUtcw+UHKBRGUoib*PGQ+*o;O*l+@X?99PeJe4*sK$RFVRElve^ zN15Gdj1hZ#(3qxc!l;*yV#2m-SsvgM+-!VjFKd3D_uP;)Uukl`Q`-2({NZ~G!s;qt zOvReqS-8mQ!M|2l|n-a8m5R>{TwW27Wxp*cQ#_Jk?O>rqRYvWbkQ^MaL zrvrxa{Sq_z)!2^b7H6~cIkL-kfrkyPVgkwpCg4S~qMFAVR$Ec*DUHxCl4>+`gJ$~n}w zbxT|SdfJ|=N`kopKW(jq$ho6#1!z_Xi-_!+U1Ov;@$6zZ27`HH`Y!2t{fG2)wkz#Y z{}D0pe|CPtk*LaP*v1~?Bj$-L{kguk+f%jBpe{6od~;_Nz~xrU>&NM^7tT5fV21V4hR7~ zC}UZwe?i%7eDSxFB^4E!qvek1>Peh~fWaP1m@smk0eMFYbbJa4!5@;xS1y$ivLIQU^Q0H; z+tu9-UI6gUc1qD1kNcHT^k0fy7)y;TftAi4ewpf0uQUBcCA{O)L?9pEMa=?(H$*Rh ztJ{qZP7_=_<6g3gkoT89TDTAGkI1GP8ygX*_gdJ>(LWAO&e&w@gha-SN|~zZh!vPs zxII;K2HtAiUGOesV6BpAX!RD+r|~n^PdafhSD(Kf20$+Fv~picmp6sIZMPaYz0EoJ zM{OUP8_8Q#{xQnLnQe%X;GD>XAk042}r*=sqE)rIIp zv2-(cmbPn^fMIgkU^&g{$$BX|uNsl{txE2z6v#MqpMxVrQmDn#4JEkBoAV5ota$ds z4Z+SvhMq)9ty3sczRVH-deOm_ z3%N2_%!q(s0;@d(U95eYhq&S_*kAYbSQL0sf2k%?fT2hvc2<~|p5Fu|>2G=ZTMFx| z>gK!t{-tF9eEVIILtI4h_MyqC?jH)`ph9;H=j z(%$914dH`HJUYGTs!4;_p(=Zt5vClz;TKOoT#^_TlJzbGu**~~R2FVMK(Y+ydPUH5 zZ$wkyyPOtu-R8{`nCj^EzNL|Tv9a7s7mcot=Wgps!bj#-0ZQ-kJyF;4x-cfs_|~*O zKh)c?^h8Qy|Eo6s(o2rWe929B17Cz7!}9Pq^~#6xw+o0G*|7febncfHX&Z6|rzbm$ z1Q{ZQz8w1T^<7ITCOC6&(iWT3B;rOPfZmp}qec5RLC#C6Gnl(|OES-+n>h(?K%+KF zry9aCH{VA;xj`TDFsLnt;zbvxH=Cjk*Beyd7LlZC&-5cajl%^P0EKMy#0p2FR{LXzwa?;3T_B`O&c-K& zm$5uqck7^6&$Ffg5a-i`Ja7Y`NO0^(Ec)7nc#T6|gWRc*y%G(JC8FSSKZ ztrtaiiSv){rsiRujMiI?CZl$vtn1 zJC3feZggamak~l^e&j%tOC9?u{NfqYP zB~ag}rj^D?CqT75Q&H49Xq;VZhuOE67qyR}mR$=gPIasXHty=27f%|dw7bA~T2zyd zU^`kQzO%&GeHa2?K5bq|2?Qw5xhlQJ1BgWQn1vocqq(n##Nno7*xq>1Y#tMjqmiL* zYiviE&!~KCQ8I_P&Vq>X57E_8v;}6?oTd9tgVfOL4do zl4Tls)b**mS9rZ+q_)EW;j|9VOLF%>fSYr>D^DgX@B0d*?rD!494>tq-{(8HK6cPn2$H@^%mNq zaCq6}?hl5A@Rot1zAIu$7^m*Cb^rb~#nQ7I;nFvcMgUrL1483kYhf6ERu%t{uXZc4 zXn5r@+xasuONxp(Z|e5E1)vJguX> z1D&{7CmIR_r*syGFnp>z(&NSA`lwvH@2njR`*fqq{sO>N49oo{Wwdx&XF*o{~gbK)lII zn@J$v5F&!5wHprJOge@Q0eydvUlr1MRLp5B;5l*e$N_*rPWmSU?gUg6@unSL0uvA# z4!V8nZJ&i+q>^mkpttJrJL>NI1~UDlQvc-R0r2{J%i|fGx_dI6G7!t);mx-vW+W$ud z^>|J!`Tiyr|G2M#7MQ`~XYzjoC>`m?N%nWpsjffM+$MmONLxnUW)jI}K>6$^>Qu#n zgbp+NFn<4eu%!`^qB(o|$?ZC(VK{E8(v9kHYhUvvkXj3P2)gP%0RFtNQ2djzC0Y)7 z_wFKZo3`-fg?=SbNDx~v=zCv2;9yY;RBW+@=A)Fr(ej$> zn}_8A@>d}^?wv;C$bMYd>zz*uvajV_0TI0x(-h0-=S}?0nr$0r3FR|@iuOo)4+Pyz zpY^4H{}p~y&i3_)c|N_SbZ@gs&IdQCtRUz3vb-HeG|BV>sJKX!t|xh^#Xa@8eR~-d zXF_<<1G^?$F@;XMA>yv+j$P{C+2Bck+KHJ(?KGF#8ritJT)VEB{>yvVXpw z%Vk+M;MtS_7YMHXQ?=v+U4yQ5;?yrwiB=-73k?m`*VF4s6!+|MdHg!}DB#okH5*U1 z3l=;7pnwCvcOG=vr<~{6k<6P#>+`7u6)`? zajAw2Wz=h7phh~(0eTm`RD8|O*;)Og+9TjUfX)z|Q2RG$eSA_`0ws`i2zxX?^r<51 z$xA`52NpmcV@1MUNoxI_&>&}iZi24ZgWr!0G0HuiY{~=Zczkj)YGfpSXLq;TmcF75 z;P43t=aUy6mX$7upW!pmi1_W8V6ZJHfn_L9JhK=qU>QfkAO{BrXHK4o{u9w3lC8yR zYVpzknyxTi#2q`npK8y}pVNS*^6KVpFY`R72v{_Ed!n9Xt#wXpkz{@gT>$wbgU$;i ztFvDcbHM{dN#DSr51?HDn(aFalJ@#;a-pyO9-)QyLaPox;i1rI4JD+A&UqieX0Z(wIU`I7|#b3HOSiK@mRa)`lkL7K2%cW(@bgWB8Mw+bo)^H{sp zs|a+T-s>Ey0D>yDMXC5wK_$I69wM;=1@X<#>Zp~KB~zN;NcVsH_U%hk$(tr`N|blyV0SUa$n5U-+&+^k#tla1di)xm*Dh37ylA|5n-CV!_X65Ysc^ILQB`6Sd+)Yr1XEw-**{d3foa~rpO!sq5 zkz`H20k~-Xo8EMdz&8PtH5)gRhSM%|SGjcjV6x605*ZRAt4Fl}OACGFgdfU|Gqmy# z@gDEMQeQ{oucfDOqt}-je$rXSBnbqI9(Vyzy%04@N)0?l$bAv)|3}+@hBdjhU88X9 z1rZey0R@+UNE7KuT^3M4L3%Gr?@I4MvC|e^KtSoehaQ5WAT@$O=m9ab009C72ubz~ z3V5&QyWej=$KKn+KM;~!WnSYP=NMzo>FB3%rBCT62N1>$=&{|MNI`tA980Pde&g)E zYt!VK3AvvGbYhJcCRIBr5Ud%%Vuj%O$Q2mQyZqkmrcui6-{)R`RfPfK7zK5VaxpeA zV9D~Ow)mW2UfOLfUU@~ZLrdXt-b5WCLrDu$yXDpKtJ9M%hLpuTY9YUtee!B+W<|oD ztGtP^!ayKL^WDt}DVnBaZtUhHsj=|D!l$jCS<02dg+!c*Iu#_u+{ZNnmC4fQ{~C&!`R)_z6plHwtbJr#ogi+@OXSX68;oH z)qCcLsHiNtN`ix^*F1i*V+G7A}{v7gL!vhSReOAR1xF_lznd+Vge5*()KEpM01|I_5=2B%Q_jQ>&l%`h# z&6;}8%P%d~tPnWN75(t({QNIzqs3L2#Mn$XyTea+K5nt;3F4WqY-!QHXvOU(a52^J z>{ZCMpPPAQDH)nqTnkZ;kJ4~Wf^6+5<-S(K(z-ltp19_<&^arm$qNzXt5Xc(@`Gnak)g+nE>dLGc z@b{I>H6s2B49;Ljg&!^FAH0%fFWJ&~NQwbcxD;6HfJ13soF#*_sNC#0UabW!+ zPw%FRe=gl1t36%U^#SpMVj9dy;@OkW2|_KNb-}Mv<7f?@mzZDqa;Odwlp6CG8{2D8 ze4VNWxags@Tm@2Z=m}Y#IcN>;egi70tEHx3Xag~ORa~xnEmhK+0s=YijomnF=IaZ=XD5FM$O=$On`NDvikf;63H%0vDAA$K3|1iS0g$hmMd2T6DMjg ztc1awu+onsb-%AffS`mHWKAMu6gM!SFFZ&9{Sl~^ksP4Vgt9O?9%Vyrtv1O}mDi2$uzR|Ec&4Y4h0dX%{Ns8fGlJu*QfTDW zIiEsRJe|l4<)}qz6Ps?Zr0O<4ONMCftsVv(fWyYl4tvKERAn{r|MF?|3n#vj$>hox zU!pC!MR?cKPX^kw^MU#CdIRGf2CebYe+f^w%<+)C@7B#>9zMU)PU>mVBrXXVUH_Xs z#k^aiQKfsI6U;-wXJ5IF6~wSg%d0c(Q)`SSUrtOv*3~?{JQm67x=BAj`;)Bt4r-{^ zWKZ1pEb3v7MH@Oq`HP?eeZH$^298^J{;-8$dT4TLw6^RIyZ6byn*|q_qOM)BE8n_( z!c!YRsdQzm<0vMzgMRzoT`{A9fNH555lTCMaPO1Hw9hjYwp_Rl+Uv+iYj1KKh(}DW z#r`Dcxz@36&c<6gYFIQyNtRr(vq)6Nej(4n@@3F!g{a(tp|`8gz}~v&DCQ)Bn~Xad z^i$_uv|Q+h7jt5hR(rX~ym`@TS8V>l1PR1Nd?<$(Vb*&r4`v( zN-#e}4-iN0=mc1#b;9(-PFIQRD-J&dvdIJfHu^mhrUHbGo)B_NI(5vpk65T7uqaZ>cRvb0330&t)?PmmjeCrkUMy1HOD z?vR*PdGOMkB*y4B{Fkv}BT$<@k6g;8zD0&AUUnIa7_S96q~v$eK8x>aWrqnSSNd!@ zeNjR$(^n^T#(m-@{JTh)GCg2@A<*J}}9ozURLBHj?1?QFm9V0qAIth~mjE5EA zD1_N%9sg*0Uqi!8*;4k$e>F8B?+ZP(9pO>S*8QKiNAru{l1gLD9=@KZwP0aheM7_U z&CS~191aGPUj=QFnHAOVq}8w9UNiGiPlzZ4yrX`<&lCUcR89h2{p*=HL~N<=wybKZ z-l)HKqxR1kCH0kt6Q{oYZ}gJ??7Ux5Wr-x`|8yX3y3y~DwIlad41;a_RC*BLxn|Pl zrq{5Opqh|l>I%gzMpdExHE8GS?iW#lFCKrYdOggx4OjIVFOHcS9;SBQR*EHEURCR5 zd8J9+2b{Y$-WgD;o&k5!VGtCQpFS22Qyp}+Q> zWz-gAz#19%IUYF8g6ezjj8h4I^~s0HLfS;(b7$L&d{9VZZAD*=>*;jZ=i-9Jd7IjE z)ILb~gKM!}t4Y3AtF>0!TotmQ`4=QOQ>Qp(=7LYR zzRfUAY}9Kv49XD%EIz^PN6KZKZs(M3uQ7V!r320G2+r>h2YQ1(DMdRP{n$m+Fu9i)7W zs>Vm8)}9du&t>(xs^lgKut#W?`#oH=pL}fc*kbs|(C!##xOMRAl{#SWf{0|PW(n1Y z%dw_9u@B3xxEboGjBoyJH26D^@ySs8LtQcz>7&v@h1x?Fcd{5RX>+C(?n`TvcFRQG zjE6jpz~|G+zjCyMzM+jhv%Q2J%uc*#&|*~Xy0au~fbcJw*h}@H<`z~(0<8LP-teAo z&>)@Hz&y?WynefJ`%>34FdjQdjd2|Tlgtet#dN7@biGf{+0pmx+lt`r#F5YyZ3ZTF@Azm&iT{!&_CD4x3(7i!C$D3?q;-6)L)25EbW;ONCTR#>35 zNRE!NmqnHs5c#~9r^123tZ<$+)~GneR>*l7&(z9kkLj@ZN#odsocv54uVxX{ypq;^ zxPMEVIXN7nEYGSNo5ItRc2SrnqLJliZ5bl$KMr?#04&fPsU~@c&|87;{ zO+J#H}7DUh{L7(GMROHXo#Vwlzh0HzN&dHfXQW|LAmX@-W(SI)}6xUd!+% z2!12MHlhcJ^DY#c%s6x>xdv4TpEI>3-3op%?*{>D@$K_|V)N;X!H42dU~f-ZLgQoX z@DzpIgHDd41x=STOOW9eux@?*{0f`>eCA1=@^aHa8N{9u96glH51kx|a`LO9;7Y~X zBcUc%6+3)BQ}K7^kzM|t(?~71;y`~tRe-9e9H*n>?AiN~mzOsceIUtp3-92^96#`} zJFD8{YO#usuSbA&;_L_WN7YN8Ier+babZtcFjfE}=gG$+r4MrN$F!vnIA#I!R4qkf zyuF3Vxv*OS5mFW3abk|xrb=~9=Pct!jY$=S=x^hy@rX7Gnm7m8J$Y`>K%6xti=nO5rP+VgDmU1 zL9qGZ57dO-*kt=~uOx&MAgnJHPP~G(U zm9~SG)LS-rG#ps#h(4(%G{bGiHKY1n-CDbA>Vxc6XHM`Nuion0<8NXG-yRqc!-MokAm}0)om6Q zmiF<$zWoFahiGD!80BzEPAyq*JJ9p3^J1^NdG^x{X;-AgGU*!}X z#bIYr+X1zJActAb_a;!1n;(YPMD4jW~{zixu14Pf`b}3wKD$bu!(+-VRlGo7C z*#D$6eXB)4f%5Yzm|kCZI_qvUtlxOGQa$m0T;H$q^n$xeDtHWs(BMBi!V_!H?dSA% zH4s?6HO?=Gh?NNNM>BmIVo7f18=N8RZy%?$C`v3x;a6>K`or$@k{4Is}+MAXDzT zEQ<)+^Mc8m6iV`2rTEd7*ZEm_wSb*pe*GJLSWQh+{VWRsK$2YuC1E!f!=QN~A++%I ziG=v1q+ap5#gGZn3MaJo)wA|70rRpkX}=&}9!*}YklNc2c$8|jGW!U*eE+XrtH14@ zoUQo+EQXd;7Y)QKcpnRPc_d%Slly%n@0EXpnpr!g8|3TTz^ZEIC_x;e^ zo*a(p(b2yVn;3y68Iea%K1aKqkK;1DUj7$zT&9e2tl5$-^!IVpGl=v;7QmSR3A-Rc z+-asW_4dXX9kfpxwYJ$Ig`oC;pF|INmnT31;)^XIh57l@ zD<~5kAojPkyg7dSxQL7qONz{i&4~mjF#-*F5J57aK3JWxh)oM{El%#=VIPnH4Q3*1 zJ$j?J!j-t{5SPK-aJ8(o)W!bwB=vN#CX{Lp8(Z5qfA~?5VAI(>rr9xbgGL*A5!%|? z%dIBl5-({{(R5H&@7?R+QA3b7u+{#gYX7CkWY^h~yN)Ad%IV^sQR9@(EKroGb$NO` zOs-cPv3^f6|L!P@xZ|A&pvND9$npOx&F;z!e6l9KTvM(nsqf(eah}=*sUJ}`Kak=D zd7#@r7eiA*U-ef9s<5TnnVE4tNvJrgW0iKtzB?P1UCL~2XQv#kl0S3rm)@58GV`AxQF}iZoMV_l^_A=< zGXs=o+xFInvC4D-p9_@LgeLgrcR3Qh&mOsZTRO0;S=BTCgjw`r!UDdX(;jxp+eLrH zmuU=RS%g4)fz+heUF{uLrryHUlJh<1bh|j(ex6WMQqmPZ4eT6V#p=i7FUXrniXnQf zQM|+1Rzmz5=d58EGQyn7k_~Nnne5Y}RbObee2(Jj?LgX_moeVsdDwkr5zG1F7iW2M zdAeGux8NVDpQVWsHR1$8@_%`uFEp=|?F~AQ39KQW{o9JzyXljR>x9DFNY@kr+x$mDeKDkB!^3;E=hmZx&EYs5D zVbD-px!_dU?P7v@NQ!S9DZdRgRAnZMS|25abM2??sj+P3$BI?@3oalsrvhtqF6|0< za+fy|XN}HxqO6QM!AyDG&Fj5QVfz1^w^PW)T*52mp4>lgCzV|p(zr*LRM20K<4TjJiHvhE`jzg6n0IkLJ zK>?Sd(pvw`aW-lmvOsoo0Xz}+ra@6S`us+F-Y9~MMf6r6NDldhg<+V91=j`Yl*ZU! zY2LFsIM7gDO#ic?+*lg1Js=m9O&e`t%Psr)1W3}#h+m#ZLpL2k`t6&PsSQ7`{o0cD zph_=_Ye>wLxIqnIi01y&~F4#h2EP@|Nda{qF-v?awPxWWEw#HGYY+gG+jVN1U4^d9!@g_clBRcXx#CH=;uVj-1WjzidNVcq!KnfT`V5VF5hU0KvbK+4$-n|3ZR(TaY4#;AY@Xb7Y&*nj&0mbpyxS9&mp(ytA^z? zu`F}&8~0!kltk|yVXHYGQ+<8fmIC~TWGGc2cu}z`gt@scGk7@KFJ3vT=x2*f47a0s zp#Cq(FltLOl>54Qsyxaq+SLe_BSL3IiwC$Ni3seFTqzycjq1kxBfA$fgLgq4X3N) zwB!DB>uOzDkg?%Cd0DK^a_+6v<(s=jjE{!%J>%bhtT8!CdjDs;ZaR1Pj|mf|$|wFz zSjF_|5g{VFSZH5UZrC6~; zUT|<QxWIkfX+zQ?&$nT)8Ri>xL7dUUq5A+ zHRDw+At-d|%(b2J16f#|&GUiuoqqCgT$x|h*lpNs8zsP`fOBB4@-Uw?KZ|PXJf91@ zUy~FBIZJc+G>g*Bo!bvd2nD~hp1K&xVUYgSh+w+=*V0eHD>logOx>iK%rbQt~zxV!wy+@bsVZ`D0NJ76+^0ef9ANii4e$TcUgIyo>5Q9!aZe5i-tgb5sbV zNYEc}z%{GkK+o(OAKufkX;-{mpPyGjp->IDmoE|4R+CmnMx<;uIkNE|k_*JxW zQ6qhQh_9<_nsZg&@bK_!v{WLPCP*Qxf{;BWH#IdiyQ%T!LsO}$H}N0NDYtyD=7E_H z@7v8roY7Z;Y%Y%9CIKnE0T=i;7}`2u(`5ROxH2=)yL|^#J4W!dbTmsglcc)74knMq zgWqyH3n0Bw`(Tg736^#Dj2Im)vp8Br7pbN*`&@dCkEla$+s?O`Ch&1WSf3%#2q+4q zI=DhfWFoFX>*M2ds^^G+SiYpxK`APVQ=&8OrxY>8NL*_Uj^c?_ACYC>+}3v>^-6x8 zHv7hNeQ+-k;~CFuz|pag{SmGr#)@5P9s`rK-?O}zV&EG(-swaSw=zV;i=C?!a74g( z&nD<6l)IJ#beIo-c~3PU0_OK+$%aumrbVbFNt0g_uP`bT2QnC<@J6F(}m(5`Xl(o$cUFl2AwQ!pmm7Wr$Na zk!=oL^Ym2r&SVxSP+XS1}9hN;cz11^|)iV zru9P`>B}%bCMk_peE0qLeQR$5U*v=cC@Ft8-QNp%$!6&pw>ITcDFqQPBA^zInNo8<-;%PQtyl)v}*O*H=+8U3Gl@4QA~9 zYq8)_O+BNP8yxX1&AmW1BW>iOsSYM3eb%@0Ev%x#aiq@o=fcx*gSe0IgKzF>s3rc9 z5zAfq0a;sJ)iy!+_keTeu@UMfkx4aRf{EC%C*YCN@!MQ`{Nvq6)_OKM|85XQJMu*Q zThX!74bJF<@GHEcoQk)Hi?UXOp0>ZZB4m`cYIB^Qw%cWN# zzCN3=cln)8XNct_oo0F7c=?^gPTD%-CN}7?R%r@&#AjS3sdrkq zb{=F_zBh%jy+kAYNs@;5YC(GjfKyg_QtXVghesxeu8k2I8cfPc@ugr_gYGakXkng- zeb@ytp5bn-2lS@f*EJvnG@+N4K34qH%bs3qG0CoIp&}NAOh9n05)v&(9-Fcljr=Tm zV*x7Lb_@jqDIX}^I|>kTaL^zzF>x9U2r8VC*T%zM!+i@23SuPhkMb+qCP%lZSqI0T z6x^*<+T(gY5GZkV?t0t=csFUWi4DM{pZ}rUXHHH|D_|9-xQ`3q#zwZv?Q^=BqW^pe zxqYk<-F&M9_2YkmSM$j$g-}{KWw;O$U?B9wgg@wo*VaL9X=80MH8eC7%yt^7-+3dL zAMd3Nk)8)5whQ$BX(J=`7-v1|U}31&(b1`{uI@sRR|J3vVGB+kjNEtD<6scckL?~e zWOUm29K=KNJQ(0=U{+H?oj)n3v{d*!D=W2{0Elm3sQZ3ma|fd#^-Hw?rNF}h4rduu zgyE5qnVA{evoptAq?O^(pVS4e)>T(C#{}*6_7J|Npnay<6%hn*MFFDZri~caTUl9Y z5cV9rR2d%sfj!+#tD_|q2{YeV2aH6Szc8l}8|s>IL2PNx-eO!|kEohRu_#B&S%xGh z!+vVTN(I8JSbSRn#On9XeVD}HtN;Wu%Vsdt9>OkLQg+thcItX*A>!=glk0@8n+}sB ze*mHGvjNT`1+akhVWp}P2XOgnG>XPoJnl#yrpHU)^(mUiqy&`7M7#D_l z^IUtN(J9HrLZ}2YJ!kWJpmeqQM}hX{L&kCaz8Rw*()ZWzqe2!HHvCCSkl-&I=iM^> z{LPrPR7Z~La2Do~w2+j@0aeZ1vM9Y!mDuoa)!|C+1H~1&z_cW zIhx_gWrAJ!q>g>qiicCj1Uxw?7&?MR&Kme^5Ge~JY&5jDo8a8L$v44CkaO{$tc4oG zitEvZ6SZstKHDyGz$EYKqx9>e1|?B40Z+7;q8H{~dXi)U*reta?mfR0)3|r&H5P|` zDKH$9*de>-And7U6-SnacFRbNV?a}8g8bM*sCH!tz^)RjOpn`74hOs`_q2aSs+#@ z4tFe1%1(4nM)EC?+l28X{n_<)ut&{1ak3Xw4llhzO7^5Y^*o)U6ydbtaO}oNEE1_c zPw8Aw#FP1j)fgCE*q1vqH{{_?X;uS#N~rXt5srYA6$CFpC7y4 z?kQVpI}lv{-trr@l&e-9$zb}u5 zvWHD)Yjk@)H_m44l9838OGb|4kkT$Ag*x8;VWH5Eh-8>v*Jj=-nGH%gbGCn$VD>$E zyO}aIQ`^g&zUfNX-7g-FuHLavGHdCZC7agtUo7m;7!9~L}d^dqOqDhF$_^b>O}j~ z>9iA8vm0J`;kotT8p_t-j3;iMa;uII&AUCEoXizs+VyiSnM}avXfOB|{vfmYQO;Dk zPe7qDE53WbOo)cp7Eh1<1jda zEe?9Mt!V^tV8W^coT5-2na2XS$8QWpbyc>zYXe+nU|=A$SLRhL&*`HZ3lH3a;y{P> zU%m;XVCIJW+9`eHK5)W09E_c;|g89u%qe5wPvy9z+S+{dG) z_5~MW1Qjw6gu=N5G9lxl2iR^tb}>B$5C#1fdy~gkZO4Cpikw^__k1@jXR~{x8*VL#}(RNuM?!5+}COxb{E1~xCO4bVTi5VvK_aEla>{ZXnnu|xz^JA ztM!tyH+(X)tU>T^f5KkJ-R!mlcFfitn749cMcf8RBv z>M&gLM!R6SwGYB<5;YO?2D7-|vvCcyGjHNakMQAecPnMhT+gMX+6|BEF{$5Bl=GJ)XAr*m7L8>Q%knMq3DoKTmP4NotSq96|qcK5m0XCdb;<(YwB{ZrzGo_l5 zmea~%E;))5Q(YAm^)5Tnz*#m#T~S;z+AJhG(O6SmBR#s=U;FDck1aEka5-U7!E*!e zWskh`CZQ`H!zt~34c zzh)(+k;|iKWt;rMIqz=%t(j;SS#5h?rg3!5>a_|DEmBtYH*p~@ey^VB*{Paa1u2%7 zt@t`uLc$9TZQv>TLX`FW#o=;lY?2zSK55@)&6 z{at0tbJ9?r(?C6g=99_x`7ShqVpvb?FrR?#CsC zqLWYiY8UGEerf!AjQnL#^rk>^@@@N#UD4aKB+-oy@=uy0SGXoCu~tu8rtThs(*A4k z#njrG4F`HfdQ!H(u8%bj@*C|&PUo_sGtd-X8%-H6V=ZKmQy9!jvH#2J3xq&IGSeUL zk(4`s?%ZbS{PkMR5BI;lq|0qB`LDHyMn_G!d&J8~JpF!X4^h<4i`is~2_U)5hO9K} zXQ6bKbfep${1_YMxfFq>czd&@jl20=haBLKC3{^85^-eGFxz-aq+Ts1(KSJ?91{HyiO?bU$Fgq9x+64jPJ;M( zr(WVNNFU^))#edc@U=uDi|9eoX)rKc-dU;<5(X+NmAr$U0lo7&3I`lddihE z+MdAvO!2UvdEBbDm{H&z-|Fl;m*`__5#e`gSwMV=pwaUZg=mvP61A?+-L!&HN} zNN=_->)`hu{#&VQ}uBTjt#4(rP9HMOsm&ZpCHzhvcr89;Sj5Vq6g()N>;D7ZTrSbs%zCH*g; zHIU4H$!75f!;RIYbS@cisVaR1IGKC7llaINAF3KE_ggxGOrXaUjoi3rWDVt z6pEybu8l1AT?O(R&A}Yx;uPLVlla6+InJ9m&Juz5c#X!LvRdBUQGEzfd$({Cck8)1ChVOLRYlh;xyeqi!s_iSGsEi)z6sHRJP!$8dE)U_gTnm$>IAQBgJX0w_l1Kz8a}7|0e$E zOS4LohihYaFWpaG@)IK_LLR=tIHyhm7lJ9F8OVOte}gX2upkt$f6`Z%fn~zZgwH(i zxQ<-aQTrY%)2E>|6Z@I}in~{rnmAt$>9foO@x~kDPE!~0T0AuoEj&Culh^A!y;6q+ za*{Et?ME2g0Ew7!Z@k&ovakdM1F9YusFg{p1s9!@sQE@}XG5nFDxwHhjrcgM|64!G z0t*ze4QlnJAa?DfD-hh~bnrn^?o@X;Y+;4g$UNrV_d5c)rn3N|<1BFb@$a%_j0+@y zjJgQR2?{|haz?+gIDkp%mSvHDPFhV=O;w}n*>-vMt1^z75&3r+!=6Q@E)B4ZG7-d) zKS}(PB(LRlKIb|4OSG$}{XJb3aUSpc@s2{mFPvR13|EF~%tck{h-)GNiM%|0x0QGtIc@h-nWoIS!huWwDL zG1)(#qm`+>a7ojxP^{{rdkPr{?}WajF9fQ*|E~D+$d+WMtOu*^Bee_R$T3S~=?&jA zZ|ZiO55HwyP0ja}m6ZkJ*qFdT|GJ)z z4s@m|458C2P-F~;lmMga#uTA$MJE|CKyKgupgg_ZVgRvx#1L(7qcH8X{c6!QD!RXQ zEW$0ryU^ReHFZ(j>%HgCHQGn${&Yzoy};?&{$n8L{ok(wFOEE9H+y)X)zK5|gK?i& zkdhHDcuyu1J2G^PEaMkyX-rWV*>2h(0r##$fDe}G~|ptBzOhT6BT0Z1E38h0Y{{tws3=NRgUA4 z9R6OVqn3|<*SOEmna^TUl=fmjXlAM~Q{Qj21~68VLuz;U79`=vzk3wDRiKj>6c)Zj z)6qdYJ35fn)f*bXNr0F5qv5|ji5yx+ziR3*a8x#ib;`AWtvJ*q3~PL<|EGz;Vnkf< z=2pe#EK9j=bpivcpFQ)&dd$Y>&JRizVlzY}x$L}hWVsbtmj&}FoNCVTKh!b4p5tMKEqDeZ4!xJ2mIx%mw$TkTa*`8 zLO+pCeNLLZw?7Qn7eu&d{;eh5voe)+J<;?k^XYcP533!A##=3jynV`^MoTP4N)e!7 zXMvqAc_Z`Sv%kpopi z{gQEabenWKjAt&zu7)+9($CFWN=fJqtzlG9j%U`NwDGI_Ar9P5R9$FNw@He=g*<0g z>|d`e?kb9}sCg!#4eLf$cE0fJ0Ps}<^dbhTWaA=Q3Zgg)TI7}cz2pw=a$xMGUhHw5 zI3@U1H|OVtKoohvqI$X1x0XxU$n6pj1J{h}&1*hQ5hK@M*<3rS3?xVx+ou}Ifmm0( z5^B3UgqZH#b5+dnCSzQodVjR0wpz9kq+6uXE z*xaayxvGs1om2BI6Tr-QoFI!`iCQmrm6g?L8Yp#!AySI=F*wuKl|(Z8#RXHa`B5LLrcVDEM?RO#~fU;+& z+VrQ3LG|Z%3JWBF|9>2fjN)yhe#s-fGADLF4GB=G?nO>gW)M99!tg(~jB!E&#t?9i znn37Y`l*GIIrGQ6K-pTZygi_k5!6_HXj`fVlg_Kaa~JS;@duGzf3awq`a9r{DVAux z8FKq$TeW(2@X9|50(-P8BJ;dBc0Zo=Cghl61l34%a=k{%N{QevzP-!qi#pwVWgvNa zCtBCa(?BniaR}=JNUNrsQ_JJs&tMtO(uvYJkTZ$Qm5TFNZ#0)+QYml?amxna)u;^IkdK5$P2>BNW01 znwSXCTEuOvi&m;>WH8x87vpnqxGj&HzEfc5%X(jf4^-Z&A^gS|vf=r;!n6lFuZ}AI zJ9!Xm@n1VN4-L@%Ifd0t+Q4-ts1(N!q(Kz4!i?nG?|*Uk(>=Ogj2#9oWO2swTh+2_ zUVc;$Kh@*!4A;~$?APLSX@_j1WsI(R?~($2%O@HbD#kL@gg z`|r!zPmQ1S4`p#f<+O%#W%!(i)>6t&=jghpoBz}6KXV|PbiuWEMKM1m4XUDRpKI*p zsRFF;tt0u|bs-CO4(M$?-!-0x7Q$mPdtZk`Pu)Sja!#Jq_0cX^Wg7eAQU#s*_7=&L zBkdMAa?5JYP`g-q2q7*}oId+d$lGsu!)tG1UsV?})l?!okv9^AQy!^g;6LUJ0`cU9 zt5>94aq=zL8!lXPF4Rc=9=n-}>sUzP)7{6bHxP1Gm=pG9Ci~|zg~qc?^t^8+{0r>Q zF0Aew6bN}bzpRkl;lNBw{K0*wb;E#J3qKR?mla?pOU1z*-ktB~fKkL|glv z*aqizz(MPjEOdY@l9<@4oa9W(3zeFAArHfbq0n=0i5;w%_>-Q(B;baK&jG zR{_X=ry;6Lq|b#i!eysj*|_P4f6K}PUtodi9jdyC+cGDR9WMZxjcT-U*-T1s>WHrj_bbJaW= zcA`!Qs&`w9ChjySeV3l!cyN);SNZau5Js0&jcZCP>*rr4$BI|wJ@opLp0hKo0{RaJ zEZSeUHxE{ua_z|(;>B)uaKMmCn9Cvx?XS-6@<8nMBU1_@_2J@w=3oN z@RVk#GX}{dw|zGCycc)WhpRxLN9N`f&p)Xx2cLgnz@t?@+b?54UhL%RjHjx061RpL z+^|ops!uC^qGUBR(=9_kJ-yA@b-*MYtH9Z>r)=!j8%ev|91iA0(KQhiMohN9X2G8t z)bhmr5^HZirE0V2(wNNa#*;g`?Ln?#y5*re?cc&hZLjCQzDm$l6OJ;I=^~HT!?Bmb zt{n|gyPRDyQw9VnhfM;}-`6+RWzYk7l2l#&U}9Bx`~$T)e@ajra(1yDDhprw3g|!! zyj`@=j~eor_qu2l6HSB{i8Jw)%o$I$-cw8t<;>1|NVt)#6(O980FoA(?o}(`V(YUf z4;7p(0)wgGl33g~8ZjVVJZk?SVHTg%Z}w zH-`Kx2SAKQI-*^VialI~i$$a~?dj-!$AN~jRQ*v9@Mykrtz>mciB}<;Bx(yLi2{&y zIZ?Fkz<|lu;Pp7EIyaYA9{o6Prn$I*OqIf8u0rvzf9Bd~w-`lk%KpgDO+h-q=)5wVbEkAtLE*j@m6>y7G zCX(p4B!F~127h1=O3T7YlSf@2PAbWTJskuYnY-mG8+t!3j{8(KO<0lF&O~Nu>)m^8 zPbJAl%Y#&Z@TJB3mqZdk1YE4E{_M<;=6yv!qtcLpB&Y%CHnX!#)Fma|(w18-pN(x_ zNC*ws+gHrc=}V5xqJgZJl7DLJSS;xNFLb!NQHiH={`230gG-_7qh6^ow?;zWW+mp@ zxIu;S`sCueqNLIDj-=4^*FKVV$u0fZ178Y649BGM+f)4%hgB#w1l9&&XTwUGlcQ1kL$ffq^lu}INs_{HcNSn>Z zX2dRV^WHjQZC_+Ir>E{O{A$CS(Cblx z-gzm@;A+>BZY36&&z&bA4!vo}Y(s7?@;7RAiwIpZp1D#*m3~yU*rKfFDRveSq%!6n zKhio=%+P#vRJpPlfz3C<3`8F9gv^*Dl2GayhBm{IgtP_m`}Q$%JC8l&d(qyrEO{Sn zv9}u8@*(Z|{1*PxNA782xMLPWg5}m8`>GD?5pCCePvXJL%`{8dP`Ov8q~ZYv&j<+f>_=1{XW_tGX?C%t+gw=~Em5ys z>R?O*obr>^iRLp_cO1K;Y!sZW-j(L8(>ye>^`c@tO5KuZtB@KFm>}6dry3=d8Qs4$ z8O*SAFu6Ckm4x6gd7fk-CZrxf(E2HYX4hG66hL)xR3b{`)jJjwbxcgE>c@y(h92-7 z6hyn;`#pAd*QGN|Ci`jDC3|RXZTj!!yTUTJeNam z0P(_4q9L%V>%ky?BUzT5*F$3j(DG4VQR=s|&*?UFP026J44u6uMsJl1!5W#5$*xRJ ze~tdE7rrMUbKoJ`IF4!9QkG6h!p`%r(MJE6&QG( zk6w(yW--9acN3%@r<#s3Yl+%2aL!P)0VmAPzotHyzt;Y}v{M480IOkN8d3iGI=nO( z+<6cK-u}MP72qqd@UQ*++M;h}@rteG`^J#>D#b}i|r<*h$UnL5}Frp85 z_-;1q8C0$M&{)S_Qp^9*>@zllzOZV+`+c2cF16M5yE#>MT|-p)URT}z3W(eo3W2KfIPSYS!1@3;&B+7hTdTY_ecn!l$CC01NR8!IbUHlpd+J^KXV7}Y;%*-?0%%~V4A~*Su)|les>@qhPgh@^^4d1q?2F|$azin^l0rVaMK8N+ z+PQNd>s-7)I~c*?^MjlYp7nu$z;J#O;%oL(8NOZ^TzELf`+Bj!FPmOl?$P!&3-G}H zFWS2xFDmMNaW`VP@dea+p*opkp*!qO><>XwS5QZ-Ip#(B&bqyjA|7B{OEFNNX(p>8 zeYYbUyii>1#Lm-PZ+rj$8)?!7_daD}jo@KDv6)v%B6|pv1&+s{DmcV#Lt$)oRrz)+ z_#N(C^Z-=9Ekv0_jVgd00n_e<9?+4I3#&-}gEtDe6-4N#quhB7)Pug~<98Bf5YKzS z87l;-m@?#)-pZzQHt7~jNjVNPwVa=qg4z8$T-(2$z>?XT8Y!^&936s=3_zn1l)Hm`-<)>8_szng?gzJj3D zZN^ZhvQ9f6Tx~&u`q~`|-5?t)pwV3+T?On-F-xwlY~v1hjgvtfL9}=C6aJ?zvdUe% zbc-C?;Io1Mb`w8A4QvrQFh=jb9&;38G0a_5u<*Tio|1~E|13l%!zX1tt-O)D=y2`m z^G~;A*J7wO6G^q32rVa2R5z-Rx13GZ-GFrJOVTed$(m&_12DRkkB^Zo2Ll6_8i32c zwCHkapXwkT+q8)~@U9+quLh3)P5`it+~$p(jeHNSiaTo}GaQR}1Ai3jK)DmthTv#k zC5{zvA?>(J{rIb+7uwcseATD{z$Qr=+2&%QMEafG7O3LESr!3RY(r1U7BIQ}RB{IF zv8qeJ%uXTm`BQB*45KEWe;HKK7T8YvvEvRxyv67CR7%;}oMBKU1wTPJ6%P1Gyc&nLGf zLKW2kD=Z#|wLHyrVSJnXE3RF_%c&@LwSazSn}`4c0C6W2Cd3)hXW$@JerUF{E~=vG zVw1jwCzV@+yjF{~)-)cN8g;XaG7d!I#1)R|EGdhy;gAV{>S?pJe;Fyzv{Op?MdbdY zq4wc*IkJr)MSH=6JsADlr=Q`h>6~tpF};n6ZHk|EP1d`#q3aV91y=l1(do=)w;RL$ z7D0{gf2c+|egB&0iyQs>@f0X6@DddAEhSUW-k;e-z4@9}X_=f}sP}^>5An=@JfYse z4`zwU(!RE3(G#Eve2YNlB;WFzxXX_lnL#UP<N{Cp+g^JJQh)P*C5i@39cTvd89n);f;w}kML#JgA-r~bkOYYSc6O=Tzc|IS zB(|vKAd$vZSTKJkLdfXE?wA%21+;A>P0b6(Z2@O=y46^b4lMsFhwYmJu|J{ow?F_j z7xnvJJrSf!wts*?>IY8#$84tmKl&>cqhQONYWY*e-*{~)BUq3GEq)qJD{^0Yw(0BV zT&&F}n#oDdxkHQW1g6hI?RVxst18D+E*LMm)LQl6cboN=9eDKuqaI|1?JSVq(t+JyqhNF4|18pNdM{HDDUF<~B#-l>^=tUCb9f}xHpqgux)UYixXa4HE1 z>SLB$eozmy<&?$9=iib@c{6na#2CT`4JwuK%)hJM|H1MZ+hudb-iQesqv!#+Ry;Ld zozMN3Ifyr}PWez(yJci$djOBIy0NIJ)x;7vhdK(qg)d?q?xq%!PdrRo)sD8UxAOdu!!=1m|f&LQ*!7)i1%RW?cSvN`O{b#-Jnn%t(glD>vsc zT4ix6N}~tO-0#a)CrtpsU-mL?c4gntg?ZdMwl&6_7$_5v0HzR)nS11kxaRV5*{g&i z0q&Ol!d=>mUZ5g6&E#ZO@in1Fsxq}N^>Y=L)6AzvbXd#GE+%o3z*IrD^EzH=B6&Pn zwDu|cy49>C@U7ucd6=nXLv{R zuE7h;4cup&Ge0jm`@YU~agU(UEuP{?J3VpAKrm+ST?dYAg#bgx-5pl+Zhb9_gLX0)asCZq7L#&+|Orx88p*i^W=D zXYYNtnYregx#vFXwRRA^4&#bU<_%dU)ObejJ7>_hSCwhzBh{tfMUA+ukFT@Aeqov~ z4f3aNl$*3-#HGy#{WOT-N(=46Vtb-Lxx~jA2LAx=J=_XiVPkNLsy>$@EeA6pjf zi>Ts?J?RCF`sW0P{!t@4mxKcDqqN%{A`c1uO2n}_C%0DW_guFoR(kXf#gcEP2q%r? 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 Date: Wed, 28 Jan 2026 20:40:39 +0300 Subject: [PATCH 04/20] finalizing work with main lab task --- app_python/README.md | 96 ++++++++++++++++++++++++++++++++-------- app_python/docs/LAB01.md | 8 ++-- 2 files changed, 82 insertions(+), 22 deletions(-) diff --git a/app_python/README.md b/app_python/README.md index 012f93598c..cde39826a7 100644 --- a/app_python/README.md +++ b/app_python/README.md @@ -1,30 +1,90 @@ -# DevOps Info Service (Python) - -A small web service for the DevOps course that reports information about itself and its runtime environment. -It exposes system details, uptime, request metadata, and a simple health endpoint for monitoring/probes. +# DevOps Info Service ## Overview +DevOps Info Service is a production-ready starter web service for the DevOps course. +It reports service metadata, runtime details, and basic system information. -This service provides: -- Service metadata (name/version/framework) -- System information (hostname, OS/platform, architecture, CPU count, Python version) -- Runtime info (uptime, current UTC timestamp) -- Request info (client IP, user agent, HTTP method, path) -- Health check endpoint (`/health`) - -Framework: **Flask** (Python 3.11+) +The service exposes two endpoints: +- `GET /` — service + system + runtime + request information +- `GET /health` — health check endpoint (used later for Kubernetes probes) ## Prerequisites - - Python **3.11+** -- pip / virtualenv +- `pip` +- (Recommended) Virtual environment (`venv`) +- **Windows:** Python Launcher `py` is recommended ## Installation -```bash -cd app_python - +``` python -m venv venv source venv/bin/activate - pip install -r requirements.txt +``` + + + +## Running the Application + +### Default run (port 5000) +> If `PORT` is not set, the application runs on **0.0.0.0:5000**. +```bash +python app.py +``` +I will also test IP *192.168.31.32:5000* +### Custom configuration + +**Linux/Mac:** +```bash +HOST=127.0.0.1 PORT=8080 DEBUG=True python app.py +``` + +**Windows (PowerShell):** +```powershell +$env:HOST="127.0.0.1" +$env:PORT="8080" +$env:DEBUG="True" +python app.py +``` + +**Windows (CMD):** +```bat +set HOST=127.0.0.1 +set PORT=8080 +set DEBUG=True +python app.py +``` + +## API Endpoints + +### `GET /` +Returns service metadata, system information, runtime details, request info, and a list of available endpoints. + +Example: +```bash +curl http://127.0.0.1:5000/ +``` + +### `GET /health` +Returns a minimal health response for monitoring. + +Example (includes HTTP status): +```bash +curl -i http://127.0.0.1:5000/health +``` + +## Testing / Pretty Output + +### Pretty-printed JSON +**Windows PowerShell tip:** use `curl.exe`. +```bash +curl -s http://127.0.0.1:5000/ | python -m json.tool +``` + +## Configuration + +| Variable | Default | Description | +|----------|---------|-------------| +| HOST | 0.0.0.0 | Bind address | +| PORT | 5000 | HTTP port | +| DEBUG | False | Flask debug mode | \ No newline at end of file diff --git a/app_python/docs/LAB01.md b/app_python/docs/LAB01.md index 5b0512e632..1bce3a2986 100644 --- a/app_python/docs/LAB01.md +++ b/app_python/docs/LAB01.md @@ -6,7 +6,7 @@ I chose **Flask** because: - It is lightweight and easy to set up for a small service with 2 endpoints. -- Minimal boilerplate: perfect for a “foundation” lab where the focus is DevOps workflow (Docker/CI/K8s). +- Minimal boilerplate: perfect for a “foundation” lab where the focus is DevOps workflow. - Great learning curve and widely used in industry for microservices. ### Comparison Table @@ -21,9 +21,9 @@ I chose **Flask** because: ### 2.1 Clean Code Organization (PEP 8, structure) -- Imports grouped (stdlib first, third-party next). +- Imports grouped. - Constants for configuration and service metadata. -- Helper functions: `get_system_info()`, `get_uptime()`, `get_client_ip()`, `iso_utc_now_z()`. + **Example (helpers):** ```python @@ -48,7 +48,7 @@ DEBUG = os.getenv("DEBUG", "False").lower() == "true" ``` Why it matters: -- Same artifact runs in different environments (local / CI / Docker / K8s) without code changes. +- Same artifact runs in different environments without code changes. ### 2.3 Error Handling From a5751cbcfcfcca859e9af87da54d4e55b4e44f34 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 4 Feb 2026 22:58:34 +0300 Subject: [PATCH 05/20] feat: add docker usage and lab report for lab2 --- app_python/.dockerignore | 23 +++++ app_python/Dockerfile | 31 +++++++ app_python/README.md | 52 ++++++++++- app_python/docs/LAB02.md | 188 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 293 insertions(+), 1 deletion(-) create mode 100644 app_python/.dockerignore create mode 100644 app_python/Dockerfile create mode 100644 app_python/docs/LAB02.md diff --git a/app_python/.dockerignore b/app_python/.dockerignore new file mode 100644 index 0000000000..a253025893 --- /dev/null +++ b/app_python/.dockerignore @@ -0,0 +1,23 @@ +# Python bytecode / cache +__pycache__/ +*.pyc +*.pyo +*.pyd + +# Virtualenvs +.venv/ +venv/ + +# VCS +.git/ +.gitignore + +# IDEs / OS junk +.vscode/ +.idea/ +.DS_Store + +# Docs & tests are not needed at runtime +docs/ +tests/ +README.md diff --git a/app_python/Dockerfile b/app_python/Dockerfile new file mode 100644 index 0000000000..d8c40287b9 --- /dev/null +++ b/app_python/Dockerfile @@ -0,0 +1,31 @@ +# syntax=docker/dockerfile:1 + +# Production-oriented image for a small Flask app. +# Pin a specific Python version for reproducible builds. +FROM python:3.13.1-slim + +# Python runtime defaults: no .pyc files, unbuffered logs (better for containers) +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +WORKDIR /app + +# Create a dedicated non-root user (mandatory best practice). +RUN addgroup --system app \ + && adduser --system --ingroup app --no-create-home app + +# Install dependencies first to leverage Docker layer caching. +COPY requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt + +# Copy only the application code needed at runtime. +COPY app.py ./ + +# Drop privileges +USER app + +# Document the port (Flask defaults to 5000 in this repo) +EXPOSE 5000 + +# Start the application +CMD ["python", "app.py"] diff --git a/app_python/README.md b/app_python/README.md index cde39826a7..e435234a1b 100644 --- a/app_python/README.md +++ b/app_python/README.md @@ -87,4 +87,54 @@ curl -s http://127.0.0.1:5000/ | python -m json.tool |----------|---------|-------------| | HOST | 0.0.0.0 | Bind address | | PORT | 5000 | HTTP port | -| DEBUG | False | Flask debug mode | \ No newline at end of file +| DEBUG | False | Flask debug mode | + +---- + +## Run locally + +```bash +pip install -r requirements.txt +python app.py +``` + +By default the service listens on `0.0.0.0:5000`. + +- `GET /` — service + system + runtime + request info +- `GET /health` — health check + +## Docker + +> Patterns below use placeholders like `` and ``. + +### Build (local) + +```bash +docker build -t : . +``` + +### Run + +```bash +docker run --rm -p 5000:5000 : +``` + +(Optionally override env vars) + +```bash +docker run --rm -p 5000:5000 -e PORT=5000 -e DEBUG=false : +``` + +### Pull from Docker Hub + +```bash +docker pull /: +docker run --rm -p 5000:5000 /: +``` + +### Quick test + +```bash +curl http://localhost:5000/health +curl http://localhost:5000/ +``` \ No newline at end of file diff --git a/app_python/docs/LAB02.md b/app_python/docs/LAB02.md new file mode 100644 index 0000000000..cf73086f00 --- /dev/null +++ b/app_python/docs/LAB02.md @@ -0,0 +1,188 @@ +# LAB02 — Docker Containerization + +This document describes how the Flask app from Lab 1 was containerized using Docker best practices. + +--- + +## 1) Docker Best Practices Applied + +### 1.1 Pinned base image version +Using a specific tag makes builds reproducible and avoids unexpected changes when a floating tag updates. + +```dockerfile +FROM python:3.13.1-slim +``` + +### 1.2 Non-root user +Containers should not run as root to reduce the blast radius if the process is compromised. + +```dockerfile +RUN addgroup --system app \ + && adduser --system --ingroup app --no-create-home app +USER app +``` + +### 1.3 Layer caching (install deps before copying source) +Copy `requirements.txt` first and install dependencies. When you change only `app.py`, Docker can reuse the cached dependency layer. + +```dockerfile +COPY requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt +COPY app.py ./ +``` + +### 1.4 Minimal copy & build context (.dockerignore) +`.dockerignore` keeps your build context small and avoids shipping dev artifacts, docs, and VCS metadata. + +Examples excluded: +- `.git/` +- `__pycache__/` +- `docs/`, `tests/` + +--- + +## 2) Image Information & Decisions + +### 2.1 Base image choice +- **Chosen:** `python:3.13.1-slim` +- **Why:** small Debian-based runtime, good compatibility for Python wheels, smaller than full images. + +### 2.2 Image size +Record final size: + +```bash +docker images | grep +``` + +**Result:** +```bash +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +9b452f420205 dorley174/devops-info-service:lab02 "python app.py" 28 seconds ago Up 28 seconds 0.0.0.0:8080->5000/tcp, [::]:8080->5000/tcp keen_cannon +``` + +### 2.3 Layer structure +Explain key layers: +1. Base runtime layer (Python slim) +2. User creation (security) +3. Dependencies install (cached) +4. App code copy + +### 2.4 Optimizations +- `pip install --no-cache-dir` to avoid keeping pip cache in the image +- `.dockerignore` to reduce build context and speed up builds + +--- + +## 3) Build & Run Process + +### 3.1 Build output +```bash +docker build -t devops-info-service:lab02 . +``` + +**Output:** +```text +[+] Building 141.0s (13/13) FINISHED docker:desktop-linux + => [internal] load build definition from Dockerfile 0.1s + => => transferring dockerfile: 860B 0.0s + => resolve image config for docker-image://docker.io/docker/dockerfile:1 4.3s + => docker-image://docker.io/docker/dockerfile:1@sha256:b6afd42430b15f2d2a4c5a02b919e98a525b785b1aaff16747d2f623364e39b6 48.9s + => => resolve docker.io/docker/dockerfile:1@sha256:b6afd42430b15f2d2a4c5a02b919e98a525b785b1aaff16747d2f623364e39b6 0.0s + => => sha256:77246a01651da592b7bae79e0e20ed3b4f2e4c00a1b54b7c921c91ae3fa9ef07 13.57MB / 13.57MB 48.7s + => => extracting sha256:77246a01651da592b7bae79e0e20ed3b4f2e4c00a1b54b7c921c91ae3fa9ef07 0.1s + => [internal] load metadata for docker.io/library/python:3.13.1-slim 2.4s + => [internal] load .dockerignore 0.0s + => => transferring context: 260B 0.0s + => [1/6] FROM docker.io/library/python:3.13.1-slim@sha256:031ebf3cde9f3719d2db385233bcb18df5162038e9cda20e64e08f49f4b47a 73.5s + => => resolve docker.io/library/python:3.13.1-slim@sha256:031ebf3cde9f3719d2db385233bcb18df5162038e9cda20e64e08f49f4b47a2 0.0s + => => sha256:e18acc4841d040a12b49e06abbb2c9096bb559fa8d853543ff7ddc2e410531ff 249B / 249B 0.5s + => => sha256:a9910b4c71585ea2d9ca0acc308ab5ed7cc807819405bb23b5de7538142e4f36 12.58MB / 12.58MB 29.6s + => => sha256:ad24708d5ee00d90d30e51e59ffce29e5764775c877a74798e85bcc3176cde76 3.51MB / 3.51MB 15.2s + => => sha256:c29f5b76f736a8b555fd191c48d6581bb918bcd605a7cbcc76205dd6acff3260 28.21MB / 28.21MB 69.4s + => => extracting sha256:c29f5b76f736a8b555fd191c48d6581bb918bcd605a7cbcc76205dd6acff3260 0.7s + => => extracting sha256:ad24708d5ee00d90d30e51e59ffce29e5764775c877a74798e85bcc3176cde76 0.0s + => => extracting sha256:a9910b4c71585ea2d9ca0acc308ab5ed7cc807819405bb23b5de7538142e4f36 3.2s + => => extracting sha256:e18acc4841d040a12b49e06abbb2c9096bb559fa8d853543ff7ddc2e410531ff 0.0s + => [internal] load build context 0.1s + => => transferring context: 6.51kB 0.0s + => [2/6] WORKDIR /app 0.3s + => [3/6] RUN addgroup --system app && adduser --system --ingroup app --no-create-home app 0.4s + => [4/6] COPY requirements.txt ./ 0.0s + => [5/6] RUN pip install --no-cache-dir -r requirements.txt 9.2s + => [6/6] COPY app.py ./ 0.0s + => exporting to image 0.6s + => => exporting layers 0.4s + => => exporting manifest sha256:409e654da6806d719714cca291fe908afa3a7a1f78a444630451c3b6aea4fd52 0.0s + => => exporting config sha256:09310faf41ce8b42a107e1ec5a0e880b29a6aa7664b862574ecfa84c92183f4a 0.0s + => => exporting attestation manifest sha256:fccefc3ee604d7bca7e605be0deb0341e96a260a53534af34245a6e2013a34ec 0.0s + +View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/vg7v11zlyt4npch7bw4olkcat +``` + +### 3.2 Run output +```bash +docker run --rm -p 8080:5000 --name devops-info devops-info-service:lab02 +``` + +**Output:** +```text + * Serving Flask app 'app' + * Debug mode: off +2026-02-04 19:29:00,312 - devops-info-service - INFO - Starting devops-info-service v1.0.0 (Flask) +2026-02-04 19:29:00,312 - devops-info-service - INFO - Config: HOST=0.0.0.0 PORT=5000 DEBUG=False +2026-02-04 19:29:00,322 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://172.17.0.2:5000 +2026-02-04 19:29:00,322 - werkzeug - INFO - Press CTRL+C to quit +2026-02-04 19:30:45,863 - werkzeug - INFO - 172.17.0.1 - - [04/Feb/2026 19:30:45] "GET / HTTP/1.1" 200 - +2026-02-04 19:30:59,367 - werkzeug - INFO - 172.17.0.1 - - [04/Feb/2026 19:30:59] "GET /health HTTP/1.1" 200 - +``` + +### 3.3 Endpoint tests +```bash +curl http://localhost:5000/health +curl http://localhost:5000/ +``` + +**Output:** +```text +https://hub.docker.com/r/dorley174/devops-info-service +``` + +### 3.4 Docker Hub +- **Repo URL:** `https://hub.docker.com/r/dorley174/devops-info-service` +- **Tags pushed:** `latest, lab02` + +--- + +## 4) Technical Analysis + +### Why does this Dockerfile work? +- The app listens on `0.0.0.0` and port `5000` by default, so it is reachable from outside the container when `-p 5000:5000` is used. +- Dependencies are installed before source code to maximize cache hits. + +### What happens if you change layer order? +If you copy `app.py` before installing dependencies, any change in source invalidates the cache and forces dependency reinstall, making rebuilds slower. + +### Security considerations implemented +- Non-root user with `USER app` +- Minimal base image (`slim`) +- No extra tools installed + +### How does `.dockerignore` help? +- Smaller build context → faster builds +- Prevents shipping irrelevant files into the image (security + size) + +--- + +## 5) Challenges & Solutions + +Document what happened on your machine. Typical examples: +- **Port not reachable:** fixed by ensuring the app binds to `0.0.0.0` (already default in `app.py`) and using `-p host:container`. +- **Permission issues:** ensured runtime user exists and app files are readable by it. + +What you learned: +- How Docker layer caching changes rebuild speed +- Why non-root matters +- How `.dockerignore` affects build context and image size From e9a768650950d2b0cfe441e371480df74e13090c Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 11 Feb 2026 20:55:19 +0300 Subject: [PATCH 06/20] feat: added main lab3 task and added gh ecrets --- .github/workflows/python-ci.yml | 108 +++++++++++++++++++++++++++++ app_python/requirements-dev.txt | 3 + app_python/tests/conftest.py | 12 ++++ app_python/tests/test_endpoints.py | 81 ++++++++++++++++++++++ 4 files changed, 204 insertions(+) create mode 100644 .github/workflows/python-ci.yml create mode 100644 app_python/requirements-dev.txt create mode 100644 app_python/tests/conftest.py create mode 100644 app_python/tests/test_endpoints.py diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml new file mode 100644 index 0000000000..0ad8c5e5ef --- /dev/null +++ b/.github/workflows/python-ci.yml @@ -0,0 +1,108 @@ +name: python-ci + +on: + push: + branches: ["master"] + paths: + - "app_python/**" + - ".github/workflows/python-ci.yml" + pull_request: + branches: ["master"] + paths: + - "app_python/**" + - ".github/workflows/python-ci.yml" + +concurrency: + group: python-ci-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +env: + IMAGE_NAME: devops-info-service + APP_DIR: app_python + +jobs: + test-and-lint: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + cache: "pip" + cache-dependency-path: | + app_python/requirements.txt + app_python/requirements-dev.txt + + - name: Install deps + run: | + python -m pip install --upgrade pip + pip install -r app_python/requirements.txt + pip install -r app_python/requirements-dev.txt + + - name: Lint (ruff) + run: | + ruff check app_python + + - name: Tests (pytest) + coverage + run: | + pytest -q app_python/tests --cov=app_python --cov-report=term-missing --cov-report=xml + + - name: Upload coverage artifact + uses: actions/upload-artifact@v4 + with: + name: coverage-xml + path: coverage.xml + + - name: Snyk scan (dependencies) + uses: snyk/actions/python-3@master + continue-on-error: true + env: + SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} + with: + args: --severity-threshold=high --file=app_python/requirements.txt + + docker-build-and-push: + runs-on: ubuntu-latest + needs: test-and-lint + if: github.event_name == 'push' && github.ref == 'refs/heads/master' + permissions: + contents: read + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Prepare CalVer tags + run: | + echo "CALVER_MONTH=$(date -u +'%Y.%m')" >> $GITHUB_ENV + echo "CALVER_BUILD=$(date -u +'%Y.%m').${{ github.run_number }}" >> $GITHUB_ENV + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: ${{ env.APP_DIR }} + file: ${{ env.APP_DIR }}/Dockerfile + push: true + tags: | + ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}:${{ env.CALVER_BUILD }} + ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}:${{ env.CALVER_MONTH }} + ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}:latest + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/app_python/requirements-dev.txt b/app_python/requirements-dev.txt new file mode 100644 index 0000000000..3365ea3398 --- /dev/null +++ b/app_python/requirements-dev.txt @@ -0,0 +1,3 @@ +pytest==8.3.4 +pytest-cov==6.0.0 +ruff==0.9.7 \ No newline at end of file diff --git a/app_python/tests/conftest.py b/app_python/tests/conftest.py new file mode 100644 index 0000000000..46c6e18e80 --- /dev/null +++ b/app_python/tests/conftest.py @@ -0,0 +1,12 @@ +import pytest + +from app_python.app import app as flask_app + + +@pytest.fixture() +def client(): + flask_app.config.update( + TESTING=True, + ) + with flask_app.test_client() as client: + yield client diff --git a/app_python/tests/test_endpoints.py b/app_python/tests/test_endpoints.py new file mode 100644 index 0000000000..39c24f8927 --- /dev/null +++ b/app_python/tests/test_endpoints.py @@ -0,0 +1,81 @@ +import pytest + +import app_python.app as app_module +from app_python.app import app as flask_app + + +def test_root_ok_structure(client): + resp = client.get("/", headers={"User-Agent": "pytest"}) + assert resp.status_code == 200 + + data = resp.get_json() + assert isinstance(data, dict) + + # Top-level keys + for key in ("service", "system", "runtime", "request", "endpoints"): + assert key in data + + # Service block + service = data["service"] + assert service["name"] == "devops-info-service" + assert "version" in service + assert "framework" in service + + # Runtime block + runtime = data["runtime"] + assert runtime["timezone"] == "UTC" + assert isinstance(runtime["uptime_seconds"], int) + assert runtime["uptime_seconds"] >= 0 + assert isinstance(runtime["current_time"], str) + + # Request block + req = data["request"] + assert req["method"] == "GET" + assert req["path"] == "/" + assert isinstance(req["client_ip"], str) + assert isinstance(req["user_agent"], str) + + # Endpoints list contains expected items + endpoints = data["endpoints"] + assert any(e["path"] == "/" and e["method"] == "GET" for e in endpoints) + assert any(e["path"] == "/health" and e["method"] == "GET" for e in endpoints) + + +def test_health_ok(client): + resp = client.get("/health") + assert resp.status_code == 200 + + data = resp.get_json() + assert data["status"] == "healthy" + assert isinstance(data["timestamp"], str) + assert isinstance(data["uptime_seconds"], int) + assert data["uptime_seconds"] >= 0 + + +def test_404_error_shape(client): + resp = client.get("/does-not-exist") + assert resp.status_code == 404 + + data = resp.get_json() + assert data["error"] == "Not Found" + assert "Endpoint does not exist" in data["message"] + assert isinstance(data["timestamp"], str) + + +def test_500_error_shape(monkeypatch): + # In TESTING mode Flask often propagates exceptions instead of using error handlers, + # so we explicitly disable propagation to assert JSON error handler behavior. + flask_app.config.update(TESTING=False, PROPAGATE_EXCEPTIONS=False) + + def boom(): + raise RuntimeError("boom") + + monkeypatch.setattr(app_module, "get_system_info", boom) + + with flask_app.test_client() as client: + resp = client.get("/") + assert resp.status_code == 500 + data = resp.get_json() + assert data["error"] == "Internal Server Error" + assert "unexpected error" in data["message"].lower() + assert isinstance(data["timestamp"], str) From 6842685f64c557d9c67db737aee6e9a28dab77b6 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 11 Feb 2026 20:56:53 +0300 Subject: [PATCH 07/20] fix: added correct branches to ci work --- .github/workflows/python-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 0ad8c5e5ef..643ea55c48 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -2,7 +2,7 @@ name: python-ci on: push: - branches: ["master"] + branches: ["lab03", "master"] paths: - "app_python/**" - ".github/workflows/python-ci.yml" From aab12d7dd1f782c5887169910875888046f06a0b Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 11 Feb 2026 20:58:27 +0300 Subject: [PATCH 08/20] fix: fixing snyk work --- .github/workflows/python-ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 643ea55c48..8f5d7e67ec 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -60,12 +60,14 @@ jobs: path: coverage.xml - name: Snyk scan (dependencies) - uses: snyk/actions/python-3@master + uses: snyk/actions/python@master continue-on-error: true env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} with: - args: --severity-threshold=high --file=app_python/requirements.txt + command: test + args: --severity-threshold=high --file=requirements.txt + working-directory: app_python docker-build-and-push: runs-on: ubuntu-latest From 56f81695241bf274176eda8cb0ccb04f56cf3ce0 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 11 Feb 2026 20:59:29 +0300 Subject: [PATCH 09/20] fix: fixing snyk work 2 --- .github/workflows/python-ci.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 8f5d7e67ec..689858d271 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -59,15 +59,16 @@ jobs: name: coverage-xml path: coverage.xml + - name: Install Snyk CLI + run: npm install -g snyk + - name: Snyk scan (dependencies) - uses: snyk/actions/python@master continue-on-error: true env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - with: - command: test - args: --severity-threshold=high --file=requirements.txt - working-directory: app_python + run: | + cd app_python + snyk test --severity-threshold=high --file=requirements.txt docker-build-and-push: runs-on: ubuntu-latest From 34ca629a148a3f363ad18260434f94a98cda5bd7 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 11 Feb 2026 21:01:07 +0300 Subject: [PATCH 10/20] fix: removing unused libraries from py files --- app_python/app.py | 2 +- app_python/tests/test_endpoints.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app_python/app.py b/app_python/app.py index f84815d96b..931e2ee42b 100644 --- a/app_python/app.py +++ b/app_python/app.py @@ -14,7 +14,7 @@ import platform import socket from datetime import datetime, timezone -from typing import Any, Dict, Optional +from typing import Any, Dict from flask import Flask, jsonify, request diff --git a/app_python/tests/test_endpoints.py b/app_python/tests/test_endpoints.py index 39c24f8927..d5614bad11 100644 --- a/app_python/tests/test_endpoints.py +++ b/app_python/tests/test_endpoints.py @@ -1,5 +1,3 @@ -import pytest - import app_python.app as app_module from app_python.app import app as flask_app From d715cc028ff5b9dd092d50dc651ab97047727069 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 11 Feb 2026 21:03:17 +0300 Subject: [PATCH 11/20] fix: fixing app_python folder missing in commands --- .github/workflows/python-ci.yml | 6 +++-- app_python/tests/conftest.py | 7 ++--- app_python/tests/test_endpoints.py | 43 ++---------------------------- 3 files changed, 8 insertions(+), 48 deletions(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 689858d271..fd25fecd8b 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -47,11 +47,13 @@ jobs: - name: Lint (ruff) run: | - ruff check app_python + cd app_python + ruff check . - name: Tests (pytest) + coverage run: | - pytest -q app_python/tests --cov=app_python --cov-report=term-missing --cov-report=xml + cd app_python + pytest -q tests --cov=. --cov-report=term-missing --cov-report=xml - name: Upload coverage artifact uses: actions/upload-artifact@v4 diff --git a/app_python/tests/conftest.py b/app_python/tests/conftest.py index 46c6e18e80..29d0202acc 100644 --- a/app_python/tests/conftest.py +++ b/app_python/tests/conftest.py @@ -1,12 +1,9 @@ import pytest - -from app_python.app import app as flask_app +from app import app as flask_app @pytest.fixture() def client(): - flask_app.config.update( - TESTING=True, - ) + flask_app.config.update(TESTING=True) with flask_app.test_client() as client: yield client diff --git a/app_python/tests/test_endpoints.py b/app_python/tests/test_endpoints.py index d5614bad11..8a6e199c1d 100644 --- a/app_python/tests/test_endpoints.py +++ b/app_python/tests/test_endpoints.py @@ -1,68 +1,31 @@ -import app_python.app as app_module -from app_python.app import app as flask_app +import app as app_module +from app import app as flask_app def test_root_ok_structure(client): resp = client.get("/", headers={"User-Agent": "pytest"}) assert resp.status_code == 200 - data = resp.get_json() assert isinstance(data, dict) - - # Top-level keys for key in ("service", "system", "runtime", "request", "endpoints"): assert key in data - # Service block - service = data["service"] - assert service["name"] == "devops-info-service" - assert "version" in service - assert "framework" in service - - # Runtime block - runtime = data["runtime"] - assert runtime["timezone"] == "UTC" - assert isinstance(runtime["uptime_seconds"], int) - assert runtime["uptime_seconds"] >= 0 - assert isinstance(runtime["current_time"], str) - - # Request block - req = data["request"] - assert req["method"] == "GET" - assert req["path"] == "/" - assert isinstance(req["client_ip"], str) - assert isinstance(req["user_agent"], str) - - # Endpoints list contains expected items - endpoints = data["endpoints"] - assert any(e["path"] == "/" and e["method"] == "GET" for e in endpoints) - assert any(e["path"] == "/health" and e["method"] == "GET" for e in endpoints) - def test_health_ok(client): resp = client.get("/health") assert resp.status_code == 200 - data = resp.get_json() assert data["status"] == "healthy" - assert isinstance(data["timestamp"], str) - assert isinstance(data["uptime_seconds"], int) - assert data["uptime_seconds"] >= 0 def test_404_error_shape(client): resp = client.get("/does-not-exist") assert resp.status_code == 404 - data = resp.get_json() assert data["error"] == "Not Found" - assert "Endpoint does not exist" in data["message"] - assert isinstance(data["timestamp"], str) def test_500_error_shape(monkeypatch): - # In TESTING mode Flask often propagates exceptions instead of using error handlers, - # so we explicitly disable propagation to assert JSON error handler behavior. flask_app.config.update(TESTING=False, PROPAGATE_EXCEPTIONS=False) def boom(): @@ -75,5 +38,3 @@ def boom(): assert resp.status_code == 500 data = resp.get_json() assert data["error"] == "Internal Server Error" - assert "unexpected error" in data["message"].lower() - assert isinstance(data["timestamp"], str) From e99bb2c5f1b1d51552e9cc0c520071cf9e4e3d30 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 11 Feb 2026 21:08:05 +0300 Subject: [PATCH 12/20] fix: added coverage.xml and added lab03 branch to docker work --- .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 fd25fecd8b..3b096c2cd4 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -59,7 +59,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: coverage-xml - path: coverage.xml + path: app_python/coverage.xml - name: Install Snyk CLI run: npm install -g snyk @@ -75,7 +75,7 @@ jobs: docker-build-and-push: runs-on: ubuntu-latest needs: test-and-lint - if: github.event_name == 'push' && github.ref == 'refs/heads/master' + if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/lab03') permissions: contents: read steps: From 21ce340cf51ed87541b298e16491ffe5a863bc2f Mon Sep 17 00:00:00 2001 From: dorley174 Date: Wed, 11 Feb 2026 21:23:11 +0300 Subject: [PATCH 13/20] feat: finalize lab work, added lab03.md, added ci badge to readme --- app_python/README.md | 61 +++++++++++++++++++++------------ app_python/docs/LAB03.md | 74 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 21 deletions(-) create mode 100644 app_python/docs/LAB03.md diff --git a/app_python/README.md b/app_python/README.md index e435234a1b..48cffa6caa 100644 --- a/app_python/README.md +++ b/app_python/README.md @@ -1,5 +1,7 @@ # DevOps Info Service +[![python-ci](https://github.com/dorley174/DevOps-Core-Course/actions/workflows/python-ci.yml/badge.svg)](https://github.com/dorley174/DevOps-Core-Course/actions/workflows/python-ci.yml) + ## Overview DevOps Info Service is a production-ready starter web service for the DevOps course. It reports service metadata, runtime details, and basic system information. @@ -16,14 +18,14 @@ The service exposes two endpoints: ## Installation -``` +```bash python -m venv venv -source venv/bin/activate +# Windows: .\venv\Scripts\activate +# Linux/macOS: source venv/bin/activate + pip install -r requirements.txt ``` - - ## Running the Application ### Default run (port 5000) @@ -31,7 +33,7 @@ pip install -r requirements.txt ```bash python app.py ``` -I will also test IP *192.168.31.32:5000* + ### Custom configuration **Linux/Mac:** @@ -81,31 +83,48 @@ curl -i http://127.0.0.1:5000/health curl -s http://127.0.0.1:5000/ | python -m json.tool ``` -## Configuration +## Testing & Linting (LAB03) -| Variable | Default | Description | -|----------|---------|-------------| -| HOST | 0.0.0.0 | Bind address | -| PORT | 5000 | HTTP port | -| DEBUG | False | Flask debug mode | +> Dev dependencies live in `requirements-dev.txt` (pytest, coverage, ruff). ----- +Install dev deps: +```bash +pip install -r requirements-dev.txt +``` -## Run locally +Run linter: +```bash +ruff check . +``` +Run tests + coverage: ```bash -pip install -r requirements.txt -python app.py +pytest -q tests --cov=. --cov-report=term-missing ``` -By default the service listens on `0.0.0.0:5000`. +## CI/CD Secrets (GitHub Actions) -- `GET /` — service + system + runtime + request info -- `GET /health` — health check +In your GitHub repository: +**Settings → Secrets and variables → Actions → New repository secret** + +Add: +- `DOCKERHUB_USERNAME` — your Docker Hub username +- `DOCKERHUB_TOKEN` — Docker Hub Access Token (Account Settings → Security) +- `SNYK_TOKEN` — Snyk API token (Account settings → API token) + +## Configuration + +| Variable | Default | Description | +|----------|---------|-------------| +| HOST | 0.0.0.0 | Bind address | +| PORT | 5000 | HTTP port | +| DEBUG | False | Flask debug mode | + +--- ## Docker -> Patterns below use placeholders like `` and ``. +> Examples below use placeholders like `` and ``. ### Build (local) @@ -119,7 +138,7 @@ docker build -t : . docker run --rm -p 5000:5000 : ``` -(Optionally override env vars) +(Optional: override env vars) ```bash docker run --rm -p 5000:5000 -e PORT=5000 -e DEBUG=false : @@ -137,4 +156,4 @@ docker run --rm -p 5000:5000 /: ```bash curl http://localhost:5000/health curl http://localhost:5000/ -``` \ No newline at end of file +``` diff --git a/app_python/docs/LAB03.md b/app_python/docs/LAB03.md new file mode 100644 index 0000000000..cd7976fa9b --- /dev/null +++ b/app_python/docs/LAB03.md @@ -0,0 +1,74 @@ +# LAB03 — CI/CD (GitHub Actions) + +## 1) Overview + +### Testing framework +This project uses **pytest** because it provides: +- clean assertions and fixtures +- Flask test client without running a live server +- easy coverage reporting via `pytest-cov` + +### Test coverage (what is tested) +- `GET /` — validates the JSON structure and required fields +- `GET /health` — validates the health-check response +- `GET /does-not-exist` — validates the JSON 404 error handler +- 500-case — forces an internal error and validates the JSON 500 error handler + +### CI triggers +The workflow runs on `push` and `pull_request` for the selected branches, **only when** these paths change: +- `app_python/**` +- `.github/workflows/python-ci.yml` + +### Versioning strategy +We use **CalVer** for Docker image tags: +- monthly tag: `YYYY.MM` (e.g., `2026.02`) +- build tag: `YYYY.MM.` (e.g., `2026.02.31`) +- plus `latest` + +This makes it easy to see *when* an image was built and to find the most recent build. + +--- + +## 2) How to run locally + +From the `app_python` directory: + +```bash +python -m venv .venv +# Windows: .\.venv\Scripts\activate +# Linux/macOS: source .venv/bin/activate + +pip install -r requirements.txt +pip install -r requirements-dev.txt + +ruff check . +pytest -q tests --cov=. --cov-report=term-missing +``` + +--- + +## 3) Workflow evidence (paste links here) + +Add links to prove the pipeline works: + +- ✅ Successful workflow run: [https://github.com/dorley174/DevOps-Core-Course/actions/runs/21917089826/job/63287177794](https://github.com/dorley174/DevOps-Core-Course/actions/runs/21917089826/job/63287177794) +- ✅ Docker Hub image/repo: [https://hub.docker.com/repository/docker/dorley174/devops-info-service/general](https://hub.docker.com/repository/docker/dorley174/devops-info-service/general) +- ✅ Status badge in README: see `README.md` +or go +[![python-ci](https://github.com/dorley174/DevOps-Core-Course/actions/workflows/python-ci.yml/badge.svg)](https://github.com/dorley174/DevOps-Core-Course/actions/workflows/python-ci.yml) + +--- + +## 4) Best practices implemented + +- **Path filters**: CI does not run if changes are outside `app_python/**` +- **Job dependency**: Docker push runs only if lint + tests succeeded +- **Concurrency**: cancels outdated runs on the same branch +- **Least privileges**: `permissions: contents: read` +- **Caching**: + - pip cache via `actions/setup-python` + - Docker layer cache via `cache-to/cache-from type=gha` +- **Snyk scan**: + - scans dependencies from `requirements.txt` + - severity threshold = high + - `continue-on-error: true` (learning mode; does not block pipeline) From 46866051a9837ae9503ab3f8665d0317ce29e2dc Mon Sep 17 00:00:00 2001 From: dorley174 Date: Thu, 19 Feb 2026 22:59:36 +0300 Subject: [PATCH 14/20] feat: added terraform lab part --- .github/workflows/terraform-ci.yml | 57 +++ .gitignore | 4 +- app_python/docs/LAB04.md | 173 ++++++++ lab04_proofs/proof.png | Bin 0 -> 102687 bytes lab04_proofs/terraform_intalling_log.txt | 282 +++++++++++++ lab04_proofs/ubuntu_logs.txt | 488 ++++++++++++++++++++++ pulumi/.gitignore | 12 + pulumi/Pulumi.yaml | 6 + pulumi/README.md | 62 +++ pulumi/__main__.py | 145 +++++++ pulumi/requirements.txt | 2 + scripts/load-env.ps1 | 33 ++ terraform/.gitignore | 21 + terraform/.tflint.hcl | 6 + terraform/README.md | 56 +++ terraform/github/.gitignore | 7 + terraform/github/.tflint.hcl | 3 + terraform/github/main.tf | 11 + terraform/github/outputs.tf | 9 + terraform/github/providers.tf | 8 + terraform/github/terraform.tfvars.example | 14 + terraform/github/variables.tf | 30 ++ terraform/github/versions.tf | 10 + terraform/locals.tf | 15 + terraform/main.tf | 88 ++++ terraform/outputs.tf | 29 ++ terraform/providers.tf | 12 + terraform/terraform.tfvars.example | 40 ++ terraform/variables.tf | 133 ++++++ terraform/versions.tf | 12 + 30 files changed, 1767 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/terraform-ci.yml create mode 100644 app_python/docs/LAB04.md create mode 100644 lab04_proofs/proof.png create mode 100644 lab04_proofs/terraform_intalling_log.txt create mode 100644 lab04_proofs/ubuntu_logs.txt create mode 100644 pulumi/.gitignore create mode 100644 pulumi/Pulumi.yaml create mode 100644 pulumi/README.md create mode 100644 pulumi/__main__.py create mode 100644 pulumi/requirements.txt create mode 100644 scripts/load-env.ps1 create mode 100644 terraform/.gitignore create mode 100644 terraform/.tflint.hcl create mode 100644 terraform/README.md create mode 100644 terraform/github/.gitignore create mode 100644 terraform/github/.tflint.hcl create mode 100644 terraform/github/main.tf create mode 100644 terraform/github/outputs.tf create mode 100644 terraform/github/providers.tf create mode 100644 terraform/github/terraform.tfvars.example create mode 100644 terraform/github/variables.tf create mode 100644 terraform/github/versions.tf create mode 100644 terraform/locals.tf create mode 100644 terraform/main.tf create mode 100644 terraform/outputs.tf create mode 100644 terraform/providers.tf create mode 100644 terraform/terraform.tfvars.example create mode 100644 terraform/variables.tf create mode 100644 terraform/versions.tf diff --git a/.github/workflows/terraform-ci.yml b/.github/workflows/terraform-ci.yml new file mode 100644 index 0000000000..d6bc61d1a6 --- /dev/null +++ b/.github/workflows/terraform-ci.yml @@ -0,0 +1,57 @@ +name: Terraform CI + +on: + pull_request: + paths: + - "terraform/**" + - ".github/workflows/terraform-ci.yml" + push: + branches: + - master + - lab04 + paths: + - "terraform/**" + - ".github/workflows/terraform-ci.yml" + +jobs: + terraform-check: + name: "fmt / validate / tflint" + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + workdir: + - terraform + - terraform/github + + defaults: + run: + working-directory: ${{ matrix.workdir }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Terraform + uses: hashicorp/setup-terraform@v3 + with: + terraform_wrapper: false + + - name: Terraform fmt + run: terraform fmt -check -recursive + + - name: Terraform init (no backend) + run: terraform init -backend=false + + - name: Terraform validate + run: terraform validate -no-color + + - name: Setup TFLint + uses: terraform-linters/setup-tflint@v3 + + - name: TFLint init + run: tflint --init + + - name: TFLint + run: tflint diff --git a/.gitignore b/.gitignore index 30d74d2584..d61b66f420 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -test \ No newline at end of file +test +.env +key.json \ No newline at end of file diff --git a/app_python/docs/LAB04.md b/app_python/docs/LAB04.md new file mode 100644 index 0000000000..c5df87c5b8 --- /dev/null +++ b/app_python/docs/LAB04.md @@ -0,0 +1,173 @@ +# LAB04 — Infrastructure as Code (Terraform + Pulumi) + +## 0) Почему Yandex Cloud (я из РФ) + +From Russia is better to work with **Yandex Cloud** (registry, billing, accessability). As a zone i use `ru-central1-a`. + +Alternatives: VK Cloud / Selectel + +--- + +## 1) Terraform + +### 1.1. hat to create + +- VPC Network +- Subnet +- Security Group с inbound rules: + - **22/tcp** (SSH) — using my IP (`allowed_ssh_cidr`) + - **80/tcp** — open out + - **5000/tcp** — open out +- VM (Compute Instance) with public IP (NAT) + +### 1.2. Repo structure + +``` +terraform/ + main.tf + providers.tf + variables.tf + locals.tf + outputs.tf + versions.tf + .gitignore + terraform.tfvars.example + .tflint.hcl +``` + +### 1.3. Prepare + +1) Download Terraform. +2) Download `yc` CLI. +3) Create an SSH key: + +```bash +ssh-keygen -t ed25519 -C "lab04" -f ~/.ssh/lab04_ed25519 +``` + +4) How to know my IP (example): + +```bash +curl ifconfig.me +``` + +### 1.4. Start + +```bash +cd terraform +cp terraform.tfvars.example terraform.tfvars +# filling terraform.tfvars + +terraform init +terraform fmt +terraform validate +terraform plan +terraform apply +``` + +**Output after apply** (вставьте сюда ваш вывод): + +- `terraform version` +- `terraform plan` output +- `terraform apply` output +- `public_ip` / `ssh_command` + +### 1.5. Access check + +```bash +ssh -i ~/.ssh/lab04_ed25519 ubuntu@ +``` + +### 1.6. Delete resourses + +```bash +terraform destroy +``` + +--- + +## 2) Pulumi + +### 2.1. What to create + +Same is in Terraform (Network/Subnet/SG/VM). + +### 2.2. Structure + +``` +pulumi/ + Pulumi.yaml + requirements.txt + __main__.py + README.md + .gitignore +``` + +### 2.3. Authorization YC + +Using env (`YC_TOKEN`, `YC_CLOUD_ID`, `YC_FOLDER_ID`, `YC_ZONE`) or using `pulumi config` keys `yandex:*`. + +### 2.4. Start + +```bash +cd pulumi +python -m venv venv +# Windows: +# .\venv\Scripts\activate +# Linux/macOS: +# source venv/bin/activate +pip install -r requirements.txt + +pulumi login +pulumi stack init dev + +# Provider config (пример): +pulumi config set yandex:cloudId +pulumi config set yandex:folderId +pulumi config set yandex:zone ru-central1-a +pulumi config set --secret yandex:token + +# Project config: +pulumi config set zone ru-central1-a +pulumi config set subnetCidr 10.10.0.0/24 +pulumi config set allowedSshCidr "<ваш_IP>/32" +pulumi config set sshUser ubuntu +pulumi config set sshPublicKeyPath "~/.ssh/lab04_ed25519.pub" + +pulumi preview +pulumi up +``` + +**Output after up**: + +- `pulumi version` +- `pulumi up` output +- `public_ip` / `ssh_command` + +### 2.5. Delete resourses + +```bash +pulumi destroy +``` + +--- + +## 3) Comparison Terraform vs Pulumi + +| Criteria | Terraform | Pulumi | +|---|---|---| +| Language | HCL | Python | +| Reusing | modules | full language abstraction | +| entry threshold | lower | upper (needed) | +| State | loval / remote backend | Pulumi Cloud / local | + +--- + +## Bonus 1 — Terraform CI (fmt/validate/tflint) + +There are workflow `.github/workflows/terraform-ci.yml`. + +log + +--- + diff --git a/lab04_proofs/proof.png b/lab04_proofs/proof.png new file mode 100644 index 0000000000000000000000000000000000000000..35724a8b2913dc5c443bcda4c68d927fa45c6efa GIT binary patch literal 102687 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 z zX~=D3vdOZ~5M=>RYe1Td--OqXB=U+EdZ&yFYg~-K<*ApxnyJvR(Ap93)5bM}lp86G z)?=}&9^9cn%f6yN6P|Y-UNOsQG`%ZBC=-am64lE{COG8!$ zW@WiTRf#y0$5Y3eAC;v#u}S}Wn-{5>+f0+gtbF*#m$>$i&%|GP>N}p~->92>=>1$m zJPWuB$LT(OXXfkoS;#2AxNJpWCEBX5B<%Ic{nZ5AK1^iywthCb-`* zceU}FY#=&q!GbWQFvPsa>%%snGag-(&M)InRItUtAj!;gRBbg6E-rfjjKuJoje}G! z5xVfI&iWBxF5rH2w;WMH!v|4v{h3AFsIa(QBfkPMf$=H~Z)uRqdn=qLIXv)gALg!( z&?t~R%mbyK3BL}tq*fNmz@IZv>L(ZA389=R;8jpw02Ci_s??8J&v%konU-tn6MP|$ z1(xMyw(}UQmJ_5~-J1Bda?ASLZegA$(4##10xhxsE{HAw>`*07r*6(jh@WU$YM`sH z@5uc7+4fyOuWPC(izJv|HA?1x?{`p3Ik(=QZThR@A4Vt7qCKIjles^SH@zynKKT7R z-y#$J6PM(}NcI$$%xe~war7*cawB$9G=hCdi59&F+B zu9RQGww^+H7Sek{VxD^m&=#_6{+vMG%LQw!XWkOoXK&!a6!O9dN+Pt&-CZ@O2V!NF zNvTOy8O~qfdTrO`+@CtuZ9~9vxg1j8jDl$cBpb5Q=5cRa-t4ge%Ns9Y%HktbAQG}< zIOOym292R2;3Va#1oEH}8A2yp1Bdksg2z;iyG;*IZUeX{w&&BQk(|~G|7^h<1-*2e z1=u&$&l{J*{KxYXiljsRiS#(HMTnAx*TMn%v4lblHuIP#E*DZ&4)xDH&+e+v>+;H( z;1_?okofb7@t}Yshn@9xLiZj$uqlhtIj4JSk@2he)w6voW;;vTRaYzK51z`Y6RRj5 zL4ALgo%uJM3?KU|ZT1RyvbI{`sff4y7=7bQD>wFYR@$|9EVO8s)%q@{HQC0~x`vr| z=N8QO&<_yqHI|-ve7HN!ecD{p;!SD6Wmr@5*dXgVxBaimpKYjy}v1|?*}IL>LyuCi(As9#2+^a92eH&K_MYC2eEpVA*%2$OHUTj&T43McDfXz zqD7Wh4m9!hIU4z~Mi=ln$F5j{0LQ>&EIxt#7J7$>=2?|h@ApbQ%`J15V-YzA$7`!j zd51S*3h##eH;|j0Jb@y3Jr&T4h722tkW?8$tcl7K6DN=cnZ?)}nTsrsLrVo7GejQ9 z?*I+cpkaa5ZZZAx1^&ox-p22Gq0DoA{fmYp%a7_CG1p@TLBiZ4SIUF;Y&Pp6az{>M znminCjQgdunFnk$Z-qE^3)F?ArS0frg{=<>Uj8!lZT9 zsu{1HKHFFJ1jOu7Jg&<7umT}jzS?!8SLJThiS+M+h?#T8Lx|!ya^cd z`5g-cY46ZlFB+1p_wf_-Ub=uTwu .\scripts\load-env.ps1 +Loaded .env OK +YC_CLOUD_ID=b1gca960emnn9qqikne9 +YC_FOLDER_ID=b1g82kdcn5grlmu79ano +YC_ZONE=ru-central1-a +YC_SERVICE_ACCOUNT_KEY_FILE=C:\DevOps\DevOps-Core-Course\key.json +PS C:\DevOps\DevOps-Core-Course> terraform -chdir=terraform apply +data.yandex_compute_image.os: Reading... +data.yandex_compute_image.os: Read complete after 1s [id=fd8lt661chfo5i13a40d] + +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.vm will be created + + resource "yandex_compute_instance" "vm" { + + allow_stopping_for_update = true + + created_at = (known after apply) + + folder_id = (known after apply) + + fqdn = (known after apply) + + gpu_cluster_id = (known after apply) + + hardware_generation = (known after apply) + + hostname = (known after apply) + + id = (known after apply) + + labels = { + + "project" = "lab04" + } + + maintenance_grace_period = (known after apply) + + maintenance_policy = (known after apply) + + metadata = { + + "ssh-keys" = "ubuntu:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII5nKglXX/E2/S3oPKXahGr77IZELnnZlqE4oGCyEhZQ Данил@Dorley" + } + + name = "lab04-vm" + + network_acceleration_type = "standard" + + platform_id = "standard-v2" + + status = (known after apply) + + zone = "ru-central1-a" + + + boot_disk { + + auto_delete = true + + device_name = (known after apply) + + disk_id = (known after apply) + + mode = (known after apply) + + + initialize_params { + + block_size = (known after apply) + + description = (known after apply) + + image_id = "fd8lt661chfo5i13a40d" + + name = (known after apply) + + size = 10 + + snapshot_id = (known after apply) + + type = "network-hdd" + } + } + + + metadata_options (known after apply) + + + network_interface { + + index = (known after apply) + + ip_address = (known after apply) + + ipv4 = true + + ipv6 = (known after apply) + + ipv6_address = (known after apply) + + mac_address = (known after apply) + + nat = true + + nat_ip_address = (known after apply) + + nat_ip_version = (known after apply) + + security_group_ids = (known after apply) + + subnet_id = (known after apply) + } + + + placement_policy (known after apply) + + + resources { + + core_fraction = 20 + + cores = 2 + + memory = 1 + } + + + scheduling_policy { + + preemptible = false + } + } + + # yandex_vpc_network.lab_net will be created + + resource "yandex_vpc_network" "lab_net" { + + created_at = (known after apply) + + default_security_group_id = (known after apply) + + folder_id = (known after apply) + + id = (known after apply) + + labels = { + + "project" = "lab04" + } + + name = "lab04-net" + + subnet_ids = (known after apply) + } + + # yandex_vpc_security_group.vm_sg will be created + + resource "yandex_vpc_security_group" "vm_sg" { + + created_at = (known after apply) + + description = "Security Group for Lab04 VM" + + folder_id = (known after apply) + + id = (known after apply) + + labels = { + + "project" = "lab04" + } + + name = "lab04-sg" + + network_id = (known after apply) + + status = (known after apply) + + + egress { + + description = "Allow all outbound" + + from_port = 0 + + id = (known after apply) + + labels = (known after apply) + + port = -1 + + protocol = "ANY" + + to_port = 65535 + + v4_cidr_blocks = [ + + "0.0.0.0/0", + ] + + v6_cidr_blocks = [] + # (2 unchanged attributes hidden) + } + + + ingress { + + description = "App port (Flask)" + + from_port = -1 + + id = (known after apply) + + labels = (known after apply) + + port = 5000 + + protocol = "TCP" + + to_port = -1 + + v4_cidr_blocks = [ + + "0.0.0.0/0", + ] + + v6_cidr_blocks = [] + # (2 unchanged attributes hidden) + } + + ingress { + + description = "HTTP" + + from_port = -1 + + id = (known after apply) + + labels = (known after apply) + + port = 80 + + protocol = "TCP" + + to_port = -1 + + v4_cidr_blocks = [ + + "0.0.0.0/0", + ] + + v6_cidr_blocks = [] + # (2 unchanged attributes hidden) + } + + ingress { + + description = "SSH from allowed CIDR" + + from_port = -1 + + id = (known after apply) + + labels = (known after apply) + + port = 22 + + protocol = "TCP" + + to_port = -1 + + v4_cidr_blocks = [ + + "95.111.204.70/32", + ] + + v6_cidr_blocks = [] + # (2 unchanged attributes hidden) + } + } + + # yandex_vpc_subnet.lab_subnet will be created + + resource "yandex_vpc_subnet" "lab_subnet" { + + created_at = (known after apply) + + folder_id = (known after apply) + + id = (known after apply) + + labels = { + + "project" = "lab04" + } + + name = "lab04-subnet" + + network_id = (known after apply) + + v4_cidr_blocks = [ + + "10.10.0.0/24", + ] + + v6_cidr_blocks = (known after apply) + + zone = "ru-central1-a" + } + +Plan: 4 to add, 0 to change, 0 to destroy. + +Changes to Outputs: + + app_url = (known after apply) + + http_url = (known after apply) + + internal_ip = (known after apply) + + public_ip = (known after apply) + + ssh_command = (known after apply) + + vm_id = (known after apply) +╷ +│ Warning: Cannot connect to YC tool initialization service. Network connectivity to the service is required for provider version control. +│ +│ +│ with provider["registry.terraform.io/yandex-cloud/yandex"], +│ on providers.tf line 1, in provider "yandex": +│ 1: provider "yandex" { +│ +╵ + +Do you want to perform these actions? + Terraform will perform the actions described above. + Only 'yes' will be accepted to approve. + + Enter a value: yes + +yandex_vpc_network.lab_net: Creating... +yandex_vpc_network.lab_net: Creation complete after 4s [id=enpq59lnhclspku28afm] +yandex_vpc_subnet.lab_subnet: Creating... +yandex_vpc_security_group.vm_sg: Creating... +yandex_vpc_subnet.lab_subnet: Creation complete after 1s [id=e9bedb7ig70u3rpvqeru] +yandex_vpc_security_group.vm_sg: Creation complete after 3s [id=enp5bnpeefpntqlukehb] +yandex_compute_instance.vm: Creating... +yandex_compute_instance.vm: Still creating... [00m10s elapsed] +yandex_compute_instance.vm: Still creating... [00m20s elapsed] +yandex_compute_instance.vm: Still creating... [00m30s elapsed] +yandex_compute_instance.vm: Creation complete after 35s [id=fhmdplo02ifil4mk7odj] +╷ +│ Warning: Cannot connect to YC tool initialization service. Network connectivity to the service is required for provider version control. +│ +│ +│ with provider["registry.terraform.io/yandex-cloud/yandex"], +│ on providers.tf line 1, in provider "yandex": +│ 1: provider "yandex" { +│ +╵ + +Apply complete! Resources: 4 added, 0 changed, 0 destroyed. + +Outputs: + +app_url = "http://89.169.147.72:5000/" +http_url = "http://89.169.147.72/" +internal_ip = "10.10.0.22" +public_ip = "89.169.147.72" +ssh_command = "ssh -i ~/.ssh/id_ed25519 ubuntu@89.169.147.72" +vm_id = "fhmdplo02ifil4mk7odj" +PS C:\DevOps\DevOps-Core-Course> ssh -i $env:USERPROFILE\.ssh\lab04_ed25519 ubuntu@89.169.147.72 +The authenticity of host '89.169.147.72 (89.169.147.72)' can't be established. +ED25519 key fingerprint is SHA256:87OV4P2mx41pGWV3CIi0gSmPp8kE6JXzmB6sfnxBg2c. +This key is not known by any other names. +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes +Warning: Permanently added '89.169.147.72' (ED25519) to the list of known hosts. +Welcome to Ubuntu 24.04.4 LTS (GNU/Linux 6.8.0-100-generic x86_64) + + * Documentation: https://help.ubuntu.com + * Management: https://landscape.canonical.com + * Support: https://ubuntu.com/pro + + System information as of Thu Feb 19 19:29:02 UTC 2026 + + System load: 0.2 Processes: 100 + Usage of /: 23.1% of 9.04GB Users logged in: 0 + Memory usage: 19% IPv4 address for eth0: 10.10.0.22 + Swap usage: 0% + + +Expanded Security Maintenance for Applications is not enabled. + +0 updates can be applied immediately. + +Enable ESM Apps to receive additional future security updates. +See https://ubuntu.com/esm or run: sudo pro status + + + +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. \ No newline at end of file diff --git a/lab04_proofs/ubuntu_logs.txt b/lab04_proofs/ubuntu_logs.txt new file mode 100644 index 0000000000..ca88584f03 --- /dev/null +++ b/lab04_proofs/ubuntu_logs.txt @@ -0,0 +1,488 @@ +ubuntu@fhmdplo02ifil4mk7odj:~$ sudo apt update +Hit:1 http://mirror.yandex.ru/ubuntu noble InRelease +Get:2 http://mirror.yandex.ru/ubuntu noble-updates InRelease [126 kB] +Get:3 http://mirror.yandex.ru/ubuntu noble-backports InRelease [126 kB] +Get:4 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB] +Get:5 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 Packages [1771 kB] +Get:6 http://mirror.yandex.ru/ubuntu noble-updates/main Translation-en [328 kB] +Get:7 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 Components [175 kB] +Get:8 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 c-n-f Metadata [16.5 kB] +Get:9 http://mirror.yandex.ru/ubuntu noble-updates/universe amd64 Packages [1557 kB] +Get:10 http://mirror.yandex.ru/ubuntu noble-updates/universe Translation-en [316 kB] +Get:11 http://mirror.yandex.ru/ubuntu noble-updates/universe amd64 Components [386 kB] +Get:12 http://mirror.yandex.ru/ubuntu noble-updates/universe amd64 c-n-f Metadata [32.6 kB] +Get:13 http://mirror.yandex.ru/ubuntu noble-updates/restricted amd64 Packages [2663 kB] +Get:14 http://mirror.yandex.ru/ubuntu noble-updates/restricted Translation-en [613 kB] +Get:15 http://mirror.yandex.ru/ubuntu noble-updates/restricted amd64 Components [212 B] +Get:16 http://mirror.yandex.ru/ubuntu noble-updates/multiverse Translation-en [7044 B] +Get:17 http://mirror.yandex.ru/ubuntu noble-updates/multiverse amd64 Components [940 B] +Get:18 http://mirror.yandex.ru/ubuntu noble-backports/main amd64 Components [7308 B] +Get:19 http://mirror.yandex.ru/ubuntu noble-backports/universe amd64 Components [10.5 kB] +Get:20 http://mirror.yandex.ru/ubuntu noble-backports/restricted amd64 Components [216 B] +Get:21 http://mirror.yandex.ru/ubuntu noble-backports/multiverse amd64 Components [212 B] +Get:22 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [1474 kB] +Get:23 http://security.ubuntu.com/ubuntu noble-security/main Translation-en [237 kB] +Get:24 http://security.ubuntu.com/ubuntu noble-security/main amd64 Components [21.5 kB] +Get:25 http://security.ubuntu.com/ubuntu noble-security/main amd64 c-n-f Metadata [9892 B] +Get:26 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Packages [935 kB] +Get:27 http://security.ubuntu.com/ubuntu noble-security/universe Translation-en [214 kB] +Get:28 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Components [74.2 kB] +Get:29 http://security.ubuntu.com/ubuntu noble-security/universe amd64 c-n-f Metadata [20.0 kB] +Get:30 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Packages [2516 kB] +Get:31 http://security.ubuntu.com/ubuntu noble-security/restricted Translation-en [582 kB] +Get:32 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Components [212 B] +Get:33 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Components [212 B] +Fetched 14.3 MB in 3s (5184 kB/s) +Reading package lists... Done +Building dependency tree... Done +Reading state information... Done +8 packages can be upgraded. Run 'apt list --upgradable' to see them. +ubuntu@fhmdplo02ifil4mk7odj:~$ sudo apt install -y python3-venv python3-pip +Reading package lists... Done +Building dependency tree... Done +Reading state information... Done +The following additional packages will be installed: + binutils binutils-common binutils-x86-64-linux-gnu build-essential bzip2 cpp cpp-13 cpp-13-x86-64-linux-gnu + cpp-x86-64-linux-gnu dpkg-dev fakeroot g++ g++-13 g++-13-x86-64-linux-gnu g++-x86-64-linux-gnu gcc gcc-13 + gcc-13-base gcc-13-x86-64-linux-gnu gcc-14-base gcc-x86-64-linux-gnu javascript-common libalgorithm-diff-perl + libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan8 libatomic1 libbinutils libcc1-0 libctf-nobfd0 + libctf0 libdpkg-perl libexpat1 libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-13-dev libgcc-s1 + libgomp1 libgprofng0 libhwasan0 libisl23 libitm1 libjs-jquery libjs-sphinxdoc libjs-underscore liblsan0 libmpc3 + libpython3-dev libpython3.12-dev libquadmath0 libsframe1 libstdc++-13-dev libstdc++6 libtsan2 libubsan1 + lto-disabled-list make python3-dev python3-pip-whl python3-setuptools-whl python3-wheel python3.12-dev + python3.12-venv zlib1g-dev +Suggested packages: + binutils-doc gprofng-gui bzip2-doc cpp-doc gcc-13-locales cpp-13-doc debian-keyring g++-multilib + g++-13-multilib gcc-13-doc gcc-multilib autoconf automake libtool flex bison gdb gcc-doc gcc-13-multilib + gdb-x86-64-linux-gnu apache2 | lighttpd | httpd bzr libstdc++-13-doc make-doc +The following NEW packages will be installed: + binutils binutils-common binutils-x86-64-linux-gnu build-essential bzip2 cpp cpp-13 cpp-13-x86-64-linux-gnu + cpp-x86-64-linux-gnu dpkg-dev fakeroot g++ g++-13 g++-13-x86-64-linux-gnu g++-x86-64-linux-gnu gcc gcc-13 + gcc-13-base gcc-13-x86-64-linux-gnu gcc-x86-64-linux-gnu javascript-common libalgorithm-diff-perl + libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan8 libatomic1 libbinutils libcc1-0 libctf-nobfd0 + libctf0 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-13-dev libgomp1 libgprofng0 + libhwasan0 libisl23 libitm1 libjs-jquery libjs-sphinxdoc libjs-underscore liblsan0 libmpc3 libpython3-dev + libpython3.12-dev libquadmath0 libsframe1 libstdc++-13-dev libtsan2 libubsan1 lto-disabled-list make + python3-dev python3-pip python3-pip-whl python3-setuptools-whl python3-venv python3-wheel python3.12-dev + python3.12-venv zlib1g-dev +The following packages will be upgraded: + gcc-14-base libexpat1 libgcc-s1 libstdc++6 +4 upgraded, 63 newly installed, 0 to remove and 4 not upgraded. +Need to get 79.5 MB of archives. +After this operation, 272 MB of additional disk space will be used. +Get:1 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 gcc-14-base amd64 14.2.0-4ubuntu2~24.04.1 [51.0 kB] +Get:2 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libstdc++6 amd64 14.2.0-4ubuntu2~24.04.1 [792 kB] +Get:3 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libgcc-s1 amd64 14.2.0-4ubuntu2~24.04.1 [78.4 kB] +Get:4 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libexpat1 amd64 2.6.1-2ubuntu0.4 [88.2 kB] +Get:5 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 binutils-common amd64 2.42-4ubuntu2.8 [240 kB] +Get:6 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libsframe1 amd64 2.42-4ubuntu2.8 [15.6 kB] +Get:7 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libbinutils amd64 2.42-4ubuntu2.8 [576 kB] +Get:8 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libctf-nobfd0 amd64 2.42-4ubuntu2.8 [97.9 kB] +Get:9 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libctf0 amd64 2.42-4ubuntu2.8 [94.5 kB] +Get:10 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libgprofng0 amd64 2.42-4ubuntu2.8 [849 kB] +Get:11 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 binutils-x86-64-linux-gnu amd64 2.42-4ubuntu2.8 [2463 kB] +Get:12 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 binutils amd64 2.42-4ubuntu2.8 [18.1 kB] +Get:13 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 gcc-13-base amd64 13.3.0-6ubuntu2~24.04.1 [51.6 kB] +Get:14 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libisl23 amd64 0.26-3build1.1 [680 kB] +Get:15 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libmpc3 amd64 1.3.1-1build1.1 [54.6 kB] +Get:16 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 cpp-13-x86-64-linux-gnu amd64 13.3.0-6ubuntu2~24.04.1 [10.7 MB] +Get:17 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 cpp-13 amd64 13.3.0-6ubuntu2~24.04.1 [1042 B] +Get:18 http://mirror.yandex.ru/ubuntu noble/main amd64 cpp-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [5326 B] +Get:19 http://mirror.yandex.ru/ubuntu noble/main amd64 cpp amd64 4:13.2.0-7ubuntu1 [22.4 kB] +Get:20 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libcc1-0 amd64 14.2.0-4ubuntu2~24.04.1 [48.0 kB] +Get:21 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libgomp1 amd64 14.2.0-4ubuntu2~24.04.1 [148 kB] +Get:22 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libitm1 amd64 14.2.0-4ubuntu2~24.04.1 [29.7 kB] +Get:23 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libatomic1 amd64 14.2.0-4ubuntu2~24.04.1 [10.5 kB] +Get:24 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libasan8 amd64 14.2.0-4ubuntu2~24.04.1 [3027 kB] +Get:25 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 liblsan0 amd64 14.2.0-4ubuntu2~24.04.1 [1322 kB] +Get:26 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libtsan2 amd64 14.2.0-4ubuntu2~24.04.1 [2772 kB] +Get:27 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libubsan1 amd64 14.2.0-4ubuntu2~24.04.1 [1184 kB] +Get:28 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libhwasan0 amd64 14.2.0-4ubuntu2~24.04.1 [1641 kB] +Get:29 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libquadmath0 amd64 14.2.0-4ubuntu2~24.04.1 [153 kB] +Get:30 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libgcc-13-dev amd64 13.3.0-6ubuntu2~24.04.1 [2681 kB] +Get:31 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 gcc-13-x86-64-linux-gnu amd64 13.3.0-6ubuntu2~24.04.1 [21.1 MB] +Get:32 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 gcc-13 amd64 13.3.0-6ubuntu2~24.04.1 [494 kB] +Get:33 http://mirror.yandex.ru/ubuntu noble/main amd64 gcc-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [1212 B] +Get:34 http://mirror.yandex.ru/ubuntu noble/main amd64 gcc amd64 4:13.2.0-7ubuntu1 [5018 B] +Get:35 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libstdc++-13-dev amd64 13.3.0-6ubuntu2~24.04.1 [2420 kB] +Get:36 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 g++-13-x86-64-linux-gnu amd64 13.3.0-6ubuntu2~24.04.1 [12.2 MB] +Get:37 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 g++-13 amd64 13.3.0-6ubuntu2~24.04.1 [16.0 kB] +Get:38 http://mirror.yandex.ru/ubuntu noble/main amd64 g++-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [964 B] +Get:39 http://mirror.yandex.ru/ubuntu noble/main amd64 g++ amd64 4:13.2.0-7ubuntu1 [1100 B] +Get:40 http://mirror.yandex.ru/ubuntu noble/main amd64 make amd64 4.3-4.1build2 [180 kB] +Get:41 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libdpkg-perl all 1.22.6ubuntu6.5 [269 kB] +Get:42 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 bzip2 amd64 1.0.8-5.1build0.1 [34.5 kB] +Get:43 http://mirror.yandex.ru/ubuntu noble/main amd64 lto-disabled-list all 47 [12.4 kB] +Get:44 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 dpkg-dev all 1.22.6ubuntu6.5 [1074 kB] +Get:45 http://mirror.yandex.ru/ubuntu noble/main amd64 build-essential amd64 12.10ubuntu1 [4928 B] +Get:46 http://mirror.yandex.ru/ubuntu noble/main amd64 libfakeroot amd64 1.33-1 [32.4 kB] +Get:47 http://mirror.yandex.ru/ubuntu noble/main amd64 fakeroot amd64 1.33-1 [67.2 kB] +Get:48 http://mirror.yandex.ru/ubuntu noble/main amd64 javascript-common all 11+nmu1 [5936 B] +Get:49 http://mirror.yandex.ru/ubuntu noble/main amd64 libalgorithm-diff-perl all 1.201-1 [41.8 kB] +Get:50 http://mirror.yandex.ru/ubuntu noble/main amd64 libalgorithm-diff-xs-perl amd64 0.04-8build3 [11.2 kB] +Get:51 http://mirror.yandex.ru/ubuntu noble/main amd64 libalgorithm-merge-perl all 0.08-5 [11.4 kB] +Get:52 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libexpat1-dev amd64 2.6.1-2ubuntu0.4 [140 kB] +Get:53 http://mirror.yandex.ru/ubuntu noble/main amd64 libfile-fcntllock-perl amd64 0.22-4ubuntu5 [30.7 kB] +Get:54 http://mirror.yandex.ru/ubuntu noble/main amd64 libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [328 kB] +Get:55 http://mirror.yandex.ru/ubuntu noble/main amd64 libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [118 kB] +Get:56 http://mirror.yandex.ru/ubuntu noble/main amd64 libjs-sphinxdoc all 7.2.6-6 [149 kB] +Get:57 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 zlib1g-dev amd64 1:1.3.dfsg-3.1ubuntu2.1 [894 kB] +Get:58 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libpython3.12-dev amd64 3.12.3-1ubuntu0.11 [5683 kB] +Get:59 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 libpython3-dev amd64 3.12.3-0ubuntu2.1 [10.3 kB] +Get:60 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 python3.12-dev amd64 3.12.3-1ubuntu0.11 [498 kB] +Get:61 http://mirror.yandex.ru/ubuntu noble-updates/main amd64 python3-dev amd64 3.12.3-0ubuntu2.1 [26.7 kB] +Get:62 http://mirror.yandex.ru/ubuntu noble/universe amd64 python3-wheel all 0.42.0-2 [53.1 kB] +Get:63 http://mirror.yandex.ru/ubuntu noble-updates/universe amd64 python3-pip all 24.0+dfsg-1ubuntu1.3 [1320 kB] +Get:64 http://mirror.yandex.ru/ubuntu noble-updates/universe amd64 python3-pip-whl all 24.0+dfsg-1ubuntu1.3 [1707 kB] +Get:65 http://mirror.yandex.ru/ubuntu noble-updates/universe amd64 python3-setuptools-whl all 68.1.2-2ubuntu1.2 [716 kB] +Get:66 http://mirror.yandex.ru/ubuntu noble-updates/universe amd64 python3.12-venv amd64 3.12.3-1ubuntu0.11 [5680 B] +Get:67 http://mirror.yandex.ru/ubuntu noble-updates/universe amd64 python3-venv amd64 3.12.3-0ubuntu2.1 [1032 B] +Fetched 79.5 MB in 1s (68.1 MB/s) +Extracting templates from packages: 100% +(Reading database ... 106316 files and directories currently installed.) +Preparing to unpack .../gcc-14-base_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking gcc-14-base:amd64 (14.2.0-4ubuntu2~24.04.1) over (14.2.0-4ubuntu2~24.04) ... +Setting up gcc-14-base:amd64 (14.2.0-4ubuntu2~24.04.1) ... +(Reading database ... 106316 files and directories currently installed.) +Preparing to unpack .../libstdc++6_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking libstdc++6:amd64 (14.2.0-4ubuntu2~24.04.1) over (14.2.0-4ubuntu2~24.04) ... +Setting up libstdc++6:amd64 (14.2.0-4ubuntu2~24.04.1) ... +(Reading database ... 106316 files and directories currently installed.) +Preparing to unpack .../libgcc-s1_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking libgcc-s1:amd64 (14.2.0-4ubuntu2~24.04.1) over (14.2.0-4ubuntu2~24.04) ... +Setting up libgcc-s1:amd64 (14.2.0-4ubuntu2~24.04.1) ... +(Reading database ... 106316 files and directories currently installed.) +Preparing to unpack .../00-libexpat1_2.6.1-2ubuntu0.4_amd64.deb ... +Unpacking libexpat1:amd64 (2.6.1-2ubuntu0.4) over (2.6.1-2ubuntu0.3) ... +Selecting previously unselected package binutils-common:amd64. +Preparing to unpack .../01-binutils-common_2.42-4ubuntu2.8_amd64.deb ... +Unpacking binutils-common:amd64 (2.42-4ubuntu2.8) ... +Selecting previously unselected package libsframe1:amd64. +Preparing to unpack .../02-libsframe1_2.42-4ubuntu2.8_amd64.deb ... +Unpacking libsframe1:amd64 (2.42-4ubuntu2.8) ... +Selecting previously unselected package libbinutils:amd64. +Preparing to unpack .../03-libbinutils_2.42-4ubuntu2.8_amd64.deb ... +Unpacking libbinutils:amd64 (2.42-4ubuntu2.8) ... +Selecting previously unselected package libctf-nobfd0:amd64. +Preparing to unpack .../04-libctf-nobfd0_2.42-4ubuntu2.8_amd64.deb ... +Unpacking libctf-nobfd0:amd64 (2.42-4ubuntu2.8) ... +Selecting previously unselected package libctf0:amd64. +Preparing to unpack .../05-libctf0_2.42-4ubuntu2.8_amd64.deb ... +Unpacking libctf0:amd64 (2.42-4ubuntu2.8) ... +Selecting previously unselected package libgprofng0:amd64. +Preparing to unpack .../06-libgprofng0_2.42-4ubuntu2.8_amd64.deb ... +Unpacking libgprofng0:amd64 (2.42-4ubuntu2.8) ... +Selecting previously unselected package binutils-x86-64-linux-gnu. +Preparing to unpack .../07-binutils-x86-64-linux-gnu_2.42-4ubuntu2.8_amd64.deb ... +Unpacking binutils-x86-64-linux-gnu (2.42-4ubuntu2.8) ... +Selecting previously unselected package binutils. +Preparing to unpack .../08-binutils_2.42-4ubuntu2.8_amd64.deb ... +Unpacking binutils (2.42-4ubuntu2.8) ... +Selecting previously unselected package gcc-13-base:amd64. +Preparing to unpack .../09-gcc-13-base_13.3.0-6ubuntu2~24.04.1_amd64.deb ... +Unpacking gcc-13-base:amd64 (13.3.0-6ubuntu2~24.04.1) ... +Selecting previously unselected package libisl23:amd64. +Preparing to unpack .../10-libisl23_0.26-3build1.1_amd64.deb ... +Unpacking libisl23:amd64 (0.26-3build1.1) ... +Selecting previously unselected package libmpc3:amd64. +Preparing to unpack .../11-libmpc3_1.3.1-1build1.1_amd64.deb ... +Unpacking libmpc3:amd64 (1.3.1-1build1.1) ... +Selecting previously unselected package cpp-13-x86-64-linux-gnu. +Preparing to unpack .../12-cpp-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb ... +Unpacking cpp-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04.1) ... +Selecting previously unselected package cpp-13. +Preparing to unpack .../13-cpp-13_13.3.0-6ubuntu2~24.04.1_amd64.deb ... +Unpacking cpp-13 (13.3.0-6ubuntu2~24.04.1) ... +Selecting previously unselected package cpp-x86-64-linux-gnu. +Preparing to unpack .../14-cpp-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... +Unpacking cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... +Selecting previously unselected package cpp. +Preparing to unpack .../15-cpp_4%3a13.2.0-7ubuntu1_amd64.deb ... +Unpacking cpp (4:13.2.0-7ubuntu1) ... +Selecting previously unselected package libcc1-0:amd64. +Preparing to unpack .../16-libcc1-0_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking libcc1-0:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Selecting previously unselected package libgomp1:amd64. +Preparing to unpack .../17-libgomp1_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking libgomp1:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Selecting previously unselected package libitm1:amd64. +Preparing to unpack .../18-libitm1_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking libitm1:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Selecting previously unselected package libatomic1:amd64. +Preparing to unpack .../19-libatomic1_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking libatomic1:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Selecting previously unselected package libasan8:amd64. +Preparing to unpack .../20-libasan8_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking libasan8:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Selecting previously unselected package liblsan0:amd64. +Preparing to unpack .../21-liblsan0_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking liblsan0:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Selecting previously unselected package libtsan2:amd64. +Preparing to unpack .../22-libtsan2_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking libtsan2:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Selecting previously unselected package libubsan1:amd64. +Preparing to unpack .../23-libubsan1_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking libubsan1:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Selecting previously unselected package libhwasan0:amd64. +Preparing to unpack .../24-libhwasan0_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking libhwasan0:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Selecting previously unselected package libquadmath0:amd64. +Preparing to unpack .../25-libquadmath0_14.2.0-4ubuntu2~24.04.1_amd64.deb ... +Unpacking libquadmath0:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Selecting previously unselected package libgcc-13-dev:amd64. +Preparing to unpack .../26-libgcc-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb ... +Unpacking libgcc-13-dev:amd64 (13.3.0-6ubuntu2~24.04.1) ... +Selecting previously unselected package gcc-13-x86-64-linux-gnu. +Preparing to unpack .../27-gcc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb ... +Unpacking gcc-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04.1) ... +Selecting previously unselected package gcc-13. +Preparing to unpack .../28-gcc-13_13.3.0-6ubuntu2~24.04.1_amd64.deb ... +Unpacking gcc-13 (13.3.0-6ubuntu2~24.04.1) ... +Selecting previously unselected package gcc-x86-64-linux-gnu. +Preparing to unpack .../29-gcc-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... +Unpacking gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... +Selecting previously unselected package gcc. +Preparing to unpack .../30-gcc_4%3a13.2.0-7ubuntu1_amd64.deb ... +Unpacking gcc (4:13.2.0-7ubuntu1) ... +Selecting previously unselected package libstdc++-13-dev:amd64. +Preparing to unpack .../31-libstdc++-13-dev_13.3.0-6ubuntu2~24.04.1_amd64.deb ... +Unpacking libstdc++-13-dev:amd64 (13.3.0-6ubuntu2~24.04.1) ... +Selecting previously unselected package g++-13-x86-64-linux-gnu. +Preparing to unpack .../32-g++-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04.1_amd64.deb ... +Unpacking g++-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04.1) ... +Selecting previously unselected package g++-13. +Preparing to unpack .../33-g++-13_13.3.0-6ubuntu2~24.04.1_amd64.deb ... +Unpacking g++-13 (13.3.0-6ubuntu2~24.04.1) ... +Selecting previously unselected package g++-x86-64-linux-gnu. +Preparing to unpack .../34-g++-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... +Unpacking g++-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... +Selecting previously unselected package g++. +Preparing to unpack .../35-g++_4%3a13.2.0-7ubuntu1_amd64.deb ... +Unpacking g++ (4:13.2.0-7ubuntu1) ... +Selecting previously unselected package make. +Preparing to unpack .../36-make_4.3-4.1build2_amd64.deb ... +Unpacking make (4.3-4.1build2) ... +Selecting previously unselected package libdpkg-perl. +Preparing to unpack .../37-libdpkg-perl_1.22.6ubuntu6.5_all.deb ... +Unpacking libdpkg-perl (1.22.6ubuntu6.5) ... +Selecting previously unselected package bzip2. +Preparing to unpack .../38-bzip2_1.0.8-5.1build0.1_amd64.deb ... +Unpacking bzip2 (1.0.8-5.1build0.1) ... +Selecting previously unselected package lto-disabled-list. +Preparing to unpack .../39-lto-disabled-list_47_all.deb ... +Unpacking lto-disabled-list (47) ... +Selecting previously unselected package dpkg-dev. +Preparing to unpack .../40-dpkg-dev_1.22.6ubuntu6.5_all.deb ... +Unpacking dpkg-dev (1.22.6ubuntu6.5) ... +Selecting previously unselected package build-essential. +Preparing to unpack .../41-build-essential_12.10ubuntu1_amd64.deb ... +Unpacking build-essential (12.10ubuntu1) ... +Selecting previously unselected package libfakeroot:amd64. +Preparing to unpack .../42-libfakeroot_1.33-1_amd64.deb ... +Unpacking libfakeroot:amd64 (1.33-1) ... +Selecting previously unselected package fakeroot. +Preparing to unpack .../43-fakeroot_1.33-1_amd64.deb ... +Unpacking fakeroot (1.33-1) ... +Selecting previously unselected package javascript-common. +Preparing to unpack .../44-javascript-common_11+nmu1_all.deb ... +Unpacking javascript-common (11+nmu1) ... +Selecting previously unselected package libalgorithm-diff-perl. +Preparing to unpack .../45-libalgorithm-diff-perl_1.201-1_all.deb ... +Unpacking libalgorithm-diff-perl (1.201-1) ... +Selecting previously unselected package libalgorithm-diff-xs-perl:amd64. +Preparing to unpack .../46-libalgorithm-diff-xs-perl_0.04-8build3_amd64.deb ... +Unpacking libalgorithm-diff-xs-perl:amd64 (0.04-8build3) ... +Selecting previously unselected package libalgorithm-merge-perl. +Preparing to unpack .../47-libalgorithm-merge-perl_0.08-5_all.deb ... +Unpacking libalgorithm-merge-perl (0.08-5) ... +Selecting previously unselected package libexpat1-dev:amd64. +Preparing to unpack .../48-libexpat1-dev_2.6.1-2ubuntu0.4_amd64.deb ... +Unpacking libexpat1-dev:amd64 (2.6.1-2ubuntu0.4) ... +Selecting previously unselected package libfile-fcntllock-perl. +Preparing to unpack .../49-libfile-fcntllock-perl_0.22-4ubuntu5_amd64.deb ... +Unpacking libfile-fcntllock-perl (0.22-4ubuntu5) ... +Selecting previously unselected package libjs-jquery. +Preparing to unpack .../50-libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb ... +Unpacking libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... +Selecting previously unselected package libjs-underscore. +Preparing to unpack .../51-libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb ... +Unpacking libjs-underscore (1.13.4~dfsg+~1.11.4-3) ... +Selecting previously unselected package libjs-sphinxdoc. +Preparing to unpack .../52-libjs-sphinxdoc_7.2.6-6_all.deb ... +Unpacking libjs-sphinxdoc (7.2.6-6) ... +Selecting previously unselected package zlib1g-dev:amd64. +Preparing to unpack .../53-zlib1g-dev_1%3a1.3.dfsg-3.1ubuntu2.1_amd64.deb ... +Unpacking zlib1g-dev:amd64 (1:1.3.dfsg-3.1ubuntu2.1) ... +Selecting previously unselected package libpython3.12-dev:amd64. +Preparing to unpack .../54-libpython3.12-dev_3.12.3-1ubuntu0.11_amd64.deb ... +Unpacking libpython3.12-dev:amd64 (3.12.3-1ubuntu0.11) ... +Selecting previously unselected package libpython3-dev:amd64. +Preparing to unpack .../55-libpython3-dev_3.12.3-0ubuntu2.1_amd64.deb ... +Unpacking libpython3-dev:amd64 (3.12.3-0ubuntu2.1) ... +Selecting previously unselected package python3.12-dev. +Preparing to unpack .../56-python3.12-dev_3.12.3-1ubuntu0.11_amd64.deb ... +Unpacking python3.12-dev (3.12.3-1ubuntu0.11) ... +Selecting previously unselected package python3-dev. +Preparing to unpack .../57-python3-dev_3.12.3-0ubuntu2.1_amd64.deb ... +Unpacking python3-dev (3.12.3-0ubuntu2.1) ... +Selecting previously unselected package python3-wheel. +Preparing to unpack .../58-python3-wheel_0.42.0-2_all.deb ... +Unpacking python3-wheel (0.42.0-2) ... +Selecting previously unselected package python3-pip. +Preparing to unpack .../59-python3-pip_24.0+dfsg-1ubuntu1.3_all.deb ... +Unpacking python3-pip (24.0+dfsg-1ubuntu1.3) ... +Selecting previously unselected package python3-pip-whl. +Preparing to unpack .../60-python3-pip-whl_24.0+dfsg-1ubuntu1.3_all.deb ... +Unpacking python3-pip-whl (24.0+dfsg-1ubuntu1.3) ... +Selecting previously unselected package python3-setuptools-whl. +Preparing to unpack .../61-python3-setuptools-whl_68.1.2-2ubuntu1.2_all.deb ... +Unpacking python3-setuptools-whl (68.1.2-2ubuntu1.2) ... +Selecting previously unselected package python3.12-venv. +Preparing to unpack .../62-python3.12-venv_3.12.3-1ubuntu0.11_amd64.deb ... +Unpacking python3.12-venv (3.12.3-1ubuntu0.11) ... +Selecting previously unselected package python3-venv. +Preparing to unpack .../63-python3-venv_3.12.3-0ubuntu2.1_amd64.deb ... +Unpacking python3-venv (3.12.3-0ubuntu2.1) ... +Setting up libexpat1:amd64 (2.6.1-2ubuntu0.4) ... +Setting up javascript-common (11+nmu1) ... +Setting up python3-setuptools-whl (68.1.2-2ubuntu1.2) ... +Setting up lto-disabled-list (47) ... +Setting up libfile-fcntllock-perl (0.22-4ubuntu5) ... +Setting up python3-pip-whl (24.0+dfsg-1ubuntu1.3) ... +Setting up libalgorithm-diff-perl (1.201-1) ... +Setting up binutils-common:amd64 (2.42-4ubuntu2.8) ... +Setting up libctf-nobfd0:amd64 (2.42-4ubuntu2.8) ... +Setting up libgomp1:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Setting up bzip2 (1.0.8-5.1build0.1) ... +Setting up python3-wheel (0.42.0-2) ... +Setting up libsframe1:amd64 (2.42-4ubuntu2.8) ... +Setting up libfakeroot:amd64 (1.33-1) ... +Setting up fakeroot (1.33-1) ... +update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode +Setting up gcc-13-base:amd64 (13.3.0-6ubuntu2~24.04.1) ... +Setting up libexpat1-dev:amd64 (2.6.1-2ubuntu0.4) ... +Setting up make (4.3-4.1build2) ... +Setting up libquadmath0:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Setting up libmpc3:amd64 (1.3.1-1build1.1) ... +Setting up libatomic1:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Setting up python3-pip (24.0+dfsg-1ubuntu1.3) ... +Setting up libdpkg-perl (1.22.6ubuntu6.5) ... +Setting up libubsan1:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Setting up zlib1g-dev:amd64 (1:1.3.dfsg-3.1ubuntu2.1) ... +Setting up libhwasan0:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Setting up libasan8:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Setting up libtsan2:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Setting up libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... +Setting up libbinutils:amd64 (2.42-4ubuntu2.8) ... +Setting up libisl23:amd64 (0.26-3build1.1) ... +Setting up libalgorithm-diff-xs-perl:amd64 (0.04-8build3) ... +Setting up libcc1-0:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Setting up liblsan0:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Setting up libitm1:amd64 (14.2.0-4ubuntu2~24.04.1) ... +Setting up libjs-underscore (1.13.4~dfsg+~1.11.4-3) ... +Setting up libalgorithm-merge-perl (0.08-5) ... +Setting up libctf0:amd64 (2.42-4ubuntu2.8) ... +Setting up python3.12-venv (3.12.3-1ubuntu0.11) ... +Setting up cpp-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04.1) ... +Setting up libpython3.12-dev:amd64 (3.12.3-1ubuntu0.11) ... +Setting up libgprofng0:amd64 (2.42-4ubuntu2.8) ... +Setting up python3-venv (3.12.3-0ubuntu2.1) ... +Setting up python3.12-dev (3.12.3-1ubuntu0.11) ... +Setting up libjs-sphinxdoc (7.2.6-6) ... +Setting up libgcc-13-dev:amd64 (13.3.0-6ubuntu2~24.04.1) ... +Setting up libstdc++-13-dev:amd64 (13.3.0-6ubuntu2~24.04.1) ... +Setting up binutils-x86-64-linux-gnu (2.42-4ubuntu2.8) ... +Setting up cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... +Setting up libpython3-dev:amd64 (3.12.3-0ubuntu2.1) ... +Setting up cpp-13 (13.3.0-6ubuntu2~24.04.1) ... +Setting up gcc-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04.1) ... +Setting up binutils (2.42-4ubuntu2.8) ... +Setting up dpkg-dev (1.22.6ubuntu6.5) ... +Setting up python3-dev (3.12.3-0ubuntu2.1) ... +Setting up gcc-13 (13.3.0-6ubuntu2~24.04.1) ... +Setting up cpp (4:13.2.0-7ubuntu1) ... +Setting up g++-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04.1) ... +Setting up gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... +Setting up gcc (4:13.2.0-7ubuntu1) ... +Setting up g++-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... +Setting up g++-13 (13.3.0-6ubuntu2~24.04.1) ... +Setting up g++ (4:13.2.0-7ubuntu1) ... +update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode +Setting up build-essential (12.10ubuntu1) ... +Processing triggers for man-db (2.12.0-4build2) ... +Processing triggers for libc-bin (2.39-0ubuntu8.7) ... +Scanning processes... +Scanning candidates... +Scanning linux images... + +Running kernel seems to be up-to-date. + +Restarting services... + systemctl restart multipathd.service packagekit.service polkit.service + +Service restarts being deferred: + /etc/needrestart/restart.d/dbus.service + systemctl restart unattended-upgrades.service + +No containers need to be restarted. + +User sessions running outdated binaries: + ubuntu @ session #1: apt[1405] + +No VM guests are running outdated hypervisor (qemu) binaries on this host. +ubuntu@fhmdplo02ifil4mk7odj:~$ sudo apt install -y python3-venv python3-pip +Reading package lists... Done +Building dependency tree... Done +Reading state information... Done +python3-venv is already the newest version (3.12.3-0ubuntu2.1). +python3-pip is already the newest version (24.0+dfsg-1ubuntu1.3). +0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded. +ubuntu@fhmdplo02ifil4mk7odj:~$ mkdir -p ~/app && cd ~/app +ubuntu@fhmdplo02ifil4mk7odj:~/app$ cat > app.py <<'PY' +> from flask import Flask +> app = Flask(__name__) +> +> @app.get("/") +> def hello(): +> return "OK: lab04 VM is alive\n" +> PY +ubuntu@fhmdplo02ifil4mk7odj:~/app$ python3 -m venv venv +ubuntu@fhmdplo02ifil4mk7odj:~/app$ source venv/bin/activate +(venv) ubuntu@fhmdplo02ifil4mk7odj:~/app$ pip install flask +Collecting flask + Downloading flask-3.1.3-py3-none-any.whl.metadata (3.2 kB) +Collecting blinker>=1.9.0 (from flask) + Downloading blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB) +Collecting click>=8.1.3 (from flask) + Downloading click-8.3.1-py3-none-any.whl.metadata (2.6 kB) +Collecting itsdangerous>=2.2.0 (from flask) + Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB) +Collecting jinja2>=3.1.2 (from flask) + Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB) +Collecting markupsafe>=2.1.1 (from flask) + Downloading markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB) +Collecting werkzeug>=3.1.0 (from flask) + Downloading werkzeug-3.1.6-py3-none-any.whl.metadata (4.0 kB) +Downloading flask-3.1.3-py3-none-any.whl (103 kB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 103.4/103.4 kB 1.8 MB/s eta 0:00:00 +Downloading blinker-1.9.0-py3-none-any.whl (8.5 kB) +Downloading click-8.3.1-py3-none-any.whl (108 kB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 108.3/108.3 kB 7.4 MB/s eta 0:00:00 +Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB) +Downloading jinja2-3.1.6-py3-none-any.whl (134 kB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.9/134.9 kB 8.5 MB/s eta 0:00:00 +Downloading markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22 kB) +Downloading werkzeug-3.1.6-py3-none-any.whl (225 kB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 225.2/225.2 kB 11.1 MB/s eta 0:00:00 +Installing collected packages: markupsafe, itsdangerous, click, blinker, werkzeug, jinja2, flask +Successfully installed blinker-1.9.0 click-8.3.1 flask-3.1.3 itsdangerous-2.2.0 jinja2-3.1.6 markupsafe-3.0.3 werkzeug-3.1.6 +(venv) ubuntu@fhmdplo02ifil4mk7odj:~/app$ FLASK_APP=app.py flask run --host=0.0.0.0 --port=5000 + * Serving Flask app 'app.py' + * Debug mode: off +WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.10.0.22:5000 +Press CTRL+C to quit +95.111.204.70 - - [19/Feb/2026 19:33:15] "GET / HTTP/1.1" 200 - +95.111.204.70 - - [19/Feb/2026 19:33:17] "GET /favicon.ico HTTP/1.1" 404 - \ No newline at end of file diff --git a/pulumi/.gitignore b/pulumi/.gitignore new file mode 100644 index 0000000000..4aff6b34cb --- /dev/null +++ b/pulumi/.gitignore @@ -0,0 +1,12 @@ +# Python +__pycache__/ +*.py[cod] +.venv/ +venv/ + +# Pulumi state/config +Pulumi.*.yaml + +# IDE +.vscode/ +.idea/ diff --git a/pulumi/Pulumi.yaml b/pulumi/Pulumi.yaml new file mode 100644 index 0000000000..7e92a0ad45 --- /dev/null +++ b/pulumi/Pulumi.yaml @@ -0,0 +1,6 @@ +name: lab04-pulumi-yc +runtime: + name: python + options: + virtualenv: venv +description: Lab04 infrastructure in Yandex Cloud using Pulumi (Python) diff --git a/pulumi/README.md b/pulumi/README.md new file mode 100644 index 0000000000..92b74ed68e --- /dev/null +++ b/pulumi/README.md @@ -0,0 +1,62 @@ +# Lab04 — Pulumi (Yandex Cloud, Python) + +## Before + +1) Download Pulumi. +2) Download Python 3.10+. +3) Download project requirements: + +```bash +python -m venv venv +# Windows: +# .\venv\Scripts\activate +# macOS/Linux: +# source venv/bin/activate +pip install -r requirements.txt +``` + +## Auth using Yandex Cloud + +Pulumi provider Yandex uses same env/confic as Terrarform +Simplier + +- add env variables `YC_TOKEN`, `YC_CLOUD_ID`, `YC_FOLDER_ID`, `YC_ZONE` + +or (using pulumi config): + +```bash +pulumi config set yandex:cloudId +pulumi config set yandex:folderId +pulumi config set yandex:zone ru-central1-a +pulumi config set --secret yandex:token +``` + +## Project settings (my vaaariables) + +```bash +pulumi config set zone ru-central1-a +pulumi config set subnetCidr 10.10.0.0/24 +pulumi config set allowedSshCidr "<ваш_IP>/32" + +pulumi config set sshUser ubuntu +pulumi config set sshPublicKeyPath "~/.ssh/lab04_ed25519.pub" +# либо: +# pulumi config set sshPublicKey "ssh-ed25519 AAAA... lab04" + +pulumi config set imageFamily ubuntu-2404-lts +``` + +## Start + +```bash +pulumi preview +pulumi up +``` + +After `pulumi up` in output will be `public_ip` and `ssh_command`. + +## Delete resourses + +```bash +pulumi destroy +``` diff --git a/pulumi/__main__.py b/pulumi/__main__.py new file mode 100644 index 0000000000..d8ea114bf9 --- /dev/null +++ b/pulumi/__main__.py @@ -0,0 +1,145 @@ +import os + +import pulumi +import pulumi_yandex as yandex + +cfg = pulumi.Config() + +# ----------------- +# Config (project) +# ----------------- +zone = cfg.get("zone") or os.getenv("YC_ZONE") or "ru-central1-a" +subnet_cidr = cfg.get("subnetCidr") or "10.10.0.0/24" +allowed_ssh_cidr = cfg.get("allowedSshCidr") or "0.0.0.0/0" + +ssh_user = cfg.get("sshUser") or "ubuntu" +ssh_public_key = cfg.get("sshPublicKey") +ssh_public_key_path = cfg.get("sshPublicKeyPath") + +image_family = cfg.get("imageFamily") or "ubuntu-2404-lts" + +vm_cores = int(cfg.get("vmCores") or 2) +vm_memory_gb = int(cfg.get("vmMemoryGb") or 1) +vm_core_fraction = int(cfg.get("vmCoreFraction") or 20) + +disk_size_gb = int(cfg.get("diskSizeGb") or 10) +disk_type = cfg.get("diskType") or "network-hdd" + +platform_id = cfg.get("platformId") or "standard-v2" + +# SSH public key: either inline or from file +if not ssh_public_key: + if ssh_public_key_path: + path = os.path.expanduser(ssh_public_key_path) + with open(path, "r", encoding="utf-8") as f: + ssh_public_key = f.read().strip() + else: + raise Exception( + "Set sshPublicKey (inline) or sshPublicKeyPath (path to .pub) via pulumi config" + ) + +# ----------------- +# Data: image +# ----------------- +image = yandex.get_compute_image(family=image_family) + +# ----------------- +# Network +# ----------------- +net = yandex.VpcNetwork("lab04-net") + +subnet = yandex.VpcSubnet( + "lab04-subnet", + network_id=net.id, + zone=zone, + v4_cidr_blocks=[subnet_cidr], +) + +# ----------------- +# Security Group +# ----------------- +sg = yandex.VpcSecurityGroup( + "lab04-sg", + network_id=net.id, + ingress=[ + yandex.VpcSecurityGroupIngressArgs( + protocol="TCP", + description="SSH", + v4_cidr_blocks=[allowed_ssh_cidr], + port=22, + ), + yandex.VpcSecurityGroupIngressArgs( + protocol="TCP", + description="HTTP", + v4_cidr_blocks=["0.0.0.0/0"], + port=80, + ), + yandex.VpcSecurityGroupIngressArgs( + protocol="TCP", + description="App 5000", + v4_cidr_blocks=["0.0.0.0/0"], + port=5000, + ), + ], + egress=[ + yandex.VpcSecurityGroupEgressArgs( + protocol="ANY", + description="Allow all outbound", + v4_cidr_blocks=["0.0.0.0/0"], + from_port=0, + to_port=65535, + ) + ], +) + +# ----------------- +# VM +# ----------------- +vm = yandex.ComputeInstance( + "lab04-vm", + zone=zone, + platform_id=platform_id, + resources=yandex.ComputeInstanceResourcesArgs( + cores=vm_cores, + memory=vm_memory_gb, + core_fraction=vm_core_fraction, + ), + boot_disk=yandex.ComputeInstanceBootDiskArgs( + initialize_params=yandex.ComputeInstanceBootDiskInitializeParamsArgs( + image_id=image.id, + size=disk_size_gb, + type=disk_type, + ) + ), + network_interfaces=[ + yandex.ComputeInstanceNetworkInterfaceArgs( + subnet_id=subnet.id, + nat=True, + security_group_ids=[sg.id], + ) + ], + metadata={ + "ssh-keys": f"{ssh_user}:{ssh_public_key}", + }, + allow_stopping_for_update=True, +) + + +def _nat_ip(network_interfaces): + """Handle both dict-style and typed outputs.""" + ni0 = network_interfaces[0] + if isinstance(ni0, dict): + return ni0.get("nat_ip_address") + return getattr(ni0, "nat_ip_address", None) + + +public_ip = vm.network_interfaces.apply(_nat_ip) +internal_ip = vm.network_interfaces.apply( + lambda nis: nis[0].get("ip_address") if isinstance(nis[0], dict) else getattr(nis[0], "ip_address", None) +) + +pulumi.export("public_ip", public_ip) +pulumi.export("internal_ip", internal_ip) +pulumi.export("ssh_command", public_ip.apply(lambda ip: f"ssh -i ~/.ssh/lab04_ed25519 {ssh_user}@{ip}")) +pulumi.export("http_url", public_ip.apply(lambda ip: f"http://{ip}/")) +pulumi.export("app_url", public_ip.apply(lambda ip: f"http://{ip}:5000/")) diff --git a/pulumi/requirements.txt b/pulumi/requirements.txt new file mode 100644 index 0000000000..4fcd3c0981 --- /dev/null +++ b/pulumi/requirements.txt @@ -0,0 +1,2 @@ +pulumi>=3.0.0,<4.0.0 +pulumi-yandex diff --git a/scripts/load-env.ps1 b/scripts/load-env.ps1 new file mode 100644 index 0000000000..498d804eea --- /dev/null +++ b/scripts/load-env.ps1 @@ -0,0 +1,33 @@ +$envFile = Join-Path (Get-Location) ".env" +if (!(Test-Path $envFile)) { + throw "Не найден .env в корне: $envFile" +} + +Get-Content $envFile | ForEach-Object { + $line = $_.Trim() + if ($line.Length -eq 0) { return } + if ($line.StartsWith("#")) { return } + + $parts = $line -split "=", 2 + if ($parts.Count -ne 2) { return } + + $name = $parts[0].Trim() + $value = $parts[1].Trim().Trim('"').Trim("'") + + # экспорт в текущее окружение + Set-Item -Path "Env:$name" -Value $value +} + +# привести YC_SERVICE_ACCOUNT_KEY_FILE к абсолютному пути, если он относительный +if ($env:YC_SERVICE_ACCOUNT_KEY_FILE -and !(Split-Path $env:YC_SERVICE_ACCOUNT_KEY_FILE -IsAbsolute)) { + $candidate = Join-Path (Get-Location) $env:YC_SERVICE_ACCOUNT_KEY_FILE + if (Test-Path $candidate) { + $env:YC_SERVICE_ACCOUNT_KEY_FILE = (Resolve-Path $candidate).Path + } +} + +Write-Host "Loaded .env OK" +Write-Host "YC_CLOUD_ID=$env:YC_CLOUD_ID" +Write-Host "YC_FOLDER_ID=$env:YC_FOLDER_ID" +Write-Host "YC_ZONE=$env:YC_ZONE" +Write-Host "YC_SERVICE_ACCOUNT_KEY_FILE=$env:YC_SERVICE_ACCOUNT_KEY_FILE" diff --git a/terraform/.gitignore b/terraform/.gitignore new file mode 100644 index 0000000000..2d2b98b02a --- /dev/null +++ b/terraform/.gitignore @@ -0,0 +1,21 @@ +# Terraform local state / cache +.terraform/ +*.tfstate +*.tfstate.* + +# Variables (не коммитим) +*.tfvars +terraform.tfvars + +# Crash logs +crash.log +crash.*.log + +# Override files +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# Lock file (в реальных проектах часто коммитят, но в рамках лабы можно игнорировать) +.terraform.lock.hcl diff --git a/terraform/.tflint.hcl b/terraform/.tflint.hcl new file mode 100644 index 0000000000..6eb5862287 --- /dev/null +++ b/terraform/.tflint.hcl @@ -0,0 +1,6 @@ +plugin "terraform" { + enabled = true +} + +# Базовые правила tflint включаются по умолчанию. +# Провайдер-специфичные ruleset'ы можно подключать отдельно, но для лабы достаточно базового. diff --git a/terraform/README.md b/terraform/README.md new file mode 100644 index 0000000000..def80b4b55 --- /dev/null +++ b/terraform/README.md @@ -0,0 +1,56 @@ +# Lab04 — Terraform (Yandex Cloud) + +Target: up the VM or netwwork and security group using ports **22/80/5000**. + +## Before + +1) Download Terraform. +2) Download YC CLI и залогиньтесь. +3) Prepare SSH-ключ (ed25519 рекомендуется): + +```bash +ssh-keygen -t ed25519 -C "lab04" -f ~/.ssh/lab04_ed25519 +``` + +## Variables settings + +Copy exaample andd fill: + +```bash +cp terraform.tfvars.example terraform.tfvars +``` + +Check that: +- `allowed_ssh_cidr` is better to take in outter IP `/32`. +- SSH-key may transfer using `ssh_public_key` (as a string), лor `ssh_public_key_path`. + +### How to transfer creds of Yandex Cloud + +There are 2 ways: + +**A) Using env:** +- `YC_TOKEN` или `YC_SERVICE_ACCOUNT_KEY_FILE` +- `YC_CLOUD_ID` +- `YC_FOLDER_ID` + +**B) Using terraform.tfvars:** +- `cloud_id`, `folder_id` +- `service_account_key_file` or `yc_token` + +## Start + +```bash +terraform init +terraform fmt +terraform validate +terraform plan +terraform apply +``` + +After `apply` Terraform outputs `public_ip` и `ssh_command`. + +## Delete resourses + +```bash +terraform destroy +``` diff --git a/terraform/github/.gitignore b/terraform/github/.gitignore new file mode 100644 index 0000000000..6c721539e4 --- /dev/null +++ b/terraform/github/.gitignore @@ -0,0 +1,7 @@ +.terraform/ +*.tfstate +*.tfstate.* +*.tfvars +terraform.tfvars +crash.log +.terraform.lock.hcl diff --git a/terraform/github/.tflint.hcl b/terraform/github/.tflint.hcl new file mode 100644 index 0000000000..75d15f14aa --- /dev/null +++ b/terraform/github/.tflint.hcl @@ -0,0 +1,3 @@ +plugin "terraform" { + enabled = true +} diff --git a/terraform/github/main.tf b/terraform/github/main.tf new file mode 100644 index 0000000000..2709d7849d --- /dev/null +++ b/terraform/github/main.tf @@ -0,0 +1,11 @@ +resource "github_repository" "course_repo" { + name = var.repo_name + description = var.repo_description + visibility = var.visibility + + has_issues = true + has_projects = false + has_wiki = false + + # auto_init = true # включите, если хотите создать repo с пустым коммитом +} diff --git a/terraform/github/outputs.tf b/terraform/github/outputs.tf new file mode 100644 index 0000000000..81dffb5fb3 --- /dev/null +++ b/terraform/github/outputs.tf @@ -0,0 +1,9 @@ +output "repo_full_name" { + value = github_repository.course_repo.full_name + description = "owner/name" +} + +output "repo_url" { + value = github_repository.course_repo.html_url + description = "URL репозитория" +} diff --git a/terraform/github/providers.tf b/terraform/github/providers.tf new file mode 100644 index 0000000000..fa406ffc5e --- /dev/null +++ b/terraform/github/providers.tf @@ -0,0 +1,8 @@ +provider "github" { + # Можно передать token/owner через переменные, либо через env: + # GITHUB_TOKEN + # GITHUB_OWNER (не всегда поддерживается, обычно owner задают в provider block) + + token = var.github_token != "" ? var.github_token : null + owner = var.github_owner != "" ? var.github_owner : null +} diff --git a/terraform/github/terraform.tfvars.example b/terraform/github/terraform.tfvars.example new file mode 100644 index 0000000000..3557c3db2d --- /dev/null +++ b/terraform/github/terraform.tfvars.example @@ -0,0 +1,14 @@ +# Лучше хранить токен в env: +# export GITHUB_TOKEN=... +# или в PowerShell: +# $env:GITHUB_TOKEN="..." + +# Но если надо: +# github_token = "..." # НЕ КОММИТИТЬ + +# Если owner не задан, GitHub provider обычно берёт owner из токена. +# github_owner = "your-username-or-org" + +repo_name = "DevOps-Core-Course" +repo_description = "DevOps course repository managed by Terraform" +visibility = "public" diff --git a/terraform/github/variables.tf b/terraform/github/variables.tf new file mode 100644 index 0000000000..87b10b3062 --- /dev/null +++ b/terraform/github/variables.tf @@ -0,0 +1,30 @@ +variable "github_token" { + type = string + description = "GitHub Personal Access Token (PAT). Можно оставить пустым и задать через env GITHUB_TOKEN" + default = "" + sensitive = true +} + +variable "github_owner" { + type = string + description = "Владелец (username или org). Можно оставить пустым — owner будет взят из токена (если провайдер сможет)" + default = "" +} + +variable "repo_name" { + type = string + description = "Название репозитория (например DevOps-Core-Course)" + default = "DevOps-Core-Course" +} + +variable "repo_description" { + type = string + description = "Описание репозитория" + default = "DevOps course repository managed by Terraform" +} + +variable "visibility" { + type = string + description = "public/private/internal" + default = "public" +} diff --git a/terraform/github/versions.tf b/terraform/github/versions.tf new file mode 100644 index 0000000000..dd2ecc138e --- /dev/null +++ b/terraform/github/versions.tf @@ -0,0 +1,10 @@ +terraform { + required_version = ">= 1.6.0" + + required_providers { + github = { + source = "integrations/github" + version = ">= 5.0.0" + } + } +} diff --git a/terraform/locals.tf b/terraform/locals.tf new file mode 100644 index 0000000000..3704986e2d --- /dev/null +++ b/terraform/locals.tf @@ -0,0 +1,15 @@ +locals { + # Можно задать ключ прямо строкой (ssh_public_key), а можно указать путь к файлу (ssh_public_key_path). + # try(...) нужен, чтобы terraform validate проходил даже без файла. + ssh_public_key_resolved = trimspace(coalesce( + (var.ssh_public_key != "" ? var.ssh_public_key : null), + try(file(var.ssh_public_key_path), null), + "" + )) + + instance_metadata = local.ssh_public_key_resolved != "" ? { + # Формат, который ожидает cloud-init в образах YC: "user:ssh_public_key" + # (см. офиц. примеры/доки) + "ssh-keys" = "${var.ssh_user}:${local.ssh_public_key_resolved}" + } : {} +} diff --git a/terraform/main.tf b/terraform/main.tf new file mode 100644 index 0000000000..b933dbe32d --- /dev/null +++ b/terraform/main.tf @@ -0,0 +1,88 @@ +data "yandex_compute_image" "os" { + family = var.image_family +} + +resource "yandex_vpc_network" "lab_net" { + name = "${var.project_name}-net" + labels = var.labels +} + +resource "yandex_vpc_subnet" "lab_subnet" { + name = "${var.project_name}-subnet" + zone = var.zone + network_id = yandex_vpc_network.lab_net.id + v4_cidr_blocks = [var.subnet_cidr] + labels = var.labels +} + +resource "yandex_vpc_security_group" "vm_sg" { + name = "${var.project_name}-sg" + description = "Security Group for Lab04 VM" + network_id = yandex_vpc_network.lab_net.id + + ingress { + description = "SSH from allowed CIDR" + protocol = "TCP" + v4_cidr_blocks = [var.allowed_ssh_cidr] + port = 22 + } + + ingress { + description = "HTTP" + protocol = "TCP" + v4_cidr_blocks = ["0.0.0.0/0"] + port = 80 + } + + ingress { + description = "App port (Flask)" + protocol = "TCP" + v4_cidr_blocks = ["0.0.0.0/0"] + port = 5000 + } + + egress { + description = "Allow all outbound" + protocol = "ANY" + v4_cidr_blocks = ["0.0.0.0/0"] + from_port = 0 + to_port = 65535 + } + + labels = var.labels +} + +resource "yandex_compute_instance" "vm" { + name = "${var.project_name}-vm" + platform_id = var.platform_id + zone = var.zone + + resources { + cores = var.vm_cores + memory = var.vm_memory_gb + core_fraction = var.vm_core_fraction + } + + scheduling_policy { + preemptible = var.preemptible + } + + boot_disk { + initialize_params { + image_id = data.yandex_compute_image.os.id + size = var.disk_size_gb + type = var.disk_type + } + } + + network_interface { + subnet_id = yandex_vpc_subnet.lab_subnet.id + nat = true + security_group_ids = [yandex_vpc_security_group.vm_sg.id] + } + + metadata = local.instance_metadata + + allow_stopping_for_update = true + labels = var.labels +} diff --git a/terraform/outputs.tf b/terraform/outputs.tf new file mode 100644 index 0000000000..1be16233f7 --- /dev/null +++ b/terraform/outputs.tf @@ -0,0 +1,29 @@ +output "vm_id" { + value = yandex_compute_instance.vm.id + description = "ID виртуальной машины" +} + +output "internal_ip" { + value = yandex_compute_instance.vm.network_interface[0].ip_address + description = "Внутренний IP (в подсети)" +} + +output "public_ip" { + value = yandex_compute_instance.vm.network_interface[0].nat_ip_address + description = "Публичный IP (NAT)" +} + +output "ssh_command" { + description = "Команда для подключения по SSH (подставьте путь к приватному ключу)" + value = "ssh -i ~/.ssh/id_ed25519 ${var.ssh_user}@${yandex_compute_instance.vm.network_interface[0].nat_ip_address}" +} + +output "http_url" { + description = "URL для HTTP (если вы поставите веб-сервер на VM)" + value = "http://${yandex_compute_instance.vm.network_interface[0].nat_ip_address}/" +} + +output "app_url" { + description = "URL для приложения на 5000 порту (если вы его запустите)" + value = "http://${yandex_compute_instance.vm.network_interface[0].nat_ip_address}:5000/" +} diff --git a/terraform/providers.tf b/terraform/providers.tf new file mode 100644 index 0000000000..365effc630 --- /dev/null +++ b/terraform/providers.tf @@ -0,0 +1,12 @@ +provider "yandex" { + # Можно передавать через переменные (terraform.tfvars), а можно через env: + # YC_CLOUD_ID, YC_FOLDER_ID, YC_TOKEN / YC_SERVICE_ACCOUNT_KEY_FILE + # Если значения пустые, Terraform передаст null и провайдер попробует взять их из env. + + cloud_id = var.cloud_id != "" ? var.cloud_id : null + folder_id = var.folder_id != "" ? var.folder_id : null + zone = var.zone + + token = var.yc_token != "" ? var.yc_token : null + service_account_key_file = var.service_account_key_file != "" ? var.service_account_key_file : null +} diff --git a/terraform/terraform.tfvars.example b/terraform/terraform.tfvars.example new file mode 100644 index 0000000000..e766e30f61 --- /dev/null +++ b/terraform/terraform.tfvars.example @@ -0,0 +1,40 @@ +# --- YC identifiers --- +# Можно оставить пустым и задать через env YC_CLOUD_ID / YC_FOLDER_ID +cloud_id = "" +folder_id = "" + +# --- Zone / Network --- +zone = "ru-central1-a" +subnet_cidr = "10.10.0.0/24" + +# Разрешить SSH только с вашего IP (пример): +# allowed_ssh_cidr = "93.184.216.34/32" +allowed_ssh_cidr = "0.0.0.0/0" + +# --- Auth --- +# Рекомендуется: env YC_TOKEN / YC_SERVICE_ACCOUNT_KEY_FILE. +# yc_token = "..." +# service_account_key_file = "C:/Users//key.json" + +# --- SSH --- +ssh_user = "ubuntu" + +# ВАРИАНТ 1: вставить ключ строкой +# ssh_public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... lab04" + +# ВАРИАНТ 2: путь до .pub +ssh_public_key_path = "~/.ssh/lab04_ed25519.pub" + +# --- VM sizing --- +vm_cores = 2 +vm_memory_gb = 1 +vm_core_fraction = 20 + +preemptible = false +platform_id = "standard-v2" +disk_size_gb = 10 +disk_type = "network-hdd" + +# image_family может отличаться. Если data source не найдёт образ — +# уточните доступные семьи образов в YC. +image_family = "ubuntu-2404-lts" diff --git a/terraform/variables.tf b/terraform/variables.tf new file mode 100644 index 0000000000..49f75e7e93 --- /dev/null +++ b/terraform/variables.tf @@ -0,0 +1,133 @@ +variable "project_name" { + type = string + description = "Префикс/название для ресурсов Lab04" + default = "lab04" +} + +variable "labels" { + type = map(string) + description = "Лейблы Yandex Cloud (опционально)" + default = { + project = "lab04" + } +} + +# --- Yandex Cloud provider config --- + +variable "cloud_id" { + type = string + description = "YC cloud_id (можно оставить пустым и задать через env YC_CLOUD_ID)" + default = "" +} + +variable "folder_id" { + type = string + description = "YC folder_id (можно оставить пустым и задать через env YC_FOLDER_ID)" + default = "b1g82kdcn5grlmu79ano" +} + +variable "zone" { + type = string + description = "Зона доступности (например, ru-central1-a)" + default = "ru-central1-a" +} + +variable "yc_token" { + type = string + description = "OAuth/IAM токен (можно оставить пустым и задать через env YC_TOKEN)" + default = "" + sensitive = true +} + +variable "service_account_key_file" { + type = string + description = "Путь к JSON-ключу сервисного аккаунта (можно оставить пустым и задать через env YC_SERVICE_ACCOUNT_KEY_FILE)" + default = "" + sensitive = true +} + +# --- Network / Security --- + +variable "subnet_cidr" { + type = string + description = "CIDR подсети" + default = "10.10.0.0/24" +} + +variable "allowed_ssh_cidr" { + type = string + description = "CIDR, откуда разрешён SSH (желательно ваш белый IP /32)" + # Чтобы не заблокировать себя на первом запуске, оставляем дефолт открытым. + # В отчёте лучше указать ваш IP/32. + default = "0.0.0.0/0" +} + +# --- VM --- + +variable "image_family" { + type = string + description = "Семейство образа (data.yandex_compute_image.family)" + default = "ubuntu-2404-lts" +} + +variable "platform_id" { + type = string + description = "Платформа VM" + default = "standard-v2" +} + +variable "vm_cores" { + type = number + description = "vCPU" + default = 2 +} + +variable "vm_memory_gb" { + type = number + description = "RAM (GB)" + default = 1 +} + +variable "vm_core_fraction" { + type = number + description = "Доля CPU (5/20/50/100). 20 часто дешевле" + default = 20 +} + +variable "disk_size_gb" { + type = number + description = "Размер диска (GB)" + default = 10 +} + +variable "disk_type" { + type = string + description = "Тип диска (например network-hdd / network-ssd)" + default = "network-hdd" +} + +variable "preemptible" { + type = bool + description = "Преемптивная VM (дешевле, но может выключаться)" + default = false +} + +# --- SSH keys --- + +variable "ssh_user" { + type = string + description = "Пользователь в образе (для Ubuntu обычно ubuntu)" + default = "ubuntu" +} + +variable "ssh_public_key" { + type = string + description = "Содержимое публичного ключа (ssh-ed25519 AAAA... comment). Можно не задавать, если задаёте ssh_public_key_path" + default = "" +} + +variable "ssh_public_key_path" { + type = string + description = "Путь к публичному ключу (например ~/.ssh/id_ed25519.pub). Используется, если ssh_public_key пустой" + default = "" +} diff --git a/terraform/versions.tf b/terraform/versions.tf new file mode 100644 index 0000000000..b0f4ecb816 --- /dev/null +++ b/terraform/versions.tf @@ -0,0 +1,12 @@ +terraform { + required_version = ">= 1.6.0" + + required_providers { + yandex = { + source = "yandex-cloud/yandex" + # Не фиксируем точную версию, чтобы не ломаться при обновлениях. + # При желании можно зафиксировать (например, ">= 0.170.0"). + version = ">= 0.100.0" + } + } +} From 11d5b0b773f8bbb0c881c2e4b63cfd4028593bbc Mon Sep 17 00:00:00 2001 From: dorley174 Date: Thu, 19 Feb 2026 23:56:21 +0300 Subject: [PATCH 15/20] finished work with pulumi --- app_python/docs/LAB04.md | 2 +- lab04_proofs/pulumi_config_log.txt | 282 ++++++++++++ lab04_proofs/pulumi_result.txt | 0 .../{ubuntu_logs.txt => terraform_result.txt} | 0 .../dev/dev.1771534421400792500.json | 427 ++++++++++++++++++ .../dev/dev.1771534421400792500.json.attrs | 1 + .../dev-1771534421389384600.checkpoint.json | 427 ++++++++++++++++++ ...-1771534421389384600.checkpoint.json.attrs | 1 + .../dev/dev-1771534421389384600.history.json | 44 ++ ...dev-1771534421389384600.history.json.attrs | 1 + pulumi/.pulumi-state/.pulumi/meta.yaml | 1 + pulumi/.pulumi-state/.pulumi/meta.yaml.attrs | 1 + .../.pulumi/stacks/lab04-pulumi-yc/dev.json | 427 ++++++++++++++++++ .../stacks/lab04-pulumi-yc/dev.json.attrs | 1 + .../stacks/lab04-pulumi-yc/dev.json.bak | 420 +++++++++++++++++ .../stacks/lab04-pulumi-yc/dev.json.bak.attrs | 1 + pulumi/__main__.py | 5 +- 17 files changed, 2038 insertions(+), 3 deletions(-) create mode 100644 lab04_proofs/pulumi_config_log.txt create mode 100644 lab04_proofs/pulumi_result.txt rename lab04_proofs/{ubuntu_logs.txt => terraform_result.txt} (100%) create mode 100644 pulumi/.pulumi-state/.pulumi/backups/lab04-pulumi-yc/dev/dev.1771534421400792500.json create mode 100644 pulumi/.pulumi-state/.pulumi/backups/lab04-pulumi-yc/dev/dev.1771534421400792500.json.attrs create mode 100644 pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.checkpoint.json create mode 100644 pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.checkpoint.json.attrs create mode 100644 pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.history.json create mode 100644 pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.history.json.attrs create mode 100644 pulumi/.pulumi-state/.pulumi/meta.yaml create mode 100644 pulumi/.pulumi-state/.pulumi/meta.yaml.attrs create mode 100644 pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json create mode 100644 pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.attrs create mode 100644 pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.bak create mode 100644 pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.bak.attrs diff --git a/app_python/docs/LAB04.md b/app_python/docs/LAB04.md index c5df87c5b8..32c243bde7 100644 --- a/app_python/docs/LAB04.md +++ b/app_python/docs/LAB04.md @@ -167,7 +167,7 @@ pulumi destroy There are workflow `.github/workflows/terraform-ci.yml`. -log +all logs in lab04 folder --- diff --git a/lab04_proofs/pulumi_config_log.txt b/lab04_proofs/pulumi_config_log.txt new file mode 100644 index 0000000000..94e3e04dd9 --- /dev/null +++ b/lab04_proofs/pulumi_config_log.txt @@ -0,0 +1,282 @@ +PS C:\DevOps\DevOps-Core-Course> git add . +PS C:\DevOps\DevOps-Core-Course> git commit -m "feat: added terraform lab part" +[lab04 4686605] feat: added terraform lab part + 30 files changed, 1767 insertions(+), 1 deletion(-) + create mode 100644 .github/workflows/terraform-ci.yml + create mode 100644 app_python/docs/LAB04.md + create mode 100644 lab04_proofs/proof.png + create mode 100644 lab04_proofs/terraform_intalling_log.txt + create mode 100644 lab04_proofs/ubuntu_logs.txt + create mode 100644 pulumi/.gitignore + create mode 100644 pulumi/Pulumi.yaml + create mode 100644 pulumi/README.md + create mode 100644 pulumi/__main__.py + create mode 100644 pulumi/requirements.txt + create mode 100644 scripts/load-env.ps1 + create mode 100644 terraform/.gitignore + create mode 100644 terraform/.tflint.hcl + create mode 100644 terraform/README.md + create mode 100644 terraform/github/.gitignore + create mode 100644 terraform/github/.tflint.hcl + create mode 100644 terraform/github/main.tf + create mode 100644 terraform/github/outputs.tf + create mode 100644 terraform/github/providers.tf + create mode 100644 terraform/github/terraform.tfvars.example + create mode 100644 terraform/github/variables.tf + create mode 100644 terraform/github/versions.tf + create mode 100644 terraform/locals.tf + create mode 100644 terraform/main.tf + create mode 100644 terraform/outputs.tf + create mode 100644 terraform/providers.tf + create mode 100644 terraform/terraform.tfvars.example + create mode 100644 terraform/variables.tf + create mode 100644 terraform/versions.tf +PS C:\DevOps\DevOps-Core-Course> git push origin lab04 +Enumerating objects: 47, done. +Counting objects: 100% (47/47), done. +Delta compression using up to 20 threads +Compressing objects: 100% (36/36), done. +Writing objects: 100% (41/41), 113.24 KiB | 5.66 MiB/s, done. +Total 41 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0) +remote: Resolving deltas: 100% (2/2), completed with 2 local objects. +remote: +remote: Create a pull request for 'lab04' on GitHub by visiting: +remote: https://github.com/dorley174/DevOps-Core-Course/pull/new/lab04 +remote: +To https://github.com/dorley174/DevOps-Core-Course + * [new branch] lab04 -> lab04 +PS C:\DevOps\DevOps-Core-Course> .\scripts\load-env.ps1 +Loaded .env OK +YC_CLOUD_ID=b1gca960emnn9qqikne9 +YC_FOLDER_ID=b1g82kdcn5grlmu79ano +YC_ZONE=ru-central1-a +YC_SERVICE_ACCOUNT_KEY_FILE=C:\DevOps\DevOps-Core-Course\key.json +PS C:\DevOps\DevOps-Core-Course> winget install -e --id Pulumi.Pulumi +Найдено Pulumi [Pulumi.Pulumi] Версия 3.222.0 +Лицензия на это приложение предоставлена вам владельцем. +Корпорация Майкрософт не несет ответственность за сторонние пакеты и не предоставляет для них никакие лицензии. +Скачивание https://github.com/pulumi/pulumi-winget/releases/download/v3.222.0/pulumi-3.222.0-windows-x64.msi + ██████████████████████████████ 87.8 MB / 87.8 MB +Хэш установщика успешно проверен +Запуск установки пакета... +Успешно установлено +PS C:\DevOps\DevOps-Core-Course> pulumi version +pulumi : Имя "pulumi" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте прави +льность написания имени, а также наличие и правильность пути, после чего повторите попытку. +строка:1 знак:1 ++ pulumi version ++ ~~~~~~ + + CategoryInfo : ObjectNotFound: (pulumi:String) [], CommandNotFoundException + + FullyQualifiedErrorId : CommandNotFoundException + +PS C:\DevOps\DevOps-Core-Course> + * Журнал восстановлен + + +PS C:\DevOps\DevOps-Core-Course> .\scripts\load-env.ps1 +Loaded .env OK +YC_CLOUD_ID=b1gca960emnn9qqikne9 +YC_FOLDER_ID=b1g82kdcn5grlmu79ano +YC_ZONE=ru-central1-a +YC_SERVICE_ACCOUNT_KEY_FILE=C:\DevOps\DevOps-Core-Course\key.json +PS C:\DevOps\DevOps-Core-Course> pulumi version +v3.222.0 +PS C:\DevOps\DevOps-Core-Course> mkdir pulumi +mkdir : Элемент с указанным именем C:\DevOps\DevOps-Core-Course\pulumi уже существует. +строка:1 знак:1 ++ mkdir pulumi ++ ~~~~~~~~~~~~ + + CategoryInfo : ResourceExists: (C:\DevOps\DevOps-Core-Course\pulumi:String) [New-Item], IOException + + FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand + +PS C:\DevOps\DevOps-Core-Course> cd pulumi +PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi new python +error: C:\DevOps\DevOps-Core-Course\pulumi is not empty; use --force to continue and overwrite existing files, or use --dir to specify an empty directory. +PS C:\DevOps\DevOps-Core-Course\pulumi> tree /f +Структура папок +Серийный номер тома: 56C3-7760 +C:. +│ .gitignore +│ Pulumi.yaml +│ README.md +│ requirements.txt +│ __main__.py +│ +└───__pycache__ + __main__.cpython-311.pyc + +PS C:\DevOps\DevOps-Core-Course\pulumi> python -m venv venv +PS C:\DevOps\DevOps-Core-Course\pulumi> .\venv\Scripts\activate +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pip install -r requirements.txt +Collecting pulumi<4.0.0,>=3.0.0 (from -r requirements.txt (line 1)) + Downloading pulumi-3.222.0-py3-none-any.whl.metadata (3.8 kB) +Collecting pulumi-yandex (from -r requirements.txt (line 2)) + Downloading pulumi_yandex-0.13.0.tar.gz (425 kB) + Installing build dependencies ... done + Getting requirements to build wheel ... done + Preparing metadata (pyproject.toml) ... done +Collecting debugpy~=1.8.7 (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) + Downloading debugpy-1.8.20-cp313-cp313-win_amd64.whl.metadata (1.5 kB) +Collecting dill~=0.4 (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) + Downloading dill-0.4.1-py3-none-any.whl.metadata (10 kB) +Collecting grpcio<2,>=1.68.1 (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) + Downloading grpcio-1.78.0-cp313-cp313-win_amd64.whl.metadata (3.9 kB) +Requirement already satisfied: pip>=24.3.1 in c:\devops\devops-core-course\pulumi\venv\lib\site-packages (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) (24.3.1) +Collecting protobuf<7,>=3.20.3 (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) + Downloading protobuf-6.33.5-cp310-abi3-win_amd64.whl.metadata (593 bytes) +Collecting pyyaml~=6.0 (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) + Downloading pyyaml-6.0.3-cp313-cp313-win_amd64.whl.metadata (2.4 kB) +Collecting semver~=3.0 (from pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) + Downloading semver-3.0.4-py3-none-any.whl.metadata (6.8 kB) +Collecting parver>=0.2.1 (from pulumi-yandex->-r requirements.txt (line 2)) + Downloading parver-0.5-py3-none-any.whl.metadata (2.7 kB) +Collecting typing-extensions~=4.12 (from grpcio<2,>=1.68.1->pulumi<4.0.0,>=3.0.0->-r requirements.txt (line 1)) + Using cached typing_extensions-4.15.0-py3-none-any.whl.metadata (3.3 kB) +Collecting arpeggio>=1.7 (from parver>=0.2.1->pulumi-yandex->-r requirements.txt (line 2)) + Downloading Arpeggio-2.0.3-py2.py3-none-any.whl.metadata (2.4 kB) +Collecting attrs>=19.2 (from parver>=0.2.1->pulumi-yandex->-r requirements.txt (line 2)) + Using cached attrs-25.4.0-py3-none-any.whl.metadata (10 kB) +Downloading pulumi-3.222.0-py3-none-any.whl (390 kB) +Downloading debugpy-1.8.20-cp313-cp313-win_amd64.whl (5.4 MB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.4/5.4 MB 7.1 MB/s eta 0:00:00 +Downloading dill-0.4.1-py3-none-any.whl (120 kB) +Downloading grpcio-1.78.0-cp313-cp313-win_amd64.whl (4.8 MB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.8/4.8 MB 7.6 MB/s eta 0:00:00 +Downloading parver-0.5-py3-none-any.whl (15 kB) +Downloading protobuf-6.33.5-cp310-abi3-win_amd64.whl (437 kB) +Downloading pyyaml-6.0.3-cp313-cp313-win_amd64.whl (154 kB) +Downloading semver-3.0.4-py3-none-any.whl (17 kB) +Downloading Arpeggio-2.0.3-py2.py3-none-any.whl (54 kB) +Using cached attrs-25.4.0-py3-none-any.whl (67 kB) +Using cached typing_extensions-4.15.0-py3-none-any.whl (44 kB) +Building wheels for collected packages: pulumi-yandex + Building wheel for pulumi-yandex (pyproject.toml) ... done + Created wheel for pulumi-yandex: filename=pulumi_yandex-0.13.0-py3-none-any.whl size=606675 sha256=8441929cfc6b1f5855695216aff4c9946e00cbdecca3d15f56ed027966eaa71e + Stored in directory: c:\users\данил\appdata\local\pip\cache\wheels\d0\b7\cf\9a6c587521036e8cbd68fa735d2f5d352bb7fb4f71d8d5aaac +Successfully built pulumi-yandex +Installing collected packages: arpeggio, typing-extensions, semver, pyyaml, protobuf, dill, debugpy, attrs, parver, grpcio, pulumi, pulumi-yandex +Successfully installed arpeggio-2.0.3 attrs-25.4.0 debugpy-1.8.20 dill-0.4.1 grpcio-1.78.0 parver-0.5 protobuf-6.33.5 pulumi-3.222.0 pulumi-yandex-0.13.0 pyyaml-6.0.3 semver-3.0.4 typing-extensions-4.15.0 + +[notice] A new release of pip is available: 24.3.1 -> 26.0.1 +[notice] To update, run: python.exe -m pip install --upgrade pip +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi version +v3.222.0 +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> python --version +Python 3.13.1 +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi login file://C:\DevOps\DevOps-Core-Course\pulumi\.pulumi-state +error: problem logging in: unable to open bucket file:///C:/DevOps/DevOps-Core-Course/pulumi/.pulumi-state?no_tmp_dir=true: GetFileAttributesEx C:\DevOps\DevOps-Core-Course\pulumi\.pulumi-state: The system cannot find the file specified. +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> New-Item -ItemType Directory -Force .pulumi-state | Out-Null +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi login file://C:\DevOps\DevOps-Core-Course\pulumi\.pulumi-state +Logged in to Dorley as Dorley\Данил (file://C:/DevOps/DevOps-Core-Course/pulumi/.pulumi-state) +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi whoami +Dorley\Данил +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi stack ls +NAME LAST UPDATE RESOURCE COUNT +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi stack init dev +Enter your passphrase to protect config/secrets: +Re-enter your passphrase to confirm: +Created stack 'dev' +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> cd C:\DevOps\DevOps-Core-Course +(venv) PS C:\DevOps\DevOps-Core-Course> .\scripts\load-env.ps1 +Loaded .env OK +YC_CLOUD_ID=b1gca960emnn9qqikne9 +YC_FOLDER_ID=b1g82kdcn5grlmu79ano +YC_ZONE=ru-central1-a +YC_SERVICE_ACCOUNT_KEY_FILE=C:\DevOps\DevOps-Core-Course\key.json +(venv) PS C:\DevOps\DevOps-Core-Course> cd pulumi +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> .\venv\Scripts\activate +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi config set zone ru-central1-a +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi config set subnetCidr 10.10.0.0/24 +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi config set allowedSshCidr "95.111.204.70/32" +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi config set sshUser ubuntu +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi config set sshPublicKeyPath "~/.ssh/lab04_ed25519.pub" +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi config set imageFamily ubuntu-2404-lts +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi preview +Enter your passphrase to unlock config/secrets + (set PULUMI_CONFIG_PASSPHRASE or PULUMI_CONFIG_PASSPHRASE_FILE to remember): +Enter your passphrase to unlock config/secrets +Previewing update (dev): + Type Name Plan Info + + pulumi:pulumi:Stack lab04-pulumi-yc-dev create 1 error +Diagnostics: + pulumi:pulumi:Stack (lab04-pulumi-yc-dev): + error: Program failed with an unhandled exception: + Traceback (most recent call last): + File "C:\DevOps\DevOps-Core-Course\pulumi\__main__.py", line 4, in + import pulumi_yandex as yandex + File "C:\DevOps\DevOps-Core-Course\pulumi\venv\Lib\site-packages\pulumi_yandex\__init__.py", line 5, in + from . import _utilities + File "C:\DevOps\DevOps-Core-Course\pulumi\venv\Lib\site-packages\pulumi_yandex\_utilities.py", line 10, in + import pkg_resources + ModuleNotFoundError: No module named 'pkg_resources' + +Resources: + + 1 to create + 1 errored + +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> python -m pip install --upgrade pip setuptools wheel +Requirement already satisfied: pip in c:\devops\devops-core-course\pulumi\venv\lib\site-packages (24.3.1) +Collecting pip + Downloading pip-26.0.1-py3-none-any.whl.metadata (4.7 kB) +Collecting setuptools + Using cached setuptools-82.0.0-py3-none-any.whl.metadata (6.6 kB) +Collecting wheel + Downloading wheel-0.46.3-py3-none-any.whl.metadata (2.4 kB) +Collecting packaging>=24.0 (from wheel) + Using cached packaging-26.0-py3-none-any.whl.metadata (3.3 kB) +Downloading pip-26.0.1-py3-none-any.whl (1.8 MB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 8.3 MB/s eta 0:00:00 +Using cached setuptools-82.0.0-py3-none-any.whl (1.0 MB) +Downloading wheel-0.46.3-py3-none-any.whl (30 kB) +Using cached packaging-26.0-py3-none-any.whl (74 kB) +Installing collected packages: setuptools, pip, packaging, wheel + Attempting uninstall: pip + Found existing installation: pip 24.3.1 + Uninstalling pip-24.3.1: + Successfully uninstalled pip-24.3.1 +Successfully installed packaging-26.0 pip-26.0.1 setuptools-82.0.0 wheel-0.46.3 +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> python -c "import pkg_resources; print('pkg_resources OK')" +Traceback (most recent call last): + File "", line 1, in + import pkg_resources; print('pkg_resources OK') + ^^^^^^^^^^^^^^^^^^^^ +ModuleNotFoundError: No module named 'pkg_resources' +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> winget install -e --id Python.Python.3.12 +Найден существующий установленный пакет. Попытка обновления установленного пакета... +Найдено Python 3.12 [Python.Python.3.12] Версия 3.12.10 +Лицензия на это приложение предоставлена вам владельцем. +Корпорация Майкрософт не несет ответственность за сторонние пакеты и не предоставляет для них никакие лицензии. +Скачивание https://www.python.org/ftp/python/3.12.10/python-3.12.10-amd64.exe + ██████████████████████████████ 25.7 MB / 25.7 MB +Хэш установщика успешно проверен +Запуск установки пакета... +Вы отменили установку. +Сбой установки с кодом выхода: 1602 +Журнал установщика доступен по адресу: C:\Users\Данил\AppData\Local\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir\Python.Python.3.12.3.12.10-26-02-19-23-43-29.log +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pip uninstall -y setuptools +Found existing installation: setuptools 82.0.0 +Uninstalling setuptools-82.0.0: + Successfully uninstalled setuptools-82.0.0 +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pip install setuptools==80.9.0 +Collecting setuptools==80.9.0 + Downloading setuptools-80.9.0-py3-none-any.whl.metadata (6.6 kB) +Downloading setuptools-80.9.0-py3-none-any.whl (1.2 MB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 6.8 MB/s 0:00:00 +Installing collected packages: setuptools +Successfully installed setuptools-80.9.0 +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> python -c "import pkg_resources; print('pkg_resources OK')" +:1: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81. + import pkg_resources; print('pkg_resources OK') +pkg_resources OK +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi stack ls +NAME LAST UPDATE RESOURCE COUNT +dev* 11 minutes ago 0 +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi stack select dev +(venv) PS C:\DevOps\DevOps-Core-Course\pulumi> pulumi config +KEY VALUE +allowedSshCidr 95.111.204.70/32 +imageFamily ubuntu-2404-lts +sshPublicKeyPath ~/.ssh/lab04_ed25519.pub +sshUser ubuntu +subnetCidr 10.10.0.0/24 +zone ru-central1-a \ No newline at end of file diff --git a/lab04_proofs/pulumi_result.txt b/lab04_proofs/pulumi_result.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lab04_proofs/ubuntu_logs.txt b/lab04_proofs/terraform_result.txt similarity index 100% rename from lab04_proofs/ubuntu_logs.txt rename to lab04_proofs/terraform_result.txt diff --git a/pulumi/.pulumi-state/.pulumi/backups/lab04-pulumi-yc/dev/dev.1771534421400792500.json b/pulumi/.pulumi-state/.pulumi/backups/lab04-pulumi-yc/dev/dev.1771534421400792500.json new file mode 100644 index 0000000000..b14f996692 --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/backups/lab04-pulumi-yc/dev/dev.1771534421400792500.json @@ -0,0 +1,427 @@ +{ + "version": 3, + "checkpoint": { + "stack": "organization/lab04-pulumi-yc/dev", + "latest": { + "manifest": { + "time": "2026-02-19T23:53:41.118824+03:00", + "magic": "7b54cd6e79f5cecd9ae124cb92b834b486c7e21993124e3a4e456c27c3ce48f9", + "version": "v3.222.0" + }, + "secrets_providers": { + "type": "passphrase", + "state": { + "salt": "v1:3yNf1Kmt4mA=:v1:Uk9In8z0RD2XJTza:lncnLY42u3UftJy+QfrDw6S2OT6vmQ==" + } + }, + "resources": [ + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0", + "custom": true, + "id": "7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "type": "pulumi:providers:yandex", + "inputs": { + "__internal": {}, + "version": "0.13.0" + }, + "outputs": { + "version": "0.13.0" + }, + "created": "2026-02-19T20:52:45.8287147Z", + "modified": "2026-02-19T20:52:45.8287147Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "custom": false, + "type": "pulumi:pulumi:Stack", + "outputs": { + "app_url": "http://89.169.135.154:5000/", + "http_url": "http://89.169.135.154/", + "internal_ip": "10.10.0.6", + "public_ip": "89.169.135.154", + "ssh_command": "ssh -i ~/.ssh/lab04_ed25519 ubuntu@89.169.135.154" + }, + "created": "2026-02-19T20:52:45.8630518Z", + "modified": "2026-02-19T20:52:45.8630518Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net", + "custom": true, + "id": "enpet9l87ashn294afa1", + "type": "yandex:index/vpcNetwork:VpcNetwork", + "inputs": { + "__defaults": [ + "name" + ], + "name": "lab04-net-7bf49ed" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":60000000000,\"delete\":60000000000,\"update\":60000000000}}", + "createdAt": "2026-02-19T20:52:48Z", + "defaultSecurityGroupId": "enp912ofg69vrp8iegur", + "description": "", + "folderId": "b1g82kdcn5grlmu79ano", + "id": "enpet9l87ashn294afa1", + "labels": {}, + "name": "lab04-net-7bf49ed", + "subnetIds": [] + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "created": "2026-02-19T20:52:49.994421Z", + "modified": "2026-02-19T20:52:49.994421Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet", + "custom": true, + "id": "e9b3hl3h09t6drs68pbg", + "type": "yandex:index/vpcSubnet:VpcSubnet", + "inputs": { + "__defaults": [ + "name" + ], + "name": "lab04-subnet-1fa918f", + "networkId": "enpet9l87ashn294afa1", + "v4CidrBlocks": [ + "10.10.0.0/24" + ], + "zone": "ru-central1-a" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":180000000000,\"delete\":180000000000,\"update\":180000000000}}", + "createdAt": "2026-02-19T20:52:50Z", + "description": "", + "dhcpOptions": null, + "folderId": "b1g82kdcn5grlmu79ano", + "id": "e9b3hl3h09t6drs68pbg", + "labels": {}, + "name": "lab04-subnet-1fa918f", + "networkId": "enpet9l87ashn294afa1", + "routeTableId": "", + "v4CidrBlocks": [ + "10.10.0.0/24" + ], + "v6CidrBlocks": [], + "zone": "ru-central1-a" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "networkId": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "v4CidrBlocks": [], + "zone": [] + }, + "created": "2026-02-19T20:52:50.5480973Z", + "modified": "2026-02-19T20:52:50.5480973Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "custom": true, + "id": "enpb8heveqi8pp7mvbcv", + "type": "yandex:index/vpcSecurityGroup:VpcSecurityGroup", + "inputs": { + "__defaults": [ + "name" + ], + "egresses": [ + { + "__defaults": [ + "port" + ], + "description": "Allow all outbound", + "fromPort": 0, + "port": -1, + "protocol": "ANY", + "toPort": 65535, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + } + ], + "ingresses": [ + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "SSH", + "fromPort": -1, + "port": 22, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "95.111.204.70/32" + ] + }, + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "HTTP", + "fromPort": -1, + "port": 80, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + }, + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "App 5000", + "fromPort": -1, + "port": 5000, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + } + ], + "name": "lab04-sg-7fdbda7", + "networkId": "enpet9l87ashn294afa1" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":180000000000,\"delete\":180000000000,\"update\":180000000000}}", + "createdAt": "2026-02-19T20:52:52Z", + "description": "", + "egresses": [ + { + "description": "Allow all outbound", + "fromPort": 0, + "id": "enpqsfspqfq9fqiee48t", + "labels": {}, + "port": -1, + "predefinedTarget": "", + "protocol": "ANY", + "securityGroupId": "", + "toPort": 65535, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + } + ], + "folderId": "b1g82kdcn5grlmu79ano", + "id": "enpb8heveqi8pp7mvbcv", + "ingresses": [ + { + "description": "SSH", + "fromPort": -1, + "id": "enpbhntafog7fraba6rd", + "labels": {}, + "port": 22, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "95.111.204.70/32" + ], + "v6CidrBlocks": [] + }, + { + "description": "HTTP", + "fromPort": -1, + "id": "enp80blit93rhb8rh3eb", + "labels": {}, + "port": 80, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + }, + { + "description": "App 5000", + "fromPort": -1, + "id": "enp39asi999eg5hhq4o1", + "labels": {}, + "port": 5000, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + } + ], + "labels": {}, + "name": "lab04-sg-7fdbda7", + "networkId": "enpet9l87ashn294afa1", + "status": "ACTIVE" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "egresses": [], + "ingresses": [], + "networkId": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ] + }, + "created": "2026-02-19T20:52:52.5246052Z", + "modified": "2026-02-19T20:52:52.5246052Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/computeInstance:ComputeInstance::lab04-vm", + "custom": true, + "id": "fhm7ed1a5b85rs8u3uop", + "type": "yandex:index/computeInstance:ComputeInstance", + "inputs": { + "__defaults": [ + "name", + "networkAccelerationType" + ], + "allowStoppingForUpdate": true, + "bootDisk": { + "__defaults": [ + "autoDelete" + ], + "autoDelete": true, + "initializeParams": { + "__defaults": [], + "imageId": "fd8lt661chfo5i13a40d", + "size": 10, + "type": "network-hdd" + } + }, + "metadata": { + "__defaults": [], + "ssh-keys": "ubuntu:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII5nKglXX/E2/S3oPKXahGr77IZELnnZlqE4oGCyEhZQ Данил@Dorley" + }, + "name": "lab04-vm-6023a00", + "networkAccelerationType": "standard", + "networkInterfaces": [ + { + "__defaults": [ + "ipv4" + ], + "ipv4": true, + "nat": true, + "securityGroupIds": [ + "enpb8heveqi8pp7mvbcv" + ], + "subnetId": "e9b3hl3h09t6drs68pbg" + } + ], + "platformId": "standard-v2", + "resources": { + "__defaults": [], + "coreFraction": 20, + "cores": 2, + "memory": 1 + }, + "zone": "ru-central1-a" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":300000000000,\"delete\":300000000000,\"update\":300000000000},\"schema_version\":\"1\"}", + "allowStoppingForUpdate": true, + "bootDisk": { + "autoDelete": true, + "deviceName": "fhmonvdcv96scusbdsm3", + "diskId": "fhmonvdcv96scusbdsm3", + "initializeParams": { + "blockSize": 4096, + "description": "", + "imageId": "fd8lt661chfo5i13a40d", + "name": "", + "size": 10, + "snapshotId": "", + "type": "network-hdd" + }, + "mode": "READ_WRITE" + }, + "createdAt": "2026-02-19T20:52:53Z", + "description": "", + "folderId": "b1g82kdcn5grlmu79ano", + "fqdn": "fhm7ed1a5b85rs8u3uop.auto.internal", + "hostname": "fhm7ed1a5b85rs8u3uop", + "id": "fhm7ed1a5b85rs8u3uop", + "labels": {}, + "metadata": { + "ssh-keys": "ubuntu:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII5nKglXX/E2/S3oPKXahGr77IZELnnZlqE4oGCyEhZQ Данил@Dorley" + }, + "name": "lab04-vm-6023a00", + "networkAccelerationType": "standard", + "networkInterfaces": [ + { + "dnsRecords": [], + "index": 0, + "ipAddress": "10.10.0.6", + "ipv4": true, + "ipv6": false, + "ipv6Address": "", + "ipv6DnsRecords": [], + "macAddress": "d0:0d:77:34:2a:2a", + "nat": true, + "natDnsRecords": [], + "natIpAddress": "89.169.135.154", + "natIpVersion": "IPV4", + "securityGroupIds": [ + "enpb8heveqi8pp7mvbcv" + ], + "subnetId": "e9b3hl3h09t6drs68pbg" + } + ], + "placementPolicy": { + "placementGroupId": "" + }, + "platformId": "standard-v2", + "resources": { + "coreFraction": 20, + "cores": 2, + "gpus": 0, + "memory": 1 + }, + "schedulingPolicy": { + "preemptible": false + }, + "secondaryDisks": [], + "serviceAccountId": "", + "status": "running", + "zone": "ru-central1-a" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "allowStoppingForUpdate": [], + "bootDisk": [], + "metadata": [], + "networkInterfaces": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet" + ], + "platformId": [], + "resources": [], + "zone": [] + }, + "created": "2026-02-19T20:53:41.0764236Z", + "modified": "2026-02-19T20:53:41.0764236Z" + } + ], + "metadata": {} + } + } +} diff --git a/pulumi/.pulumi-state/.pulumi/backups/lab04-pulumi-yc/dev/dev.1771534421400792500.json.attrs b/pulumi/.pulumi-state/.pulumi/backups/lab04-pulumi-yc/dev/dev.1771534421400792500.json.attrs new file mode 100644 index 0000000000..4dbba8b4a3 --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/backups/lab04-pulumi-yc/dev/dev.1771534421400792500.json.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"text/plain; charset=utf-8","user.metadata":null,"md5":"8aVExZ8N8dRKSmZc6/Q9ng=="} diff --git a/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.checkpoint.json b/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.checkpoint.json new file mode 100644 index 0000000000..b14f996692 --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.checkpoint.json @@ -0,0 +1,427 @@ +{ + "version": 3, + "checkpoint": { + "stack": "organization/lab04-pulumi-yc/dev", + "latest": { + "manifest": { + "time": "2026-02-19T23:53:41.118824+03:00", + "magic": "7b54cd6e79f5cecd9ae124cb92b834b486c7e21993124e3a4e456c27c3ce48f9", + "version": "v3.222.0" + }, + "secrets_providers": { + "type": "passphrase", + "state": { + "salt": "v1:3yNf1Kmt4mA=:v1:Uk9In8z0RD2XJTza:lncnLY42u3UftJy+QfrDw6S2OT6vmQ==" + } + }, + "resources": [ + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0", + "custom": true, + "id": "7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "type": "pulumi:providers:yandex", + "inputs": { + "__internal": {}, + "version": "0.13.0" + }, + "outputs": { + "version": "0.13.0" + }, + "created": "2026-02-19T20:52:45.8287147Z", + "modified": "2026-02-19T20:52:45.8287147Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "custom": false, + "type": "pulumi:pulumi:Stack", + "outputs": { + "app_url": "http://89.169.135.154:5000/", + "http_url": "http://89.169.135.154/", + "internal_ip": "10.10.0.6", + "public_ip": "89.169.135.154", + "ssh_command": "ssh -i ~/.ssh/lab04_ed25519 ubuntu@89.169.135.154" + }, + "created": "2026-02-19T20:52:45.8630518Z", + "modified": "2026-02-19T20:52:45.8630518Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net", + "custom": true, + "id": "enpet9l87ashn294afa1", + "type": "yandex:index/vpcNetwork:VpcNetwork", + "inputs": { + "__defaults": [ + "name" + ], + "name": "lab04-net-7bf49ed" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":60000000000,\"delete\":60000000000,\"update\":60000000000}}", + "createdAt": "2026-02-19T20:52:48Z", + "defaultSecurityGroupId": "enp912ofg69vrp8iegur", + "description": "", + "folderId": "b1g82kdcn5grlmu79ano", + "id": "enpet9l87ashn294afa1", + "labels": {}, + "name": "lab04-net-7bf49ed", + "subnetIds": [] + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "created": "2026-02-19T20:52:49.994421Z", + "modified": "2026-02-19T20:52:49.994421Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet", + "custom": true, + "id": "e9b3hl3h09t6drs68pbg", + "type": "yandex:index/vpcSubnet:VpcSubnet", + "inputs": { + "__defaults": [ + "name" + ], + "name": "lab04-subnet-1fa918f", + "networkId": "enpet9l87ashn294afa1", + "v4CidrBlocks": [ + "10.10.0.0/24" + ], + "zone": "ru-central1-a" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":180000000000,\"delete\":180000000000,\"update\":180000000000}}", + "createdAt": "2026-02-19T20:52:50Z", + "description": "", + "dhcpOptions": null, + "folderId": "b1g82kdcn5grlmu79ano", + "id": "e9b3hl3h09t6drs68pbg", + "labels": {}, + "name": "lab04-subnet-1fa918f", + "networkId": "enpet9l87ashn294afa1", + "routeTableId": "", + "v4CidrBlocks": [ + "10.10.0.0/24" + ], + "v6CidrBlocks": [], + "zone": "ru-central1-a" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "networkId": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "v4CidrBlocks": [], + "zone": [] + }, + "created": "2026-02-19T20:52:50.5480973Z", + "modified": "2026-02-19T20:52:50.5480973Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "custom": true, + "id": "enpb8heveqi8pp7mvbcv", + "type": "yandex:index/vpcSecurityGroup:VpcSecurityGroup", + "inputs": { + "__defaults": [ + "name" + ], + "egresses": [ + { + "__defaults": [ + "port" + ], + "description": "Allow all outbound", + "fromPort": 0, + "port": -1, + "protocol": "ANY", + "toPort": 65535, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + } + ], + "ingresses": [ + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "SSH", + "fromPort": -1, + "port": 22, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "95.111.204.70/32" + ] + }, + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "HTTP", + "fromPort": -1, + "port": 80, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + }, + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "App 5000", + "fromPort": -1, + "port": 5000, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + } + ], + "name": "lab04-sg-7fdbda7", + "networkId": "enpet9l87ashn294afa1" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":180000000000,\"delete\":180000000000,\"update\":180000000000}}", + "createdAt": "2026-02-19T20:52:52Z", + "description": "", + "egresses": [ + { + "description": "Allow all outbound", + "fromPort": 0, + "id": "enpqsfspqfq9fqiee48t", + "labels": {}, + "port": -1, + "predefinedTarget": "", + "protocol": "ANY", + "securityGroupId": "", + "toPort": 65535, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + } + ], + "folderId": "b1g82kdcn5grlmu79ano", + "id": "enpb8heveqi8pp7mvbcv", + "ingresses": [ + { + "description": "SSH", + "fromPort": -1, + "id": "enpbhntafog7fraba6rd", + "labels": {}, + "port": 22, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "95.111.204.70/32" + ], + "v6CidrBlocks": [] + }, + { + "description": "HTTP", + "fromPort": -1, + "id": "enp80blit93rhb8rh3eb", + "labels": {}, + "port": 80, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + }, + { + "description": "App 5000", + "fromPort": -1, + "id": "enp39asi999eg5hhq4o1", + "labels": {}, + "port": 5000, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + } + ], + "labels": {}, + "name": "lab04-sg-7fdbda7", + "networkId": "enpet9l87ashn294afa1", + "status": "ACTIVE" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "egresses": [], + "ingresses": [], + "networkId": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ] + }, + "created": "2026-02-19T20:52:52.5246052Z", + "modified": "2026-02-19T20:52:52.5246052Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/computeInstance:ComputeInstance::lab04-vm", + "custom": true, + "id": "fhm7ed1a5b85rs8u3uop", + "type": "yandex:index/computeInstance:ComputeInstance", + "inputs": { + "__defaults": [ + "name", + "networkAccelerationType" + ], + "allowStoppingForUpdate": true, + "bootDisk": { + "__defaults": [ + "autoDelete" + ], + "autoDelete": true, + "initializeParams": { + "__defaults": [], + "imageId": "fd8lt661chfo5i13a40d", + "size": 10, + "type": "network-hdd" + } + }, + "metadata": { + "__defaults": [], + "ssh-keys": "ubuntu:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII5nKglXX/E2/S3oPKXahGr77IZELnnZlqE4oGCyEhZQ Данил@Dorley" + }, + "name": "lab04-vm-6023a00", + "networkAccelerationType": "standard", + "networkInterfaces": [ + { + "__defaults": [ + "ipv4" + ], + "ipv4": true, + "nat": true, + "securityGroupIds": [ + "enpb8heveqi8pp7mvbcv" + ], + "subnetId": "e9b3hl3h09t6drs68pbg" + } + ], + "platformId": "standard-v2", + "resources": { + "__defaults": [], + "coreFraction": 20, + "cores": 2, + "memory": 1 + }, + "zone": "ru-central1-a" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":300000000000,\"delete\":300000000000,\"update\":300000000000},\"schema_version\":\"1\"}", + "allowStoppingForUpdate": true, + "bootDisk": { + "autoDelete": true, + "deviceName": "fhmonvdcv96scusbdsm3", + "diskId": "fhmonvdcv96scusbdsm3", + "initializeParams": { + "blockSize": 4096, + "description": "", + "imageId": "fd8lt661chfo5i13a40d", + "name": "", + "size": 10, + "snapshotId": "", + "type": "network-hdd" + }, + "mode": "READ_WRITE" + }, + "createdAt": "2026-02-19T20:52:53Z", + "description": "", + "folderId": "b1g82kdcn5grlmu79ano", + "fqdn": "fhm7ed1a5b85rs8u3uop.auto.internal", + "hostname": "fhm7ed1a5b85rs8u3uop", + "id": "fhm7ed1a5b85rs8u3uop", + "labels": {}, + "metadata": { + "ssh-keys": "ubuntu:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII5nKglXX/E2/S3oPKXahGr77IZELnnZlqE4oGCyEhZQ Данил@Dorley" + }, + "name": "lab04-vm-6023a00", + "networkAccelerationType": "standard", + "networkInterfaces": [ + { + "dnsRecords": [], + "index": 0, + "ipAddress": "10.10.0.6", + "ipv4": true, + "ipv6": false, + "ipv6Address": "", + "ipv6DnsRecords": [], + "macAddress": "d0:0d:77:34:2a:2a", + "nat": true, + "natDnsRecords": [], + "natIpAddress": "89.169.135.154", + "natIpVersion": "IPV4", + "securityGroupIds": [ + "enpb8heveqi8pp7mvbcv" + ], + "subnetId": "e9b3hl3h09t6drs68pbg" + } + ], + "placementPolicy": { + "placementGroupId": "" + }, + "platformId": "standard-v2", + "resources": { + "coreFraction": 20, + "cores": 2, + "gpus": 0, + "memory": 1 + }, + "schedulingPolicy": { + "preemptible": false + }, + "secondaryDisks": [], + "serviceAccountId": "", + "status": "running", + "zone": "ru-central1-a" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "allowStoppingForUpdate": [], + "bootDisk": [], + "metadata": [], + "networkInterfaces": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet" + ], + "platformId": [], + "resources": [], + "zone": [] + }, + "created": "2026-02-19T20:53:41.0764236Z", + "modified": "2026-02-19T20:53:41.0764236Z" + } + ], + "metadata": {} + } + } +} diff --git a/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.checkpoint.json.attrs b/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.checkpoint.json.attrs new file mode 100644 index 0000000000..4dbba8b4a3 --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.checkpoint.json.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"text/plain; charset=utf-8","user.metadata":null,"md5":"8aVExZ8N8dRKSmZc6/Q9ng=="} diff --git a/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.history.json b/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.history.json new file mode 100644 index 0000000000..aeb75b84a2 --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.history.json @@ -0,0 +1,44 @@ +{ + "kind": "update", + "startTime": 1771534364, + "message": "feat: added terraform lab part", + "environment": { + "exec.kind": "cli", + "git.author": "dorley174", + "git.author.email": "d.valiev@innopolis.university", + "git.committer": "dorley174", + "git.committer.email": "d.valiev@innopolis.university", + "git.dirty": "true", + "git.head": "46866051a9837ae9503ab3f8665d0317ce29e2dc", + "git.headName": "refs/heads/lab04", + "pulumi.arch": "amd64", + "pulumi.os": "windows", + "pulumi.version": "v3.222.0", + "runtime.executable": "C:\\DevOps\\DevOps-Core-Course\\pulumi\\venv\\Scripts\\python.exe", + "runtime.metadata.toolchain": "Pip", + "runtime.metadata.toolchainVersion": "26.0.1", + "runtime.metadata.typechecker": "None", + "runtime.name": "python", + "runtime.version": "3.13.1", + "stack.environments": "[]", + "updatePlan": "false", + "vcs.kind": "github.com", + "vcs.owner": "dorley174", + "vcs.repo": "DevOps-Core-Course", + "vcs.root": "pulumi" + }, + "config": { + "lab04-pulumi-yc:allowedSshCidr": "95.111.204.70/32", + "lab04-pulumi-yc:imageFamily": "ubuntu-2404-lts", + "lab04-pulumi-yc:sshPublicKeyPath": "~/.ssh/lab04_ed25519.pub", + "lab04-pulumi-yc:sshUser": "ubuntu", + "lab04-pulumi-yc:subnetCidr": "10.10.0.0/24", + "lab04-pulumi-yc:zone": "ru-central1-a" + }, + "version": 0, + "result": "succeeded", + "endTime": 1771534421, + "resourceChanges": { + "create": 5 + } +} diff --git a/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.history.json.attrs b/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.history.json.attrs new file mode 100644 index 0000000000..9921a06eaa --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/history/lab04-pulumi-yc/dev/dev-1771534421389384600.history.json.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"text/plain; charset=utf-8","user.metadata":null,"md5":"ff0qIY8bvz4izQQb8WO+fA=="} diff --git a/pulumi/.pulumi-state/.pulumi/meta.yaml b/pulumi/.pulumi-state/.pulumi/meta.yaml new file mode 100644 index 0000000000..b82551848c --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/meta.yaml @@ -0,0 +1 @@ +version: 1 diff --git a/pulumi/.pulumi-state/.pulumi/meta.yaml.attrs b/pulumi/.pulumi-state/.pulumi/meta.yaml.attrs new file mode 100644 index 0000000000..4466031b30 --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/meta.yaml.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"text/plain; charset=utf-8","user.metadata":null,"md5":"EaRWdV65+nlqCnYlI4a4Wg=="} diff --git a/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json b/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json new file mode 100644 index 0000000000..b14f996692 --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json @@ -0,0 +1,427 @@ +{ + "version": 3, + "checkpoint": { + "stack": "organization/lab04-pulumi-yc/dev", + "latest": { + "manifest": { + "time": "2026-02-19T23:53:41.118824+03:00", + "magic": "7b54cd6e79f5cecd9ae124cb92b834b486c7e21993124e3a4e456c27c3ce48f9", + "version": "v3.222.0" + }, + "secrets_providers": { + "type": "passphrase", + "state": { + "salt": "v1:3yNf1Kmt4mA=:v1:Uk9In8z0RD2XJTza:lncnLY42u3UftJy+QfrDw6S2OT6vmQ==" + } + }, + "resources": [ + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0", + "custom": true, + "id": "7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "type": "pulumi:providers:yandex", + "inputs": { + "__internal": {}, + "version": "0.13.0" + }, + "outputs": { + "version": "0.13.0" + }, + "created": "2026-02-19T20:52:45.8287147Z", + "modified": "2026-02-19T20:52:45.8287147Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "custom": false, + "type": "pulumi:pulumi:Stack", + "outputs": { + "app_url": "http://89.169.135.154:5000/", + "http_url": "http://89.169.135.154/", + "internal_ip": "10.10.0.6", + "public_ip": "89.169.135.154", + "ssh_command": "ssh -i ~/.ssh/lab04_ed25519 ubuntu@89.169.135.154" + }, + "created": "2026-02-19T20:52:45.8630518Z", + "modified": "2026-02-19T20:52:45.8630518Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net", + "custom": true, + "id": "enpet9l87ashn294afa1", + "type": "yandex:index/vpcNetwork:VpcNetwork", + "inputs": { + "__defaults": [ + "name" + ], + "name": "lab04-net-7bf49ed" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":60000000000,\"delete\":60000000000,\"update\":60000000000}}", + "createdAt": "2026-02-19T20:52:48Z", + "defaultSecurityGroupId": "enp912ofg69vrp8iegur", + "description": "", + "folderId": "b1g82kdcn5grlmu79ano", + "id": "enpet9l87ashn294afa1", + "labels": {}, + "name": "lab04-net-7bf49ed", + "subnetIds": [] + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "created": "2026-02-19T20:52:49.994421Z", + "modified": "2026-02-19T20:52:49.994421Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet", + "custom": true, + "id": "e9b3hl3h09t6drs68pbg", + "type": "yandex:index/vpcSubnet:VpcSubnet", + "inputs": { + "__defaults": [ + "name" + ], + "name": "lab04-subnet-1fa918f", + "networkId": "enpet9l87ashn294afa1", + "v4CidrBlocks": [ + "10.10.0.0/24" + ], + "zone": "ru-central1-a" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":180000000000,\"delete\":180000000000,\"update\":180000000000}}", + "createdAt": "2026-02-19T20:52:50Z", + "description": "", + "dhcpOptions": null, + "folderId": "b1g82kdcn5grlmu79ano", + "id": "e9b3hl3h09t6drs68pbg", + "labels": {}, + "name": "lab04-subnet-1fa918f", + "networkId": "enpet9l87ashn294afa1", + "routeTableId": "", + "v4CidrBlocks": [ + "10.10.0.0/24" + ], + "v6CidrBlocks": [], + "zone": "ru-central1-a" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "networkId": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "v4CidrBlocks": [], + "zone": [] + }, + "created": "2026-02-19T20:52:50.5480973Z", + "modified": "2026-02-19T20:52:50.5480973Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "custom": true, + "id": "enpb8heveqi8pp7mvbcv", + "type": "yandex:index/vpcSecurityGroup:VpcSecurityGroup", + "inputs": { + "__defaults": [ + "name" + ], + "egresses": [ + { + "__defaults": [ + "port" + ], + "description": "Allow all outbound", + "fromPort": 0, + "port": -1, + "protocol": "ANY", + "toPort": 65535, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + } + ], + "ingresses": [ + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "SSH", + "fromPort": -1, + "port": 22, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "95.111.204.70/32" + ] + }, + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "HTTP", + "fromPort": -1, + "port": 80, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + }, + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "App 5000", + "fromPort": -1, + "port": 5000, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + } + ], + "name": "lab04-sg-7fdbda7", + "networkId": "enpet9l87ashn294afa1" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":180000000000,\"delete\":180000000000,\"update\":180000000000}}", + "createdAt": "2026-02-19T20:52:52Z", + "description": "", + "egresses": [ + { + "description": "Allow all outbound", + "fromPort": 0, + "id": "enpqsfspqfq9fqiee48t", + "labels": {}, + "port": -1, + "predefinedTarget": "", + "protocol": "ANY", + "securityGroupId": "", + "toPort": 65535, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + } + ], + "folderId": "b1g82kdcn5grlmu79ano", + "id": "enpb8heveqi8pp7mvbcv", + "ingresses": [ + { + "description": "SSH", + "fromPort": -1, + "id": "enpbhntafog7fraba6rd", + "labels": {}, + "port": 22, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "95.111.204.70/32" + ], + "v6CidrBlocks": [] + }, + { + "description": "HTTP", + "fromPort": -1, + "id": "enp80blit93rhb8rh3eb", + "labels": {}, + "port": 80, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + }, + { + "description": "App 5000", + "fromPort": -1, + "id": "enp39asi999eg5hhq4o1", + "labels": {}, + "port": 5000, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + } + ], + "labels": {}, + "name": "lab04-sg-7fdbda7", + "networkId": "enpet9l87ashn294afa1", + "status": "ACTIVE" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "egresses": [], + "ingresses": [], + "networkId": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ] + }, + "created": "2026-02-19T20:52:52.5246052Z", + "modified": "2026-02-19T20:52:52.5246052Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/computeInstance:ComputeInstance::lab04-vm", + "custom": true, + "id": "fhm7ed1a5b85rs8u3uop", + "type": "yandex:index/computeInstance:ComputeInstance", + "inputs": { + "__defaults": [ + "name", + "networkAccelerationType" + ], + "allowStoppingForUpdate": true, + "bootDisk": { + "__defaults": [ + "autoDelete" + ], + "autoDelete": true, + "initializeParams": { + "__defaults": [], + "imageId": "fd8lt661chfo5i13a40d", + "size": 10, + "type": "network-hdd" + } + }, + "metadata": { + "__defaults": [], + "ssh-keys": "ubuntu:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII5nKglXX/E2/S3oPKXahGr77IZELnnZlqE4oGCyEhZQ Данил@Dorley" + }, + "name": "lab04-vm-6023a00", + "networkAccelerationType": "standard", + "networkInterfaces": [ + { + "__defaults": [ + "ipv4" + ], + "ipv4": true, + "nat": true, + "securityGroupIds": [ + "enpb8heveqi8pp7mvbcv" + ], + "subnetId": "e9b3hl3h09t6drs68pbg" + } + ], + "platformId": "standard-v2", + "resources": { + "__defaults": [], + "coreFraction": 20, + "cores": 2, + "memory": 1 + }, + "zone": "ru-central1-a" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":300000000000,\"delete\":300000000000,\"update\":300000000000},\"schema_version\":\"1\"}", + "allowStoppingForUpdate": true, + "bootDisk": { + "autoDelete": true, + "deviceName": "fhmonvdcv96scusbdsm3", + "diskId": "fhmonvdcv96scusbdsm3", + "initializeParams": { + "blockSize": 4096, + "description": "", + "imageId": "fd8lt661chfo5i13a40d", + "name": "", + "size": 10, + "snapshotId": "", + "type": "network-hdd" + }, + "mode": "READ_WRITE" + }, + "createdAt": "2026-02-19T20:52:53Z", + "description": "", + "folderId": "b1g82kdcn5grlmu79ano", + "fqdn": "fhm7ed1a5b85rs8u3uop.auto.internal", + "hostname": "fhm7ed1a5b85rs8u3uop", + "id": "fhm7ed1a5b85rs8u3uop", + "labels": {}, + "metadata": { + "ssh-keys": "ubuntu:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII5nKglXX/E2/S3oPKXahGr77IZELnnZlqE4oGCyEhZQ Данил@Dorley" + }, + "name": "lab04-vm-6023a00", + "networkAccelerationType": "standard", + "networkInterfaces": [ + { + "dnsRecords": [], + "index": 0, + "ipAddress": "10.10.0.6", + "ipv4": true, + "ipv6": false, + "ipv6Address": "", + "ipv6DnsRecords": [], + "macAddress": "d0:0d:77:34:2a:2a", + "nat": true, + "natDnsRecords": [], + "natIpAddress": "89.169.135.154", + "natIpVersion": "IPV4", + "securityGroupIds": [ + "enpb8heveqi8pp7mvbcv" + ], + "subnetId": "e9b3hl3h09t6drs68pbg" + } + ], + "placementPolicy": { + "placementGroupId": "" + }, + "platformId": "standard-v2", + "resources": { + "coreFraction": 20, + "cores": 2, + "gpus": 0, + "memory": 1 + }, + "schedulingPolicy": { + "preemptible": false + }, + "secondaryDisks": [], + "serviceAccountId": "", + "status": "running", + "zone": "ru-central1-a" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "allowStoppingForUpdate": [], + "bootDisk": [], + "metadata": [], + "networkInterfaces": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet" + ], + "platformId": [], + "resources": [], + "zone": [] + }, + "created": "2026-02-19T20:53:41.0764236Z", + "modified": "2026-02-19T20:53:41.0764236Z" + } + ], + "metadata": {} + } + } +} diff --git a/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.attrs b/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.attrs new file mode 100644 index 0000000000..4dbba8b4a3 --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"text/plain; charset=utf-8","user.metadata":null,"md5":"8aVExZ8N8dRKSmZc6/Q9ng=="} diff --git a/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.bak b/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.bak new file mode 100644 index 0000000000..5e5007b70d --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.bak @@ -0,0 +1,420 @@ +{ + "version": 3, + "checkpoint": { + "stack": "organization/lab04-pulumi-yc/dev", + "latest": { + "manifest": { + "time": "2026-02-19T23:53:41.0764236+03:00", + "magic": "7b54cd6e79f5cecd9ae124cb92b834b486c7e21993124e3a4e456c27c3ce48f9", + "version": "v3.222.0" + }, + "secrets_providers": { + "type": "passphrase", + "state": { + "salt": "v1:3yNf1Kmt4mA=:v1:Uk9In8z0RD2XJTza:lncnLY42u3UftJy+QfrDw6S2OT6vmQ==" + } + }, + "resources": [ + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0", + "custom": true, + "id": "7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "type": "pulumi:providers:yandex", + "inputs": { + "__internal": {}, + "version": "0.13.0" + }, + "outputs": { + "version": "0.13.0" + }, + "created": "2026-02-19T20:52:45.8287147Z", + "modified": "2026-02-19T20:52:45.8287147Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "custom": false, + "type": "pulumi:pulumi:Stack", + "created": "2026-02-19T20:52:45.8630518Z", + "modified": "2026-02-19T20:52:45.8630518Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net", + "custom": true, + "id": "enpet9l87ashn294afa1", + "type": "yandex:index/vpcNetwork:VpcNetwork", + "inputs": { + "__defaults": [ + "name" + ], + "name": "lab04-net-7bf49ed" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":60000000000,\"delete\":60000000000,\"update\":60000000000}}", + "createdAt": "2026-02-19T20:52:48Z", + "defaultSecurityGroupId": "enp912ofg69vrp8iegur", + "description": "", + "folderId": "b1g82kdcn5grlmu79ano", + "id": "enpet9l87ashn294afa1", + "labels": {}, + "name": "lab04-net-7bf49ed", + "subnetIds": [] + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "created": "2026-02-19T20:52:49.994421Z", + "modified": "2026-02-19T20:52:49.994421Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet", + "custom": true, + "id": "e9b3hl3h09t6drs68pbg", + "type": "yandex:index/vpcSubnet:VpcSubnet", + "inputs": { + "__defaults": [ + "name" + ], + "name": "lab04-subnet-1fa918f", + "networkId": "enpet9l87ashn294afa1", + "v4CidrBlocks": [ + "10.10.0.0/24" + ], + "zone": "ru-central1-a" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":180000000000,\"delete\":180000000000,\"update\":180000000000}}", + "createdAt": "2026-02-19T20:52:50Z", + "description": "", + "dhcpOptions": null, + "folderId": "b1g82kdcn5grlmu79ano", + "id": "e9b3hl3h09t6drs68pbg", + "labels": {}, + "name": "lab04-subnet-1fa918f", + "networkId": "enpet9l87ashn294afa1", + "routeTableId": "", + "v4CidrBlocks": [ + "10.10.0.0/24" + ], + "v6CidrBlocks": [], + "zone": "ru-central1-a" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "networkId": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "v4CidrBlocks": [], + "zone": [] + }, + "created": "2026-02-19T20:52:50.5480973Z", + "modified": "2026-02-19T20:52:50.5480973Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "custom": true, + "id": "enpb8heveqi8pp7mvbcv", + "type": "yandex:index/vpcSecurityGroup:VpcSecurityGroup", + "inputs": { + "__defaults": [ + "name" + ], + "egresses": [ + { + "__defaults": [ + "port" + ], + "description": "Allow all outbound", + "fromPort": 0, + "port": -1, + "protocol": "ANY", + "toPort": 65535, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + } + ], + "ingresses": [ + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "SSH", + "fromPort": -1, + "port": 22, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "95.111.204.70/32" + ] + }, + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "HTTP", + "fromPort": -1, + "port": 80, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + }, + { + "__defaults": [ + "fromPort", + "toPort" + ], + "description": "App 5000", + "fromPort": -1, + "port": 5000, + "protocol": "TCP", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ] + } + ], + "name": "lab04-sg-7fdbda7", + "networkId": "enpet9l87ashn294afa1" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":180000000000,\"delete\":180000000000,\"update\":180000000000}}", + "createdAt": "2026-02-19T20:52:52Z", + "description": "", + "egresses": [ + { + "description": "Allow all outbound", + "fromPort": 0, + "id": "enpqsfspqfq9fqiee48t", + "labels": {}, + "port": -1, + "predefinedTarget": "", + "protocol": "ANY", + "securityGroupId": "", + "toPort": 65535, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + } + ], + "folderId": "b1g82kdcn5grlmu79ano", + "id": "enpb8heveqi8pp7mvbcv", + "ingresses": [ + { + "description": "SSH", + "fromPort": -1, + "id": "enpbhntafog7fraba6rd", + "labels": {}, + "port": 22, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "95.111.204.70/32" + ], + "v6CidrBlocks": [] + }, + { + "description": "HTTP", + "fromPort": -1, + "id": "enp80blit93rhb8rh3eb", + "labels": {}, + "port": 80, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + }, + { + "description": "App 5000", + "fromPort": -1, + "id": "enp39asi999eg5hhq4o1", + "labels": {}, + "port": 5000, + "predefinedTarget": "", + "protocol": "TCP", + "securityGroupId": "", + "toPort": -1, + "v4CidrBlocks": [ + "0.0.0.0/0" + ], + "v6CidrBlocks": [] + } + ], + "labels": {}, + "name": "lab04-sg-7fdbda7", + "networkId": "enpet9l87ashn294afa1", + "status": "ACTIVE" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "egresses": [], + "ingresses": [], + "networkId": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcNetwork:VpcNetwork::lab04-net" + ] + }, + "created": "2026-02-19T20:52:52.5246052Z", + "modified": "2026-02-19T20:52:52.5246052Z" + }, + { + "urn": "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/computeInstance:ComputeInstance::lab04-vm", + "custom": true, + "id": "fhm7ed1a5b85rs8u3uop", + "type": "yandex:index/computeInstance:ComputeInstance", + "inputs": { + "__defaults": [ + "name", + "networkAccelerationType" + ], + "allowStoppingForUpdate": true, + "bootDisk": { + "__defaults": [ + "autoDelete" + ], + "autoDelete": true, + "initializeParams": { + "__defaults": [], + "imageId": "fd8lt661chfo5i13a40d", + "size": 10, + "type": "network-hdd" + } + }, + "metadata": { + "__defaults": [], + "ssh-keys": "ubuntu:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII5nKglXX/E2/S3oPKXahGr77IZELnnZlqE4oGCyEhZQ Данил@Dorley" + }, + "name": "lab04-vm-6023a00", + "networkAccelerationType": "standard", + "networkInterfaces": [ + { + "__defaults": [ + "ipv4" + ], + "ipv4": true, + "nat": true, + "securityGroupIds": [ + "enpb8heveqi8pp7mvbcv" + ], + "subnetId": "e9b3hl3h09t6drs68pbg" + } + ], + "platformId": "standard-v2", + "resources": { + "__defaults": [], + "coreFraction": 20, + "cores": 2, + "memory": 1 + }, + "zone": "ru-central1-a" + }, + "outputs": { + "__meta": "{\"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\":{\"create\":300000000000,\"delete\":300000000000,\"update\":300000000000},\"schema_version\":\"1\"}", + "allowStoppingForUpdate": true, + "bootDisk": { + "autoDelete": true, + "deviceName": "fhmonvdcv96scusbdsm3", + "diskId": "fhmonvdcv96scusbdsm3", + "initializeParams": { + "blockSize": 4096, + "description": "", + "imageId": "fd8lt661chfo5i13a40d", + "name": "", + "size": 10, + "snapshotId": "", + "type": "network-hdd" + }, + "mode": "READ_WRITE" + }, + "createdAt": "2026-02-19T20:52:53Z", + "description": "", + "folderId": "b1g82kdcn5grlmu79ano", + "fqdn": "fhm7ed1a5b85rs8u3uop.auto.internal", + "hostname": "fhm7ed1a5b85rs8u3uop", + "id": "fhm7ed1a5b85rs8u3uop", + "labels": {}, + "metadata": { + "ssh-keys": "ubuntu:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII5nKglXX/E2/S3oPKXahGr77IZELnnZlqE4oGCyEhZQ Данил@Dorley" + }, + "name": "lab04-vm-6023a00", + "networkAccelerationType": "standard", + "networkInterfaces": [ + { + "dnsRecords": [], + "index": 0, + "ipAddress": "10.10.0.6", + "ipv4": true, + "ipv6": false, + "ipv6Address": "", + "ipv6DnsRecords": [], + "macAddress": "d0:0d:77:34:2a:2a", + "nat": true, + "natDnsRecords": [], + "natIpAddress": "89.169.135.154", + "natIpVersion": "IPV4", + "securityGroupIds": [ + "enpb8heveqi8pp7mvbcv" + ], + "subnetId": "e9b3hl3h09t6drs68pbg" + } + ], + "placementPolicy": { + "placementGroupId": "" + }, + "platformId": "standard-v2", + "resources": { + "coreFraction": 20, + "cores": 2, + "gpus": 0, + "memory": 1 + }, + "schedulingPolicy": { + "preemptible": false + }, + "secondaryDisks": [], + "serviceAccountId": "", + "status": "running", + "zone": "ru-central1-a" + }, + "parent": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:pulumi:Stack::lab04-pulumi-yc-dev", + "dependencies": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet" + ], + "provider": "urn:pulumi:dev::lab04-pulumi-yc::pulumi:providers:yandex::default_0_13_0::7d12287d-55f3-465d-8fa0-e63bfc770a1f", + "propertyDependencies": { + "allowStoppingForUpdate": [], + "bootDisk": [], + "metadata": [], + "networkInterfaces": [ + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSecurityGroup:VpcSecurityGroup::lab04-sg", + "urn:pulumi:dev::lab04-pulumi-yc::yandex:index/vpcSubnet:VpcSubnet::lab04-subnet" + ], + "platformId": [], + "resources": [], + "zone": [] + }, + "created": "2026-02-19T20:53:41.0764236Z", + "modified": "2026-02-19T20:53:41.0764236Z" + } + ], + "metadata": {} + } + } +} diff --git a/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.bak.attrs b/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.bak.attrs new file mode 100644 index 0000000000..60a4efc8b8 --- /dev/null +++ b/pulumi/.pulumi-state/.pulumi/stacks/lab04-pulumi-yc/dev.json.bak.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"text/plain; charset=utf-8","user.metadata":null,"md5":"N1dWOE4/X1j2axM1iAPBng=="} diff --git a/pulumi/__main__.py b/pulumi/__main__.py index d8ea114bf9..738775ea30 100644 --- a/pulumi/__main__.py +++ b/pulumi/__main__.py @@ -61,7 +61,7 @@ sg = yandex.VpcSecurityGroup( "lab04-sg", network_id=net.id, - ingress=[ + ingresses=[ yandex.VpcSecurityGroupIngressArgs( protocol="TCP", description="SSH", @@ -81,7 +81,7 @@ port=5000, ), ], - egress=[ + egresses=[ yandex.VpcSecurityGroupEgressArgs( protocol="ANY", description="Allow all outbound", @@ -92,6 +92,7 @@ ], ) + # ----------------- # VM # ----------------- From 6d3473deb22625a1477b8559fe7513956a9a6c7d Mon Sep 17 00:00:00 2001 From: Dorley174 Date: Wed, 25 Feb 2026 22:46:53 +0300 Subject: [PATCH 16/20] added ansible setup --- .gitignore | 11 +- ansible/README.md | 13 ++ ansible/ansible.cfg | 12 ++ ansible/docs/LAB05.md | 154 +++++++++++++++++++++ ansible/group_vars/all.yml.example | 13 ++ ansible/inventory/hosts.ini | 9 ++ ansible/inventory/yandex.yml.example | 32 +++++ ansible/playbooks/deploy.yml | 7 + ansible/playbooks/provision.yml | 8 ++ ansible/playbooks/site.yml | 9 ++ ansible/requirements.yml | 4 + ansible/roles/app_deploy/defaults/main.yml | 20 +++ ansible/roles/app_deploy/handlers/main.yml | 6 + ansible/roles/app_deploy/tasks/main.yml | 76 ++++++++++ ansible/roles/common/defaults/main.yml | 20 +++ ansible/roles/common/tasks/main.yml | 14 ++ ansible/roles/docker/defaults/main.yml | 19 +++ ansible/roles/docker/handlers/main.yml | 5 + ansible/roles/docker/tasks/main.yml | 77 +++++++++++ 19 files changed, 508 insertions(+), 1 deletion(-) create mode 100644 ansible/README.md create mode 100644 ansible/ansible.cfg create mode 100644 ansible/docs/LAB05.md create mode 100644 ansible/group_vars/all.yml.example create mode 100644 ansible/inventory/hosts.ini create mode 100644 ansible/inventory/yandex.yml.example create mode 100644 ansible/playbooks/deploy.yml create mode 100644 ansible/playbooks/provision.yml create mode 100644 ansible/playbooks/site.yml create mode 100644 ansible/requirements.yml create mode 100644 ansible/roles/app_deploy/defaults/main.yml create mode 100644 ansible/roles/app_deploy/handlers/main.yml create mode 100644 ansible/roles/app_deploy/tasks/main.yml create mode 100644 ansible/roles/common/defaults/main.yml create mode 100644 ansible/roles/common/tasks/main.yml create mode 100644 ansible/roles/docker/defaults/main.yml create mode 100644 ansible/roles/docker/handlers/main.yml create mode 100644 ansible/roles/docker/tasks/main.yml diff --git a/.gitignore b/.gitignore index d61b66f420..f1f3a31b93 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,12 @@ test .env -key.json \ No newline at end of file +key.json +# --- Ansible --- +*.retry +.vault_pass +ansible/inventory/*.pyc +ansible/inventory/__pycache__/ +__pycache__/ + +# Do not commit real inventory with IPs if you don't want +# ansible/inventory/hosts.ini diff --git a/ansible/README.md b/ansible/README.md new file mode 100644 index 0000000000..1a1d813614 --- /dev/null +++ b/ansible/README.md @@ -0,0 +1,13 @@ +# Lab05 — Ansible + +См. `labs/lab05.md` (задание) и `ansible/docs/LAB05.md` (отчёт). + +Быстрые команды: + +```bash +cd ansible +ansible-galaxy collection install -r requirements.yml +ansible all -m ping +ansible-playbook playbooks/provision.yml +ansible-playbook playbooks/deploy.yml --ask-vault-pass +``` diff --git a/ansible/ansible.cfg b/ansible/ansible.cfg new file mode 100644 index 0000000000..56ea457fc1 --- /dev/null +++ b/ansible/ansible.cfg @@ -0,0 +1,12 @@ +[defaults] +inventory = inventory/hosts.ini +roles_path = roles +host_key_checking = False +remote_user = ubuntu +retry_files_enabled = False +interpreter_python = auto_silent + +[privilege_escalation] +become = True +become_method = sudo +become_user = root diff --git a/ansible/docs/LAB05.md b/ansible/docs/LAB05.md new file mode 100644 index 0000000000..e922b27c9d --- /dev/null +++ b/ansible/docs/LAB05.md @@ -0,0 +1,154 @@ +# LAB05 — Ansible Fundamentals (отчёт) + +> Этот файл — готовый шаблон. Выполните команды из инструкции и вставьте выводы в отмеченные места. + +## 1. Architecture Overview + +- **Ansible version**: + - Команда: `ansible --version` + - Вывод: + +```text +PASTE_HERE +``` + +- **Target VM**: + - OS (команда `lsb_release -a`): + +```text +PASTE_HERE +``` + +- **Роли (roles) vs монолитный playbook** + - Роли дают переиспользуемость, чистую структуру, читаемость и возможность тестировать/переносить куски автоматизации между проектами. + +## 2. Roles Documentation + +### role: common +- **Purpose:** базовая подготовка ОС (обновление apt cache, утилиты, часовой пояс). +- **Variables (defaults):** `common_packages`, `common_timezone`. +- **Handlers:** нет. +- **Dependencies:** нет (timezone настраивается через `timedatectl` и включается переменной `common_set_timezone`). + +### role: docker +- **Purpose:** установка Docker Engine из официального репозитория + настройка сервиса. +- **Variables (defaults):** `docker_user`, `docker_packages`, `docker_gpg_key_url`, `docker_keyring_path`. +- **Handlers:** `restart docker`. +- **Dependencies:** нет (используются builtin модули). + +### role: app_deploy +- **Purpose:** логин в реестр, pull образа, запуск контейнера с приложением, health-check. +- **Variables (defaults):** `app_name`, `app_port`, `container_port`, `app_restart_policy`, `app_env`, `docker_registry`. +- **Vault variables:** `dockerhub_username`, `dockerhub_password`, `docker_image`, `docker_image_tag`. +- **Handlers:** `restart app container`. +- **Dependencies:** `community.docker`. + +## 3. Idempotency Demonstration + +### 3.1 Первый запуск provision.yml +Команда: + +```bash +ansible-playbook playbooks/provision.yml +``` + +Вывод: + +```text +PASTE_PROVISION_RUN_1 +``` + +### 3.2 Второй запуск provision.yml +Команда: + +```bash +ansible-playbook playbooks/provision.yml +``` + +Вывод: + +```text +PASTE_PROVISION_RUN_2 +``` + +### 3.3 Анализ +- На первом запуске задачи меняли систему (установка пакетов, добавление репозиториев, запуск сервисов) → `changed`. +- На втором запуске желаемое состояние уже достигнуто → почти всё `ok`, без лишних изменений. + +## 4. Ansible Vault Usage + +### 4.1 Как хранятся секреты +- Секреты (Docker Hub username + access token) хранятся в `ansible/group_vars/all.yml`, зашифрованном Ansible Vault. + +### 4.2 Доказательство шифрования +Покажите первые строки файла (команда `head -n 5 ansible/group_vars/all.yml`): + +```text +PASTE_VAULT_HEADER +``` + +### 4.3 Стратегия хранения пароля Vault +- Вариант A: вводить пароль через `--ask-vault-pass`. +- Вариант B: `.vault_pass` (права 600) + добавление в `.gitignore`. + +## 5. Deployment Verification + +### 5.1 Запуск deploy.yml +Команда: + +```bash +ansible-playbook playbooks/deploy.yml --ask-vault-pass +``` + +Вывод: + +```text +PASTE_DEPLOY_OUTPUT +``` + +### 5.2 Проверка контейнера +Команда: + +```bash +ansible webservers -a "docker ps" +``` + +Вывод: + +```text +PASTE_DOCKER_PS +``` + +### 5.3 Проверка health endpoint +Команды: + +```bash +curl http://:5000/health +curl http://:5000/ +``` + +Вывод: + +```text +PASTE_CURL_OUTPUT +``` + +## 6. Key Decisions + +- **Почему roles вместо plain playbooks?** + - Чтобы логика была модульной: роли можно переиспользовать, проще сопровождать, структура предсказуема. + +- **Как роли улучшают переиспользуемость?** + - Роль можно подключить к любому playbook’у и переиспользовать в других проектах, меняя только переменные. + +- **Что делает задачу идемпотентной?** + - Использование stateful-модулей (apt/service/user/docker_container), которые меняют состояние только если оно отличается от желаемого. + +- **Как handlers повышают эффективность?** + - Handler запускается только если его notified задача реально изменила что-то (например, установки/конфиг), уменьшая лишние рестарты. + +- **Зачем нужен Ansible Vault?** + - Чтобы секреты не хранились в открытом виде в репозитории, но могли использоваться в автоматизации. + +## 7. Challenges (optional) +- PASTE_YOUR_NOTES diff --git a/ansible/group_vars/all.yml.example b/ansible/group_vars/all.yml.example new file mode 100644 index 0000000000..2dbc32167c --- /dev/null +++ b/ansible/group_vars/all.yml.example @@ -0,0 +1,13 @@ +--- +# Пример! Настоящие значения храните в ЗАШИФРОВАННОМ файле: +# ansible-vault create ansible/group_vars/all.yml + +dockerhub_username: "CHANGE_ME" +dockerhub_password: "CHANGE_ME" # лучше токен, не пароль + +app_name: "devops-info-service" +docker_image: "{{ dockerhub_username }}/{{ app_name }}" +docker_image_tag: "latest" + +app_port: 5000 +app_container_name: "{{ app_name }}" diff --git a/ansible/inventory/hosts.ini b/ansible/inventory/hosts.ini new file mode 100644 index 0000000000..94ff36be72 --- /dev/null +++ b/ansible/inventory/hosts.ini @@ -0,0 +1,9 @@ +[webservers] +# Вариант 1 (рекомендуется для курса): ВМ из Lab04 (Yandex Cloud или другая) +# web1 ansible_host= ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_ed25519 +# +# Вариант 2 (полностью бесплатно): запуск на localhost (WSL Ubuntu) как на "сервере" +# localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python3 + +[webservers:vars] +ansible_python_interpreter=/usr/bin/python3 diff --git a/ansible/inventory/yandex.yml.example b/ansible/inventory/yandex.yml.example new file mode 100644 index 0000000000..5d211343b3 --- /dev/null +++ b/ansible/inventory/yandex.yml.example @@ -0,0 +1,32 @@ +--- +# Пример dynamic inventory для Yandex Cloud (Bonus). +# Требует установленного Python SDK и/или ansible collection, в зависимости от плагина. +# Скопируйте в ansible/inventory/yandex.yml и заполните параметры. +# +# ВНИМАНИЕ: точное имя плагина и поля могут отличаться в зависимости от коллекции. +# См. `ansible-doc -t inventory -l | grep -i yandex`. + +plugin: yandex.cloud.yandex_compute + +# Один из вариантов аутентификации (пример): +# auth_kind: serviceaccount +# service_account_key_file: /home//.config/yandex-cloud/key.json + +folder_id: "CHANGE_ME_FOLDER_ID" + +# Группируем ВМ по label project=lab04, чтобы автоматически получить группу webservers +filters: + labels.project: "lab04" + +# Собираем ansible_host из публичного IP +compose: + ansible_host: network_interfaces[0].primary_v4_address.one_to_one_nat.address + ansible_user: "ubuntu" + +keyed_groups: + - key: labels.project + prefix: "project" + +# Можно дополнительно создать группу webservers +# groups: +# webservers: "labels.project == 'lab04'" diff --git a/ansible/playbooks/deploy.yml b/ansible/playbooks/deploy.yml new file mode 100644 index 0000000000..533bf902e0 --- /dev/null +++ b/ansible/playbooks/deploy.yml @@ -0,0 +1,7 @@ +--- +- name: Deploy application + hosts: webservers + become: true + + roles: + - app_deploy diff --git a/ansible/playbooks/provision.yml b/ansible/playbooks/provision.yml new file mode 100644 index 0000000000..7cc2e6678d --- /dev/null +++ b/ansible/playbooks/provision.yml @@ -0,0 +1,8 @@ +--- +- name: Provision web servers + hosts: webservers + become: true + + roles: + - common + - docker diff --git a/ansible/playbooks/site.yml b/ansible/playbooks/site.yml new file mode 100644 index 0000000000..ae8e6f8951 --- /dev/null +++ b/ansible/playbooks/site.yml @@ -0,0 +1,9 @@ +--- +- name: Provision and deploy + hosts: webservers + become: true + + roles: + - common + - docker + - app_deploy diff --git a/ansible/requirements.yml b/ansible/requirements.yml new file mode 100644 index 0000000000..b869f415df --- /dev/null +++ b/ansible/requirements.yml @@ -0,0 +1,4 @@ +--- +collections: + - name: community.docker + - name: community.general diff --git a/ansible/roles/app_deploy/defaults/main.yml b/ansible/roles/app_deploy/defaults/main.yml new file mode 100644 index 0000000000..86a10efbf9 --- /dev/null +++ b/ansible/roles/app_deploy/defaults/main.yml @@ -0,0 +1,20 @@ +--- +# App defaults (can be overridden from group_vars/all.yml vault file) +app_name: "devops-info-service" +app_container_name: "{{ app_name }}" + +docker_image_tag: "latest" + +# Host->container port mapping +app_port: 5000 +container_port: 5000 + +# Docker container restart policy +app_restart_policy: "unless-stopped" + +# Environment variables passed to container (dict) +app_env: {} + +# Optional registry URL (empty means Docker Hub) +# Example: "cr.yandex/xxx" or "ghcr.io" +docker_registry: "" diff --git a/ansible/roles/app_deploy/handlers/main.yml b/ansible/roles/app_deploy/handlers/main.yml new file mode 100644 index 0000000000..1fc3fba48b --- /dev/null +++ b/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/ansible/roles/app_deploy/tasks/main.yml b/ansible/roles/app_deploy/tasks/main.yml new file mode 100644 index 0000000000..29ba20ba7f --- /dev/null +++ b/ansible/roles/app_deploy/tasks/main.yml @@ -0,0 +1,76 @@ +--- +- name: Ensure Docker SDK for Python is installed on target + ansible.builtin.apt: + name: python3-docker + state: present + update_cache: true + +- name: Login to Docker registry + community.docker.docker_login: + registry_url: "{{ (docker_registry | length > 0) | ternary(docker_registry, omit) }}" + username: "{{ dockerhub_username }}" + password: "{{ dockerhub_password }}" + no_log: true + +- name: Pull application image + community.docker.docker_image: + name: "{{ docker_image }}:{{ docker_image_tag }}" + source: pull + register: app_image_pull + +- name: Check current container (if exists) + community.docker.docker_container_info: + name: "{{ app_container_name }}" + register: app_container_info + failed_when: false + +- name: Decide if redeploy is needed + ansible.builtin.set_fact: + app_needs_redeploy: "{{ app_image_pull.changed or (not app_container_info.exists) }}" + +- name: Stop existing container (only if redeploy needed) + community.docker.docker_container: + name: "{{ app_container_name }}" + state: stopped + when: app_container_info.exists and app_needs_redeploy + +- name: Remove existing container (only if redeploy needed) + community.docker.docker_container: + name: "{{ app_container_name }}" + state: absent + when: app_container_info.exists and app_needs_redeploy + +- 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 }}:{{ container_port }}" + env: "{{ app_env }}" + notify: restart app container + +- name: Wait for the application port to become available + ansible.builtin.wait_for: + host: "127.0.0.1" + port: "{{ app_port }}" + timeout: 60 + +- name: Health check (/health) + ansible.builtin.uri: + url: "http://127.0.0.1:{{ app_port }}/health" + method: GET + status_code: 200 + return_content: true + register: app_health + retries: 10 + delay: 3 + until: app_health.status == 200 + +- name: Verify main endpoint (/) + ansible.builtin.uri: + url: "http://127.0.0.1:{{ app_port }}/" + method: GET + status_code: 200 + return_content: false diff --git a/ansible/roles/common/defaults/main.yml b/ansible/roles/common/defaults/main.yml new file mode 100644 index 0000000000..9864c34cc2 --- /dev/null +++ b/ansible/roles/common/defaults/main.yml @@ -0,0 +1,20 @@ +--- +# Packages that are useful on almost any Ubuntu server +common_packages: + - ca-certificates + - curl + - git + - vim + - htop + - jq + - unzip + - python3-pip + - python3-venv + - tzdata + +# Default timezone (change if needed) +common_timezone: "Europe/Moscow" + +# В WSL и некоторых окружениях timedatectl может быть недоступен. +# По умолчанию timezone НЕ меняем. +common_set_timezone: false diff --git a/ansible/roles/common/tasks/main.yml b/ansible/roles/common/tasks/main.yml new file mode 100644 index 0000000000..d55d907e38 --- /dev/null +++ b/ansible/roles/common/tasks/main.yml @@ -0,0 +1,14 @@ +--- +- 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: Set timezone + community.general.timezone: + name: "{{ common_timezone }}" diff --git a/ansible/roles/docker/defaults/main.yml b/ansible/roles/docker/defaults/main.yml new file mode 100644 index 0000000000..a406f5b71a --- /dev/null +++ b/ansible/roles/docker/defaults/main.yml @@ -0,0 +1,19 @@ +--- +# User to be added to docker group. +# By default uses the SSH user (usually ubuntu). +docker_user: "{{ ansible_user | default('ubuntu') }}" + +# Official Docker repository key and repo +# (Ubuntu) +docker_gpg_key_url: "https://download.docker.com/linux/ubuntu/gpg" +docker_keyring_path: "/etc/apt/keyrings/docker.gpg" +docker_repo_filename: "docker" + +# Docker packages to install +# docker-compose-plugin gives `docker compose` command. +docker_packages: + - docker-ce + - docker-ce-cli + - containerd.io + - docker-buildx-plugin + - docker-compose-plugin diff --git a/ansible/roles/docker/handlers/main.yml b/ansible/roles/docker/handlers/main.yml new file mode 100644 index 0000000000..1a5058da5e --- /dev/null +++ b/ansible/roles/docker/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: restart docker + ansible.builtin.service: + name: docker + state: restarted diff --git a/ansible/roles/docker/tasks/main.yml b/ansible/roles/docker/tasks/main.yml new file mode 100644 index 0000000000..b98c9a8450 --- /dev/null +++ b/ansible/roles/docker/tasks/main.yml @@ -0,0 +1,77 @@ +--- +- name: Install prerequisites for Docker repository + ansible.builtin.apt: + name: + - ca-certificates + - curl + - gnupg + state: present + update_cache: true + +- name: Ensure /etc/apt/keyrings exists + ansible.builtin.file: + path: /etc/apt/keyrings + state: directory + mode: "0755" + +- name: Download Docker GPG key (ASCII) + ansible.builtin.get_url: + url: "{{ docker_gpg_key_url }}" + dest: /tmp/docker.gpg + mode: "0644" + register: docker_gpg_download + +- name: Check if Docker keyring already exists + ansible.builtin.stat: + path: "{{ docker_keyring_path }}" + register: docker_keyring_stat + +- name: Convert (dearmor) Docker GPG key to keyring + ansible.builtin.command: + cmd: "gpg --dearmor -o {{ docker_keyring_path }} /tmp/docker.gpg" + when: docker_gpg_download.changed or (not docker_keyring_stat.stat.exists) + notify: restart docker + +- name: Set correct permissions on Docker keyring + ansible.builtin.file: + path: "{{ docker_keyring_path }}" + mode: "0644" + +- name: Set Docker APT architecture mapping + ansible.builtin.set_fact: + docker_apt_arch: "{{ {'x86_64':'amd64','aarch64':'arm64'}.get(ansible_architecture, ansible_architecture) }}" + +- name: Add official Docker APT repository + ansible.builtin.apt_repository: + repo: "deb [arch={{ docker_apt_arch }} signed-by={{ docker_keyring_path }}] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable" + state: present + filename: "{{ docker_repo_filename }}" + +- name: Install Docker Engine packages + ansible.builtin.apt: + name: "{{ docker_packages }}" + state: present + update_cache: true + notify: restart docker + +- name: Ensure Docker service is enabled and running + ansible.builtin.service: + name: docker + state: started + enabled: true + +- name: Ensure docker group exists + ansible.builtin.group: + name: docker + state: present + +- name: Add user to docker group + ansible.builtin.user: + name: "{{ docker_user }}" + groups: docker + append: true + +- name: Install Docker SDK for Python on target (for Ansible docker modules) + ansible.builtin.apt: + name: python3-docker + state: present From 07e3d9a6d3641cb36f6b2e959ad821ae4b4ec7fb Mon Sep 17 00:00:00 2001 From: dorley174 Date: Thu, 26 Feb 2026 21:12:57 +0300 Subject: [PATCH 17/20] added local vagrant vm, waiting workflow image --- .gitignore | 7 +- Vagrantfile | 21 ++ ansible/README.md | 15 +- ansible/ansible.cfg | 4 +- ansible/docs/LAB05.md | 270 +++++++++++++++++-------- ansible/inventory/hosts.ini | 20 +- ansible/roles/common/tasks/main.yml | 1 + ansible/roles/docker/defaults/main.yml | 4 +- provision_run1.log | 60 ++++++ provision_run2.log | 57 ++++++ 10 files changed, 365 insertions(+), 94 deletions(-) create mode 100644 Vagrantfile create mode 100644 provision_run1.log create mode 100644 provision_run2.log diff --git a/.gitignore b/.gitignore index f1f3a31b93..e050328db5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -test -.env +test +.env key.json # --- Ansible --- *.retry @@ -8,5 +8,8 @@ ansible/inventory/*.pyc ansible/inventory/__pycache__/ __pycache__/ +# --- Vagrant --- +.vagrant/ + # Do not commit real inventory with IPs if you don't want # ansible/inventory/hosts.ini diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000000..7bf76d526b --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,21 @@ +Vagrant.configure("2") do |config| + config.vm.box = "ubuntu/jammy64" + config.vm.hostname = "lab05" + + # ВАЖНО: отключаем шаринг папки проекта в VM + # (часто ломается из-за кириллицы/пробелов в пути + нам не нужен репозиторий в VM) + config.vm.synced_folder ".", "/vagrant", disabled: true + + # Пробрасываем порты на Windows-хост + # host_ip "0.0.0.0" нужно, чтобы WSL мог подключиться к проброшенному порту через IP Windows-хоста. + config.vm.network "forwarded_port", guest: 22, host: 2222, host_ip: "0.0.0.0", id: "ssh", auto_correct: true + config.vm.network "forwarded_port", guest: 5000, host: 5000, host_ip: "0.0.0.0", id: "app", auto_correct: true + + config.ssh.insert_key = true + + config.vm.provider "virtualbox" do |vb| + vb.name = "lab05-ansible" + vb.memory = 2048 + vb.cpus = 2 + end +end diff --git a/ansible/README.md b/ansible/README.md index 1a1d813614..d680e5b46e 100644 --- a/ansible/README.md +++ b/ansible/README.md @@ -1,13 +1,24 @@ # Lab05 — Ansible -См. `labs/lab05.md` (задание) и `ansible/docs/LAB05.md` (отчёт). +See: +- `labs/lab05.md` — assignment +- `ansible/docs/LAB05.md` — report template -Быстрые команды: +## Quick start ```bash cd ansible + +# Install required collections ansible-galaxy collection install -r requirements.yml + +# Connectivity test ansible all -m ping + +# Provision the target VM (run twice to prove idempotency) ansible-playbook playbooks/provision.yml +ansible-playbook playbooks/provision.yml + +# Deploy the application (uses Ansible Vault) ansible-playbook playbooks/deploy.yml --ask-vault-pass ``` diff --git a/ansible/ansible.cfg b/ansible/ansible.cfg index 56ea457fc1..b6a8c1d248 100644 --- a/ansible/ansible.cfg +++ b/ansible/ansible.cfg @@ -2,7 +2,9 @@ inventory = inventory/hosts.ini roles_path = roles host_key_checking = False -remote_user = ubuntu +# For Vagrant boxes the default SSH user is usually "vagrant". +# You can still override this per-host in inventory/hosts.ini. +remote_user = vagrant retry_files_enabled = False interpreter_python = auto_silent diff --git a/ansible/docs/LAB05.md b/ansible/docs/LAB05.md index e922b27c9d..885b9ffb12 100644 --- a/ansible/docs/LAB05.md +++ b/ansible/docs/LAB05.md @@ -1,154 +1,260 @@ -# LAB05 — Ansible Fundamentals (отчёт) - -> Этот файл — готовый шаблон. Выполните команды из инструкции и вставьте выводы в отмеченные места. +# LAB05 — Ansible Fundamentals (Report) ## 1. Architecture Overview -- **Ansible version**: - - Команда: `ansible --version` - - Вывод: +### Control node +- OS: Windows 11 + WSL (Ubuntu) +- Ansible version: + +```bash +ansible --version +``` ```text -PASTE_HERE +TODO: paste output ``` -- **Target VM**: - - OS (команда `lsb_release -a`): +### Target node +- Provisioned via: **Vagrant + VirtualBox** (Option B) +- OS: + +```bash +ansible webservers -a "lsb_release -a" +``` ```text -PASTE_HERE +TODO: paste output ``` -- **Роли (roles) vs монолитный playbook** - - Роли дают переиспользуемость, чистую структуру, читаемость и возможность тестировать/переносить куски автоматизации между проектами. +### Why roles instead of a single playbook? +Roles provide a clean, reusable structure: +- modular responsibilities (base OS, Docker, app deploy) +- simpler playbooks (just list roles) +- easier maintenance and testing + +--- + +## 2. Project Structure + +```text +ansible/ +├── ansible.cfg +├── inventory/ +│ └── hosts.ini +├── group_vars/ +│ └── all.yml # encrypted (Ansible Vault) +├── playbooks/ +│ ├── provision.yml +│ ├── deploy.yml +│ └── site.yml +└── roles/ + ├── common/ + ├── docker/ + └── app_deploy/ +``` + +--- + +## 3. Roles Documentation + +### Role: `common` +**Purpose** +- Base OS provisioning: apt cache update + essential packages. +- Optional timezone configuration. + +**Key tasks** +- `apt update_cache` +- install `common_packages` +- set timezone (optional) + +**Variables (defaults)** +- `common_packages` (list) +- `common_timezone` (string) +- `common_set_timezone` (bool) + +**Handlers** +- none + +**Dependencies** +- `community.general` (timezone module) + +--- + +### Role: `docker` +**Purpose** +- Install Docker Engine from the official Docker APT repository. +- Enable and start the Docker service. +- Add SSH user to the `docker` group. + +**Key tasks** +- Install prerequisites (`ca-certificates`, `curl`, `gnupg`) +- Add Docker GPG key and APT repo +- Install Docker packages +- Ensure `docker` service is running + enabled +- Add user to `docker` group +- Install `python3-docker` (required for Ansible Docker modules) + +**Variables (defaults)** +- `docker_user` +- `docker_packages` +- `docker_gpg_key_url` +- `docker_keyring_path` -## 2. Roles Documentation +**Handlers** +- `restart docker` -### role: common -- **Purpose:** базовая подготовка ОС (обновление apt cache, утилиты, часовой пояс). -- **Variables (defaults):** `common_packages`, `common_timezone`. -- **Handlers:** нет. -- **Dependencies:** нет (timezone настраивается через `timedatectl` и включается переменной `common_set_timezone`). +**Dependencies** +- none (uses built-in modules) -### role: docker -- **Purpose:** установка Docker Engine из официального репозитория + настройка сервиса. -- **Variables (defaults):** `docker_user`, `docker_packages`, `docker_gpg_key_url`, `docker_keyring_path`. -- **Handlers:** `restart docker`. -- **Dependencies:** нет (используются builtin модули). +--- -### role: app_deploy -- **Purpose:** логин в реестр, pull образа, запуск контейнера с приложением, health-check. -- **Variables (defaults):** `app_name`, `app_port`, `container_port`, `app_restart_policy`, `app_env`, `docker_registry`. -- **Vault variables:** `dockerhub_username`, `dockerhub_password`, `docker_image`, `docker_image_tag`. -- **Handlers:** `restart app container`. -- **Dependencies:** `community.docker`. +### Role: `app_deploy` +**Purpose** +- Log in to the container registry. +- Pull the application image. +- Run the container with a stable name, port mapping and restart policy. +- Wait for readiness and verify `/health`. -## 3. Idempotency Demonstration +**Key tasks** +- `docker_login` +- `docker_image` pull +- `docker_container` start +- `wait_for` + HTTP checks -### 3.1 Первый запуск provision.yml -Команда: +**Variables (defaults)** +- `app_name` +- `app_container_name` +- `app_port` / `container_port` +- `app_restart_policy` +- `app_env` +- `docker_registry` (optional) + +**Vault variables (encrypted in `group_vars/all.yml`)** +- `dockerhub_username` +- `dockerhub_password` (prefer access token) +- `docker_image` +- `docker_image_tag` + +**Handlers** +- `restart app container` + +**Dependencies** +- `community.docker` + +--- + +## 4. Idempotency Demonstration + +### 4.1 First run ```bash ansible-playbook playbooks/provision.yml ``` -Вывод: - ```text -PASTE_PROVISION_RUN_1 +TODO: paste output (or at least PLAY RECAP) ``` -### 3.2 Второй запуск provision.yml -Команда: +### 4.2 Second run ```bash ansible-playbook playbooks/provision.yml ``` -Вывод: - ```text -PASTE_PROVISION_RUN_2 +TODO: paste output (or at least PLAY RECAP) ``` -### 3.3 Анализ -- На первом запуске задачи меняли систему (установка пакетов, добавление репозиториев, запуск сервисов) → `changed`. -- На втором запуске желаемое состояние уже достигнуто → почти всё `ok`, без лишних изменений. +### 4.3 Analysis +On the first run, tasks typically show `changed` because packages/repositories/services are being installed/configured. +On the second run, Ansible should converge to `ok` for most tasks, proving idempotency (desired state already reached). + +--- -## 4. Ansible Vault Usage +## 5. Ansible Vault -### 4.1 Как хранятся секреты -- Секреты (Docker Hub username + access token) хранятся в `ansible/group_vars/all.yml`, зашифрованном Ansible Vault. +### 5.1 Secret storage +Docker registry credentials are stored in `ansible/group_vars/all.yml` encrypted with Ansible Vault. -### 4.2 Доказательство шифрования -Покажите первые строки файла (команда `head -n 5 ansible/group_vars/all.yml`): +### 5.2 Proof of encryption + +```bash +head -n 5 ansible/group_vars/all.yml +``` ```text -PASTE_VAULT_HEADER +TODO: paste output (should start with $ANSIBLE_VAULT;...) ``` -### 4.3 Стратегия хранения пароля Vault -- Вариант A: вводить пароль через `--ask-vault-pass`. -- Вариант B: `.vault_pass` (права 600) + добавление в `.gitignore`. +### 5.3 Vault password strategy +- Option A: `--ask-vault-pass` +- Option B: `.vault_pass` (chmod 600) and add it to `.gitignore` + +--- -## 5. Deployment Verification +## 6. Deployment Verification -### 5.1 Запуск deploy.yml -Команда: +### 6.1 Deploy run ```bash ansible-playbook playbooks/deploy.yml --ask-vault-pass ``` -Вывод: - ```text -PASTE_DEPLOY_OUTPUT +TODO: paste output (or at least PLAY RECAP) ``` -### 5.2 Проверка контейнера -Команда: +### 6.2 Container status ```bash ansible webservers -a "docker ps" ``` -Вывод: - ```text -PASTE_DOCKER_PS +TODO: paste output ``` -### 5.3 Проверка health endpoint -Команды: +### 6.3 Health check + +From the target VM (via Ansible): ```bash -curl http://:5000/health -curl http://:5000/ +ansible webservers -a "curl -i http://127.0.0.1:5000/health" ``` -Вывод: +From the control node (WSL) through port forwarding (Vagrant): + +```bash +WIN_HOST_IP=$(grep -m1 nameserver /etc/resolv.conf | awk '{print $2}') +curl -i "http://$WIN_HOST_IP:5000/health" +curl -i "http://$WIN_HOST_IP:5000/" +``` ```text -PASTE_CURL_OUTPUT +TODO: paste output ``` -## 6. Key Decisions +--- + +## 7. Key Decisions (Short Answers) + +1. **Why use roles instead of plain playbooks?** + Roles keep automation modular and reusable, making playbooks shorter and easier to maintain. + +2. **How do roles improve reusability?** + The same role can be applied to different hosts/projects by changing variables, without copying task code. -- **Почему roles вместо plain playbooks?** - - Чтобы логика была модульной: роли можно переиспользовать, проще сопровождать, структура предсказуема. +3. **What makes a task idempotent?** + Using stateful modules (`apt`, `service`, `user`, `docker_container`) that only change the system when its current state differs from the desired one. -- **Как роли улучшают переиспользуемость?** - - Роль можно подключить к любому playbook’у и переиспользовать в других проектах, меняя только переменные. +4. **How do handlers improve efficiency?** + Handlers run only when notified by a task that actually changed something, avoiding unnecessary service restarts. -- **Что делает задачу идемпотентной?** - - Использование stateful-модулей (apt/service/user/docker_container), которые меняют состояние только если оно отличается от желаемого. +5. **Why is Ansible Vault needed?** + It allows storing secrets in version control safely by encrypting them, while still enabling automation to use them. -- **Как handlers повышают эффективность?** - - Handler запускается только если его notified задача реально изменила что-то (например, установки/конфиг), уменьшая лишние рестарты. +--- -- **Зачем нужен Ansible Vault?** - - Чтобы секреты не хранились в открытом виде в репозитории, но могли использоваться в автоматизации. +## 8. Challenges (Optional) -## 7. Challenges (optional) -- PASTE_YOUR_NOTES +- TODO: add short bullet points if you had any issues and how you solved them. diff --git a/ansible/inventory/hosts.ini b/ansible/inventory/hosts.ini index 94ff36be72..94c50c5212 100644 --- a/ansible/inventory/hosts.ini +++ b/ansible/inventory/hosts.ini @@ -1,9 +1,19 @@ -[webservers] -# Вариант 1 (рекомендуется для курса): ВМ из Lab04 (Yandex Cloud или другая) -# web1 ansible_host= ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_ed25519 -# -# Вариант 2 (полностью бесплатно): запуск на localhost (WSL Ubuntu) как на "сервере" +# Option A (cloud VM from Lab04): +# web1 ansible_host= ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_ed25519 + +# Option B (100% free, recommended for Windows 11): Vagrant + VirtualBox target VM +# 1) Run `vagrant up` on Windows (PowerShell) in the repo root. +# 2) Check forwarded ports: `vagrant port`. +# 3) In WSL, get Windows host IP: +# WIN_HOST_IP=$(grep -m1 nameserver /etc/resolv.conf | awk '{print $2}') +# 4) Copy Vagrant private key from the project to Linux home and chmod 600. +# 5) Put the detected values below: +# vagrant1 ansible_host= ansible_port= ansible_user=vagrant ansible_ssh_private_key_file=~/.ssh/lab05_vagrant_key + +# Option C (local-only): run on localhost (WSL acts as a "server") # localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python3 +[webservers] +vagrant1 ansible_host=192.168.31.32 ansible_port=2222 ansible_user=vagrant ansible_ssh_private_key_file=~/.ssh/lab05_vagrant_key [webservers:vars] ansible_python_interpreter=/usr/bin/python3 diff --git a/ansible/roles/common/tasks/main.yml b/ansible/roles/common/tasks/main.yml index d55d907e38..a2464dd655 100644 --- a/ansible/roles/common/tasks/main.yml +++ b/ansible/roles/common/tasks/main.yml @@ -12,3 +12,4 @@ - name: Set timezone community.general.timezone: name: "{{ common_timezone }}" + when: common_set_timezone | bool diff --git a/ansible/roles/docker/defaults/main.yml b/ansible/roles/docker/defaults/main.yml index a406f5b71a..7c7861e59f 100644 --- a/ansible/roles/docker/defaults/main.yml +++ b/ansible/roles/docker/defaults/main.yml @@ -1,7 +1,7 @@ --- # User to be added to docker group. -# By default uses the SSH user (usually ubuntu). -docker_user: "{{ ansible_user | default('ubuntu') }}" +# By default uses the SSH user (Vagrant boxes usually use "vagrant"). +docker_user: "{{ ansible_user | default('vagrant') }}" # Official Docker repository key and repo # (Ubuntu) diff --git a/provision_run1.log b/provision_run1.log new file mode 100644 index 0000000000..740f606508 --- /dev/null +++ b/provision_run1.log @@ -0,0 +1,60 @@ + +PLAY [Provision web servers] *************************************************** + +TASK [Gathering Facts] ********************************************************* +ok: [vagrant1] + +TASK [common : Update apt cache] *********************************************** +changed: [vagrant1] + +TASK [common : Install common packages] **************************************** +changed: [vagrant1] + +TASK [common : Set timezone] *************************************************** +skipping: [vagrant1] + +TASK [docker : Install prerequisites for Docker repository] ******************** +ok: [vagrant1] + +TASK [docker : Ensure /etc/apt/keyrings exists] ******************************** +ok: [vagrant1] + +TASK [docker : Download Docker GPG key (ASCII)] ******************************** +changed: [vagrant1] + +TASK [docker : Check if Docker keyring already exists] ************************* +ok: [vagrant1] + +TASK [docker : Convert (dearmor) Docker GPG key to keyring] ******************** +changed: [vagrant1] + +TASK [docker : Set correct permissions on Docker keyring] ********************** +ok: [vagrant1] + +TASK [docker : Set Docker APT architecture mapping] **************************** +ok: [vagrant1] + +TASK [docker : Add official Docker APT repository] ***************************** +changed: [vagrant1] + +TASK [docker : Install Docker Engine packages] ********************************* +changed: [vagrant1] + +TASK [docker : Ensure Docker service is enabled and running] ******************* +ok: [vagrant1] + +TASK [docker : Ensure docker group exists] ************************************* +ok: [vagrant1] + +TASK [docker : Add user to docker group] *************************************** +changed: [vagrant1] + +TASK [docker : Install Docker SDK for Python on target (for Ansible docker modules)] *** +changed: [vagrant1] + +RUNNING HANDLER [docker : restart docker] ************************************** +changed: [vagrant1] + +PLAY RECAP ********************************************************************* +vagrant1 : ok=17 changed=9 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0 + diff --git a/provision_run2.log b/provision_run2.log new file mode 100644 index 0000000000..4a8768b0e9 --- /dev/null +++ b/provision_run2.log @@ -0,0 +1,57 @@ + +PLAY [Provision web servers] *************************************************** + +TASK [Gathering Facts] ********************************************************* +ok: [vagrant1] + +TASK [common : Update apt cache] *********************************************** +ok: [vagrant1] + +TASK [common : Install common packages] **************************************** +ok: [vagrant1] + +TASK [common : Set timezone] *************************************************** +skipping: [vagrant1] + +TASK [docker : Install prerequisites for Docker repository] ******************** +ok: [vagrant1] + +TASK [docker : Ensure /etc/apt/keyrings exists] ******************************** +ok: [vagrant1] + +TASK [docker : Download Docker GPG key (ASCII)] ******************************** +ok: [vagrant1] + +TASK [docker : Check if Docker keyring already exists] ************************* +ok: [vagrant1] + +TASK [docker : Convert (dearmor) Docker GPG key to keyring] ******************** +skipping: [vagrant1] + +TASK [docker : Set correct permissions on Docker keyring] ********************** +ok: [vagrant1] + +TASK [docker : Set Docker APT architecture mapping] **************************** +ok: [vagrant1] + +TASK [docker : Add official Docker APT repository] ***************************** +ok: [vagrant1] + +TASK [docker : Install Docker Engine packages] ********************************* +ok: [vagrant1] + +TASK [docker : Ensure Docker service is enabled and running] ******************* +ok: [vagrant1] + +TASK [docker : Ensure docker group exists] ************************************* +ok: [vagrant1] + +TASK [docker : Add user to docker group] *************************************** +ok: [vagrant1] + +TASK [docker : Install Docker SDK for Python on target (for Ansible docker modules)] *** +ok: [vagrant1] + +PLAY RECAP ********************************************************************* +vagrant1 : ok=15 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0 + From ee892c5f8881c77640015ec552b2e624ee0542f2 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Thu, 26 Feb 2026 21:20:17 +0300 Subject: [PATCH 18/20] ci: enable python workflow on lab05 --- .github/workflows/python-ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 3b096c2cd4..b81f2f56a9 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -1,8 +1,9 @@ name: python-ci on: + workflow_dispatch: push: - branches: ["lab03", "master"] + branches: ["lab03", "lab05", "master"] paths: - "app_python/**" - ".github/workflows/python-ci.yml" @@ -75,7 +76,7 @@ jobs: docker-build-and-push: runs-on: ubuntu-latest needs: test-and-lint - if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/lab03') + if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/lab03' || github.ref == 'refs/heads/lab05') permissions: contents: read steps: From c899840440824b57083c1ffbc2ee2a39298c8781 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Thu, 26 Feb 2026 22:44:41 +0300 Subject: [PATCH 19/20] Lab05: make deploy work without extra-vars; optional docker login --- ansible/docs/LAB05.md | 16 ++++++++++++++-- ansible/group_vars/webservers.yml | 10 ++++++++++ ansible/playbooks/deploy.yml | 3 +++ ansible/roles/app_deploy/tasks/main.yml | 5 +++-- 4 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 ansible/group_vars/webservers.yml diff --git a/ansible/docs/LAB05.md b/ansible/docs/LAB05.md index 885b9ffb12..c46bbdbe71 100644 --- a/ansible/docs/LAB05.md +++ b/ansible/docs/LAB05.md @@ -216,7 +216,7 @@ TODO: paste output ### 6.3 Health check -From the target VM (via Ansible): +From the target VM (via Ansible): (i will use another ip) ```bash ansible webservers -a "curl -i http://127.0.0.1:5000/health" @@ -231,7 +231,19 @@ curl -i "http://$WIN_HOST_IP:5000/" ``` ```text -TODO: paste output +HTTP/1.1 200 OK +Server: Werkzeug/3.1.5 Python/3.13.1 +HTTP/1.1 200 OK +Server: Werkzeug/3.1.5 Python/3.13.1 +Date: Thu, 26 Feb 2026 19:31:16 GMT +Date: Thu, 26 Feb 2026 19:31:16 GMT +Content-Type: application/json; charset=utf-8 +Content-Type: application/json; charset=utf-8 +Content-Length: 80 +Content-Length: 80 +Connection: close + +{"status":"healthy","timestamp":"2026-02-26T19:31:16.782Z","uptime_seconds":87} ``` --- diff --git a/ansible/group_vars/webservers.yml b/ansible/group_vars/webservers.yml new file mode 100644 index 0000000000..cd5ba022fb --- /dev/null +++ b/ansible/group_vars/webservers.yml @@ -0,0 +1,10 @@ +--- +dockerhub_username: "dorley174" +dockerhub_password: "" + +app_name: "devops-info-service" +docker_image: "{{ dockerhub_username }}/{{ app_name }}" +docker_image_tag: "latest" + +app_port: 5000 +app_container_name: "{{ app_name }}" diff --git a/ansible/playbooks/deploy.yml b/ansible/playbooks/deploy.yml index 533bf902e0..af1b388e3f 100644 --- a/ansible/playbooks/deploy.yml +++ b/ansible/playbooks/deploy.yml @@ -3,5 +3,8 @@ hosts: webservers become: true + vars_files: + - ../group_vars/webservers.yml + roles: - app_deploy diff --git a/ansible/roles/app_deploy/tasks/main.yml b/ansible/roles/app_deploy/tasks/main.yml index 29ba20ba7f..934817c0c3 100644 --- a/ansible/roles/app_deploy/tasks/main.yml +++ b/ansible/roles/app_deploy/tasks/main.yml @@ -11,10 +11,11 @@ username: "{{ dockerhub_username }}" password: "{{ dockerhub_password }}" no_log: true + when: dockerhub_password is defined and dockerhub_password | length > 0 - name: Pull application image community.docker.docker_image: - name: "{{ docker_image }}:{{ docker_image_tag }}" + name: "{{ (docker_image | default(dockerhub_username ~ '/' ~ app_name)) }}:{{ (docker_image_tag | default('latest')) }}" source: pull register: app_image_pull @@ -43,7 +44,7 @@ - name: Run application container community.docker.docker_container: name: "{{ app_container_name }}" - image: "{{ docker_image }}:{{ docker_image_tag }}" + image: "{{ (docker_image | default(dockerhub_username ~ '/' ~ app_name)) }}:{{ (docker_image_tag | default('latest')) }}" state: started restart_policy: "{{ app_restart_policy }}" published_ports: From 05dcaa1bc0dfcb2123dad5f3b76b89fb2a147730 Mon Sep 17 00:00:00 2001 From: dorley174 Date: Thu, 26 Feb 2026 23:05:29 +0300 Subject: [PATCH 20/20] finalize work with filling lab05.mdd --- ansible/docs/LAB05.md | 386 ++++++++++++++++++++++++++++++------------ 1 file changed, 282 insertions(+), 104 deletions(-) diff --git a/ansible/docs/LAB05.md b/ansible/docs/LAB05.md index c46bbdbe71..112d992ddc 100644 --- a/ansible/docs/LAB05.md +++ b/ansible/docs/LAB05.md @@ -4,6 +4,7 @@ ### Control node - OS: Windows 11 + WSL (Ubuntu) +- Ansible is executed inside WSL - Ansible version: ```bash @@ -11,30 +12,47 @@ ansible --version ``` ```text -TODO: paste output +ansible [core 2.20.3] + config file = /home/dorley/projects/DevOps-Core-Course/ansible/ansible.cfg + configured module search path = ['/home/dorley/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] + ansible python module location = /home/dorley/.local/share/pipx/venvs/ansible-core/lib/python3.12/site-packages/ansible + ansible collection location = /home/dorley/.ansible/collections:/usr/share/ansible/collections + executable location = /home/dorley/.local/bin/ansible + python version = 3.12.3 (main, Jan 22 2026, 20:57:42) [GCC 13.3.0] (/home/dorley/.local/share/pipx/venvs/ansible-core/bin/python) + jinja version = 3.1.6 + pyyaml version = 6.0.3 (with libyaml v0.2.5) ``` ### Target node -- Provisioned via: **Vagrant + VirtualBox** (Option B) -- OS: +- Provisioned via: **Vagrant + VirtualBox** +- SSH access: forwarded port (guest 22 -> host 2222) +- OS (queried via Ansible): ```bash -ansible webservers -a "lsb_release -a" +ansible -i inventory/hosts.ini webservers -a "lsb_release -a" ``` ```text -TODO: paste output +vagrant1 | CHANGED | rc=0 >> +Distributor ID: Ubuntu +Description: Ubuntu 22.04.5 LTS +Release: 22.04 +Codename: jammyNo LSB modules are available. ``` -### Why roles instead of a single playbook? -Roles provide a clean, reusable structure: -- modular responsibilities (base OS, Docker, app deploy) -- simpler playbooks (just list roles) -- easier maintenance and testing +### Networking note (WSL + Windows) +From WSL, SSH access to the VM uses the **Windows host LAN IP** (not 127.0.0.1). + +Example values used in this lab: +- Windows host IP: `192.168.31.32` +- SSH forwarded port: `2222` +- App forwarded port: `5000` + +> If your Windows host IP differs, replace `192.168.31.32` accordingly. --- -## 2. Project Structure +## 2. Project Structure (Ansible) ```text ansible/ @@ -42,11 +60,10 @@ ansible/ ├── inventory/ │ └── hosts.ini ├── group_vars/ -│ └── all.yml # encrypted (Ansible Vault) +│ └── webservers.yml # non-secret variables (public image) ├── playbooks/ │ ├── provision.yml -│ ├── deploy.yml -│ └── site.yml +│ └── deploy.yml └── roles/ ├── common/ ├── docker/ @@ -63,132 +80,247 @@ ansible/ - Optional timezone configuration. **Key tasks** -- `apt update_cache` -- install `common_packages` -- set timezone (optional) +- Update apt cache +- Install common packages +- Set timezone (optional) -**Variables (defaults)** +**Variables** - `common_packages` (list) - `common_timezone` (string) - `common_set_timezone` (bool) -**Handlers** -- none - -**Dependencies** -- `community.general` (timezone module) - --- ### Role: `docker` **Purpose** - Install Docker Engine from the official Docker APT repository. -- Enable and start the Docker service. +- Enable and start Docker. - Add SSH user to the `docker` group. +- Install `python3-docker` for Ansible Docker modules. **Key tasks** -- Install prerequisites (`ca-certificates`, `curl`, `gnupg`) -- Add Docker GPG key and APT repo +- Add Docker GPG key + repo - Install Docker packages -- Ensure `docker` service is running + enabled -- Add user to `docker` group -- Install `python3-docker` (required for Ansible Docker modules) +- Ensure `docker` service is enabled and running +- Add user to docker group +- Install Docker SDK for Python (`python3-docker`) -**Variables (defaults)** +**Variables** - `docker_user` - `docker_packages` -- `docker_gpg_key_url` -- `docker_keyring_path` - -**Handlers** -- `restart docker` - -**Dependencies** -- none (uses built-in modules) --- ### Role: `app_deploy` **Purpose** -- Log in to the container registry. - Pull the application image. - Run the container with a stable name, port mapping and restart policy. -- Wait for readiness and verify `/health`. +- Wait for readiness and verify `/health` and `/`. **Key tasks** -- `docker_login` +- Optional `docker_login` (executed only if password is provided) - `docker_image` pull - `docker_container` start - `wait_for` + HTTP checks -**Variables (defaults)** +**Variables** +- `dockerhub_username` +- `dockerhub_password` (empty for public image) +- `docker_image` +- `docker_image_tag` - `app_name` - `app_container_name` - `app_port` / `container_port` - `app_restart_policy` - `app_env` -- `docker_registry` (optional) - -**Vault variables (encrypted in `group_vars/all.yml`)** -- `dockerhub_username` -- `dockerhub_password` (prefer access token) -- `docker_image` -- `docker_image_tag` - -**Handlers** -- `restart app container` - -**Dependencies** -- `community.docker` --- -## 4. Idempotency Demonstration +## 4. Idempotency Demonstration (Provisioning) ### 4.1 First run ```bash -ansible-playbook playbooks/provision.yml +ansible-playbook -i inventory/hosts.ini playbooks/provision.yml ``` ```text -TODO: paste output (or at least PLAY RECAP) + +PLAY [Provision web servers] ************************************************************************************************************************* + +TASK [Gathering Facts] ******************************************************************************************************************************* +ok: [vagrant1] + +TASK [common : Update apt cache] ********************************************************************************************************************* +ok: [vagrant1] + +TASK [common : Install common packages] ************************************************************************************************************** +ok: [vagrant1] + +TASK [common : Set timezone] ************************************************************************************************************************* +skipping: [vagrant1] + +TASK [docker : Install prerequisites for Docker repository] ****************************************************************************************** +ok: [vagrant1] + +TASK [docker : Ensure /etc/apt/keyrings exists] ****************************************************************************************************** +ok: [vagrant1] + +TASK [docker : Download Docker GPG key (ASCII)] ****************************************************************************************************** +ok: [vagrant1] + +TASK [docker : Check if Docker keyring already exists] *********************************************************************************************** +ok: [vagrant1] + +TASK [docker : Convert (dearmor) Docker GPG key to keyring] ****************************************************************************************** +skipping: [vagrant1] + +TASK [docker : Set correct permissions on Docker keyring] ******************************************************************************************** +ok: [vagrant1] + +TASK [docker : Set Docker APT architecture mapping] ************************************************************************************************** +[WARNING]: Deprecation warnings can be disabled by setting `deprecation_warnings=False` in ansible.cfg. +[DEPRECATION WARNING]: INJECT_FACTS_AS_VARS default to `True` is deprecated, top-level facts will not be auto injected after the change. This feature will be removed from ansible-core version 2.24. +Origin: /home/dorley/projects/DevOps-Core-Course/ansible/roles/docker/tasks/main.yml:42:22 + +40 - name: Set Docker APT architecture mapping +41 ansible.builtin.set_fact: +42 docker_apt_arch: "{{ {'x86_64':'amd64','aarch64':'arm64'}.get(ansible_architecture, ansible_architecture) }}" + ^ column 22 + +Use `ansible_facts["fact_name"]` (no `ansible_` prefix) instead. + +ok: [vagrant1] + +TASK [docker : Add official Docker APT repository] *************************************************************************************************** +[DEPRECATION WARNING]: INJECT_FACTS_AS_VARS default to `True` is deprecated, top-level facts will not be auto injected after the change. This feature will be removed from ansible-core version 2.24. +Origin: /home/dorley/projects/DevOps-Core-Course/ansible/roles/docker/tasks/main.yml:46:11 + +44 - name: Add official Docker APT repository +45 ansible.builtin.apt_repository: +46 repo: "deb [arch={{ docker_apt_arch }} signed-by={{ docker_keyring_path }}] https://download.docker.com/linux/... + ^ column 11 + +Use `ansible_facts["fact_name"]` (no `ansible_` prefix) instead. + +ok: [vagrant1] + +TASK [docker : Install Docker Engine packages] ******************************************************************************************************* +ok: [vagrant1] + +TASK [docker : Ensure Docker service is enabled and running] ***************************************************************************************** +ok: [vagrant1] + +TASK [docker : Ensure docker group exists] *********************************************************************************************************** +ok: [vagrant1] + +TASK [docker : Add user to docker group] ************************************************************************************************************* +ok: [vagrant1] + +TASK [docker : Install Docker SDK for Python on target (for Ansible docker modules)] ***************************************************************** +ok: [vagrant1] + +PLAY RECAP ******************************************************************************************************************************************* +vagrant1 : ok=15 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0 ``` ### 4.2 Second run ```bash -ansible-playbook playbooks/provision.yml +ansible-playbook -i inventory/hosts.ini playbooks/provision.yml ``` ```text -TODO: paste output (or at least PLAY RECAP) -``` +PLAY [Provision web servers] ************************************************************************************************************************* -### 4.3 Analysis -On the first run, tasks typically show `changed` because packages/repositories/services are being installed/configured. -On the second run, Ansible should converge to `ok` for most tasks, proving idempotency (desired state already reached). +TASK [Gathering Facts] ******************************************************************************************************************************* +ok: [vagrant1] ---- +TASK [common : Update apt cache] ********************************************************************************************************************* +ok: [vagrant1] -## 5. Ansible Vault +TASK [common : Install common packages] ************************************************************************************************************** +ok: [vagrant1] -### 5.1 Secret storage -Docker registry credentials are stored in `ansible/group_vars/all.yml` encrypted with Ansible Vault. +TASK [common : Set timezone] ************************************************************************************************************************* +skipping: [vagrant1] -### 5.2 Proof of encryption +TASK [docker : Install prerequisites for Docker repository] ****************************************************************************************** +ok: [vagrant1] -```bash -head -n 5 ansible/group_vars/all.yml -``` +TASK [docker : Ensure /etc/apt/keyrings exists] ****************************************************************************************************** +ok: [vagrant1] -```text -TODO: paste output (should start with $ANSIBLE_VAULT;...) +TASK [docker : Download Docker GPG key (ASCII)] ****************************************************************************************************** +ok: [vagrant1] + +TASK [docker : Check if Docker keyring already exists] *********************************************************************************************** +ok: [vagrant1] + +TASK [docker : Convert (dearmor) Docker GPG key to keyring] ****************************************************************************************** +skipping: [vagrant1] + +TASK [docker : Set correct permissions on Docker keyring] ******************************************************************************************** +ok: [vagrant1] + +TASK [docker : Set Docker APT architecture mapping] ************************************************************************************************** +[WARNING]: Deprecation warnings can be disabled by setting `deprecation_warnings=False` in ansible.cfg. +[DEPRECATION WARNING]: INJECT_FACTS_AS_VARS default to `True` is deprecated, top-level facts will not be auto injected after the change. This feature will be removed from ansible-core version 2.24. +Origin: /home/dorley/projects/DevOps-Core-Course/ansible/roles/docker/tasks/main.yml:42:22 + +40 - name: Set Docker APT architecture mapping +41 ansible.builtin.set_fact: +42 docker_apt_arch: "{{ {'x86_64':'amd64','aarch64':'arm64'}.get(ansible_architecture, ansible_architecture) }}" + ^ column 22 + +Use `ansible_facts["fact_name"]` (no `ansible_` prefix) instead. + +ok: [vagrant1] + +TASK [docker : Add official Docker APT repository] *************************************************************************************************** +[DEPRECATION WARNING]: INJECT_FACTS_AS_VARS default to `True` is deprecated, top-level facts will not be auto injected after the change. This feature will be removed from ansible-core version 2.24. +Origin: /home/dorley/projects/DevOps-Core-Course/ansible/roles/docker/tasks/main.yml:46:11 + +44 - name: Add official Docker APT repository +45 ansible.builtin.apt_repository: +46 repo: "deb [arch={{ docker_apt_arch }} signed-by={{ docker_keyring_path }}] https://download.docker.com/linux/... + ^ column 11 + +Use `ansible_facts["fact_name"]` (no `ansible_` prefix) instead. + +ok: [vagrant1] + +TASK [docker : Install Docker Engine packages] ******************************************************************************************************* +ok: [vagrant1] + +TASK [docker : Ensure Docker service is enabled and running] ***************************************************************************************** +ok: [vagrant1] + +TASK [docker : Ensure docker group exists] *********************************************************************************************************** +ok: [vagrant1] + +TASK [docker : Add user to docker group] ************************************************************************************************************* +ok: [vagrant1] + +TASK [docker : Install Docker SDK for Python on target (for Ansible docker modules)] ***************************************************************** +ok: [vagrant1] + +PLAY RECAP ******************************************************************************************************************************************* +vagrant1 : ok=15 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0 ``` -### 5.3 Vault password strategy -- Option A: `--ask-vault-pass` -- Option B: `.vault_pass` (chmod 600) and add it to `.gitignore` +### 4.3 Analysis +First run changes the system (packages, repositories, services). Second run converges to the desired state and should show `changed=0` (or close to it), proving idempotency. + +--- + +## 5. Secrets / Vault + +This lab uses a **public Docker Hub image**, therefore no registry password is required for `docker pull`. + +Variables are stored in `group_vars/webservers.yml` and `dockerhub_password` is set to an empty string. + +Optional: Ansible Vault can still be used for secrets (e.g., if using a private image), but is not required for this public-image setup. --- @@ -197,76 +329,122 @@ TODO: paste output (should start with $ANSIBLE_VAULT;...) ### 6.1 Deploy run ```bash -ansible-playbook playbooks/deploy.yml --ask-vault-pass +ansible-playbook -i inventory/hosts.ini playbooks/deploy.yml ``` ```text -TODO: paste output (or at least PLAY RECAP) + +PLAY [Deploy application] **************************************************************************************************************************** + +TASK [Gathering Facts] ******************************************************************************************************************************* +ok: [vagrant1] + +TASK [app_deploy : Ensure Docker SDK for Python is installed on target] ****************************************************************************** +ok: [vagrant1] + +TASK [app_deploy : Login to Docker registry] ********************************************************************************************************* +skipping: [vagrant1] + +TASK [app_deploy : Pull application image] *********************************************************************************************************** +ok: [vagrant1] + +TASK [app_deploy : Check current container (if exists)] ********************************************************************************************** +ok: [vagrant1] + +TASK [app_deploy : Decide if redeploy is needed] ***************************************************************************************************** +ok: [vagrant1] + +TASK [app_deploy : Stop existing container (only if redeploy needed)] ******************************************************************************** +skipping: [vagrant1] + +TASK [app_deploy : Remove existing container (only if redeploy needed)] ****************************************************************************** +skipping: [vagrant1] + +TASK [app_deploy : Run application container] ******************************************************************************************************** +ok: [vagrant1] + +TASK [app_deploy : Wait for the application port to become available] ******************************************************************************** +ok: [vagrant1] + +TASK [app_deploy : Health check (/health)] *********************************************************************************************************** +ok: [vagrant1] + +TASK [app_deploy : Verify main endpoint (/)] ********************************************************************************************************* +ok: [vagrant1] + +PLAY RECAP ******************************************************************************************************************************************* +vagrant1 : ok=9 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0 ``` ### 6.2 Container status ```bash -ansible webservers -a "docker ps" +ansible -i inventory/hosts.ini webservers -a "docker ps" ``` ```text -TODO: paste output +vagrant1 | CHANGED | rc=0 >> +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +a0a73f77e763 dorley174/devops-info-service:latest "python app.py" 35 minutes ago Up 34 minutes 0.0.0.0:5000->5000/tcp devops-info-service ``` ### 6.3 Health check -From the target VM (via Ansible): (i will use another ip) +From the target VM (via Ansible): ```bash -ansible webservers -a "curl -i http://127.0.0.1:5000/health" +ansible -i inventory/hosts.ini webservers -a "curl -i http://127.0.0.1:5000/health" ``` -From the control node (WSL) through port forwarding (Vagrant): +From the control node (WSL) via Windows host forwarding: ```bash -WIN_HOST_IP=$(grep -m1 nameserver /etc/resolv.conf | awk '{print $2}') -curl -i "http://$WIN_HOST_IP:5000/health" -curl -i "http://$WIN_HOST_IP:5000/" +curl -i "http://192.168.31.32:5000/health" +curl -i "http://192.168.31.32:5000/" ``` ```text +curl -i "http://192.168.31.32:5000/" HTTP/1.1 200 OK Server: Werkzeug/3.1.5 Python/3.13.1 +Date: Thu, 26 Feb 2026 20:05:00 GMT +Content-Type: application/json; charset=utf-8 +Content-Length: 82 +Connection: close + +{"status":"healthy","timestamp":"2026-02-26T20:05:00.236Z","uptime_seconds":2111} HTTP/1.1 200 OK Server: Werkzeug/3.1.5 Python/3.13.1 -Date: Thu, 26 Feb 2026 19:31:16 GMT -Date: Thu, 26 Feb 2026 19:31:16 GMT -Content-Type: application/json; charset=utf-8 +Date: Thu, 26 Feb 2026 20:05:00 GMT Content-Type: application/json; charset=utf-8 -Content-Length: 80 -Content-Length: 80 +Content-Length: 675 Connection: close -{"status":"healthy","timestamp":"2026-02-26T19:31:16.782Z","uptime_seconds":87} +{"endpoints":[{"description":"Service information","method":"GET","path":"/"},{"description":"Health check","method":"GET","path":"/health"}],"request":{"client_ip":"192.168.31.32","method":"GET","path":"/","user_agent":"curl/8.5.0"},"runtime":{"current_time":"2026-02-26T20:05:00.254Z","timezone":"UTC","uptime_human":"0 hours, 35 minutes","uptime_seconds":2111},"service":{"description":"DevOps course info service","framework":"Flask","name":"devops-info-service","version":"1.0.0"},"system":{"architecture":"x86_64","cpu_count":2,"hostname":"a0a73f77e763","platform":"Linux","platform_version":"Linux-5.15.0-170-generic-x86_64-with-glibc2.36","python_version":"3.13.1"}} ``` --- ## 7. Key Decisions (Short Answers) -1. **Why use roles instead of plain playbooks?** +1. **Why use roles instead of plain playbooks?** Roles keep automation modular and reusable, making playbooks shorter and easier to maintain. -2. **How do roles improve reusability?** - The same role can be applied to different hosts/projects by changing variables, without copying task code. +2. **How do roles improve reusability?** + The same role can be applied to different hosts/projects by changing variables without copying tasks. -3. **What makes a task idempotent?** - Using stateful modules (`apt`, `service`, `user`, `docker_container`) that only change the system when its current state differs from the desired one. +3. **What makes a task idempotent?** + Stateful modules that only change the system if the current state differs from desired state. -4. **How do handlers improve efficiency?** - Handlers run only when notified by a task that actually changed something, avoiding unnecessary service restarts. +4. **How do handlers improve efficiency?** + Handlers run only when notified, avoiding unnecessary restarts. -5. **Why is Ansible Vault needed?** - It allows storing secrets in version control safely by encrypting them, while still enabling automation to use them. +5. **Why would Ansible Vault be needed?** + To store sensitive credentials safely in version control when secrets are required. --- ## 8. Challenges (Optional) -- TODO: add short bullet points if you had any issues and how you solved them. +- VirtualBox/Vagrant leftovers caused VM name conflicts; fixed by removing stale VMs from VirtualBox. +- WSL could not access `127.0.0.1:2222` forwarded port; fixed by using Windows LAN IP (e.g., `192.168.31.32`).