From 54d507ff495c61a2c0e79f5155b2a18793bed2b1 Mon Sep 17 00:00:00 2001 From: abolfazl1381 Date: Sun, 8 Dec 2024 14:10:15 +0330 Subject: [PATCH] fix(docker install): fix it --- app/media/Installation_base/Docker/RHEL.sh | 19 ++++++++ app/media/Installation_base/Docker/centos.sh | 16 +++++++ app/media/Installation_base/Docker/fedora.sh | 19 ++++++++ app/media/Installation_base/Docker/ubuntu.sh | 16 +++++++ app/media/MyBash/bash.sh | 25 ++++++----- app/models/__init__.py | 3 +- app/models/docker_installation_models.py | 20 +++++++++ app/routes/docker.py | 13 ++++-- app/template_generators/docker/__init__.py | 0 .../docker/installation.py | 45 +++++++++++++++++++ 10 files changed, 159 insertions(+), 17 deletions(-) create mode 100644 app/media/Installation_base/Docker/RHEL.sh create mode 100644 app/media/Installation_base/Docker/centos.sh create mode 100644 app/media/Installation_base/Docker/fedora.sh create mode 100644 app/media/Installation_base/Docker/ubuntu.sh create mode 100644 app/models/docker_installation_models.py create mode 100644 app/template_generators/docker/__init__.py create mode 100644 app/template_generators/docker/installation.py diff --git a/app/media/Installation_base/Docker/RHEL.sh b/app/media/Installation_base/Docker/RHEL.sh new file mode 100644 index 00000000..6613df87 --- /dev/null +++ b/app/media/Installation_base/Docker/RHEL.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +sudo dnf remove -y \ + docker \ + docker-client \ + docker-client-latest \ + docker-common \ + docker-latest \ + docker-latest-logrotate \ + docker-logrotate \ + docker-engine \ + podman \ + runc + + +sudo dnf -y install dnf-plugins-core +sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo + +sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \ No newline at end of file diff --git a/app/media/Installation_base/Docker/centos.sh b/app/media/Installation_base/Docker/centos.sh new file mode 100644 index 00000000..b29d7708 --- /dev/null +++ b/app/media/Installation_base/Docker/centos.sh @@ -0,0 +1,16 @@ +#!/bin/bash +sudo dnf remove -y \ + docker \ + docker-client \ + docker-client-latest \ + docker-common \ + docker-latest \ + docker-latest-logrotate \ + docker-logrotate \ + docker-engine + + +sudo dnf -y install dnf-plugins-core +sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo + +sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \ No newline at end of file diff --git a/app/media/Installation_base/Docker/fedora.sh b/app/media/Installation_base/Docker/fedora.sh new file mode 100644 index 00000000..bbd9cff3 --- /dev/null +++ b/app/media/Installation_base/Docker/fedora.sh @@ -0,0 +1,19 @@ +#!/bin/bash +sudo dnf remove -y \ + docker \ + docker-client \ + docker-client-latest \ + docker-common \ + docker-latest \ + docker-latest-logrotate \ + docker-logrotate \ + docker-selinux \ + docker-engine-selinux \ + docker-engine + + +sudo dnf -y install dnf-plugins-core +sudo dnf-3 config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo + + +sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \ No newline at end of file diff --git a/app/media/Installation_base/Docker/ubuntu.sh b/app/media/Installation_base/Docker/ubuntu.sh new file mode 100644 index 00000000..b223db9f --- /dev/null +++ b/app/media/Installation_base/Docker/ubuntu.sh @@ -0,0 +1,16 @@ +#!/bin/bash +sudo apt-get update -y +sudo apt-get install ca-certificates curl -y +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc + +# Add the repository to Apt sources: +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt-get update -y + + +sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \ No newline at end of file diff --git a/app/media/MyBash/bash.sh b/app/media/MyBash/bash.sh index d3bd0505..b223db9f 100644 --- a/app/media/MyBash/bash.sh +++ b/app/media/MyBash/bash.sh @@ -1,15 +1,16 @@ -#!bin/bash +#!/bin/bash +sudo apt-get update -y +sudo apt-get install ca-certificates curl -y +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc -sudo apt-get update && sudo apt-get install -y gnupg software-properties-common +# Add the repository to Apt sources: +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt-get update -y -wget -O- https://apt.releases.hashicorp.com/gpg | \ -gpg --dearmor | \ -sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg > /dev/null -echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \ -https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \ -sudo tee /etc/apt/sources.list.d/hashicorp.list - -sudo apt update - -sudo apt-get install terraform \ No newline at end of file +sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \ No newline at end of file diff --git a/app/models/__init__.py b/app/models/__init__.py index f206434e..9f97ab17 100644 --- a/app/models/__init__.py +++ b/app/models/__init__.py @@ -3,4 +3,5 @@ from .utils import * from .ansible_models import * from .jcasc import * -from .compose_models import * \ No newline at end of file +from .compose_models import * +from .docker_installation_models import * \ No newline at end of file diff --git a/app/models/docker_installation_models.py b/app/models/docker_installation_models.py new file mode 100644 index 00000000..f64b9f58 --- /dev/null +++ b/app/models/docker_installation_models.py @@ -0,0 +1,20 @@ +from typing import Dict, List, Optional,Union +from pydantic import BaseModel, model_validator,validator + +class DockerInstallationInput(BaseModel): + os:str = "Ubuntu" + environment:str = "Linux" + + @validator("os") + def validate_os(cls, value): + allowed_os = ['Ubuntu', 'Centos', 'Fedora', 'RHEL'] + if value not in allowed_os: + raise ValueError(f"OS must be one of {allowed_os}.") + return value + + @validator("environment") + def validate_environment(cls, value): + allowed_os = ['Linux'] + if value not in allowed_os: + raise ValueError(f"Environment must be one of {allowed_os}.") + return value \ No newline at end of file diff --git a/app/routes/docker.py b/app/routes/docker.py index 727d9773..04b831aa 100644 --- a/app/routes/docker.py +++ b/app/routes/docker.py @@ -1,8 +1,7 @@ from app.app_instance import app -from app.gpt_services import gpt_service -from app.services import (write_installation,edit_directory_generator,execute_pythonfile) -from app.models import (DockerCompose,Output) +from app.models import (DockerCompose,DockerInstallationInput,Output) from app.template_generators.docker.compose import docker_compose_generator +from app.template_generators.docker.installation import docker_installation_selection import os @app.post("/api/docker-compose/") @@ -13,4 +12,10 @@ async def docker_compose_template(request:DockerCompose) -> Output: docker_compose_generator(request) return Output(output='output') - \ No newline at end of file + +@app.post("/api/docker/installation") +async def docker_installation(request:DockerInstallationInput) -> Output: + + docker_installation_selection(request) + + return Output(output='output') \ No newline at end of file diff --git a/app/template_generators/docker/__init__.py b/app/template_generators/docker/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/template_generators/docker/installation.py b/app/template_generators/docker/installation.py new file mode 100644 index 00000000..10adcad5 --- /dev/null +++ b/app/template_generators/docker/installation.py @@ -0,0 +1,45 @@ +import os +import shutil + + +def create_MyBash_directory(): + + dir = 'app/media/MyBash' + + + if not os.path.exists(dir): + os.makedirs(dir) + os.path.join(dir, 'bash.sh') + + + +def docker_installation_selection(input): + + create_MyBash_directory() + + match input.os: + + case "Ubuntu": + + source = 'app/media/Installation_base/Docker/ubuntu.sh' + dest = 'app/media/MyBash/bash.sh' + + shutil.copyfile(source, dest) + + + case "Fedora": + source = 'app/media/Installation_base/Docker/fedora.sh' + dest = 'app/media/MyBash/bash.sh' + shutil.copyfile(source, dest) + + case "Centos": + source = 'app/media/Installation_base/Docker/centos.sh' + dest = 'app/media/MyBash/bash.sh' + shutil.copyfile(source, dest) + + case "RHEL": + source = 'app/media/Installation_base/Docker/RHEL.sh' + dest = 'app/media/MyBash/bash.sh' + shutil.copyfile(source, dest) + case _: + raise ValueError() \ No newline at end of file