From 9196760ad5a56c7e6158a9362341ccbcbb30dc30 Mon Sep 17 00:00:00 2001 From: Vamshi Namilikonda Date: Fri, 26 Apr 2024 18:46:11 +0530 Subject: [PATCH] NFO helm initial code Issue-ID: SMO-145 Change-Id: I41b1fb72571a7ed1d77eec3e356b27a2acae98cf Signed-off-by: Vamshi Namilikonda --- nfo/k8s/README.md | 63 ++++++++++ nfo/k8s/apis/__init__.py | 0 nfo/k8s/apis/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 194 bytes nfo/k8s/apis/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 172 bytes nfo/k8s/apis/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 166 bytes nfo/k8s/apis/__pycache__/admin.cpython-310.pyc | Bin 0 -> 235 bytes nfo/k8s/apis/__pycache__/admin.cpython-312.pyc | Bin 0 -> 216 bytes nfo/k8s/apis/__pycache__/admin.cpython-38.pyc | Bin 0 -> 207 bytes nfo/k8s/apis/__pycache__/apps.cpython-310.pyc | Bin 0 -> 469 bytes nfo/k8s/apis/__pycache__/apps.cpython-312.pyc | Bin 0 -> 474 bytes nfo/k8s/apis/__pycache__/apps.cpython-38.pyc | Bin 0 -> 439 bytes nfo/k8s/apis/__pycache__/models.cpython-310.pyc | Bin 0 -> 232 bytes nfo/k8s/apis/__pycache__/models.cpython-312.pyc | Bin 0 -> 819 bytes .../apis/__pycache__/serializers.cpython-310.pyc | Bin 0 -> 247 bytes .../apis/__pycache__/serializers.cpython-312.pyc | Bin 0 -> 807 bytes nfo/k8s/apis/__pycache__/urls.cpython-310.pyc | Bin 0 -> 469 bytes nfo/k8s/apis/__pycache__/urls.cpython-312.pyc | Bin 0 -> 574 bytes nfo/k8s/apis/__pycache__/urls.cpython-38.pyc | Bin 0 -> 441 bytes nfo/k8s/apis/__pycache__/views.cpython-310.pyc | Bin 0 -> 716 bytes nfo/k8s/apis/__pycache__/views.cpython-312.pyc | Bin 0 -> 1834 bytes nfo/k8s/apis/__pycache__/views.cpython-38.pyc | Bin 0 -> 1539 bytes nfo/k8s/apis/admin.py | 3 + nfo/k8s/apis/apps.py | 6 + nfo/k8s/apis/migrations/0001_initial.py | 22 ++++ nfo/k8s/apis/migrations/0002_delete_nfomodel.py | 16 +++ nfo/k8s/apis/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 741 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 966 bytes .../__pycache__/0001_initial.cpython-38.pyc | Bin 0 -> 711 bytes .../0002_delete_nfomodel.cpython-310.pyc | Bin 0 -> 537 bytes .../0002_delete_nfomodel.cpython-312.pyc | Bin 0 -> 615 bytes .../0002_delete_nfomodel.cpython-38.pyc | Bin 0 -> 507 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 205 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 183 bytes .../migrations/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 177 bytes nfo/k8s/apis/models.py | 9 ++ nfo/k8s/apis/serializers.py | 12 ++ nfo/k8s/apis/tests.py | 3 + nfo/k8s/apis/urls.py | 22 ++++ nfo/k8s/apis/views.py | 56 +++++++++ nfo/k8s/config.ini | 4 + nfo/k8s/db.sqlite3 | Bin 0 -> 143360 bytes nfo/k8s/helm/__init__.py | 0 nfo/k8s/helm/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 172 bytes nfo/k8s/helm/__pycache__/admin.cpython-312.pyc | Bin 0 -> 1002 bytes nfo/k8s/helm/__pycache__/apps.cpython-312.pyc | Bin 0 -> 474 bytes nfo/k8s/helm/__pycache__/models.cpython-312.pyc | Bin 0 -> 1871 bytes .../helm/__pycache__/serializers.cpython-312.pyc | Bin 0 -> 1270 bytes nfo/k8s/helm/__pycache__/urls.cpython-312.pyc | Bin 0 -> 702 bytes nfo/k8s/helm/__pycache__/views.cpython-312.pyc | Bin 0 -> 2056 bytes nfo/k8s/helm/admin.py | 14 +++ nfo/k8s/helm/apps.py | 6 + nfo/k8s/helm/migrations/0001_initial.py | 38 ++++++ nfo/k8s/helm/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 2121 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 183 bytes nfo/k8s/helm/models.py | 35 ++++++ nfo/k8s/helm/serializers.py | 18 +++ nfo/k8s/helm/tests.py | 3 + nfo/k8s/helm/urls.py | 17 +++ nfo/k8s/helm/views.py | 29 +++++ nfo/k8s/helmprocessor/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 181 bytes .../__pycache__/admin.cpython-312.pyc | Bin 0 -> 1011 bytes .../helmprocessor/__pycache__/apps.cpython-312.pyc | Bin 0 -> 495 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 2104 bytes .../__pycache__/serializers.cpython-312.pyc | Bin 0 -> 1294 bytes .../helmprocessor/__pycache__/urls.cpython-312.pyc | Bin 0 -> 723 bytes .../__pycache__/views.cpython-312.pyc | Bin 0 -> 2077 bytes nfo/k8s/helmprocessor/admin.py | 14 +++ nfo/k8s/helmprocessor/apps.py | 6 + nfo/k8s/helmprocessor/models.py | 40 +++++++ nfo/k8s/helmprocessor/serializers.py | 18 +++ nfo/k8s/helmprocessor/tests.py | 3 + nfo/k8s/helmprocessor/urls.py | 17 +++ nfo/k8s/helmprocessor/views.py | 29 +++++ nfo/k8s/manage.py | 22 ++++ nfo/k8s/nfo_microservice/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 206 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 184 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 178 bytes .../__pycache__/settings.cpython-310.pyc | Bin 0 -> 2381 bytes .../__pycache__/settings.cpython-312.pyc | Bin 0 -> 2631 bytes .../__pycache__/settings.cpython-38.pyc | Bin 0 -> 2421 bytes .../__pycache__/urls.cpython-310.pyc | Bin 0 -> 1055 bytes .../__pycache__/urls.cpython-312.pyc | Bin 0 -> 1162 bytes .../__pycache__/urls.cpython-38.pyc | Bin 0 -> 1027 bytes .../__pycache__/views.cpython-312.pyc | Bin 0 -> 6503 bytes .../__pycache__/wsgi.cpython-310.pyc | Bin 0 -> 627 bytes .../__pycache__/wsgi.cpython-312.pyc | Bin 0 -> 690 bytes .../__pycache__/wsgi.cpython-38.pyc | Bin 0 -> 599 bytes nfo/k8s/nfo_microservice/asgi.py | 16 +++ nfo/k8s/nfo_microservice/settings.py | 127 ++++++++++++++++++++ nfo/k8s/nfo_microservice/urls.py | 29 +++++ nfo/k8s/nfo_microservice/views.py | 131 +++++++++++++++++++++ nfo/k8s/nfo_microservice/wsgi.py | 16 +++ nfo/k8s/python_client.py | 92 +++++++++++++++ 97 files changed, 936 insertions(+) create mode 100644 nfo/k8s/README.md create mode 100644 nfo/k8s/apis/__init__.py create mode 100644 nfo/k8s/apis/__pycache__/__init__.cpython-310.pyc create mode 100644 nfo/k8s/apis/__pycache__/__init__.cpython-312.pyc create mode 100644 nfo/k8s/apis/__pycache__/__init__.cpython-38.pyc create mode 100644 nfo/k8s/apis/__pycache__/admin.cpython-310.pyc create mode 100644 nfo/k8s/apis/__pycache__/admin.cpython-312.pyc create mode 100644 nfo/k8s/apis/__pycache__/admin.cpython-38.pyc create mode 100644 nfo/k8s/apis/__pycache__/apps.cpython-310.pyc create mode 100644 nfo/k8s/apis/__pycache__/apps.cpython-312.pyc create mode 100644 nfo/k8s/apis/__pycache__/apps.cpython-38.pyc create mode 100644 nfo/k8s/apis/__pycache__/models.cpython-310.pyc create mode 100644 nfo/k8s/apis/__pycache__/models.cpython-312.pyc create mode 100644 nfo/k8s/apis/__pycache__/serializers.cpython-310.pyc create mode 100644 nfo/k8s/apis/__pycache__/serializers.cpython-312.pyc create mode 100644 nfo/k8s/apis/__pycache__/urls.cpython-310.pyc create mode 100644 nfo/k8s/apis/__pycache__/urls.cpython-312.pyc create mode 100644 nfo/k8s/apis/__pycache__/urls.cpython-38.pyc create mode 100644 nfo/k8s/apis/__pycache__/views.cpython-310.pyc create mode 100644 nfo/k8s/apis/__pycache__/views.cpython-312.pyc create mode 100644 nfo/k8s/apis/__pycache__/views.cpython-38.pyc create mode 100644 nfo/k8s/apis/admin.py create mode 100644 nfo/k8s/apis/apps.py create mode 100644 nfo/k8s/apis/migrations/0001_initial.py create mode 100644 nfo/k8s/apis/migrations/0002_delete_nfomodel.py create mode 100644 nfo/k8s/apis/migrations/__init__.py create mode 100644 nfo/k8s/apis/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 nfo/k8s/apis/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 nfo/k8s/apis/migrations/__pycache__/0001_initial.cpython-38.pyc create mode 100644 nfo/k8s/apis/migrations/__pycache__/0002_delete_nfomodel.cpython-310.pyc create mode 100644 nfo/k8s/apis/migrations/__pycache__/0002_delete_nfomodel.cpython-312.pyc create mode 100644 nfo/k8s/apis/migrations/__pycache__/0002_delete_nfomodel.cpython-38.pyc create mode 100644 nfo/k8s/apis/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 nfo/k8s/apis/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 nfo/k8s/apis/migrations/__pycache__/__init__.cpython-38.pyc create mode 100644 nfo/k8s/apis/models.py create mode 100644 nfo/k8s/apis/serializers.py create mode 100644 nfo/k8s/apis/tests.py create mode 100644 nfo/k8s/apis/urls.py create mode 100644 nfo/k8s/apis/views.py create mode 100644 nfo/k8s/config.ini create mode 100644 nfo/k8s/db.sqlite3 create mode 100644 nfo/k8s/helm/__init__.py create mode 100644 nfo/k8s/helm/__pycache__/__init__.cpython-312.pyc create mode 100644 nfo/k8s/helm/__pycache__/admin.cpython-312.pyc create mode 100644 nfo/k8s/helm/__pycache__/apps.cpython-312.pyc create mode 100644 nfo/k8s/helm/__pycache__/models.cpython-312.pyc create mode 100644 nfo/k8s/helm/__pycache__/serializers.cpython-312.pyc create mode 100644 nfo/k8s/helm/__pycache__/urls.cpython-312.pyc create mode 100644 nfo/k8s/helm/__pycache__/views.cpython-312.pyc create mode 100644 nfo/k8s/helm/admin.py create mode 100644 nfo/k8s/helm/apps.py create mode 100644 nfo/k8s/helm/migrations/0001_initial.py create mode 100644 nfo/k8s/helm/migrations/__init__.py create mode 100644 nfo/k8s/helm/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 nfo/k8s/helm/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 nfo/k8s/helm/models.py create mode 100644 nfo/k8s/helm/serializers.py create mode 100644 nfo/k8s/helm/tests.py create mode 100644 nfo/k8s/helm/urls.py create mode 100644 nfo/k8s/helm/views.py create mode 100644 nfo/k8s/helmprocessor/__init__.py create mode 100644 nfo/k8s/helmprocessor/__pycache__/__init__.cpython-312.pyc create mode 100644 nfo/k8s/helmprocessor/__pycache__/admin.cpython-312.pyc create mode 100644 nfo/k8s/helmprocessor/__pycache__/apps.cpython-312.pyc create mode 100644 nfo/k8s/helmprocessor/__pycache__/models.cpython-312.pyc create mode 100644 nfo/k8s/helmprocessor/__pycache__/serializers.cpython-312.pyc create mode 100644 nfo/k8s/helmprocessor/__pycache__/urls.cpython-312.pyc create mode 100644 nfo/k8s/helmprocessor/__pycache__/views.cpython-312.pyc create mode 100644 nfo/k8s/helmprocessor/admin.py create mode 100644 nfo/k8s/helmprocessor/apps.py create mode 100644 nfo/k8s/helmprocessor/models.py create mode 100644 nfo/k8s/helmprocessor/serializers.py create mode 100644 nfo/k8s/helmprocessor/tests.py create mode 100644 nfo/k8s/helmprocessor/urls.py create mode 100644 nfo/k8s/helmprocessor/views.py create mode 100644 nfo/k8s/manage.py create mode 100644 nfo/k8s/nfo_microservice/__init__.py create mode 100644 nfo/k8s/nfo_microservice/__pycache__/__init__.cpython-310.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/__init__.cpython-312.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/__init__.cpython-38.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/settings.cpython-310.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/settings.cpython-312.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/settings.cpython-38.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/urls.cpython-310.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/urls.cpython-312.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/urls.cpython-38.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/views.cpython-312.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/wsgi.cpython-310.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/wsgi.cpython-312.pyc create mode 100644 nfo/k8s/nfo_microservice/__pycache__/wsgi.cpython-38.pyc create mode 100644 nfo/k8s/nfo_microservice/asgi.py create mode 100644 nfo/k8s/nfo_microservice/settings.py create mode 100644 nfo/k8s/nfo_microservice/urls.py create mode 100644 nfo/k8s/nfo_microservice/views.py create mode 100644 nfo/k8s/nfo_microservice/wsgi.py create mode 100644 nfo/k8s/python_client.py diff --git a/nfo/k8s/README.md b/nfo/k8s/README.md new file mode 100644 index 0000000..e85b72a --- /dev/null +++ b/nfo/k8s/README.md @@ -0,0 +1,63 @@ + +Step 1: Installed softwares: +=========================== +Python: 3.12 (latest should work) +Pip3 +Helm: v3.14.3 (latest should work) +Kubernetes Client: v1.28.2 (latest should work) +Kubernetes Server: v1.28.4 (latest should work) + +Step 2: Create virtul environment: +================================= +#pip installed using get-pip.py +pip3 install virtualenv +virtualenv venv_nfo + +source env/bin/activate # On Windows use `env\Scripts\activate` + +Step 3: Install Pip packages: +============================ +pip3 install requests +pip3 install django +pip3 install djangorestframework +pip3 install pyhelm +pip3 install kubernetes + + +python3 manage.py startapp apis //creates new app named apis + +Step 4: Change environment configurations in conig.ini +====================================================== +Change Kubernetes config path +Change Helm executable path + +Step 5: Run application: +======================= +python3 manage.py migrations +python3 manage.py migrate +python3 manage.py runserver + +Step 6: Run REST apis: +===================== + +GET http://127.0.0.1:8000/nfo/api/v1/ +POST http://127.0.0.1:8000/nfo/api/v1/ + { + "charts": [ + { + "name": "cert-manager", + "version": "v1.8.x", + "repo": "https://charts.jetstack.io" + + } + ] + } +DELETE http://127.0.0.1:8000/nfo/api/v1/ + { + "name": "cert-manager", + "namespace": "default" + } + + +#Helm Client Library +#https://github.com/stackhpc/pyhelm3 \ No newline at end of file diff --git a/nfo/k8s/apis/__init__.py b/nfo/k8s/apis/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nfo/k8s/apis/__pycache__/__init__.cpython-310.pyc b/nfo/k8s/apis/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..95d90c744f68c013dea128701b5d3012213d5b0e GIT binary patch literal 194 zcmd1j<>g`kf|QT%Q$h4&5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_&vsFxJacWU< zOj%-XaYl@PUaCt`W?5>COMY@`ZfaghaZFxfZe~tqc79$;VoZ5{QFgpXKul;sadu`- z4uoG&S(1^T7n7HkAD@zyn3tX(lUR^h91|a(nU`4-AFo$Xd5gm)H$SB`C)EyQeK8Y| HU||3NUjQ~H literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/__init__.cpython-312.pyc b/nfo/k8s/apis/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69b9e91a40e63c0c0eb3cdc33c4cb83999adf858 GIT binary patch literal 172 zcmX@j%ge<81W}GZQbF`%5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!^48DD&rQ`&%S+Bl zOw!LwEy&2s*Uc|Z*3HZ-Nlhg`kf+)uysUZ3>h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vTKO;XkRX;5+ zIVUkmKQFZ)BQsw&zc^VpGp{5yy(qCHGe1wiJijPAzM!%s1IW%x%a2dVO3X{o*H0|S iEY^>Y&&Q3od##HBna(L{|+-YZF~_(}d!S0^WNbu!h(gS+G2 z@b0M7X|n+Nda6nAdma7}g)k2Ey&#fFZkXi>=S)Ux7B?Q@%3@wMg|r$Mag=oBN#KF{ zJHo>0t*am0m}><4%6mH9c|v?Mkb#@PNWo?cqD3pI@ui(2^{T8u3u;>j^#f0d31ce*gdg literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/admin.cpython-312.pyc b/nfo/k8s/apis/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20e858a7bee44097248f3e9f3e62a98958cf09f3 GIT binary patch literal 216 zcmX@j%ge<81W}GZQtg5CV-N=hn4pZ$0zk%eh7^Vr#vF!R#wbQchDs()=9eI8O~zZS zi7C06d48HqxA;=B67$mY^^)`RN{TX*ikN{4Rx*4Bsr%)jpOK%Ns-KpZoRgTOpO;#Y zk(sZXU!1I)nOBmUUX)mpnV+X$o?nz5Ur2 fKczG$)vkyGXfPuX7lRldm>C%v?=dJ8u>m;%AH_Mf literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/admin.cpython-38.pyc b/nfo/k8s/apis/__pycache__/admin.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5eaf1f17daa62955b8c0ffabcd2cc954f70f2e48 GIT binary patch literal 207 zcmWIL<>g`kf+)uysrEqnF^Gc(44TX@fuanW zjJH@5Q*tx&{4|-O_)@YG^V0M6lJoOQiZYXmKnAR2C}IXuVB(jDenx(7s(xBta!z8B zeqL%pMrOWlesQvHW?o5ZdQoCYW`3T2d45rLd_iSN29TYXmLCr>R6nsGvsfQ&m0m&R VEe@O9{FKt1R69nX;h%w+0RWoSHI4uP literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/apps.cpython-310.pyc b/nfo/k8s/apis/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12608a3d3e19e7bfdf92219663f5d4a24e343eb3 GIT binary patch literal 469 zcmYjNy-ve05VqqKh5jt4D-vs#JODzdr4=w0B-ACcWSQD&O&vSLNl{th4R{J(DJv5r zD--9Y5f-?ejX8-~TtWl0rjL{7efgtZl5Q*PN z8i?=##hq_pp%^#EA^{=Pm ziJPTO#AA|MA+<}c)N))`_F73Tnver^7I&J6F~f7oSkq+;n6>tHpRwnf>wV@#$c)#z zVjSvO);93DPgMFl?BJJA>CA($Nji-HP5BIW5&j(y3k4xipodP@}Y3TO&AqvE`cG z-qU&E)=KNvFSgan8fr4j+WD!U6QFQOu`LOF=1=R603sCP2=8LEm^8ip!k$|Oek#xY XpRcug5No1~cF{|JROcJ^(UANB#TR

R5@M5{OlLity^R(T_s;L0b@yKT{SJ_UykGVx>xXLoqt$@*u>?y%0fiBWA%YMX zU<|0S0Mumg#nf}iC@s77sTvzr+g_4f2=0f$Ow&5UrdjVxumlVsNC7e^L?$(mRhqU{ zb-X0ZwD$gxUK1V&hfbYXP!?s*c^G&_F0Mir(aIunbYi!vHpZO94CAVUv79U-g?kv^ z79?tz0cAcZq8t;c$G-kRanE3_*4m8SxrmwT^I1fuE@#O+6eE$%Mj_8xkdizU+`SX& z4Nl5@E;087)(g675t)+ANy=0?S0_t?tS{37tcE9V*1@W~_i&l2mztm0X4P#@RN_>5 rspUO|>cJg}Htkb=)mgeLTV-RWEc`Mdgzwr{NEfrB?j`P1t(k literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/apps.cpython-38.pyc b/nfo/k8s/apis/__pycache__/apps.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a4ddc5fc81c806393956f8f5928063bf45b9225 GIT binary patch literal 439 zcmYjNy-ve05Vqq~D*agyD-vslCNF?c0}|a>5K9)z?K!C-u}z!^l@(SVgje#)#2X+c z&P^qH(tW<4@6LDkFrQBdN|FD_4}8CZb1X4BOH_A(00d}F8d^|FRs)$Q zz9-4(8(Acw{v@~d#^_R2n-Dn`ip~<%ogqk4P#{=M3kFdU1H&${pX64#q5kz89)+$< z3hT5nAZwRit19n1bE{+xJ{Cy5OGbXoxfYG&+)p@1W?u(;#`$wE>O zIW!2lPtt}v?BREnZA~MyQg3Rp&a|{!WfsP57D{)rYDK4v&R$IW#O>R1o~eCO$w!1PzQ-5EE&T(HY%w=UApaKjI(!h40wZ$k5ctUN^Cz ztGXJRD&J}~8R2$$s|V?`F#m|i3}~=TB$?!fS-#|)$!N~v%8RZn=6TI}sSHlyC~wHU za68|T>rg!3S*Viy=(8DiVSy?joP@;$rcRB5J}DUa&Cx1%Kybopqf_ssfU^(jYCMBQ ohN(8D^x5^0cn5ClS7j22Oe2&9I@vX^_h>&F)#sFpMTa)~0s%ll0ssI2 literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/models.cpython-312.pyc b/nfo/k8s/apis/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..167b55a8ed6979f46615d5fe7cf19af80d76a7cf GIT binary patch literal 819 zcmZWny>HV%6u-0MCQcg#iSUtv6f=5ghO$)%2}QIMjzr61SvonnYjVLK;m(N~lp#Zg zbm|yJRumRy{sANwDv(-PVq)q9Qef%Co$XK%H@x?I@80{pkGqehQW1#rF8`gp7y6qt zR!7Ugaz}tUzyL!J_|S$BC}0m@WeTuLU@x~yxY7$X#kM-inc9UkOc<~EAtoMgU&R5C z1%jn5ymLT+4Kc741rW7Y_&YGg7`{~&FvYf(L~Z;Zwa8p{9;;Je7i1H0!P;#;kqumY z5Z9ueqVFCdj|82l+s-JHJc(sn%S|EXU<`VR`(Lpy7%V}eMKtn=069*)LoRcT%U6vZ z=NTuAJHx>BsYjnX4Y%JRJ`JeTWbH2D5pyFN2F3w#eZvZe+xLwvV~+%cxt`MqeSZ+p zXk;|PAY!yNkg?pcNWV+NOc~9sr;jY-anNxEGYKN6Ev9R^oH)T@h;YvhI-%qCDRw3;A~Zwh%v52;o<7_ve}hE3@Ir_;~ya2$*F42Co>w!vFvP literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/serializers.cpython-310.pyc b/nfo/k8s/apis/__pycache__/serializers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a3e0354ad55583f68a6490bd119f6f1c5da6f09f GIT binary patch literal 247 zcmYjM%W48a5bRk!1V!;T_L2_}5g{Hthzh|RLc=mRZFbywEYqt-|Hxn3Yfd?O&B@t# z*@CX38oH?VgFz1>mfv^!5CA`oX(Ned7KcZX6ewZ9iccXxCGU`Se&ZHWQTLgGmPTJG z@G4E}VIZ!ueUO&UJ`|yexk2bg`KQ19ZH(J^#CVdHb6h)`2Yn)(``yu!s~DZM+UUYN zC9w&~78~4_TxesSzPwbqcj)#$QwQn3JjzltwyM0Am-=O5y*e72#`l1mA|vqtI+#Z_ literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/serializers.cpython-312.pyc b/nfo/k8s/apis/__pycache__/serializers.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca8b6783c9d8a0898453c65ed154285114b9e5bb GIT binary patch literal 807 zcmY*X&u`N(6tA)%$>*CmP+dG%}O)p3HI4wVx~ z`vbV`#2t^)_Ji`cmGtOdF z=Eh`K8>fgOiaAPfh%urTwYinpp^cG+_7HVW5Ul_{sxFe3`Mter$&&y8 literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/urls.cpython-310.pyc b/nfo/k8s/apis/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f798d535fe35537ab5fc7b20fb32c63c8ef704ef GIT binary patch literal 469 zcmY+A&q@O^5XO^qx4Uhv6nu(`*1L!Z_TWiHt%oI0LX&p4&7URNZL!zBh#q~VTs`&Z z!HXa`X)ijEU*;pp%r`OJZW}>-EkDHxLFglhzY&ADg5{n89C0j>!WmX1BRFUx8!E~o z$QwM8@l)7i*;H{BVkrl2QPc2hoW$a>5Tj_55 z9pB+|re|iSEzE~(1K>Ndi(p)*Xr|t7Y}D>+YL-7g-AZ#<@|#cc4C41Z zBijux1HReyIUPB0OqWc#oZe|Mw8c`;p_$Z5=*m&eR3VFn(VWrXb$oMAN2Oa7Qtoy6 rQsqWdJvHOKdkTFW4I>T87oT1z!)qxn!=Jbwpob4g+6b$i0Dpb~D)fcB literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/urls.cpython-312.pyc b/nfo/k8s/apis/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a225b3077a46602e396582fedb74f8cab1fd413a GIT binary patch literal 574 zcmY*UziSjh6n-*ljKkfC5m8i!e!MaO%MdZMl1xIEpn`xx!b+$?kuyrhD()n zmnx*P@gI=Gzr;qlLYPh@NV=0)NGjjl1k?Zc4#BFxSg`kW@>SkIvEQY0Sdw%wO4l6=k$t(9&S+X z2sT>3R#$9_c}y*KTtvdXDOt`|+K`5gvEOZ+n{k(FH_3O?nhR|gQ5AQIc9pCvp~`b} z5qt6ofxS<}eyQQWkBX!h)m0oEbd)Ho{y;^U*q3T=vsP*Oy4%!EK8o_8T=dF96J;al z_W$dO8O1Z;8@csD45B)%-Yj0%&N7Ae@V$O4GohR4j}b9iUVefLyaSgn10w|k{6h3D z$VCw+vM0;kUXoX0sG=&7d0@izi*Xer&j+%@l18l*ZjPE zg)p}WA-~|^89eyo0J(Vvow);zdz0JW{f%$_#>~He==^R2^C#<*w8W0!yysEvw!D zAt5ntH!#vXzo!|`ym_2VQUpP-zQid(=+le85rMdbG*18=aV$}TDQ*ZQ*lQw#CZr+o zfQK@A@NXmsO++J%MEDlJBbo@p2O?Syw**)$Fi*C4OBRHte0YztbO*ChMqFICbJ=s@ z!j9Q0!!FjUw?dm8_6^wKGl1x|7Axb>X2`mF%6ePnn-eXJElSNAu~PbF)@x~QvymI| zC2JRIuQl9xDm_;i(suaA4pI9 zPY>TWxv%FX+`*pnR&-UZrpnBxb!){!Gh3@R_YRA0Z7bkysfvTg9HyJx8=rM+mz+0> V_flMV)8+`^n2dwOXPlDp&o5$Hc_#n> literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/views.cpython-310.pyc b/nfo/k8s/apis/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8cb66301726ca4abbff63a0bc2235b969756aef3 GIT binary patch literal 716 zcmY*Xv2NQi5G5r_R$AE!P@qeftX_hyEsCN*G6Wf%AVpAA5FjujW673Cl}FofU{CIc zG-H2>Yp0G~JM}1Ma8I~*cO-Skdq+JSz91-9+duMMNXRcA97=$}Csgnth@cH=X-28{ zgC=OhEbRTTVHv|U)3#M!drw5nUQT+lP!B3So$N_gimzKz7WMI@!wZs!yQ`7 zHf%?+Hl2(k$L_UQJ2t~IE^0Iv;9hk`mlB|;WYZR9#f=5SumT<*82N1>!8*px6kI%C zd29S-924B~pTrC?_b`cB9w?qK|IikKL992;wLny5)Zs2N|3|0l`7E(cneJ{RS^%IvAs@PI?~L1bIzQz zGjqOk_BX>wAZQ==|4Rlmg#HwZs7W2LQXNLxA7wD}B=@(ow%?M{8?Rkd<{s)9r1D_Eacg`#(1^OcNt(!2si!j__7L@@%-5Ros z8cG~-IntDc?Ne=5Ug~&nC_EM^%X)-%W}b}jQU^qqm*M3;hp&7qU6sF7RX7tjqP??9 zwCh7O2%2-~%4-+pb7&eLMOSwJBv0cUK9!4w%4FcwL!}JY4plF(92UkbR`+c;2(_Zc zON55$Dh+JHSfNC`O2IB!lrt*MoKwRXC7;y@XRjxLPO9p6YAbH_I&Sv79=rWa=xX09Dr>wR%v zd7vZMGQ2Rno;kdh8D2}6O~qVM%zMd!Ysy-3--@#D(Pk2>#vgjm_Fcu?X0L$nOTA-R z{7wJZ0Qx=)XgP+*_AAS}kS-5MV|(P~j0V_-t=%SG;WG5CNr-iuGrY?w2S*WtxOKS_ z#kld9%#p6|u;p>Na$SvlG>|0t_zb2wnxkEhEp_tmY0fn8EIy7tJ%><3nw833CU)SU!WfAZ^uy9bW>?%H^IXC1S;UBN^!XBD^z4_gw1S5Th%fD5#Er%{KIj z7Nhl3GrQk!bJg{W*$JR)woTWW%oE%jK3|(8rXBcGZV|FRA(rjcOxmn5YI=cfdFG_+ zn}YLV3%N+_8n-4r@=;C-Wy|xz6buF5szAB0AU|^PP_0tnG8L2$4bNq~K#4~zMp)Qq z*C^B>A-Ui(V0x$s(=gt35b9l(%s34-#w}iBIfaTl3vI_0z6ZoJWfudf?N=T2;DX!omMpKkW& zR{L{5D>wLh|H)?W$+?M*^q%`jQqSV~*hVJX%p6(G99heZG}9yV`fc5qFD`lu-nF-z zdxuu{4*hVkX&zfOkKG)+QTjDl4%Ws`|E{0;M-}#)GU|H|Kf0S9*=7gfc$dc1aZ{wz z_#sHAy#gP=<3rl=!Lb-Dei_0r=6b`vb|DyMrGRpX1fwEnLakaC5u$=p?Ko1OaKhSe z7Hexq+7U@nC{%?h3ePU842545qJp7evg5qOd9_v9T6LxMm_MQ|*nwKFyRDB_0;lGY zH|b%JiBx6+Y|0qpJ81A0GH#*N9klNbdf{OL;RCl&@?j6c2k&bMynpNY6h4dTAu#w4 DZC0`m literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/__pycache__/views.cpython-38.pyc b/nfo/k8s/apis/__pycache__/views.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0539026bd35004198dda11fd142fde4f3cf75e45 GIT binary patch literal 1539 zcmZ`3O>ZML)L-+FWRiBfWe*F29*MNgu%ah~5Yq0U?4h6q1dKo<8Ob-4|@px;STo)fy3vp z^aOxF0vD*n3C0d51xZM|(}coK3s!oG*Ya55mq8M=xL1T_C+Tc;x=9yg{i0V!Nd&Y& zgukGqFFK+N`#_Md(XjU?ctb;MeI+X))tN)HBA1nM*t0t~iz+Mld0fe6lGn$z&W`iS$g$!kudDdFR+nirHxt0Ci#iok zUXAORH@S}6hZr?;8^SSl#ty-*-UooNj~OO-0J~3otR4U@bBw#;qIEI-4oe@w(-}zg z8j@`A8m#~dBIpfXxrZZy!Srs(7f=GHXoZ*fIr{0ziY&=3eT}wMYS5BQ87yx}r@jdQ zhHJcL7`^%ktaOAAGuT<7OM2VgX*1BK(;nzM_%91f22?hU);@O8^ubE#O6P`dJ$s<* zO$Q+5V6-N13!vQY-C1|{0?mElFFnx{EXVDQq8smC?EmB4#V-&PL;q~?=&McM^J;u_ z3aLNZq<--*o@o^qb;gVMJg;I`7EqpD`LoPshMyPmn<2537lj=FNGo1K(Q+uEMU+Wp zj!Rzgu~eYb+3^;SC&o1TlQ`aZ8BL++4bLt|dA;zTj-H;3PKG35N;b6(uB6gXFi9`3 zK&U95y?n00r_W7Y=9y*JJU7D!)@u}$mtv6hq+jIPq)HZ&YpIj{Y^I>~9OWu^wk&h8 zsCPithC3qFMp++xn3+xv$I_(#(Hpb@r=>L96})SS)`xoJ+;&~OA@y08 z9pVsr<2`x^khmU!ZV6$rH^2l6A>?i3AK(Mpo`4UuzoTF$`?j?^+_U?ejvVPptqdev zEBAdSelvGPU<0n_RhHLD_i}bFRV9ton`;CciI3Y{*nxsCBfU`Y;I8GB`@d8O!1lHd uTrsqNOxw$?`+HY)KZU4SVI(6XJ@*W9$^QvzpO-yW^SpW?XG;MT`V~{=lb#vF|OoD?Wi;Qu~+;FyJ{W zc)|;j2+m$J5a4}c;31!TAHBo_{~a6kt|^v{go_HD8P({jw60%NfVrKtPj@9GuuE!B z$RJBNutWe)yo@D2_U8Sz1PJ374vr7oHk{CK;KbYgk?&%)Y$`c1s2T(}tc@;|S;+;iTxii~mFo}a z;!8B=l|@;q0$s1sO^(;!sO1qSn(9jCSZ2-44FT=M=(;6M6Y#t6{#0WQ_GlElKz13V zbdi)al4XwM$5LJ_Ro(^@8t76tRM*9THI{(oM58sd9_EI7U85ZfgMkH-|sR}zwk4xM)`V!OqYO*Y_Y-~zB z>0B?W5>)!WG7I_UBt5I`Lg)Dg*Q;h$m1#MxB+ONrRjI1AO>bA9j>qFC@`lq+y)x}T z)hD&vWCG?3I=Ey+7bC={&$2Mp8N0^G# zfw5Z|Sy4JL_D`t9;)qJAZmPu8EmDg>oj5xQMWQ!6fA8*le(!zneVdq20YB!#Z+u?> z;79C?Pih1%<~cY32q5TyHZ);dFa-z%undr}2at$iOCASZf4kxkn_@@OQ|Gax3rua3 z2DL-txdD^g9>PvgyN&@MDTiNN9C331FfbtkrhuR+Hh?J!0H<2ozX3yx1SImebSrnm z8$=LED0L`zrQvH`K_ChsC409o|^Ec{^xZ^S9PHw9%j2-y!bSrneAx$1XEVV zeXg<0>eAblxK$<)w8Vs0FLjA&_Gai=HHz&JBbN0kY1_18ZQu@50!)eRkoTBrTbQnU z0k&Mbjae!rp@Ywlc_JNhDeWE0!EPgLvMjSao&`MYQN+fkviztt~PdWFi7bUYK8R^-x?LJ;M`)BK&NSo!p@U##?s zm9Mpv;?pSi>@;7B%GJ+uzg+E=tKZ9yqui50TAI3bnMy0_KvX8>53lL;xRO;qX=Pac z99mDbOynEZT8e22x6IL1=J{|k^Yj6C;~fm{aWfDhgui3}^-DPi<$blEo9X3degf_! G(SHCN$ojPa literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/migrations/__pycache__/0001_initial.cpython-38.pyc b/nfo/k8s/apis/migrations/__pycache__/0001_initial.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..526f1c562f86d806b9896519ac7651859059faa5 GIT binary patch literal 711 zcmYjPy^hmB5Z+xoKX!bG;z}rJkW$<^^a$M#3Zl4x#L>7}Ii88LIeTq(9k|d!n|FYc zH{lt!rMfpjNc@bQpu4eVG_yON`M#NbdvFjklH~L!J`#-mXoI`rQ*c6RACmzFykI3y zcqtOW*$V~&yw40gKkyp5JfkmUzLVZLR zy+<>zEJ~f0=z5K63cUGFkjI>8rq{ASoi|H20<@V?bxWEi;CJc$g~9^tY#h0v>?%m< zLMdq^>jKG-qzAgf+Q3L8sp*6G~=0@io(2j-i+LP!^<)=hp+V*h4 z`7$+o_Y$w0of}p)?icZmnFsV+XMQE|vMMoN=&VTRvBr9-s-wzgM@l!iUtRp6GFP(R zG|NiIdQnMOr8=+Tv{p90U2r^^OrFR+^5c4A+LzNOwTEPe!WX{pb0H4-Js$oRfBe5) m#*8))>?$6^yyMu>>Mn1Q?!1Ro$qk?G#`dgbZ`+~V_x=GOAIOma literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/migrations/__pycache__/0002_delete_nfomodel.cpython-310.pyc b/nfo/k8s/apis/migrations/__pycache__/0002_delete_nfomodel.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0dd8cd78984cfad01997852239176b84eefd907d GIT binary patch literal 537 zcmYjOu};G<5VeyOLP;5!5nF_W3L`=Yi3(UKNQfn}WQF=DZXG+sX%UDGRz8GZ^2)@> z%2Lh=2u`}wy*vBa@6PmkU4oW8e!>A_5V<5D@~M z1kYg>i0G1}oew-mQtG;e99MZQjkY6S`fnkELv*`=0Z2v#!RvHPvk;<5#}mJLwA50% zm9t;2G;mQ~O6!t-zrVw!mbJ`P77vfl&x`~C%iHSTg$ zh2Pyk1ALm(s&>`Sj^(cO;k_9E>nl1#YH1{W#Q zdY-SjvXC^^cpz^b&4^^-T4VU6u`nyLc3 z*}lV_HT5`(rz*$zOpdd36iY0oLLI7Vd?;j%-6G=8s{F``c|BD!mS>9bSt=(gw$|g- zx?(fL3ubH^J!WXeBxXm&ytIGRCf|VSnMqgB_z>xZO5X-*27P)hCzcewjbxC?aU zyt#?Py+;ytzHyI4)C7fCRB0`g)R{dx3>TX*ranUel2A_YI$hAj1#i`{#2>cnwv?tf z`R9rpD|LbamevuPo@P-qa))pW=qCQz*wR9I=6Mm*vmT2 zcaxAq36g`%1n9~^Ip+8la;Tx9Gl42$=i-x8eVjM&JByd9fOsymJe|c7%B4^PrL%#M zHSB!Huc~@x<)&UL8Oyn1e3i5|2r`{xn!svA7!|PN+BPXo67!D7gL7_zUyqg njz7 zs^QUSsFLjK>AHM$_*XBLMY3cGR_)cex4Eg<%|E=uatgV)D9{=&1#HQ!BDM}zd}zF* zT7Znl3QHzy;KH%g>mB4lO024H57)Y20y?s`XG13j6Hvh8DViFY1hhuNTI)%;-Ul!4O1ma>4<0CU8BV!RWkOcrlNHJdk literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/migrations/__pycache__/__init__.cpython-38.pyc b/nfo/k8s/apis/migrations/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2efce18cbba46cfb2672bf8b5e06f4a5ddaa0f36 GIT binary patch literal 177 zcmWIL<>g`kf+)uysUZ3>h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10OKO;XkRX;5+ zIVUkmKQFZ)BQsw&zc^VpGp{5yy(qCHGe1wiJijPAzM!%s1IW%x%a2dVO3X{o*H0|S oEY{D>gsLjmkB`sH%PfhH*DI*J#bJ}1pHiBWY6r6KGY~TX0Qf8}y8r+H literal 0 HcmV?d00001 diff --git a/nfo/k8s/apis/models.py b/nfo/k8s/apis/models.py new file mode 100644 index 0000000..1243052 --- /dev/null +++ b/nfo/k8s/apis/models.py @@ -0,0 +1,9 @@ +from django.db import models + + +class NFOModel(models.Model): + title = models.CharField(max_length=200) + description = models.TextField() + + def __str__(self): + return self.title diff --git a/nfo/k8s/apis/serializers.py b/nfo/k8s/apis/serializers.py new file mode 100644 index 0000000..ed32fc5 --- /dev/null +++ b/nfo/k8s/apis/serializers.py @@ -0,0 +1,12 @@ +# import serializer from rest_framework +from rest_framework import serializers + +# import model from models.py +from .models import NFOModel + +# Create a model serializer +class NFOSerializer(serializers.HyperlinkedModelSerializer): + # specify model and fields + class Meta: + model = NFOModel + fields = ('title', 'description') diff --git a/nfo/k8s/apis/tests.py b/nfo/k8s/apis/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/nfo/k8s/apis/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/nfo/k8s/apis/urls.py b/nfo/k8s/apis/urls.py new file mode 100644 index 0000000..87560a0 --- /dev/null +++ b/nfo/k8s/apis/urls.py @@ -0,0 +1,22 @@ +# basic URL Configurations +from django.urls import include, path +# import routers +from rest_framework import routers + +# import everything from views +from .views import * +#from .views import api_home +from . import views + +# define the router +router = routers.DefaultRouter() + +# define the router path and viewset to be used +#router.register(r'nfoapi', NFOViewSet) + +# specify URL Path for rest_framework +urlpatterns = [ + path('', views.api_home), + #path('', include(router.urls)), + path('api-auth/', include('rest_framework.urls')) +] diff --git a/nfo/k8s/apis/views.py b/nfo/k8s/apis/views.py new file mode 100644 index 0000000..11a2964 --- /dev/null +++ b/nfo/k8s/apis/views.py @@ -0,0 +1,56 @@ +from django.shortcuts import render +import pyhelm +import asyncio +from kubernetes import client +from pyhelm3 import Client + + +# Create your views here. +# import viewsets +from rest_framework import viewsets +import json + +# import local data +#from .serializers import NFOSerializer +#from .models import NFOModel + +from django.http import JsonResponse + + +async def api_home(request, *args, **kwargs): + body = request.body + data = {} + try: + data = json.loads(body) + except: + pass + #return JsonResponse({"message: Hi there"}, safe=False) + await asyncio.gather(process_helm_charts()) + #process_helm_charts() + return JsonResponse(data) + +async def process_helm_charts(): + print("Processing Helm charts") + + # This will use the Kubernetes configuration from the environment + client = Client() + # Specify the kubeconfig file to use + client = Client(kubeconfig = "/home/fnclab/.kube/config") + # Specify a custom Helm executable (by default, we expect 'helm' to be on the PATH) + client = Client(executable = "/usr/local/bin/helm") + + # List the deployed releases + releases = await client.list_releases(all = True, all_namespaces = True) + for release in releases: + revision = await release.current_revision() + print(release.name, release.namespace, revision.revision, str(revision.status)) + + + +# create a viewset +#class NFOViewSet(viewsets.ModelViewSet): + # define queryset + #queryset = NFOModel.objects.all() + + # specify serializer to be used + #serializer_class = NFOSerializer \ No newline at end of file diff --git a/nfo/k8s/config.ini b/nfo/k8s/config.ini new file mode 100644 index 0000000..12ddd00 --- /dev/null +++ b/nfo/k8s/config.ini @@ -0,0 +1,4 @@ +[localpath] +kubeconfig_file_path = /home/fnclab/.kube/config +helm_executable_path = /usr/local/bin/helm + diff --git a/nfo/k8s/db.sqlite3 b/nfo/k8s/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..3651b8cf7c03014b9691d17fc43739c81404390c GIT binary patch literal 143360 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 literal 0 HcmV?d00001 diff --git a/nfo/k8s/helm/__pycache__/apps.cpython-312.pyc b/nfo/k8s/helm/__pycache__/apps.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b235cfb6cb71a48d27d5518a419dace5528b2365 GIT binary patch literal 474 zcmXv~xlRKy5ViL}AqRp8A*G<8LE0j_Ed@g25TVKkY-2gG_W-ZG>>(67q?8nN`3A(N z&`?H;sHo_W0!=FH^)kiG8^3wh%zN$i+CYZ=zNU||eyZj_>;|k3C0GCg2xK6EK7_yk zBS4HfASQ(`rk?YSndR7Ds&Qbod77r@f(LOp)wIsAX;!-uEC2;QB)~Ta^i5*;*35LQ zs(nRSqP6$?4&bXK{F17UD9dj8s-6N5_s`wGiSsp$JuNgydw&6z(E) zTVmEQeL@3VvI1eLM}hu8anE3-)>@CeNF>w?_>|#^$7veHVkq+IFy;jfGhD=idv_wc zLFufBB<6uYdO=Su;^8#S-E@{I=jvohkoRPogXQ4p&DvXbb{;M=^-}X=$E-TdiAtO) rFSWd@P(8RM(Ykf4uR6)LWvgt=m4)9Xgzy6#{A?Jo|1|govec?SxO96H literal 0 HcmV?d00001 diff --git a/nfo/k8s/helm/__pycache__/models.cpython-312.pyc b/nfo/k8s/helm/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3129f1b7f26474a54c43114e6bde7f3af8b502ff GIT binary patch literal 1871 zcmbVN&1)N15P$ojuU)OA#%~sK z07xp;NPtR)w|=d1hx`R9_McGk0Cl53N@yRPKUIaljT2F$hp_`T1XjfWH~7~`P<#BM zDk(r^uSF#;P-#`zLe-2b7LvYLu`FGyDUN0uOVCZxB3eTsuDp)jqk9nOCF2VX<*BS= zW7Vl2(cibg6cYSMcL4u+IimrihwH!Q97J_1ZoF;h1TG_Dk`%HPvAT6O~0Rd7NLsyO}12`l^IF{ z`*Gb2zaix1ZLF`@H0kKsT)A#GaCyb3>B@51z*b!|OQu~bX@-MWNzjz?6O*jVmh03_ zqin30vbv@it7f^5^+q|Q-h}1)FhEDCIEPuJ7=%I(u4*7`+^m0bSy6Q(2 z%aS$KPfXSo5BMf`O@Eal9obD!uS~ok1Aulns zw|LBQBe_$K7xK-iV*zFEwjOuVcf9nS{iSyLUi0&=n5QZ8o|xZr+G4RebHX!`iLg*w zq_0wUYofvOUb(7iFOedN3lG!)Od~>#& z8GRA$WJbNr=$p*#=KbR+lJXRh^OCvU^;ZvneDuSkc5>?3Y?z(qoG(QDL^#nC>T)<) zkuT^UO33V>xIY(s7XLV$%TLJr5P@zI`#n&{9K$fbqU>oh#Z0^y+bMoqJVjuhj>VX1 QrZx7wxLy1mQ9DTg2ZIEWrT_o{ literal 0 HcmV?d00001 diff --git a/nfo/k8s/helm/__pycache__/serializers.cpython-312.pyc b/nfo/k8s/helm/__pycache__/serializers.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fdfd99d3dbf9bb3c68f337e4356708516d28b94d GIT binary patch literal 1270 zcmb_by>HV%6u#^YulK1c2H(63A31X1K*4>^j0 zsJd4eHO%GHOO>N%wP9JCa;oG?$4FI66Sqe4J-w=AEU6?fTm1#OT_>fgqj}iTQ^isT zi@yxBwoMaPn1r~D5z?>>Q6MCA14@XPA|!~s0|s)5kmm<3%WpV5Qt0xMGGVlQ%Dng; z>O%>GhTV<=YPZ5BbD!BE?X>-9HHw?7ewff*p0Q@Xi1PBfCvm zV2_Z!)=7m11@ap*G_V(!Bpjjh>B_NwK6B@_!RMrc-;~g>OkRWonD8~y;j>_tg_sA)9D*T*cu9iHRjM6t^-8sFsdiRcIo$lAD0<}^l8`%s z&sa15{{)ofko`mF=f~W$j&t}XvfGo4!LQ@f05bp+^Z?DgA_4SQt(g1UR&bb3q5OvX z+YlT8(hs>etB0?8X0>Zp&&+#=^-1o*ykQl@G^cSwT3pU8j8@+GB8<~oHl%Sju^e6} z79XV@%9$VTQ*Rq4_?p?g|5+j9FCP@{=Re^Azbj+FcZ+QaUsa6pN3{G2ty~l|TzR|I cTdH@L>K8~JE@maX+3GEK*lVsD~KoL=)+Nzg5baQBrA{4|T1qB5UL0Hnw>~7XfCQK5`;>Dg? zZ}n9F1=&Bvi?Rh}pj7bWZKbz8IkUSVC*R@C_deeHzW0)^&1M5+ocx-T_Xyy(DyqOM za4jS_hX^8+07U^p3Tuf*^+2aaU@U4qF)0o(wE}BV8;MPwz(Jq^aYi>P(fXaNVBivW zbi3v&6qy81v}J|hKRuXOb&qt?BTHsOcHgOV>USb9R8dU~P|zCNZRd|7+enyUMB}ur z2_p-Op|Ik#my{8a#QI*AC2=n-VwS#+${B{MqxT&ogPaI9v^aDdJ1<%mORP1AsKEex-ldP?YxslIahyyTZ(OQk{8`R4=Fif z{4KW?*?dC!VVM*!7xn@#*AO-*gE*H92}5ZMS7v#XB+~o~T+2zA@B2eWiQku3hKGJi zvSG}&S>D@@(}E26;#glfb+d6XWT~I_S$DaxuNL%`awi+l?MIYFWkMeFTT)kj;rUQz5BMkG6YtnN^S*8ET)=Ks;?Io>c<>j4 f>71^A+&_DIe(>pFy0$qrwr0BSX~!jwj27m_Ga6ck|uf+&hnViJkrFdBB+-ZAr7y2r5> z*%693Kokjbf+I&F`@l~KoRD(y%1DbQMjUd=&9Fp@oJ*=_cf58IDTlO1UsrW?S9e!^ z)$?;ElSI%?{jyCymk|1uD^ZhsLgyg}_mGK9Y$FG27;{;$1xM7xP!?^;ku}*-G$qs} zJLbf-xRcNlp)T7=C#9uAS+UbjM$2F%pmWHK-9%=bi1Q=Sru}|Z?8;g$oSA@`$^V#{ zZ>H4rZ+w}G1BDXTBow6h*A`i1#Am7yq^24T+o~D9<+*`)Vd@hY+rMjUhEU6}t?Psa z8L;+M?$N06W!&Qzgf%>uky`(}2tfeD)~Q2x4-uqc6KMh*I^MJF>gH3sl%BZS>otYM zw77ss!o;R9hu6eap=&Y~Q@)9J<|Uhw8Vd$?o&PJi>J0HO2I3s?;ckjae8aMXm_z)! zXR_&9FRYWsnw4(U?B7Iqj z=3&(L2(gV>J9nuGmw@Ig$~VePuV2KAXi2<;7O@(i1`-I3tAHt^PpFGQjFM{$gz?Br zj^Q?gSj}^NvgGpwFlNk=>*Ko?lpJfW?w4H8FOemS`K&ZLS~^RqN7W?d!46{Hm3dP0 z8RZwJJi380YuP@bl#`0`@(m=@@QomGcBw`hA+hBKwOk*lAu(dlQhsq-;4lzQCr*O} zIgUE(^Bofw19Pd{w$E4Vo*?ma;m�I~Gf2Qrw$~(tT_5=;RVzDIens{jzzwt|B@(&KV!2&B+A1Dx z7ptve_0hZQ#p*`!gIk|&76$JP|1jJxlv{=Jqttq#yiquL>&)he`f%*gnV;0B=hmk# zJ{$S+)`iV|!}l+=M~=5fj&JNcv7SEh$7Zhh8cEK%?`qGzMUGInnaH$6Q>8n$Hxzx&WKN98004z8BoR3YAT59x@$N@ z*Mp?4JD#~`fEQC=-{6yQhH z0YtRKAsqqFKl>2iCVHM7YG+4V+0k}(ypE*-Wexg{Iy6~vM&|W_k zlhiz@5|4Hh865bV9n|m_(kIHfSzBf`H=k6EVLzUK0mO`b0|ER4rWJ}X!8Qf8a$DMpI3Y>f5G6&G;zL)9XRy~`Z(dg0WWS-TiPs?1^cy_s*m_uew6AxfY-P(Pu_wiG<;=W!(aCEoWNbS#tqu>H#OP6Y~eYaL_U_k{W!j-Ha zN7>$r2?-T2!-U+V9Rf$Up}B#YkQIeTkfO>ps5RtDO))KR(r-co;UEDvNsqt-05&V8 zYS4y(gB8>;6utFGqPy}$ot~N`p)k^A(oLWRv0$OK>?jV&j8c|yM3zab+0r1fqq2N| zOVMch#0#prY7x0{6hH&&0O}Q$=s|lI9w@N_Zqg=Y(tD4?D@2o3S~3ooNX}hz9X_-? zGj@ekyskE&=SD9hq(MdRd2029AhL=~s8;na$eD|vuIN>S1+albtO!hnkg~s#~zzU<(hBc~3T4Rt@O|eG|!E zlmZp6aMFeg3kwVH$z2`tM#~gQ0QLwHqxqEd!zbL!!Qsc(4*mS7`1s4i5EsrojkuvH zCp2{spL!Wj*r`i9AGoPYPU_O0|F=LVwPs7V4&o_$GPm=!JDGDPb9=*`$z@ym*EaPG)Iu zy_30YOQi#vN1o=9cT)N1RwqT{9S(&?2VVyU!jZ#?Q+bcQj9;+F=bml5<8#jV9Lame zF3YxVcE-IJ7wy^NPog_pbY_b$N}bv3wshlkPS5Xj5=C43@F1SF)AKv4ZhGEH&+n)6 zwp1X(*wYI?i0<@)Grh1sy=Y5I440$0oRiM&iNA(_3A@GXPVu^1yzLZkyT!Xs@vi-i z(MjL8CG#*Aq^U

Zyrg@!QYMk9$Xx6>-8l&OF%2d;igV@8+2A6BrKvx6ZCJyTRVs zeneRq)iSY;L(AUB@u~S4ap~``nIVruAJ6kgBFDe;CpY_A%<$r~h%3!F(#$^`aTvkB D+$jyx literal 0 HcmV?d00001 diff --git a/nfo/k8s/helm/migrations/__pycache__/__init__.cpython-312.pyc b/nfo/k8s/helm/migrations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15e17f4cdef010edc6620dab7da039a93bd7008e GIT binary patch literal 183 zcmX@j%ge<81gy7zrGn_kAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd6{eq&pPQMubW?-tecrvlA2zWSdy8ar(d35lpSACS&{){=cVPxr(`AOrRVEsq~_%6 y=Vn4x73;^xXXa&=#K-FuRQ}?y$<0qG%}KQ@Vg*{m2*kx8#z$sGM#ds$APWF;pD~{R literal 0 HcmV?d00001 diff --git a/nfo/k8s/helm/models.py b/nfo/k8s/helm/models.py new file mode 100644 index 0000000..37de671 --- /dev/null +++ b/nfo/k8s/helm/models.py @@ -0,0 +1,35 @@ +from django.db import models + +# Create your models here. + +#Creating Application Model + +class Application(models.Model): + app_id=models.AutoField(primary_key=True) + app_name= models.CharField(max_length=50) + location=models.CharField(max_length=50) + about=models.TextField() + type=models.CharField(max_length=100,choices= + (('RAN','RAN'), + ('CORE','CORE'), + ("IT",'IT') + )) + added_date=models.DateTimeField(auto_now=True) + active=models.BooleanField(default=True) + + def __str__(self): + return self.name +'--'+ self.location + + + +#Employee Model +class OAI(models.Model): + oai_helm_chart_name=models.CharField(max_length=100) + repo=models.CharField(max_length=50) + version=models.TextField() + description=models.TextField() + + + company=models.ForeignKey(Application, on_delete=models.CASCADE) + + \ No newline at end of file diff --git a/nfo/k8s/helm/serializers.py b/nfo/k8s/helm/serializers.py new file mode 100644 index 0000000..1148192 --- /dev/null +++ b/nfo/k8s/helm/serializers.py @@ -0,0 +1,18 @@ +from rest_framework import serializers +from helm.models import Application,OAI + + +#create serializers here +class ApplicationSerializer(serializers.HyperlinkedModelSerializer): + appl_id=serializers.ReadOnlyField() + class Meta: + model=Application + fields="__all__" + + + +class OAISerializer(serializers.HyperlinkedModelSerializer): + id=serializers.ReadOnlyField() + class Meta: + model=OAI + fields="__all__" \ No newline at end of file diff --git a/nfo/k8s/helm/tests.py b/nfo/k8s/helm/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/nfo/k8s/helm/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/nfo/k8s/helm/urls.py b/nfo/k8s/helm/urls.py new file mode 100644 index 0000000..7f2923f --- /dev/null +++ b/nfo/k8s/helm/urls.py @@ -0,0 +1,17 @@ +from django.contrib import admin +from django.urls import path,include +from helm.views import ApplicationViewSet,OAIViewSet +from rest_framework import routers + + +router= routers.DefaultRouter() +router.register(r'applications', ApplicationViewSet) +router.register(r'oai', OAIViewSet) + +urlpatterns = [ + path('',include(router.urls)) + +] + + +#companies/{companyId}/employees \ No newline at end of file diff --git a/nfo/k8s/helm/views.py b/nfo/k8s/helm/views.py new file mode 100644 index 0000000..9e65670 --- /dev/null +++ b/nfo/k8s/helm/views.py @@ -0,0 +1,29 @@ +from django.shortcuts import render +from rest_framework import viewsets +from helm.models import Application,OAI +from helm.serializers import ApplicationSerializer,OAISerializer +from rest_framework.decorators import action +from rest_framework.response import Response +# Create your views here. +class ApplicationViewSet(viewsets.ModelViewSet): + queryset= Application.objects.all() + serializer_class=ApplicationSerializer + + #applications/{ApplicationId}/oai + @action(detail=True,methods=['get']) + def employees(self,request,pk=None): + try: + application=Application.objects.get(pk=pk) + emps=OAI.objects.filter(application=application) + emps_serializer=OAISerializer(emps,many=True,context={'request':request}) + return Response(emps_serializer.data) + except Exception as e: + print(e) + return Response({ + 'message':'application might not exists !! Error' + }) + + +class OAIViewSet(viewsets.ModelViewSet): + queryset=OAI.objects.all() + serializer_class=OAISerializer \ No newline at end of file diff --git a/nfo/k8s/helmprocessor/__init__.py b/nfo/k8s/helmprocessor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nfo/k8s/helmprocessor/__pycache__/__init__.cpython-312.pyc b/nfo/k8s/helmprocessor/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4750400a7d13c43635a8dcbea3c03c0d13c4bc14 GIT binary patch literal 181 zcmX@j%ge<81j~2)N(Ir6K?FMZ%mNgd&QQsq$>_I|p@<2{`wUX^D?~pdKQ~oBEiXAI zF-bo!wICxiUpK!vSvNDUBsIM#u_QA;Prp3BC_BEOvLpk@&P&UWPsvKmOV8KONX^MD zD9TSxEiTS4(vOeN%*!l^kJl@x{Ka9Do1apelWJGQ3bcd~h>JmtkIamWj77{q764=N BF^~WN literal 0 HcmV?d00001 diff --git a/nfo/k8s/helmprocessor/__pycache__/admin.cpython-312.pyc b/nfo/k8s/helmprocessor/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76b5dab7d75857fe45d8cba1e04394d3a391c38b GIT binary patch literal 1011 zcmb7CF>BjE6n-bkma5pniA|TrP)HUL649YsDU=dYXcFjHK@o~{w&k95>Pew!t0Bf*k!$|6tw=It0(arH_m;|T8XPQ&`Yce!pEe8c*P5%Ft!w~Kc`XR#W^<)qJ+>K zWB+D;Az87eEwNny1_uS;C;@WRKykEOwKQH^P&_LrRj$QegtvGd|BO06$>DOHM-I+%gH#HKbnHz*@LcE;UQ|vLn=XOF&g7gziWli%} zc8^Bb?!-RvPVE>cy^!wF)ZYu^40lW<@KF4sxQ@Dh*XHdD>(8(!gaswfzar_ z$RIRgYci9}&+5{w3&Yn6O*$dTFk^CZ%6c}XC)-n)d%{^MysQm9M|0ChbFo6k|J>v`Ukkxe?k0H zT%4o?oSfW*>e9)(Bo5y2-uK;m-{ZaS#WXuWzW&>iKFa)|$lq%hQ*AX^ku_?g}P~buWT#Z0iCz@*% zx@DB+kViSq@>+hkORjJlFq@3+gb^BN_Hh&pCpkNdXiQ2oq;bLp^JtbaF|t}^8=({@ z6rr+%kd#bfg?k9yOmN&(HVF0cB+e0*gOFcMGF0seEYyn2ODALrb^O$e@z_Zz4Ty@%QckpL4{+jNK;l9~q*Rs=2Tr|JYPs~p8$0cW5=6xup5MIr&3kWV z-uwAyRh1Ep_U{+?8xf&D*yM7=ddisr%2Q+@gR_v$l{pUaXdW5-HZlavt-`+R<4}k! zWg$e0fQ4a^|b3xoD2DaQvzu(I+XJZ^o2ct4)pfb-REUYH_fst--NBkim z*(k?CloHMQr6C-NS19R5s6>bw?)MVuhdonS{#QRSBYq?u@)59{3UROe(-Y*LxXMZm zQJI0Ld)mQ;p`m=>boZfD5EbotPEu zLd=A|<`K;y8=y-DuIg)+SLr@k2rLPnn+^CzRK-@~fbUa+6 z;g;eCp^vqO@4*?1PL*iJs_xWCv5qafK?xkpCA1io@P!-dY7*fIjS61}Zv8bNZVuG7#=Svk_%A$A!*@gi(YUm+zsa!ji+w(f9 z$>!Xd$i=3jL|Kl5S>yiyWsO1HBJ^=fJnYXwD6tO}amyf7tPgclZW-i9xEZ%#75H)h zn*ifn@>1GQ=H(zUYd0+7V@%mEg0hg5z5K~fOfXx>8`6UA=rv3O$&M6YjNv6x^)_^h zCrWr7TciQYylXHnc|^%7u6PrlVBKKWhDBB8iVKp&(SY=^hZplhl(8aZZA8bIU~NFN zOt4B1V%XMAE0CawDRgEKYcOh}IR+SKfJB41CZmEto+A{SHRogOhs6u*IK4D8U77{P zidu=j#-{QYnjiFYHSd5^vg9vDBm_d%Qr9LN2JGUv)IZmLz?wRWs?1nT)cg`4JD P>$_V!TYn;^hvEMMY*xx~ literal 0 HcmV?d00001 diff --git a/nfo/k8s/helmprocessor/__pycache__/serializers.cpython-312.pyc b/nfo/k8s/helmprocessor/__pycache__/serializers.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5f63f115807ae1854aebfbecd74356d14ef9e62 GIT binary patch literal 1294 zcmb_bOHUL*5bmD0z_Ne{EE+>R7{-L1csGz>e8dDy^k6cV&bZUd4)i?iSz<;md*Fb- z0RMvFr+C_MSkj5n=*gRLF(!MmYi1W%h|xs)@b%X<)m1fBUwe}>eAEr zi>H~Hw)G9J*;tIGlm{LQ-cX*}iZJiTVd6!ZupWd7i!(}VMf?J_{-L`n$v&dU#XfQs z1yOa=I_p^QgTBet^Wv~9PB~BtqibZUt%=Eg!sjPt3?-DE%U5?=Zl?*U>S{iA^-QtV z-pqv%)iv7mgh`0U7$NJnAuK{7FQkNs5kkV)-)6wa2zj;bvEmDdpA)+LNSQF|0cC#r z9(5so?}gKdL+aF{8uMN{5ltFFycDOkr66k34em9AIC5Uce2XMmvmtp@kBPtOMH{ix zpe#&yT%&0kbLULEt4Ss_sFYukIiP*%n1o$)G=6PQKPu0?HTa}7@T(HmZIh3}0bF&3Kk=^Vtyp>^J{zpJo6}1z{~*{lB72z$aLk!y`4^Zv0Yv~EZ=E8 z`K2g&Ccb8Q@%_py#|I0qiGp znfcebaL}tz{xF4E2o3=02U9Q?T00$cp=~Z4nzvf3=cfSf>$WAvIZd0S&ZU|`aD@t{ zheTG*HJs*x=J1@oH$SWFdLC?BZJd|aAQ^tUom^u=^s~F>t n==LXc_t?^K<=tp!Zn-_Te2nDbcmgcfJC&7oW#uPWat-|k+D8>d literal 0 HcmV?d00001 diff --git a/nfo/k8s/helmprocessor/__pycache__/urls.cpython-312.pyc b/nfo/k8s/helmprocessor/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad22b2a319b696cc34b77fdb33574ae7b2f8b43d GIT binary patch literal 723 zcmZ`$O^Xvj5bd6s%!ji{Kt)toT}6-_lKBI&7rzb*A_^YHLzvA}l8MvZL-)ibH}~Z3 zZ9T1jLGn{PNfwlbWd%>(B74ip>SRLjU>&Moy{@WP)%~?zze3O+{#?K@CFGY0*5+2= zQX@DeDM@Kg7>y}4*vc(t$2N0fXBpdhjk&SQyx3dDPVTcH4k)n*1f%QgrkitG!8n9) zbZf(}QCb6cYONwl{*&W^x5+^zJN3{zn0guo}$1+#aK}OaLeQgLiE2QXwQbKm#qq36bOQdJ68xmC6 z?aPG0fspT{Z^-%+=qKa6e6<`!yQ`73FJX`=98Nn%M2F~cLnOHRLN2kAEM7)K!6546 z%E^Ajp%`YOEmW_a@e&3yDKo(%qtq=Xn&277B9ftA-_Wujxzr2qC literal 0 HcmV?d00001 diff --git a/nfo/k8s/helmprocessor/__pycache__/views.cpython-312.pyc b/nfo/k8s/helmprocessor/__pycache__/views.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b30fc08c2e6b7e5672172d62648a15637977b884 GIT binary patch literal 2077 zcmbtVO>7fK6rR~%+ws~laR@1)vI)g@C^oc}s;WN{loV8{iD*y-t4b^5ox~3NV`er@ zjFJjf9H?5U>4_dWQYD8TITo(H*b0)-Du_xw^%gLds`Sz~yWW^om3ruC_05}kGjHa- z_r2L)G%bOkm4DqOpGye+#s^W8`$F#?2zQW)Ol%<=>lkxcumoGw#XuG<$(D85R&*s8 zOO|TK^q3vjV2sop|njEIX9(V>HWLkwj-9juJQ%EW)H z9BvJjlE3q9CG0DdI3}SW#lC2eWkx(!5`6VT*KSswmLHq8o0i)m1ST{6$vHwBRjYA> zQ2#)r9?Wr@)tc9E9d7ee!kVtbNNsRqgdl`L>(!yVg9y^GiF5(39qVge>K2Dy8uZ1D zey=M;)nfu8aTA-u0^SrigivKFrhE(UtxL3|lIo}W4txfV&JpjDFD?)d98*lo6Kvgt)4WJzr|V6(ISV@})A@@0am1S`n|HWn7BQ00D&NH9)l%(&>_~QgVHX zFdlWu<^%(kpxT z&0~~1OnFp&Wxio~gi=l<%8S;Q%&J%QFs=X3LMmkwK-g8;ADuw7jR`ezI=>ZlWD29#3y) z58s*nezuz}bh3qeZ?v<8t!(-B`R&YjH?q5=iSf# z+-hIE-2UjwqY3@??DojvA7;A~r#cg-wnk33lc)dOP9J)XB(R>$tmnVI01F-ukGEfW ze@7IKq1ZkyXV9*z7Iy`(laj6QeH+f$<*)#6TPEYDYTSk*=2SX!$KIh(e(wWy6hp z&rB)f4~I-Gv${*Y+7c8PfB*axg~B!FDI}3ooAPJe&+emh8S+Xj7UnT1$npL9K?Yfn z)4&0Le81(gNop<>kxRo2`(yvm!!Y=(gcY9rgdf_ETbTU7`~4BwjlCC=?gRQJT%5ng z>|KBz5o7!WO~UsSoqmcweu7?y?}aps)9aVJqf?#HsTT+aFOCbixL)rbJkdFL0xAF( HgQ)!t;C$sZ literal 0 HcmV?d00001 diff --git a/nfo/k8s/helmprocessor/admin.py b/nfo/k8s/helmprocessor/admin.py new file mode 100644 index 0000000..ba35b20 --- /dev/null +++ b/nfo/k8s/helmprocessor/admin.py @@ -0,0 +1,14 @@ +from django.contrib import admin +from helmprocessor.models import Company,Employee +# Register your models here.. + +class CompanyAdmin(admin.ModelAdmin): + list_display=('name','location','type') + search_fields=('name',) + +class EmployeeAdmin(admin.ModelAdmin): + list_display=('name','email','company') + list_filter=('company',) + +admin.site.register(Company,CompanyAdmin) +admin.site.register(Employee,EmployeeAdmin) diff --git a/nfo/k8s/helmprocessor/apps.py b/nfo/k8s/helmprocessor/apps.py new file mode 100644 index 0000000..479cd24 --- /dev/null +++ b/nfo/k8s/helmprocessor/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ApitestConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'helmprocessor' diff --git a/nfo/k8s/helmprocessor/models.py b/nfo/k8s/helmprocessor/models.py new file mode 100644 index 0000000..3b11be7 --- /dev/null +++ b/nfo/k8s/helmprocessor/models.py @@ -0,0 +1,40 @@ +from django.db import models + +# Create your models here. + +#Creating Company Model + +class Company(models.Model): + company_id=models.AutoField(primary_key=True) + name= models.CharField(max_length=50) + location=models.CharField(max_length=50) + about=models.TextField() + type=models.CharField(max_length=100,choices= + (('IT','IT'), + ('Non IT','Non IT'), + ("Mobiles Phones",'Mobile Phones') + )) + added_date=models.DateTimeField(auto_now=True) + active=models.BooleanField(default=True) + + def __str__(self): + return self.name +'--'+ self.location + + + +#Employee Model +class Employee(models.Model): + name=models.CharField(max_length=100) + email=models.CharField(max_length=50) + address=models.CharField(max_length=200) + phone=models.CharField(max_length=10) + about=models.TextField() + position=models.CharField(max_length=50,choices=( + ('Manager','manager'), + ('Software Developer','sd'), + ('Project Leader','pl') + )) + + company=models.ForeignKey(Company, on_delete=models.CASCADE) + + \ No newline at end of file diff --git a/nfo/k8s/helmprocessor/serializers.py b/nfo/k8s/helmprocessor/serializers.py new file mode 100644 index 0000000..b6355fc --- /dev/null +++ b/nfo/k8s/helmprocessor/serializers.py @@ -0,0 +1,18 @@ +from rest_framework import serializers +from helmprocessor.models import Company,Employee + + +#create serializers here +class CompanySerializer(serializers.HyperlinkedModelSerializer): + company_id=serializers.ReadOnlyField() + class Meta: + model=Company + fields="__all__" + + + +class EmployeeSerializer(serializers.HyperlinkedModelSerializer): + id=serializers.ReadOnlyField() + class Meta: + model=Employee + fields="__all__" \ No newline at end of file diff --git a/nfo/k8s/helmprocessor/tests.py b/nfo/k8s/helmprocessor/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/nfo/k8s/helmprocessor/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/nfo/k8s/helmprocessor/urls.py b/nfo/k8s/helmprocessor/urls.py new file mode 100644 index 0000000..a0a4d09 --- /dev/null +++ b/nfo/k8s/helmprocessor/urls.py @@ -0,0 +1,17 @@ +from django.contrib import admin +from django.urls import path,include +from helmprocessor.views import CompanyViewSet,EmployeeViewSet +from rest_framework import routers + + +router= routers.DefaultRouter() +router.register(r'companies', CompanyViewSet) +router.register(r'employees', EmployeeViewSet) + +urlpatterns = [ + path('',include(router.urls)) + +] + + +#companies/{companyId}/employees \ No newline at end of file diff --git a/nfo/k8s/helmprocessor/views.py b/nfo/k8s/helmprocessor/views.py new file mode 100644 index 0000000..b64fdd5 --- /dev/null +++ b/nfo/k8s/helmprocessor/views.py @@ -0,0 +1,29 @@ +from django.shortcuts import render +from rest_framework import viewsets +from helmprocessor.models import Company,Employee +from helmprocessor.serializers import CompanySerializer,EmployeeSerializer +from rest_framework.decorators import action +from rest_framework.response import Response +# Create your views here. +class CompanyViewSet(viewsets.ModelViewSet): + queryset= Company.objects.all() + serializer_class=CompanySerializer + + #companies/{companyId}/emplyees + @action(detail=True,methods=['get']) + def employees(self,request,pk=None): + try: + company=Company.objects.get(pk=pk) + emps=Employee.objects.filter(company=company) + emps_serializer=EmployeeSerializer(emps,many=True,context={'request':request}) + return Response(emps_serializer.data) + except Exception as e: + print(e) + return Response({ + 'message':'Company might not exists !! Error' + }) + + +class EmployeeViewSet(viewsets.ModelViewSet): + queryset=Employee.objects.all() + serializer_class=EmployeeSerializer \ No newline at end of file diff --git a/nfo/k8s/manage.py b/nfo/k8s/manage.py new file mode 100644 index 0000000..5738cb8 --- /dev/null +++ b/nfo/k8s/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nfo_microservice.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/nfo/k8s/nfo_microservice/__init__.py b/nfo/k8s/nfo_microservice/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nfo/k8s/nfo_microservice/__pycache__/__init__.cpython-310.pyc b/nfo/k8s/nfo_microservice/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b2bcb120d8874debad62ef059b42f76f4653d41 GIT binary patch literal 206 zcmd1j<>g`kf|QT%Q$h4&5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_vvsFxJacWU< zOj%-XaYl@PUaCt`W?5>COMY@`ZfaghaZFxfZe~tqc79$;VoZ5{QFgpXKul;sadu`- z4uoG&S(1^T7n7HkAD@zyn3tXpX69xl7v%#@F3U_#jfs!X%*!l^kJl@xyv1RYo1ape PlWGTYN--0VU||3NNYOho literal 0 HcmV?d00001 diff --git a/nfo/k8s/nfo_microservice/__pycache__/__init__.cpython-312.pyc b/nfo/k8s/nfo_microservice/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..93b7cf1097520b1eaf535ce456b5e7911326dc48 GIT binary patch literal 184 zcmX@j%ge<81W}GZQbF`%5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!3fIrb&rQ`&%S+Bl zOw!LwEy&2s*Uc|Z*3HZ-Nlhg`kf+)uysUZ3>h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10eKO;XkRX;5+ zIVUkmKQFZ)BQsw&zc^VpGp{5yy(qCHGe1wiJijPAzM!%s1IW%x%a2dVO3X{o2Qzas qlZ*0;Q;W(nlT-EM<1_OzOXB183My}L*yQG?l;)(`fh_zC#0&s3`7cla literal 0 HcmV?d00001 diff --git a/nfo/k8s/nfo_microservice/__pycache__/settings.cpython-310.pyc b/nfo/k8s/nfo_microservice/__pycache__/settings.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d1aabb055b26da61af9339712376b6ccfa7276cd GIT binary patch literal 2381 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 literal 0 HcmV?d00001 diff --git a/nfo/k8s/nfo_microservice/__pycache__/settings.cpython-38.pyc b/nfo/k8s/nfo_microservice/__pycache__/settings.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9ff8cbd95f2835976305dda8fd3fda1be3026b6 GIT binary patch literal 2421 zcmb7GTXWk)6qX&uc3eA6lip}4D73V3i)BihwlGkt*h=cbw~6Ei^rDfqYk5=MqFpQ==d8QMVxEJSCcVbL6*%tq z_+k2$gNLW^rN6>}IE_Ool(th&T1%%moW^rMrhejo=Jw|I=Cur()3S)yau%m8pm~%* zS(HNyD38vef|b+qsE8KPd9;Kspk=gTWwmqYqEvB%zRn@xRhp!<^Jo=)0y?YcW-{JN#!pGg;E)zNb6H3_Oa15izmg2i_hwnV8RS zV;2Vo!${~I3U^RqTsDwHT!AtpU=z(d!jJ--FhSoCKNr`*dJDiEFTer;7lC6i;<*BR z*nog%V&l&s5S$+{=F_h#737&z9Q!zm!1SC7b}Il_VV+M+S~-fmGKOaZEcA!AE!c!I z!Rw#w%y1Dn!XywzhCRge|M&`Uf6CDxaQ<8=74aQ|4Z_U{3&f?^90s`j^oyHb@0-5v zxR1(@ZPb?gQkc|(F0E@}a2|E;(m;#tIkJrKnvkoR9iBtBK#6^7>oA55t}nu)~#LZ{=9;2F3iW|EpyhO?VEqHo%`Ii_^V>fw7fVH5Mk zo?*U#@({n@im7e;aUIYpyGyebC=LUghLs5%!;Wu55sE#)!7e%~60w%lqdHlp(Q=X- zFPRSIV?uOZK*P0JkkdLM!o8st-aUh6fcK%4Sa@%udz`;9vF|~S2@lt2l#j`LkHOJe ziI1|IQuRBzRg3sqeMgCMQm3OQvuwMg*4r&5Ts_6x0kw!|_&%_n9BGtAxNi(?cAWR9 zcS0lGw+X}RVIG8&c_|%be7joL32v+f_V0nFp{AM>6}r|r3JI{add7e)s>0|ku^xO0s{w=@6XJc9B WAD9=@97y?7=AW+$(z`m<6Ig>wAa=G+_R6XF0g@A?~w2-MRDb{DnUo(!qNa4asL8q450O zE1WAi=Zjhs%az1)rLml=Oz>PQ!}N;h3|Cq$S#IMn{7^7_QR}iI)-o;41unU6` z>DsRKb;Qo_4au%{(wg$mY%fc-NWj2Nr?E@4xZ@}azrl+}k=OJI6=gfK)uW-G$w>|GtiPn?aVr%gM6Yy^btsw3=UPc;2Yl+ftxms*ny`IxyU_CUCl% zy{)_cg0vgLcKa!grs+9MfJs+Gm?C{6*|Fv;mL99T7ED@`!W-ZvzfzKt^jhhw?DTDV zUYRRimg{qMV+$oyH&AOPZMZ#KsUs0rH_h;gP_!=DGY=S;5o`e(9US?NH|W_M@JWWvmB>lQDb z?9t+({tM!t;;|!KKK#PAZ5ZG6 zrdduMoV`)Op^+FpBQX;zHL2CJOdYq<7PWgeb$X84+liCTQMc!shGk$onZwrjaszg8 zA78nMo9MGuMdf!ccANds>Uq<7zm49h1n=duEfBM8K!y{JBw-mCFb=W-iztaX6PWLi z7=xU%F^*;6c`rs7Y)^QaBPlV@#5PEYkbtv^!~!Td0VD%E1n-IfY$zjw zlEo$WvTO;u8i0pM0#F7B%^8;=00Yh_pwkHDdHt}WS?1rZ^R)skU`C<(REZreb-T;8 zt`Vbn8Dxm!`&}J(eeY3bF%a8N=?=39lW9WUHE``D~rx3$?(j)r(|uFQmc9o1M6lw+t5Gn|hITVWzzA(_O(YKGu01L~&KXX7|LXg-!|)(HTt8SpvTuF0 W=l8FFY#-S-PaJpAdfVapC-EB&HC_z> literal 0 HcmV?d00001 diff --git a/nfo/k8s/nfo_microservice/__pycache__/urls.cpython-38.pyc b/nfo/k8s/nfo_microservice/__pycache__/urls.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cbc0f0903899a3d65eea2f670fa77fb0a55e38cb GIT binary patch literal 1027 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 literal 0 HcmV?d00001 diff --git a/nfo/k8s/nfo_microservice/__pycache__/wsgi.cpython-310.pyc b/nfo/k8s/nfo_microservice/__pycache__/wsgi.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74da14900415f38a8cf31678fed3c13590efb377 GIT binary patch literal 627 zcmZ8f!H&}~5Ovb-b_p!vfL7w>Yb8kb!exaJE4q{-Xpy=VQWYsR@g#NYcp}?Pw|nJB z;JCk(6A~v*h$|I`GPEbM6c$bHY9D zOK5%2P&Z@xpFFJykq{VC}m-+m81O@||zqRK>0Gt^XNm=q$_ zXh2sY1zKucL2APw7+DH8rE?f+mq6P{CMEkUfigoGEs$>{Jd;p?q!rU*?^3J)P8SPS zmQtk53RH`Q%lF376{vvE~1EIYC^tZD#w4CQY<1+ z(ev;;TH@AX#G#b9D?r(3YjP0n+a literal 0 HcmV?d00001 diff --git a/nfo/k8s/nfo_microservice/__pycache__/wsgi.cpython-312.pyc b/nfo/k8s/nfo_microservice/__pycache__/wsgi.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d73bb00df0a61f41282018c74f55b4e85006c7c5 GIT binary patch literal 690 zcmZ8fL2DC16rS0QP1)EWVhi2|@e(jQ@!&;7D6|dHnjTUSa@lNm-)<((&MY(2r0K0E ze}ecEq(8+=MM2n8MLc*@a*>{#O&S_}hnerqpU09>u7SVjMdh_p!ZQ?qqJ?#R%|deVKA|k7_q~iQ-Cp>)cs*7&!>s^XpK5ZR#}E zPA|PTy>^F0QY0)TiBv=+GRRn@qy{x+5s+NT5k$uKypADolG}hLW(Z`F8FC&TaUh{4 zA<1NX%%RC)44jNZ#pWRqW)PFXAk1^lqR=oY1_N7f&(dX50b!O@W%B@$!WL(mB#gr& zq5-_2F}Z$9X)Gh{$D>fBa;Yhj83jR~_$@k=6C-I1IhWH6grO6iGV1**`|UPxaW4fE zlyAX`jACo&#df!S5cGBr4?Ep2@HH62M5-Irq8bENOAr)})Ww~J zB0sW?_+@?NTE?OZV$75jg=Z6ENWx=oirNbGM>H#?UG=Q;3}_-EJ4Y%YA2QjLI%+au zAXW3B(1}!UgM4a+QqWS_f^!a6cQx23difRYf3H9IQh#_>Q@3r>KV1gUV*mgE literal 0 HcmV?d00001 diff --git a/nfo/k8s/nfo_microservice/__pycache__/wsgi.cpython-38.pyc b/nfo/k8s/nfo_microservice/__pycache__/wsgi.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04bdb62f5540f42341d7e39a722e1fced6bb8d75 GIT binary patch literal 599 zcmZ8f!H&}~5Ovb-wgeXK0U>eowGxf@!UZA3O1o4=&^=^VNV&Mdo}@00C$haQ-782Pm3QTsc}Q4Ns{9NLJoA?m1%;g-hkSFctpeB(P>+ z*t7JEt#Ip+NoX|gYA~K{U8Pv^E9gQNlc;@Ef#=;DKcLY*zIb!Km|gMg^7?wdm}UIk z)y2)*%eyE4%aA(oUYW{GM(v36z=iWRM%SM18KojLl6LiN91zGHi?XBX4$og@$$X_Q3u1aA1Ao aX|rp`FZSbj89oki<6wsO#_@yrVf+`y%)kKv literal 0 HcmV?d00001 diff --git a/nfo/k8s/nfo_microservice/asgi.py b/nfo/k8s/nfo_microservice/asgi.py new file mode 100644 index 0000000..e527885 --- /dev/null +++ b/nfo/k8s/nfo_microservice/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for nfo_microservice project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nfo_microservice.settings') + +application = get_asgi_application() diff --git a/nfo/k8s/nfo_microservice/settings.py b/nfo/k8s/nfo_microservice/settings.py new file mode 100644 index 0000000..e44ded9 --- /dev/null +++ b/nfo/k8s/nfo_microservice/settings.py @@ -0,0 +1,127 @@ +""" +Django settings for nfo_microservice project. + +Generated by 'django-admin startproject' using Django 5.0.3. + +For more information on this file, see +https://docs.djangoproject.com/en/5.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.0/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-@2#ob=f_mn7-8#)(v+*yc9yx3(l(h&av5rjna5$)gv4qevq61v' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'rest_framework', + 'apis', + 'helmprocessor', + 'helm', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'nfo_microservice.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'nfo_microservice.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/5.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/5.0/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/nfo/k8s/nfo_microservice/urls.py b/nfo/k8s/nfo_microservice/urls.py new file mode 100644 index 0000000..71c6a1d --- /dev/null +++ b/nfo/k8s/nfo_microservice/urls.py @@ -0,0 +1,29 @@ +""" +URL configuration for nfo_microservice project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +# include necessary libraries +from django.urls import path, include +from .views import home_page + +urlpatterns = [ + path('admin/', admin.site.urls), + path('nfo/api/v1/', home_page), + #path('apis/', include("apis.urls")), + #path('nfohelm/api/v1/', include("helmprocessor.urls")), + #path('nfo/api/v1/', include("helm.urls")), + +] diff --git a/nfo/k8s/nfo_microservice/views.py b/nfo/k8s/nfo_microservice/views.py new file mode 100644 index 0000000..b6d77af --- /dev/null +++ b/nfo/k8s/nfo_microservice/views.py @@ -0,0 +1,131 @@ +from django.http import HttpResponse, JsonResponse +import asyncio +from pyhelm3 import Client +from django.views.decorators.csrf import csrf_exempt +from rest_framework.decorators import api_view +import json +from rest_framework import status +from rest_framework.response import Response +from configparser import ConfigParser + +@csrf_exempt +@api_view(['GET', 'POST', 'DELETE']) +def home_page(request): + books = ['selfhelp','fantacy','novels'] + #return HttpResponse("

This is home page !!

") + + if request.method == "GET": + result = executeGet() + if request.method == "DELETE": + result = "Uninstalled !!" + executeDelete(request) + elif request.method == "POST": + executPost(request) + result = "Installed !!" + + return JsonResponse(result, safe=False) + +def executeDelete(request): + print ("Delete request !!") + data = request.data + payload = json.loads(json.dumps(data)) + name = payload['name'] + namespace = payload['namespace'] + print ("chart name: "+ name + " chart namespace: "+ namespace ) + return asyncio.run(uninstall_helm(name, namespace)) + +async def uninstall_helm(name, namespace): + client = getHelmClient() + + revision = await client.get_current_revision(name, namespace = namespace) + await revision.release.uninstall(wait = True) + # Or directly by name + await client.uninstall_release(name, namespace = "default", wait = True) + return Response("Uninstalled", status=status.HTTP_201_CREATED) + +def executeGet(): + print ("Get request !!") + return asyncio.run(list_releases()) + +async def list_releases(): + client = getHelmClient() + + # List the deployed releases + releases = await client.list_releases(all = True, all_namespaces = True) + charts = [] + chart = {} + for release in releases: + revision = await release.current_revision() + print(release.name, release.namespace, revision.revision, str(revision.status)) + chart['name'] = release.name + chart['revision'] = revision.revision + chart['namespace'] = release.namespace + chart['status'] = str(revision.status) + charts.append(chart) + + result = json.dumps(charts) + return result + +def executPost(request): + print ("POST request !!") + data = request.data + payload = json.loads(json.dumps(data)) + charts = payload['charts'] + for chart in charts: + name = chart['name'] + version = chart['version'] + repo = chart['repo'] + print ("chart name: "+ name + " chart version: "+ version + " chart repo: " + repo) + asyncio.run(porcessCharts(name, version, repo)) + +async def porcessCharts(name, version, repo): + print ("Post request !!") + + client = getHelmClient() + + # Fetch a chart + chart = await client.get_chart( + name, + repo = repo, + version = version + ) + print(chart.metadata.name, chart.metadata.version) + #print(await chart.readme()) + + # Install or upgrade a release + revision = await client.install_or_upgrade_release( + name, + chart, + { "installCRDs": True }, + atomic = True, + wait = True + ) + print( + revision.release.name, + revision.release.namespace, + revision.revision, + str(revision.status) + ) + + content = { revision.release.name, revision.release.namespace, revision.revision, str(revision.status)} + return Response(content, status=status.HTTP_201_CREATED) + +def getHelmClient(): + + config = ConfigParser() + with open("config.ini", "r") as file_object: + config.read_file(file_object) + kube_config = config.get("localpath", "kubeconfig_file_path") + helm_executable = config.get("localpath", "helm_executable_path") + + # This will use the Kubernetes configuration from the environment + client = Client() + # Specify the kubeconfig file to use + client = Client(kubeconfig = kube_config) + # Specify a custom Helm executable (by default, we expect 'helm' to be on the PATH) + client = Client(executable = helm_executable) + + return client + + + diff --git a/nfo/k8s/nfo_microservice/wsgi.py b/nfo/k8s/nfo_microservice/wsgi.py new file mode 100644 index 0000000..5e4b2d4 --- /dev/null +++ b/nfo/k8s/nfo_microservice/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for nfo_microservice project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nfo_microservice.settings') + +application = get_wsgi_application() diff --git a/nfo/k8s/python_client.py b/nfo/k8s/python_client.py new file mode 100644 index 0000000..9d58598 --- /dev/null +++ b/nfo/k8s/python_client.py @@ -0,0 +1,92 @@ +#https://github.com/stackhpc/pyhelm3 + +import requests +from pyhelm3 import Client +import asyncio + +async def test_client(): + #endpoint = "https://httpbin.org/get" + endpoint = "http://127.0.0.1:8000/api/" + getresponse = requests.get(endpoint, json={"query":"Hello, World!"}) + + #print(getresponse.text) + print(getresponse.status_code) + #print(getresponse.json()['message']) + print(getresponse.json()) + +async def get_current_version(): + client = Client() + client = Client(kubeconfig = "/home/fnclab/.kube/config") + client = Client(executable = "/usr/local/bin/helm") + # Get the current revision for an existing release + revision = await client.get_current_revision("hello-world-1711020846", namespace = "default") + chart_metadata = await revision.chart_metadata() + print( + revision.release.name, + revision.release.namespace, + revision.revision, + str(revision.status), + chart_metadata.name, + chart_metadata.version + ) + +async def list_releases(): + client = Client() + client = Client(kubeconfig = "/home/fnclab/.kube/config") + client = Client(executable = "/usr/local/bin/helm") + + # List the deployed releases + releases = await client.list_releases(all = True, all_namespaces = True) + for release in releases: + print("executing for loop ->") + revision = await release.current_revision() + print(release.name, release.namespace, revision.revision, str(revision.status)) + +async def uninstall_helm(): + client = Client() + client = Client(kubeconfig = "/home/fnclab/.kube/config") + client = Client(executable = "/usr/local/bin/helm") + revision = await client.get_current_revision("cert-manager", namespace = "default") + await revision.release.uninstall(wait = True) + # Or directly by name + await client.uninstall_release("cert-manager", namespace = "default", wait = True) + +async def install_helm(): + print("executing test_helmClient() ->") + + # This will use the Kubernetes configuration from the environment + client = Client() + # Specify the kubeconfig file to use + client = Client(kubeconfig = "/home/fnclab/.kube/config") + # Specify a custom Helm executable (by default, we expect 'helm' to be on the PATH) + client = Client(executable = "/usr/local/bin/helm") + + # Fetch a chart + chart = await client.get_chart( + "cert-manager", + repo = "https://charts.jetstack.io", + version = "v1.8.x" + ) + print(chart.metadata.name, chart.metadata.version) + #print(await chart.readme()) + + # Install or upgrade a release + revision = await client.install_or_upgrade_release( + "cert-manager", + chart, + { "installCRDs": True }, + atomic = True, + wait = True + ) + print( + revision.release.name, + revision.release.namespace, + revision.revision, + str(revision.status) + ) + +if __name__ == "__main__": + #asyncio.run(get_current_version()) + #asyncio.run(list_releases()) + #asyncio.run(install_helm()) + asyncio.run(uninstall_helm()) -- 2.16.6