{"id":13505905,"url":"https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment","last_synced_at":"2025-03-30T01:30:37.862Z","repository":{"id":39002255,"uuid":"345417975","full_name":"D10S0VSkY-OSS/Stack-Lifecycle-Deployment","owner":"D10S0VSkY-OSS","description":"OpenSource self-service infrastructure solution that defines and manages the complete lifecycle of resources used and provisioned into a cloud! It is a terraform UI with rest api for terraform and OpenTofu automation ","archived":false,"fork":false,"pushed_at":"2024-07-06T00:31:01.000Z","size":12531,"stargazers_count":231,"open_issues_count":29,"forks_count":34,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-11-01T03:33:04.354Z","etag":null,"topics":["api","celery","continuous-deployment","docker","dokcer","fastapi","infrastructure","kubectl","kubernetes","opentofu","opentofu-provider","python","stack","terraform","terraform-api","terraform-web","terrafrom-ui","tofu","ui","website"],"latest_commit_sha":null,"homepage":"","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/D10S0VSkY-OSS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-07T18:09:08.000Z","updated_at":"2024-10-17T00:36:09.000Z","dependencies_parsed_at":"2024-01-12T03:23:44.260Z","dependency_job_id":"b67efc2e-1ee1-40fc-ac6b-6e1d65f941ed","html_url":"https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment","commit_stats":null,"previous_names":[],"tags_count":79,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/D10S0VSkY-OSS%2FStack-Lifecycle-Deployment","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/D10S0VSkY-OSS%2FStack-Lifecycle-Deployment/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/D10S0VSkY-OSS%2FStack-Lifecycle-Deployment/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/D10S0VSkY-OSS%2FStack-Lifecycle-Deployment/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/D10S0VSkY-OSS","download_url":"https://codeload.github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246264645,"owners_count":20749494,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","celery","continuous-deployment","docker","dokcer","fastapi","infrastructure","kubectl","kubernetes","opentofu","opentofu-provider","python","stack","terraform","terraform-api","terraform-web","terrafrom-ui","tofu","ui","website"],"created_at":"2024-08-01T00:01:16.787Z","updated_at":"2025-03-30T01:30:33.628Z","avatar_url":"https://github.com/D10S0VSkY-OSS.png","language":"CSS","readme":"[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n[![LinkedIn][linkedin-shield]][linkedin-url]\n\n\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment\"\u003e\n    \u003cimg src=\"img/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\"\u003e\n  \u003c/a\u003e\n\n  \u003ch3 align=\"center\"\u003eStack Lifecycle Deployment\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    OpenSource solution that defines and manages the complete lifecycle of resources used and provisioned into a cloud!\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails open=\"open\"\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-SLD\"\u003eAbout SLD\u003c/a\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#prerequisites\"\u003ePrerequisites\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#custom-settings\"\u003eCustom settings\u003c/a\u003e\u003c/li\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#storage-backend\"\u003eStorage backend\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#data-remote-state\"\u003eData remote state\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#workers\"\u003eWorkers\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#users-roles\"\u003eUsers roles\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003cli\u003e\u003ca href=\"#architecture\"\u003eArchitecture\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#acknowledgements\"\u003eAcknowledgements\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About SLD\n\nSLD helps to accelerate deployment, weighting and making IaaC reusable, generating dynamic forms and maintaining different variables in each environment with the same code. With SLD you can schedule infrastructure deployments like its destruction, manage users by roles and separate stacks by squad and environment\n\n\n[![Everything Is AWESOME](img/dashboard.png)](https://youtu.be/EThXrat-jsQ \"Click me for DEMO\")\n\n\n![Product Name Screen Shot](img/api.png)\n\nMain features:\n* Fast API async\n* Dashboard / UI\n* Distributed tasks routing by squad\n* Infrastructure as code (IaC) based in terraform code\n* Dynamic html form from terraform variables\n* Re-deploy infrastructure keeping the above parameters\n* Distributed architecture based microservices\n* Task decouple and event driven pattern\n* Resilient, rollback deployment and retry if failure\n\nSLD is the easy way to use your terrafrom code!\n\n\n\n\n\n\n\u003c!-- GETTING STARTED --\u003e\n## Getting Started\n\n### Prerequisites\n\nYou need docker and docker-compse or kind ( recomended ).\n* [Docker](https://docs.docker.com/get-docker/)\n* [Docker-compose](https://docs.docker.com/compose/install/)\n* [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/#installation)\n* [kubectl](https://kubernetes.io/es/docs/tasks/tools/install-kubectl/)\n\n### Installation\n\n1. Clone the SLD repo\n   ```sh\n   git clone https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment.git\n   ```\n2. Deploy SLD in k8s with kind\n   ```sh\n   cd Stack-Lifecycle-Deployment/play-with-sld/kubernetes \n   sh kplay.sh start\n   ```\n   Result:\n   ```sh\n   Starting SLD for play\n   Creating cluster \"kind\" ...\n   ✓ Ensuring node image (kindest/node:v1.20.2) 🖼\n   ✓ Preparing nodes 📦 📦  \n   ✓ Writing configuration 📜 \n   ✓ Starting control-plane 🕹️ \n   ✓ Installing CNI 🔌 \n   ✓ Installing StorageClass 💾 \n   ✓ Joining worker nodes 🚜 \n   Set kubectl context to \"kind-kind\"\n   You can now use your cluster with:\n\n   kubectl cluster-info --context kind-kind\n      ```\n\n3. Create init user\n\n   ```sh\n   sh kplay.sh init\n   ```\n\n   Result:\n\n   ```bash\n   kind ok\n   docker ok\n   kubectl ok\n   jq ok\n   curl ok\n\n   init SLD\n   #################################################\n   #  Now, you can play with SLD 🕹️                #\n   #################################################\n   API: http://localhost:5000/docs\n   DASHBOARD: http://localhost:5000/\n   ---------------------------------------------\n   username: admin\n   password: Password08@\n   ---------------------------------------------\n\n   ```\n\n   List endopints\n\n   ```sh\n   sh kplay.sh list\n   ```\n\n   Result:\n\n   ```bash\n   kind ok\n   docker ok\n   kubectl ok\n\n   List endpoints\n   API: http://localhost:8000/docs\n   DASHBOARD: http://localhost:5000/\n   ```\n\u003c!-- USAGE EXAMPLES --\u003e\n## Usage\n1. Sign-in to [DASHBOARD:](http://localhost:5000/)\n\n    ![sign-in](img/sign-in.png)\n    \n    Click the dashboard link:\n\n    ![sign-in](img/welcome.png)\n\n    \n\n2. Add Cloud account\n\n\n    ![sign-in](img/account.png)\n\n    fill in the form with the required data.\n    in our example we will use\n    \n    * Squad: squad1 \n    * Environment: develop\n    \n    \u003e by default workers are running as squad1 and squad2 for play purpose, but you can change it and scale when you want\n\n\n    **When you add an account to a provider ( aws, gcp, azure ) one squad is created, you must create a worker for the name of the created squad, if you don't do it the deployment will remain in a \"PENDING\" state [Read Workers](#workers)**\n  \n    \n    finally add:\n    * Access_key_id\n    * Secret_access_key\n    * Default_region ( default eu-west-1)\n    In case you use assume role, fill in the rest of the data.\n\n3. Add terraform module or stack\n   \n    ![sign-in](img/add_stack.png)\n\n    * Name: Add the name with a valid prefix according to the cloud provider. \n    \u003e Prefixs supported: aws_ , gcp_, azure_\n    * git: Add a valid git repository, like github, gitlab, bitbucket, etc. in our case to play we use (https://github.com/D10S0VSkY-OSS/aws_vpc_poc)\n    \u003e You can pass user and  password as https://username:password@github.com/aws_vpc\n    \u003e For ssh you can pass it as a secret in the deployment to the user sld\n    * Branch: Add the branch you want to deploy by default is master\n    * Squad Access: Assign who you want to have access to this stack by squad\n    \u003e '*' = gives access to all, you can allow access to one or many squads separated by commas: squad1,squad2\n    * tf version: indicates the version of terraform required by the module or stack\n    \u003e https://releases.hashicorp.com/terraform/\n    * Description: Describe the module or stack to help others during implementation. \n  \n4. Deploy your first stack!!!\n   \n   List stacks for deploy\n   \n   ![sign-in](img/deploy_1.png)\n   \n   Choose deploy \n   \n   ![sign-in](img/deploy_2.png)\n   \n   SLD will generate a dynamic form based on the stack variables,\n   fill in the form and press the Deploy button\n\n   ![sign-in](img/deploy_3.png)\n\n    \u003e Important! assign the same squad and environment that we previously created when adding the account (See Add Cloud account)\n\n    Now, the status of the task will change as the deployment progresses.\n\n   ![sign-in](img/deploy_4.png)\n\n   You can control the implementation life cycle\n   ![sign-in](img/deploy_5.png)\n   You can destroy, re-implement that SLD will keep the old values ​​or you can also edit those values ​​at will.\n   ![sign-in](img/deploy_6.png)\n    And finally you can manage the life cycle programmatically, handle the destruction / creation of the infrastructure, a good practice for the savings plan!!!\n    ![sign-in](img/schedule.png)\n\u003c!-- USAGE EXAMPLES --\u003e\n\n# Custom settings\n## Storage backend\nSLD uses its own remote backend, so you don't need to configure any backend in terraform.\nThe following example shows a backend config\n```\n        terraform {\n          backend \"http\" {\n            address = \"http://remote-state:8080/terraform_state/aws_vpc-squad1-develop-vpc_core\"\n            lock_address = \"http://remote-state:8080/terraform_lock/aws_vpc-squad1-develop-vpc_core\"\n            lock_method = \"PUT\"\n            unlock_address = \"http://remote-state:8080/terraform_lock/aws_vpc-squad1-develop-vpc_core\"\n            unlock_method = \"DELETE\"\n          }\n        }\n        \n```\nAt the moment SLD supports MongoDB, S3 and local backend (for testing purposes only)\nTo configure MongoDB as a backend, you must pass the following variables as parameters to the remote-state service:\n```\n# docker-compose.yaml\n    environment:                                                                                                     \n      SLD_STORE: mongodb                                                                                             \n      SLD_MONGODB_URL: \"mongodb:27017/\"\n      MONGODB_USER: admin\n      MONGODB_PASSWD: admin\n```\n```\n# k8s yaml\n    env:\n    - name: SLD_STORE\n      value: mongodb\n    - name: SLD_MONGODB_URL\n      value: \"mongodb:27017/\"\n    - name: MONGODB_USER\n      value: admin\n    - name: MONGODB_PASSWD\n      value: admin\n```\nTo configure S3 you can pass the access and secret keys of aws, in case SLD is running in AWS it is recommended to use roles\n```\n    env:\n    - name: SLD_STORE\n      value: \"S3\"\n    - name: SLD_BUCKET\n      value: \"s3-sld-backend-cloud-tf-state\"\n    - name: AWS_ACCESS_KEY\n      value: \"\"\n    - name: AWS_SECRET_ACCESS_KEY\n      value: \"\"\n```\nFor Azure env you need set the next env\n```\n          env:                                                                                                                                    \n          - name: SLD_STORE\n            value: azure\n          - name: AZURE_STORAGE_CONNECTION_STRING\n            value: \"DefaultEndpointsProtocol=https;AccountName=\u003cYOUR ACCOUNT\u003e;AccountKey=\u003cYOUR ACCESS KEY\u003e;EndpointSuffix=core.windows.net\"\n```\n[See azure-storage-configure-connection-string](https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string)\n\nFor google cloud storage set:\n```\nSLD_STORE=gcp\nexport GOOGLE_APPLICATION_CREDENTIALS=\"/app/sld-gcp-credentials.json\"\n```\n**Import google service account key to k8s secret**\n```\nkubectl create secret generic gcp-storage --from-file=~/Downloads/storage.json\n```\n**Modify sld-remote-state.yml set gcp storage cloud backend and mount secret:**\n```\napiVersion: apps/v1                                                                                                                               \nkind: Deployment                                                                                                                                  \nmetadata:                                                                                                                                         \n  name: remote-state                                                                                                                              \n  labels:                                                                                                                                         \n    name: remote-state                                                                                                                            \nspec:                                                                                                                                             \n  replicas: 1                                                                                                                                     \n  selector:                                                                                                                                       \n    matchLabels:                                                                                                                                  \n      name: remote-state         \n  template:                                                                                                                                                                                                        \n    metadata:                                                                  \n      labels:                                                            \n        name: remote-state                                               \n    spec:                        \n      subdomain: primary                                                                                                                                                                                                                                                        \n      containers:                                                                              \n        - name: remote-state                                                                   \n          image: d10s0vsky/sld-remote-state:latest                                                                     \n          volumeMounts:                    \n          - name: gcp                                                                                                                                         \n            mountPath: \"/app/gcp\"                                                                                                                                            \n            readOnly: true                          \n          env:                                      \n          - name: SLD_STORE                         \n            value: gcp                              \n          - name: GOOGLE_APPLICATION_CREDENTIALS                                                                                                                                                                   \n            value: \"/app/gcp/storage.json\"                                                                             \n          resources:                                                \n            limits:                                                 \n              memory: 600Mi                                         \n              cpu: 1                                                                                                                                                                                                                                                            \n            requests:                                                          \n              memory: 300Mi                                                    \n              cpu: 500m                                                        \n          imagePullPolicy: Always                                              \n          command: [\"python3\", \"-m\", \"uvicorn\", \"main:app\", \"--host\", \"0.0.0.0\", \"--port\", \"8080\", \"--workers\", \"1\"]                                          \n          ports:                                                                               \n            - containerPort: 8080                                                              \n          livenessProbe:                                                                       \n            httpGet:                                                                           \n              path: /                                                                          \n              port: 8080                                                                                                                                                                      \n              httpHeaders:                                                                                             \n              - name: status                                                                                           \n                value: healthy                                                                                         \n            initialDelaySeconds: 60                                                                                    \n            periodSeconds: 60                                                                                          \n      volumes:                                                                                                         \n      - name: gcp                                                                                                      \n        secret:                                                                                                        \n          secretName: gcp-storage                                                    \n```\n\n## Data remote state\nTo be able to use the outputs of other stacks you can configure it as follows\nthe key alwys is the same like \"Task Name\"\n| stack-name | squad account | env | deploy name |\n| :---: | :---: | :---: | :---: |\n| aws_vpc | squad1 | develop | vpc_core |\n```\ndata \"terraform_remote_state\" \"vpc_core\" {\n  backend = \"http\"\n  config = {\n    address = \"http://remote-state:8080/terraform_state/aws_vpc-squad1-develop-vpc_core\"\n  }\n}\n```\nTest example:\n```\necho \"data.terraform_remote_state.vpc_core.outputs\"|terraform console\n```\n## Workers\nThe workers in sld are responsible for executing the infrastructure deployment. You can use one or more workers for each account or several accounts at the same time. It all depends on the degree of parallelism and segregation that you consider\n\n```\n# Example k8s worker for account squad1, change this for each of your accounts\n# Stack-Lifecycle-Deployment/play-with-sld/kubernetes/k8s/sld-worker-squad1.yml\n# Add replicas for increment paralelism\n# Add more squad accounts if you want to group accounts in the same worker:\n# command: [\"celery\", \"--app\", \"tasks.celery_worker\", \"worker\", \"--loglevel=info\", \"-c\", \"1\", \"-E\", \"-Q\", \"squad1,\"another_squad_account\"]\n\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: stack-deploy-worker-squad1\n  labels:\n    name: stack-deploy-worker-squad1\nspec:\n  replicas: 1 \n  selector:\n    matchLabels:\n      name: stack-deploy-worker-squad1\n  template:\n    metadata:\n      labels:\n        name: stack-deploy-worker-squad1\n    spec:\n      subdomain: primary\n      containers:\n        - name: stack-deploy-worker-squad1\n          image: d10s0vsky/sld-api:latest\n          imagePullPolicy: Always\n          env:\n          - name: TF_WARN_OUTPUT_ERRORS\n            value: \"1\"\n          resources:\n            limits:\n              memory: 600Mi\n              cpu: 1\n            requests:\n              memory: 300Mi\n              cpu: 500m\n          command: [\"celery\", \"--app\", \"tasks.celery_worker\", \"worker\", \"--loglevel=info\", \"-c\", \"1\", \"-E\", \"-Q\", \"squad1\"]\n\n```\n```\n  # Example docker-compose worker for account squad1, change this for each of your accounts\n  # Stack-Lifecycle-Deployment/play-with-sld/docker/docker-compose.yml\n\n  worker:\n    image: d10s0vsky/sld-api:latest\n    entrypoint: [\"celery\", \"--app\", \"tasks.celery_worker\", \"worker\", \"--loglevel=info\", \"-c\", \"1\", \"-E\", \"-Q\", \"squad1\"]\n    environment:\n      BROKER_USER: admin\n      BROKER_PASSWD: admin\n    depends_on:\n      - rabbit\n      - redis\n      - db\n      - remote-state\n```\n## Users roles\nSLD has three preconfigured roles for users to easily manage this.\n| roles | scope | description |\n| :---: | :---: | :---: |\n| yoda | global | Global scope, can see all squads and are full admin |\n| darth_vader | one or many squad | Limit the scope of the squad, can see the assigned squads and you are a full manager of only those squads |\n| stormtrooper | one or many squad  | Limits squad range, can see assigned squads and can only deploy assigned deployment on belong squad |\n| R2-D2 | all, one or many squad  | This role is only for identification and must be associated with the previous ones, its use case is for bot users who access the api |\n\n\u003c!-- Architecture --\u003e\n## Architecture\n![sign-in](img/architecture_v1.png)\n\n\u003c!-- ROADMAP --\u003e\n## Roadmap\n\n* LDAP and SSO authentication\n* Slack integration\n* FluenD / elasticSearch integration\n* InfluxDB integration\n* Prometheus\n* Estimate pricing by stack\n* Anomaly detection\n* Advance metrics and logs\n* Resource size recommendation based on metrics\n* Shift Left Security deployment\n* Multi tenancy\n* Topology graphs \n* Mutal TLS\n* Added workers automatically by squad\n* Onboarding resources\n* Add more cloud and on-prem providers\n\n\n\n\u003c!-- CONTRIBUTING --\u003e\n## Contributing\n\nContributions are what makes the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n\n\n\u003c!-- LICENSE --\u003e\n## License\n\nDistributed under the MIT License. See `LICENSE` for more information.\n\n\n\n\u003c!-- CONTACT --\u003e\n## Contact\n\nlafalce.diego@gmail.com\n\n[Stack Lifecycle Deployment](https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment)\n\n\u003c!-- ACKNOWLEDGEMENTS --\u003e\n## Acknowledgements\n* [Best-README-Template](https://github.com/othneildrew/Best-README-Template)\n* [Img Shields](https://shields.io)\n* [Choose an Open Source License](https://choosealicense.com)\n* [volt-dashboard](https://github.com/app-generator/tb-volt-dashboard-flask)\n\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n[contributors-shield]: https://img.shields.io/github/contributors/D10S0VSkY-OSS/Stack-Lifecycle-Deployment?style=for-the-badge\n[contributors-url]: https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/D10S0VSkY-OSS/Stack-Lifecycle-Deployment.svg?style=for-the-badge\n[forks-url]: https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment/network/members\n[stars-shield]: https://img.shields.io/github/stars/D10S0VSkY-OSS/Stack-Lifecycle-Deployment.svg?style=for-the-badge\n[stars-url]: https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment/stargazers\n[issues-shield]: https://img.shields.io/github/issues/D10S0VSkY-OSS/Stack-Lifecycle-Deployment?style=for-the-badge\n[issues-url]: https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment/issues\n[license-shield]: https://img.shields.io/badge/licence-MIT-green?style=for-the-badge\n[license-url]: https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment/blob/main/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\n[linkedin-url]: https://es.linkedin.com/in/diegolafalce\n[product-screenshot]: images/screenshot.png\n\n### Built With\n\n* [FastApi](https://github.com/tiangolo/fastapi)\n* [volt-dashboard](https://github.com/app-generator/tb-volt-dashboard-flask)\n* [Celery](https://github.com/celery/celery)\n* [Ansible-runner](https://github.com/ansible/ansible-runner)\n* [Terraform](https://github.com/hashicorp/terraform)\n* [Bootstrap](https://getbootstrap.com)\n","funding_links":[],"categories":["Self-hosted Terraform Platforms"],"sub_categories":["IDE"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FD10S0VSkY-OSS%2FStack-Lifecycle-Deployment","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FD10S0VSkY-OSS%2FStack-Lifecycle-Deployment","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FD10S0VSkY-OSS%2FStack-Lifecycle-Deployment/lists"}