Skip to content

Commit

Permalink
Merge pull request #216 from D10S0VSkY-OSS/feature/terragrunt
Browse files Browse the repository at this point in the history
🔥feat: Add PoC terragrunt
  • Loading branch information
D10S0VSkY-OSS authored Dec 11, 2023
2 parents 436009a + a86c2f5 commit d08a124
Show file tree
Hide file tree
Showing 19 changed files with 231 additions and 139 deletions.
42 changes: 20 additions & 22 deletions .github/workflows/sld-api-docker-image.yml
Original file line number Diff line number Diff line change
@@ -1,40 +1,38 @@
name: SLD API backend Docker Image CI

on:
# Triggers the workflow on push events but only for the main branch
push:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
release:
types: [created]
workflow_dispatch:

jobs:

build:

build-and-push:
runs-on: ubuntu-22.04

steps:
- uses: actions/checkout@v2
- name: docker login

# Login to Docker Hub
- name: Docker login
env:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: |
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
run: docker login -u $DOCKER_USER -p $DOCKER_PASSWORD

- name: Build the Docker image with tag
# Build and push the Docker image with new tag for releases
- name: Build and push Docker image with new tag
if: github.event_name == 'release'
working-directory: ./sld-api-backend
run: docker build . --file Dockerfile --tag ${{ secrets.DOCKER_USERNAME }}/sld-api:3.2.0

- name: Docker Push with tag
#if: github.event.pull_request.merged == true
run: docker push ${{ secrets.DOCKER_USERNAME }}/sld-api:3.2.0
run: |
TAG=$(echo $GITHUB_REF | sed 's/refs\/tags\///')
docker build . --file Dockerfile --tag ${{ secrets.DOCKER_USERNAME }}/sld-api:$TAG
docker push ${{ secrets.DOCKER_USERNAME }}/sld-api:$TAG
- name: Build the Docker image
# Build and push the Docker image with 'latest' tag for master branch
- name: Build and push Docker image with latest tag
if: github.ref == 'refs/heads/master'
working-directory: ./sld-api-backend
run: docker build . --file Dockerfile --tag ${{ secrets.DOCKER_USERNAME }}/sld-api:latest

- name: Docker Push
#if: github.event.pull_request.merged == true
run: docker push ${{ secrets.DOCKER_USERNAME }}/sld-api:latest

run: |
docker build . --file Dockerfile --tag ${{ secrets.DOCKER_USERNAME }}/sld-api:latest
docker push ${{ secrets.DOCKER_USERNAME }}/sld-api:latest
41 changes: 21 additions & 20 deletions .github/workflows/sld-dashboard-docker-image.yml
Original file line number Diff line number Diff line change
@@ -1,39 +1,40 @@
name: SLD Dashboard Docker Image CI

on:
# Triggers the workflow on push events but only for the main branch
push:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
release:
types: [created]
workflow_dispatch:

jobs:

build:

build-and-push:
runs-on: ubuntu-22.04

steps:
- uses: actions/checkout@v2
- name: docker login

# Login to Docker Hub
- name: Docker login
env:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: |
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
run: docker login -u $DOCKER_USER -p $DOCKER_PASSWORD

- name: Build the Docker image with tags
working-directory: ./sld-dashboard
run: docker build . --file Dockerfile --tag ${{ secrets.DOCKER_USERNAME }}/sld-dashboard:3.2.0

- name: Docker Push with tags
#if: github.event.pull_request.merged == true
run: docker push ${{ secrets.DOCKER_USERNAME }}/sld-dashboard:3.2.0
- name: Build the Docker image
# Build and push the Docker image with new tag for releases
- name: Build and push Docker image with new tag
if: github.event_name == 'release'
working-directory: ./sld-dashboard
run: docker build . --file Dockerfile --tag ${{ secrets.DOCKER_USERNAME }}/sld-dashboard:latest

- name: Docker Push
#if: github.event.pull_request.merged == true
run: docker push ${{ secrets.DOCKER_USERNAME }}/sld-dashboard:latest
run: |
TAG=$(echo $GITHUB_REF | sed 's/refs\/tags\///')
docker build . --file Dockerfile --tag ${{ secrets.DOCKER_USERNAME }}/sld-dashboard:$TAG
docker push ${{ secrets.DOCKER_USERNAME }}/sld-dashboard:$TAG
# Build and push the Docker image with 'latest' tag for master branch
- name: Build and push Docker image with latest tag
if: github.ref == 'refs/heads/master'
working-directory: ./sld-dashboard
run: |
docker build . --file Dockerfile --tag ${{ secrets.DOCKER_USERNAME }}/sld-dashboard:latest
docker push ${{ secrets.DOCKER_USERNAME }}/sld-dashboard:latest
2 changes: 1 addition & 1 deletion sld-api-backend/src/stacks/domain/entities/stacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class StackBase(BaseModel):
git_repo: constr(strip_whitespace=True)
branch: constr(strip_whitespace=True) = "main"
squad_access: List[str] = ["*"]
iac_type: Optional[Literal["terraform", "tofu"]] = "terraform"
iac_type: Optional[Literal["terraform", "tofu", "terragrunt"]] = "terraform"
tf_version: constr(strip_whitespace=True) = "1.6.5"
tags: Optional[List[str]] = []
project_path: Optional[constr(strip_whitespace=True)] = Field("", example="")
Expand Down
3 changes: 1 addition & 2 deletions sld-api-backend/src/variables/api/container/get.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ def _parse_description(self, description):

return {"error": "Invalid format"}


def _process_pipe_format(self, description):
parts = [part.strip() for part in description.split("|")]
if parts[0]:
Expand All @@ -78,7 +77,7 @@ def _process_pipe_format(self, description):
def _process_newline_format(self, key_values):
metadata = {k: v.strip('"') for k, v in key_values.items()}
if "query_type" in metadata and "query" in metadata and "query_key" in metadata:
metadata["parameter_type"] = "EzeParams"
metadata["parameter_type"] = "QueryParams"
else:
metadata["parameter_type"] = "EOF"
metadata["description"] = metadata.pop("description", "").strip("\"'")
Expand Down
16 changes: 16 additions & 0 deletions sld-api-backend/src/worker/domain/entities/actions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from pydantic import BaseModel
from typing import Optional, Dict


class StructActionsBase(BaseModel):
name: str
stack_name: str
branch: str
environment: str
squad: str
iac_type: Optional[str] = "terraform"
version: str
secreto: Dict
variables_file: Optional[str]
project_path: Optional[str]
task_id: str
24 changes: 24 additions & 0 deletions sld-api-backend/src/worker/domain/interfaces/actions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from typing import Type
from abc import ABC, abstractmethod
from src.worker.domain.services.command import command
from src.worker.domain.entities.actions import StructActionsBase


class Actions(ABC):
def __init__(self, params: StructActionsBase, command: Type[command] = command) -> None:
self.name = params.name
self.stack_name = params.stack_name
self.branch = params.branch
self.environment = params.environment
self.squad = params.squad
self.iac_type = params.iac_type
self.version = params.version
self.secreto = params.secreto
self.variables_file = params.variables_file
self.project_path = params.project_path
self.task_id = params.task_id
self.command = command

@abstractmethod
def execute_deployer_command(self, action: str) -> dict:
pass
7 changes: 4 additions & 3 deletions sld-api-backend/src/worker/domain/interfaces/provider.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from abc import ABC, abstractmethod
from abc import ABC


class IProviderArtifactRequirements(ABC):
@staticmethod
def artifact_download(name, stack_name, environment, squad, git_repo, branch, project_path):
# logic to download artifact
pass
pass
63 changes: 16 additions & 47 deletions sld-api-backend/src/worker/domain/services/provider.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# DI terraform provider
from src.worker.providers.hashicorp.actions import Actions
from src.worker.providers.hashicorp.actions import Terraform, TerraGrunt, Actions
from src.worker.providers.hashicorp.artifact import Artifact
from src.worker.providers.hashicorp.download import BinaryDownload
from src.worker.providers.hashicorp.templates import Backend, GetVars, Tfvars
from src.worker.domain.entities.worker import DeployParams, DownloadBinaryParams
from typing import Type



class ProviderRequirements:
Expand Down Expand Up @@ -73,53 +75,20 @@ def json_vars(

class ProviderActions:
"""
This class contains the typical methods of a deployment
This class contains the typical methods of a deployment.
"""

def plan(params: DeployParams, action: Actions = Actions) -> dict:
config_action = action(
params.name,
params.stack_name,
params.branch,
params.environment,
params.squad,
params.iac_type,
params.version,
params.secreto,
params.variables_file,
params.project_path,
params.task_id,
)
return config_action.execute_terraform_command("plan")
@staticmethod
def plan(params: DeployParams, action: Type[Actions] = Terraform) -> dict:
config_action = action(params)
return config_action.execute_deployer_command("plan")

def apply(params: DeployParams, action: Actions = Actions) -> dict:
config_action = action(
params.name,
params.stack_name,
params.branch,
params.environment,
params.squad,
params.iac_type,
params.version,
params.secreto,
params.variables_file,
params.project_path,
params.task_id,
)
return config_action.execute_terraform_command("apply")
@staticmethod
def apply(params: DeployParams, action: Type[Actions] = Terraform) -> dict:
config_action = action(params)
return config_action.execute_deployer_command("apply")

def destroy(params: DeployParams, action: Actions = Actions) -> dict:
config_action = action(
params.name,
params.stack_name,
params.branch,
params.environment,
params.squad,
params.iac_type,
params.version,
params.secreto,
params.variables_file,
params.project_path,
params.task_id,
)
return config_action.execute_terraform_command("destroy")
@staticmethod
def destroy(params: DeployParams, action: Type[Actions] = Terraform) -> dict:
config_action = action(params)
return config_action.execute_deployer_command("destroy")
Loading

0 comments on commit d08a124

Please sign in to comment.