From bd11eed98638a326a786b8111816f84df21c0426 Mon Sep 17 00:00:00 2001 From: Delong Yang Date: Sun, 23 Mar 2025 08:01:30 -0400 Subject: [PATCH] Initial commit --- .gitignore | 162 ++++++++++++++++++++++++++++++++++++++++ .pre-commit-config.yaml | 21 ++++++ README.md | 72 ++++++++++++++++++ requirements.txt | 7 ++ template.yaml | 29 +++++++ 5 files changed, 291 insertions(+) create mode 100644 .gitignore create mode 100644 .pre-commit-config.yaml create mode 100644 README.md create mode 100644 requirements.txt create mode 100644 template.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..779d52c --- /dev/null +++ b/.gitignore @@ -0,0 +1,162 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +artifacts/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..5d4601c --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,21 @@ +--- +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + # - id: check-yaml + - id: check-added-large-files + - repo: https://github.com/psf/black + rev: 24.4.0 + hooks: + - id: black + - repo: local + hooks: + - id: pylint + name: pylint + entry: pylint + language: system + types: + - python diff --git a/README.md b/README.md new file mode 100644 index 0000000..eacfba4 --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +# EKS Automation Lambda + +## Description + +This repository hosts `eks-automation-lambda` automation work at `Census`. + +## Dependencies + +- `Anaconda` or a `bare bone Python 3` - create a `Remedy ticket` to have it available in `software center` +- `virtualenv` - must be installed outside of the `requirements.txt` install +- requirements.txt +- pre-commit hook + +## Install `virtualenv` + +```sh +pip install virtualenv + +# below is the output from a successful install +$ virtualenv --version +virtualenv 20.25.0 from C:\Users\{your username}\AppData\Local\anaconda3\Lib\site-packages\virtualenv\__init__.py +``` + +## Create and activate `virtual environment` + +```sh +virtualenv .venv + +# activate env (windows) +.venv/Scripts/activate.ps1 (PowerShell) +.venv/Scripts/activate.bat (Command Prompt) + +# activate env (linux) +source .venv/bin/activate + +# install dependencies +pip3 install -r requirements.txt + +# deactivate env +deactivate +``` + +### Install pre-commit + +Run the command below to install `pre-commit hooks` listed in the `.pre-commit-config.yaml`. + +```sh +pre-commit install +``` + +### Tidy Up (manual linting) + +`Pre-commit` does this automatically. This script is used to `lint / format python resources manually`. Run `tidy.sh` to `lint` and `format` code. This project uses `pylint` and `black`. Below is an example output from a successful run of this script. + +```sh +-------------------------------------------------------------------- +Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00) + +reformatted main.py + + +All done! ✨ 🍰 ✨ +1 files reformatted, 1 files left unchanged. +``` + +### How to run the application? + +Run `main.py`: + +```sh +python main.py +``` diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6723c82 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +pylint +black +pre-commit + +loguru +Jinja2 +requests diff --git a/template.yaml b/template.yaml new file mode 100644 index 0000000..f4ce153 --- /dev/null +++ b/template.yaml @@ -0,0 +1,29 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: > + eks-automation-lambda + +Resources: + EKSAutomationFunction: + Type: AWS::Serverless::Function + Properties: + CodeUri: eks_automation/ + Handler: app.lambda_handler + Runtime: python3.11 + Events: + EKSAutomation: + Type: Api + Properties: + Path: /EKSAutomation + Method: get + +Outputs: + EKSAutomationApi: + Description: "API Gateway endpoint URL for Prod stage for EKS Automation function" + Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/automation/" + EKSAutomationFunction: + Description: "EKS Automation Lambda Function ARN" + Value: !GetAtt EKSAutomationFunction.Arn + EKSAutomationFunctionIamRole: + Description: "Implicit IAM Role created for EKS Automation function" + Value: !GetAtt EKSAutomationFunctionRole.Arn