diff --git a/yamo/.gitignore b/yamo/.gitignore new file mode 100644 index 00000000..b9c7d172 --- /dev/null +++ b/yamo/.gitignore @@ -0,0 +1,4 @@ +test_projects +Test +.env +__pycache__ diff --git a/yamo/.vscode/launch.json b/yamo/.vscode/launch.json new file mode 100644 index 00000000..850a7523 --- /dev/null +++ b/yamo/.vscode/launch.json @@ -0,0 +1,25 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Aktuelle Datei", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "args": ["-p","projects"] + }, + { + "name": "Python: Aktuelle Datei NTTDATA", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "args": ["-i","Test/nttdata","-p","CD_Test", "-r", "container-monitoring-rule", "-e","sadsad"] + } + + ] +} \ No newline at end of file diff --git a/yamo/.vscode/settings.json b/yamo/.vscode/settings.json new file mode 100644 index 00000000..7a73a41b --- /dev/null +++ b/yamo/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/yamo/Options.py b/yamo/Options.py new file mode 100644 index 00000000..a9c497a2 --- /dev/null +++ b/yamo/Options.py @@ -0,0 +1,63 @@ +class Options: + + __instance = None + __project = None + __pathToProjects=None + __env=None + __restCall=None + __loglevel="INFO" + + @property + def project(self): + return self.__project + + @property + def pathToProjects(self): + return self.__pathToProjects + + @property + def env(self): + return self.__env + + @property + def restCall(self): + return self.__restCall + + @property + def loglevel(self): + return self.__loglevel + + @project.setter + def project(self, project): + self.__project=project + + @pathToProjects.setter + def pathToProjects(self, pathToProjects): + self.__pathToProjects=pathToProjects + + @env.setter + def env(self, env): + self.__env=env + + @restCall.setter + def restCall(self, restCall): + self.__restCall=restCall + + @loglevel.setter + def loglevel(self, loglevel): + self.__loglevel=loglevel + + + @staticmethod + def getInstance(): + """ Static access method. """ + if Options.__instance == None: + Options() + return Options.__instance + + def __init__(self): + """ Virtually private constructor. """ + if Options.__instance != None: + raise Exception("This class is a singleton!") + else: + Options.__instance = self \ No newline at end of file diff --git a/yamo/Project.py b/yamo/Project.py new file mode 100644 index 00000000..14f0699b --- /dev/null +++ b/yamo/Project.py @@ -0,0 +1,62 @@ +from rest.RestCall import RestCall +import time + +from yaspin import yaspin +from Report.ReportMessage import ReportMessage, MsgStatus +import coloredlogs, logging +from Options import Options + +class Project: + + __messages__=[] + __hasErrors__=False + + logger = logging.getLogger("yamo") + + def getMessages(self): + return __messages__ + + def hasErrors(self): + return __hasErrors__ + + def execByRestName(self,restName): + self.logger.debug("Start executing restCall by name "+ restName) + restCall = [x for x in self.restCallList if x.name == restName] + if len(restCall) > 0: + self.exec(restCall[0]) + else: + self.logger.warning("Could not find restcall "+ restName) + + self.logger.debug("Finished executing restCall by name "+ restName) + + def exec(self, restCall): + try: + #sp.text = sp.text+ " > "+restCall.name + #time.sleep(5) + + restCall.exec() + #self.logger.info("Project: "+self.name+" Call: "+restCall.name+" [SUCCESS]") + + self.__messages__.append(ReportMessage(MsgStatus.SUCCESS, self.name, restCall.name, None, str(e))) + except Exception as e: + self.__hasErrors__= True + #self.logger.error("Project ["+self.name+"] Call: ["+restCall.name+"] --> Failed") + #self.logger.error("Project: "+self.name+" Call: "+restCall.name+" [Failed]") + self.__messages__.append(ReportMessage(MsgStatus.FAILED, self.name, restCall.name, None, str(e))) #['errors'].append(str(e)) + + def execRestCalls(self): + if Options.getInstance().restCall: + self.execByRestName(Options.getInstance().restCall) + else: + self.execAll() + + def execAll(self): + self.logger.debug("Start executing all restcalls..") + for restCall in self.restCallList: + self.exec(restCall) + self.logger.debug("Finished executing all restcalls..") + + def __init__(self, name, restCallList): + self.name=name + self.restCallList=restCallList + #self.executionConfig=executionConfig diff --git a/yamo/ProjectList.py b/yamo/ProjectList.py new file mode 100644 index 00000000..677399b8 --- /dev/null +++ b/yamo/ProjectList.py @@ -0,0 +1,102 @@ +import os +import sys +import os.path +import json +import yaml +from os import path +from typing import List +from Project import Project +from context.Context import Context +import coloredlogs, logging +from yaspin import yaspin +from Options import Options + + +class ProjectList: + + __projectList=[] + + logger = logging.getLogger("yamo") + + #def execProject(self, projectName): + + #def printReport(self): + # for i in self.__projectList: + # print(i.getErrors()) + def getProjectList(self): + return self.__projectList + + def execProject(self, projectName): + self.logger.info("Start Processing "+ projectName) + project = [x for x in self.__projectList if x.name == projectName] + + if len(project) > 0: + project[0].execRestCalls() + else: + self.logger.warning("Could not find project "+projectName) + + self.logger.info("End Processing "+ projectName) + + def execAll(self): + for p in self.__projectList: + + #with yaspin(text=p.name, color="yellow", side="right") as sp: + self.logger.info("== Start Projet "+ p.name+" ==") + p.execRestCalls() + self.logger.info("== Finished Projet "+ p.name+" ==") + #success = True if p.hasErrors else False + #sp.text = p.name + #if success: + # sp.ok("[SUCCESS] ") + #else: + # sp.fail("[FAILED]") + + #if not success + + + self.logger.debug("Finished Processing ProjectList") + + + def exec(self): + + self.logger.debug("Start Processing ProjectList") + + if Options.getInstance().project: + self.execProject(Options.getInstance().project) + else: + self.execAll() + + + + def __buildProjectList(self, projects_root_path): + context = Context.getInstance() + """ READ THE PROJECT PATH """ + project_dirs: List[str] = os.listdir(projects_root_path) + + for project in project_dirs: + + if path.isdir(projects_root_path+"/"+project): + restCalls = [] + rest_calls: List[str] = os.listdir(projects_root_path+"/"+project) + + if len(rest_calls) == 0: + self.logger.warning("Project: " + project+ " has no configuration") + + for restPath in rest_calls: + #execConfig=self.readExecutionConfig(projects_root_path+"/"+project+"/"+restPath+"/"+restPath+".yaml") + restC=context.restFactory.getRest(restPath, projects_root_path+"/"+project) + + if restC is None: + self.logger.warning("Project: " + project+ " - RestPath: "+restPath+ " is unknown or missing missing "+ restPath+".yaml file, will be ignored") + + if restC: + restCalls.append(restC) + + if len(restCalls) > 0: + self.__projectList.append(Project(project,restCalls)) + + def __init__(self,projects_root_path): + self.__buildProjectList(projects_root_path) + #if len(self.__projectList) < 1: + # print("WARNING: no project folders found in: ", projects_root_path) + \ No newline at end of file diff --git a/yamo/Report/AbstractPrinter.py b/yamo/Report/AbstractPrinter.py new file mode 100644 index 00000000..53120a76 --- /dev/null +++ b/yamo/Report/AbstractPrinter.py @@ -0,0 +1,10 @@ +from abc import ABC, abstractmethod + +class AbstractPrinter(ABC): + + def setProjectList(self,projectList): + self.__projectList = projectList + + @abstractmethod + def _print(self): + pass \ No newline at end of file diff --git a/yamo/Report/ConsolePrinter.py b/yamo/Report/ConsolePrinter.py new file mode 100644 index 00000000..22c61774 --- /dev/null +++ b/yamo/Report/ConsolePrinter.py @@ -0,0 +1,7 @@ +from Report.AbstractPrinter import AbstractPrinter + +class ConsolePrinter(AbstractPrinter): + #def test(self): + # pass + def _print(self): + pass diff --git a/yamo/Report/ReportMessage.py b/yamo/Report/ReportMessage.py new file mode 100644 index 00000000..ab527890 --- /dev/null +++ b/yamo/Report/ReportMessage.py @@ -0,0 +1,14 @@ +from enum import Enum + +class MsgStatus(Enum): + SUCCESS = 1 + FAILED = 2 + +class ReportMessage: + + def __init__(self, type, projectName, restCall, environment, msg): + self.__type=type + self.__prjectName=projectName + self.__restCall=restCall + self.__environment=environment + self.__msg=msg \ No newline at end of file diff --git a/yamo/Report/ReportPrinter.py b/yamo/Report/ReportPrinter.py new file mode 100644 index 00000000..550f852f --- /dev/null +++ b/yamo/Report/ReportPrinter.py @@ -0,0 +1,14 @@ +class ReportPrinter: + + __reportPrinters=[] + + def print(self): + for r in self.__reportPrinters: + r._print() + + def append(self, reportPrinter): + reportPrinter.setProjectList(self.__projectList) + self.__reportPrinters.append(reportPrinter) + + def __init__(self, projectList): + self.__projectList=projectList diff --git a/yamo/YAMO_onboard.sh b/yamo/YAMO_onboard.sh new file mode 100644 index 00000000..31980d19 --- /dev/null +++ b/yamo/YAMO_onboard.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# Help command +if [ "$1" == "-h" ]; then + echo "Usage: `basename $0` component-name " + exit 0 +fi + +if [ ! -d "projects/CD_$1/" ]; then + echo "$1 project folder doesn't exist, creating one..." + mkdir projects/CD_$1 +else + echo "CD_$1 project folder already exists" +fi + + +declare -a config_arr=( +"container-monitoring-rule" +#"anotherapiendpoint" +) + + +for i in "${config_arr[@]}" + do + + if [ ! -d "projects/CD_$1/$i" ]; then + echo "--> Creating [$i]" + cp -R templates/project/$i projects/CD_$1/ + if [ -f "projects/CD_$1/$i/$i.yaml" ]; then + sed -i "s/#project#/$1/g" projects/CD_$1/$i/$i.yaml + + fi + else + echo "[$i] already exist, no changes applied" + fi + +done diff --git a/yamo/YAMO_onboard_many.sh b/yamo/YAMO_onboard_many.sh new file mode 100644 index 00000000..72106015 --- /dev/null +++ b/yamo/YAMO_onboard_many.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +onboard(){ + #read -p "Press enter to continue" + ./YAMO_onboard.sh "$i" +} + +readarray -t apps < "templates/$1.txt" +for i in "${apps[@]}" +do + # To do - add function [ onboard(), replace-folder(), git-add(), run-monaco() ] + echo $i + onboard + #read -p "Press enter to continue" +done diff --git a/yamo/context/Context.py b/yamo/context/Context.py new file mode 100644 index 00000000..0e257546 --- /dev/null +++ b/yamo/context/Context.py @@ -0,0 +1,53 @@ +import os +import os.path +import json +import yaml +from os import path +from typing import List +from Project import Project + +class Context: + __instance = None + + __projectList=[] + __envorinments={} + + + def envExists(self, env): + if env in self.__environments: + return True + else: + return False + + def getAllEnvironments(self): + return self.__environments + + def getEnvironment(self, env): + if self.envExists(env): + return self.__environments[env] + else: + raise ValueError('Environment not found: '+ env) + + def __buildEnvorinment(self, environmentReader): + self.__environments = environmentReader.read() + + def build(self, restFactory, environmentReader): + # self.__buildProjectList(projects_root_path, restFactory) + self.restFactory=restFactory + self.__buildEnvorinment(environmentReader) + + + + @staticmethod + def getInstance(): + """ Static access method. """ + if Context.__instance == None: + Context() + return Context.__instance + + def __init__(self): + """ Virtually private constructor. """ + if Context.__instance != None: + raise Exception("This class is a singleton!") + else: + Context.__instance = self \ No newline at end of file diff --git a/yamo/environment/AbstractEnvReader.py b/yamo/environment/AbstractEnvReader.py new file mode 100644 index 00000000..80cae201 --- /dev/null +++ b/yamo/environment/AbstractEnvReader.py @@ -0,0 +1,28 @@ +from abc import ABC, abstractmethod +from environment.Environment import Environment + +class AbstractEnvReader(ABC): + + __environmentList={} + + @property + def environments(self): + return self.__environmentList + + def printEnvironment(self): + print(self.__environmentList) + + def read(self) : + self._readEvnironment() + return self.__environmentList + + def _addEnvironment(self, env): + self.__environmentList[env.name]=env + + @abstractmethod + def _readEvnironment(self): + pass + + + def __init__(self, tokenStore): + self.tokenStore=tokenStore \ No newline at end of file diff --git a/yamo/environment/Environment.py b/yamo/environment/Environment.py new file mode 100644 index 00000000..1d52d184 --- /dev/null +++ b/yamo/environment/Environment.py @@ -0,0 +1,46 @@ +import yaml + +class Environment: + + @property + def name(self): + return self.__name + + @property + def env_url(self): + return self.__env_url + + @property + def token(self): + return self.tokenStore.get(self.__token) + + @name.setter + def name(self, name): + self.__name=name + + @env_url.setter + def env_url(self, env_url): + self.__env_url=env_url + + @token.setter + def token(self, token): + self.__token=token + + + def __init__(self, name, env_url, token): + self.name=name + self.env_url=env_url + self.token=token + + def __init__(self, array, tokenStore): + self.tokenStore =tokenStore + for i in array: + for key, value in i.items(): + if key == "name": + self.name=i[key] + elif key == "env-url": + self.env_url=i[key] + elif key == "env-token-name": + self.token =i[key] + else: + raise ValueError('Unknown environment config attribute: '+i[key]) \ No newline at end of file diff --git a/yamo/environment/YamlEnvReader.py b/yamo/environment/YamlEnvReader.py new file mode 100644 index 00000000..b875c812 --- /dev/null +++ b/yamo/environment/YamlEnvReader.py @@ -0,0 +1,23 @@ +from environment.AbstractEnvReader import AbstractEnvReader +from environment.Environment import Environment +import yaml + +class YamlEnvReader(AbstractEnvReader): + + def _readEvnironment(self): + try: + f = open(self.pathToEnvironmentYAML,) + data=yaml.safe_load(f) + for key, value in data.items(): + self._addEnvironment(Environment(value, self.tokenStore)) + except: + print("Error while reading environment yaml: ", self.pathToEnvironmentYAML) + raise + + + def __init__(self, pathToEnvironmentYAML, tokenStore): + self.pathToEnvironmentYAML = pathToEnvironmentYAML + self.tokenStore=tokenStore + + #def create_product_b(self) -> AbstractProductB: + # return ConcreteProductB1() \ No newline at end of file diff --git a/yamo/projects.zip b/yamo/projects.zip new file mode 100644 index 00000000..78f13e10 Binary files /dev/null and b/yamo/projects.zip differ diff --git a/yamo/projects/CD_am-casa/container-monitoring-rule/container-monitoring-rule.yaml b/yamo/projects/CD_am-casa/container-monitoring-rule/container-monitoring-rule.yaml new file mode 100644 index 00000000..43fa49b7 --- /dev/null +++ b/yamo/projects/CD_am-casa/container-monitoring-rule/container-monitoring-rule.yaml @@ -0,0 +1,67 @@ +config: +- CDam-casa-PROD: default.json +- CDam-casa-E2E: default.json +- CDam-casa-INT: default.json +- CDam-casa-DEV: default.json + +##PROD E2E and PROD (disabled) +CDam-casa-E2E.EMEA-Prod: +- enabled: true +- namespace: "am-casa-e2e" +- skipDeployment: "false" + +CDam-casa-PROD.EMEA-Prod: +- enabled: false +- namespace: "am-casa-prod" +- skipDeployment: "true" + +CDam-casa-E2E.NA-Prod: +- enabled: true +- namespace: "am-casa-e2e" +- skipDeployment: "false" + +CDam-casa-PROD.NA-Prod: +- enabled: false +- namespace: "am-casa-prod" +- skipDeployment: "true" + +CDam-casa-E2E.CN-Prod: +- enabled: true +- namespace: "am-casa-e2e" +- skipDeployment: "false" + +CDam-casa-PROD.CN-Prod: +- enabled: false +- namespace: "am-casa-prod" +- skipDeployment: "true" + +##PREPROD DEV AND INT +CDam-casa-DEV.EMEA-PreProd: +- enabled: true +- namespace: "am-casa-dev" +- skipDeployment: "false" + +CDam-casa-INT.EMEA-PreProd: +- enabled: true +- namespace: "am-casa-int" +- skipDeployment: "false" + +CDam-casa-DEV.NA-PreProd: +- enabled: true +- namespace: "am-casa-dev" +- skipDeployment: "false" + +CDam-casa-INT.NA-PreProd: +- enabled: true +- namespace: "am-casa-int" +- skipDeployment: "false" + +CDam-casa-DEV.CN-PreProd: +- enabled: true +- namespace: "am-casa-dev" +- skipDeployment: "false" + +CDam-casa-INT.CN-PreProd: +- enabled: true +- namespace: "am-casa-int" +- skipDeployment: "false" diff --git a/yamo/projects/CD_am-casa/container-monitoring-rule/default.json b/yamo/projects/CD_am-casa/container-monitoring-rule/default.json new file mode 100644 index 00000000..c110080f --- /dev/null +++ b/yamo/projects/CD_am-casa/container-monitoring-rule/default.json @@ -0,0 +1,11 @@ +[{ + "schemaId": "builtin:container.monitoring-rule", + "scope": "environment", + "value": { + "enabled": "{{.enabled}}", + "mode": "MONITORING_ON", + "property": "KUBERNETES_NAMESPACE", + "value": "{{.namespace}}", + "operator": "EQUALS" + } +}] diff --git a/yamo/projects/CD_am-cnr/container-monitoring-rule/container-monitoring-rule.yaml b/yamo/projects/CD_am-cnr/container-monitoring-rule/container-monitoring-rule.yaml new file mode 100644 index 00000000..7f200efd --- /dev/null +++ b/yamo/projects/CD_am-cnr/container-monitoring-rule/container-monitoring-rule.yaml @@ -0,0 +1,67 @@ +config: +- CDam-cnr-PROD: default.json +- CDam-cnr-E2E: default.json +- CDam-cnr-INT: default.json +- CDam-cnr-DEV: default.json + +##PROD E2E and PROD (disabled) +CDam-cnr-E2E.EMEA-Prod: +- enabled: true +- namespace: "am-cnr-e2e" +- skipDeployment: "false" + +CDam-cnr-PROD.EMEA-Prod: +- enabled: false +- namespace: "am-cnr-prod" +- skipDeployment: "true" + +CDam-cnr-E2E.NA-Prod: +- enabled: true +- namespace: "am-cnr-e2e" +- skipDeployment: "false" + +CDam-cnr-PROD.NA-Prod: +- enabled: false +- namespace: "am-cnr-prod" +- skipDeployment: "true" + +CDam-cnr-E2E.CN-Prod: +- enabled: true +- namespace: "am-cnr-e2e" +- skipDeployment: "false" + +CDam-cnr-PROD.CN-Prod: +- enabled: false +- namespace: "am-cnr-prod" +- skipDeployment: "true" + +##PREPROD DEV AND INT +CDam-cnr-DEV.EMEA-PreProd: +- enabled: true +- namespace: "am-cnr-dev" +- skipDeployment: "false" + +CDam-cnr-INT.EMEA-PreProd: +- enabled: true +- namespace: "am-cnr-int" +- skipDeployment: "false" + +CDam-cnr-DEV.NA-PreProd: +- enabled: true +- namespace: "am-cnr-dev" +- skipDeployment: "false" + +CDam-cnr-INT.NA-PreProd: +- enabled: true +- namespace: "am-cnr-int" +- skipDeployment: "false" + +CDam-cnr-DEV.CN-PreProd: +- enabled: true +- namespace: "am-cnr-dev" +- skipDeployment: "false" + +CDam-cnr-INT.CN-PreProd: +- enabled: true +- namespace: "am-cnr-int" +- skipDeployment: "false" diff --git a/yamo/projects/CD_am-cnr/container-monitoring-rule/default.json b/yamo/projects/CD_am-cnr/container-monitoring-rule/default.json new file mode 100644 index 00000000..c110080f --- /dev/null +++ b/yamo/projects/CD_am-cnr/container-monitoring-rule/default.json @@ -0,0 +1,11 @@ +[{ + "schemaId": "builtin:container.monitoring-rule", + "scope": "environment", + "value": { + "enabled": "{{.enabled}}", + "mode": "MONITORING_ON", + "property": "KUBERNETES_NAMESPACE", + "value": "{{.namespace}}", + "operator": "EQUALS" + } +}] diff --git a/yamo/projects/CD_am-ecs/container-monitoring-rule/container-monitoring-rule.yaml b/yamo/projects/CD_am-ecs/container-monitoring-rule/container-monitoring-rule.yaml new file mode 100644 index 00000000..924c62ae --- /dev/null +++ b/yamo/projects/CD_am-ecs/container-monitoring-rule/container-monitoring-rule.yaml @@ -0,0 +1,67 @@ +config: +- CDam-ecs-PROD: default.json +- CDam-ecs-E2E: default.json +- CDam-ecs-INT: default.json +- CDam-ecs-DEV: default.json + +##PROD E2E and PROD (disabled) +CDam-ecs-E2E.EMEA-Prod: +- enabled: true +- namespace: "am-ecs-e2e" +- skipDeployment: "false" + +CDam-ecs-PROD.EMEA-Prod: +- enabled: false +- namespace: "am-ecs-prod" +- skipDeployment: "true" + +CDam-ecs-E2E.NA-Prod: +- enabled: true +- namespace: "am-ecs-e2e" +- skipDeployment: "false" + +CDam-ecs-PROD.NA-Prod: +- enabled: false +- namespace: "am-ecs-prod" +- skipDeployment: "true" + +CDam-ecs-E2E.CN-Prod: +- enabled: true +- namespace: "am-ecs-e2e" +- skipDeployment: "false" + +CDam-ecs-PROD.CN-Prod: +- enabled: false +- namespace: "am-ecs-prod" +- skipDeployment: "true" + +##PREPROD DEV AND INT +CDam-ecs-DEV.EMEA-PreProd: +- enabled: true +- namespace: "am-ecs-dev" +- skipDeployment: "false" + +CDam-ecs-INT.EMEA-PreProd: +- enabled: true +- namespace: "am-ecs-int" +- skipDeployment: "false" + +CDam-ecs-DEV.NA-PreProd: +- enabled: true +- namespace: "am-ecs-dev" +- skipDeployment: "false" + +CDam-ecs-INT.NA-PreProd: +- enabled: true +- namespace: "am-ecs-int" +- skipDeployment: "false" + +CDam-ecs-DEV.CN-PreProd: +- enabled: true +- namespace: "am-ecs-dev" +- skipDeployment: "false" + +CDam-ecs-INT.CN-PreProd: +- enabled: true +- namespace: "am-ecs-int" +- skipDeployment: "false" diff --git a/yamo/projects/CD_am-ecs/container-monitoring-rule/default.json b/yamo/projects/CD_am-ecs/container-monitoring-rule/default.json new file mode 100644 index 00000000..c110080f --- /dev/null +++ b/yamo/projects/CD_am-ecs/container-monitoring-rule/default.json @@ -0,0 +1,11 @@ +[{ + "schemaId": "builtin:container.monitoring-rule", + "scope": "environment", + "value": { + "enabled": "{{.enabled}}", + "mode": "MONITORING_ON", + "property": "KUBERNETES_NAMESPACE", + "value": "{{.namespace}}", + "operator": "EQUALS" + } +}] diff --git a/yamo/projects/CD_am-store/container-monitoring-rule/container-monitoring-rule.yaml b/yamo/projects/CD_am-store/container-monitoring-rule/container-monitoring-rule.yaml new file mode 100644 index 00000000..4e37779c --- /dev/null +++ b/yamo/projects/CD_am-store/container-monitoring-rule/container-monitoring-rule.yaml @@ -0,0 +1,67 @@ +config: +- CDam-store-PROD: default.json +- CDam-store-E2E: default.json +- CDam-store-INT: default.json +- CDam-store-DEV: default.json + +##PROD E2E and PROD (disabled) +CDam-store-E2E.EMEA-Prod: +- enabled: true +- namespace: "am-store-e2e" +- skipDeployment: "false" + +CDam-store-PROD.EMEA-Prod: +- enabled: false +- namespace: "am-store-prod" +- skipDeployment: "true" + +CDam-store-E2E.NA-Prod: +- enabled: true +- namespace: "am-store-e2e" +- skipDeployment: "false" + +CDam-store-PROD.NA-Prod: +- enabled: false +- namespace: "am-store-prod" +- skipDeployment: "true" + +CDam-store-E2E.CN-Prod: +- enabled: true +- namespace: "am-store-e2e" +- skipDeployment: "false" + +CDam-store-PROD.CN-Prod: +- enabled: false +- namespace: "am-store-prod" +- skipDeployment: "true" + +##PREPROD DEV AND INT +CDam-store-DEV.EMEA-PreProd: +- enabled: true +- namespace: "am-store-dev" +- skipDeployment: "false" + +CDam-store-INT.EMEA-PreProd: +- enabled: true +- namespace: "am-store-int" +- skipDeployment: "false" + +CDam-store-DEV.NA-PreProd: +- enabled: true +- namespace: "am-store-dev" +- skipDeployment: "false" + +CDam-store-INT.NA-PreProd: +- enabled: true +- namespace: "am-store-int" +- skipDeployment: "false" + +CDam-store-DEV.CN-PreProd: +- enabled: true +- namespace: "am-store-dev" +- skipDeployment: "false" + +CDam-store-INT.CN-PreProd: +- enabled: true +- namespace: "am-store-int" +- skipDeployment: "false" diff --git a/yamo/projects/CD_am-store/container-monitoring-rule/default.json b/yamo/projects/CD_am-store/container-monitoring-rule/default.json new file mode 100644 index 00000000..c110080f --- /dev/null +++ b/yamo/projects/CD_am-store/container-monitoring-rule/default.json @@ -0,0 +1,11 @@ +[{ + "schemaId": "builtin:container.monitoring-rule", + "scope": "environment", + "value": { + "enabled": "{{.enabled}}", + "mode": "MONITORING_ON", + "property": "KUBERNETES_NAMESPACE", + "value": "{{.namespace}}", + "operator": "EQUALS" + } +}] diff --git a/yamo/projects/CD_am-usage/container-monitoring-rule/container-monitoring-rule.yaml b/yamo/projects/CD_am-usage/container-monitoring-rule/container-monitoring-rule.yaml new file mode 100644 index 00000000..0b7e60c4 --- /dev/null +++ b/yamo/projects/CD_am-usage/container-monitoring-rule/container-monitoring-rule.yaml @@ -0,0 +1,67 @@ +config: +- CDam-usage-PROD: default.json +- CDam-usage-E2E: default.json +- CDam-usage-INT: default.json +- CDam-usage-DEV: default.json + +##PROD E2E and PROD (disabled) +CDam-usage-E2E.EMEA-Prod: +- enabled: true +- namespace: "am-usage-e2e" +- skipDeployment: "false" + +CDam-usage-PROD.EMEA-Prod: +- enabled: false +- namespace: "am-usage-prod" +- skipDeployment: "true" + +CDam-usage-E2E.NA-Prod: +- enabled: true +- namespace: "am-usage-e2e" +- skipDeployment: "false" + +CDam-usage-PROD.NA-Prod: +- enabled: false +- namespace: "am-usage-prod" +- skipDeployment: "true" + +CDam-usage-E2E.CN-Prod: +- enabled: true +- namespace: "am-usage-e2e" +- skipDeployment: "false" + +CDam-usage-PROD.CN-Prod: +- enabled: false +- namespace: "am-usage-prod" +- skipDeployment: "true" + +##PREPROD DEV AND INT +CDam-usage-DEV.EMEA-PreProd: +- enabled: true +- namespace: "am-usage-dev" +- skipDeployment: "false" + +CDam-usage-INT.EMEA-PreProd: +- enabled: true +- namespace: "am-usage-int" +- skipDeployment: "false" + +CDam-usage-DEV.NA-PreProd: +- enabled: true +- namespace: "am-usage-dev" +- skipDeployment: "false" + +CDam-usage-INT.NA-PreProd: +- enabled: true +- namespace: "am-usage-int" +- skipDeployment: "false" + +CDam-usage-DEV.CN-PreProd: +- enabled: true +- namespace: "am-usage-dev" +- skipDeployment: "false" + +CDam-usage-INT.CN-PreProd: +- enabled: true +- namespace: "am-usage-int" +- skipDeployment: "false" diff --git a/yamo/projects/CD_am-usage/container-monitoring-rule/default.json b/yamo/projects/CD_am-usage/container-monitoring-rule/default.json new file mode 100644 index 00000000..c110080f --- /dev/null +++ b/yamo/projects/CD_am-usage/container-monitoring-rule/default.json @@ -0,0 +1,11 @@ +[{ + "schemaId": "builtin:container.monitoring-rule", + "scope": "environment", + "value": { + "enabled": "{{.enabled}}", + "mode": "MONITORING_ON", + "property": "KUBERNETES_NAMESPACE", + "value": "{{.namespace}}", + "operator": "EQUALS" + } +}] diff --git a/yamo/projects/CD_am-vas/container-monitoring-rule/container-monitoring-rule.yaml b/yamo/projects/CD_am-vas/container-monitoring-rule/container-monitoring-rule.yaml new file mode 100644 index 00000000..115225ab --- /dev/null +++ b/yamo/projects/CD_am-vas/container-monitoring-rule/container-monitoring-rule.yaml @@ -0,0 +1,67 @@ +config: +- CDam-vas-PROD: default.json +- CDam-vas-E2E: default.json +- CDam-vas-INT: default.json +- CDam-vas-DEV: default.json + +##PROD E2E and PROD (disabled) +CDam-vas-E2E.EMEA-Prod: +- enabled: true +- namespace: "am-vas-e2e" +- skipDeployment: "false" + +CDam-vas-PROD.EMEA-Prod: +- enabled: false +- namespace: "am-vas-prod" +- skipDeployment: "true" + +CDam-vas-E2E.NA-Prod: +- enabled: true +- namespace: "am-vas-e2e" +- skipDeployment: "false" + +CDam-vas-PROD.NA-Prod: +- enabled: false +- namespace: "am-vas-prod" +- skipDeployment: "true" + +CDam-vas-E2E.CN-Prod: +- enabled: true +- namespace: "am-vas-e2e" +- skipDeployment: "false" + +CDam-vas-PROD.CN-Prod: +- enabled: false +- namespace: "am-vas-prod" +- skipDeployment: "true" + +##PREPROD DEV AND INT +CDam-vas-DEV.EMEA-PreProd: +- enabled: true +- namespace: "am-vas-dev" +- skipDeployment: "false" + +CDam-vas-INT.EMEA-PreProd: +- enabled: true +- namespace: "am-vas-int" +- skipDeployment: "false" + +CDam-vas-DEV.NA-PreProd: +- enabled: true +- namespace: "am-vas-dev" +- skipDeployment: "false" + +CDam-vas-INT.NA-PreProd: +- enabled: true +- namespace: "am-vas-int" +- skipDeployment: "false" + +CDam-vas-DEV.CN-PreProd: +- enabled: true +- namespace: "am-vas-dev" +- skipDeployment: "false" + +CDam-vas-INT.CN-PreProd: +- enabled: true +- namespace: "am-vas-int" +- skipDeployment: "false" diff --git a/yamo/projects/CD_am-vas/container-monitoring-rule/default.json b/yamo/projects/CD_am-vas/container-monitoring-rule/default.json new file mode 100644 index 00000000..c110080f --- /dev/null +++ b/yamo/projects/CD_am-vas/container-monitoring-rule/default.json @@ -0,0 +1,11 @@ +[{ + "schemaId": "builtin:container.monitoring-rule", + "scope": "environment", + "value": { + "enabled": "{{.enabled}}", + "mode": "MONITORING_ON", + "property": "KUBERNETES_NAMESPACE", + "value": "{{.namespace}}", + "operator": "EQUALS" + } +}] diff --git a/yamo/projects/CD_b2v-com-fe/container-monitoring-rule/container-monitoring-rule.yaml b/yamo/projects/CD_b2v-com-fe/container-monitoring-rule/container-monitoring-rule.yaml new file mode 100644 index 00000000..5d018d5d --- /dev/null +++ b/yamo/projects/CD_b2v-com-fe/container-monitoring-rule/container-monitoring-rule.yaml @@ -0,0 +1,67 @@ +config: +- CDb2v-com-fe-PROD: default.json +- CDb2v-com-fe-E2E: default.json +- CDb2v-com-fe-INT: default.json +- CDb2v-com-fe-DEV: default.json + +##PROD E2E and PROD (disabled) +CDb2v-com-fe-E2E.EMEA-Prod: +- enabled: true +- namespace: "b2v-com-fe-e2e" +- skipDeployment: "false" + +CDb2v-com-fe-PROD.EMEA-Prod: +- enabled: false +- namespace: "b2v-com-fe-prod" +- skipDeployment: "true" + +CDb2v-com-fe-E2E.NA-Prod: +- enabled: true +- namespace: "b2v-com-fe-e2e" +- skipDeployment: "false" + +CDb2v-com-fe-PROD.NA-Prod: +- enabled: false +- namespace: "b2v-com-fe-prod" +- skipDeployment: "true" + +CDb2v-com-fe-E2E.CN-Prod: +- enabled: true +- namespace: "b2v-com-fe-e2e" +- skipDeployment: "false" + +CDb2v-com-fe-PROD.CN-Prod: +- enabled: false +- namespace: "b2v-com-fe-prod" +- skipDeployment: "true" + +##PREPROD DEV AND INT +CDb2v-com-fe-DEV.EMEA-PreProd: +- enabled: true +- namespace: "b2v-com-fe-dev" +- skipDeployment: "false" + +CDb2v-com-fe-INT.EMEA-PreProd: +- enabled: true +- namespace: "b2v-com-fe-int" +- skipDeployment: "false" + +CDb2v-com-fe-DEV.NA-PreProd: +- enabled: true +- namespace: "b2v-com-fe-dev" +- skipDeployment: "false" + +CDb2v-com-fe-INT.NA-PreProd: +- enabled: true +- namespace: "b2v-com-fe-int" +- skipDeployment: "false" + +CDb2v-com-fe-DEV.CN-PreProd: +- enabled: true +- namespace: "b2v-com-fe-dev" +- skipDeployment: "false" + +CDb2v-com-fe-INT.CN-PreProd: +- enabled: true +- namespace: "b2v-com-fe-int" +- skipDeployment: "false" diff --git a/yamo/projects/CD_b2v-com-fe/container-monitoring-rule/default.json b/yamo/projects/CD_b2v-com-fe/container-monitoring-rule/default.json new file mode 100644 index 00000000..c110080f --- /dev/null +++ b/yamo/projects/CD_b2v-com-fe/container-monitoring-rule/default.json @@ -0,0 +1,11 @@ +[{ + "schemaId": "builtin:container.monitoring-rule", + "scope": "environment", + "value": { + "enabled": "{{.enabled}}", + "mode": "MONITORING_ON", + "property": "KUBERNETES_NAMESPACE", + "value": "{{.namespace}}", + "operator": "EQUALS" + } +}] diff --git a/yamo/projects/CD_rsu-adapter/container-monitoring-rule/container-monitoring-rule.yaml b/yamo/projects/CD_rsu-adapter/container-monitoring-rule/container-monitoring-rule.yaml new file mode 100644 index 00000000..14151b25 --- /dev/null +++ b/yamo/projects/CD_rsu-adapter/container-monitoring-rule/container-monitoring-rule.yaml @@ -0,0 +1,67 @@ +config: +- CDrsu-adapter-PROD: default.json +- CDrsu-adapter-E2E: default.json +- CDrsu-adapter-INT: default.json +- CDrsu-adapter-DEV: default.json + +##PROD E2E and PROD (disabled) +CDrsu-adapter-E2E.EMEA-Prod: +- enabled: true +- namespace: "rsu-adapter-e2e" +- skipDeployment: "false" + +CDrsu-adapter-PROD.EMEA-Prod: +- enabled: false +- namespace: "rsu-adapter-prod" +- skipDeployment: "true" + +CDrsu-adapter-E2E.NA-Prod: +- enabled: true +- namespace: "rsu-adapter-e2e" +- skipDeployment: "false" + +CDrsu-adapter-PROD.NA-Prod: +- enabled: false +- namespace: "rsu-adapter-prod" +- skipDeployment: "true" + +CDrsu-adapter-E2E.CN-Prod: +- enabled: true +- namespace: "rsu-adapter-e2e" +- skipDeployment: "false" + +CDrsu-adapter-PROD.CN-Prod: +- enabled: false +- namespace: "rsu-adapter-prod" +- skipDeployment: "true" + +##PREPROD DEV AND INT +CDrsu-adapter-DEV.EMEA-PreProd: +- enabled: true +- namespace: "rsu-adapter-dev" +- skipDeployment: "false" + +CDrsu-adapter-INT.EMEA-PreProd: +- enabled: true +- namespace: "rsu-adapter-int" +- skipDeployment: "false" + +CDrsu-adapter-DEV.NA-PreProd: +- enabled: true +- namespace: "rsu-adapter-dev" +- skipDeployment: "false" + +CDrsu-adapter-INT.NA-PreProd: +- enabled: true +- namespace: "rsu-adapter-int" +- skipDeployment: "false" + +CDrsu-adapter-DEV.CN-PreProd: +- enabled: true +- namespace: "rsu-adapter-dev" +- skipDeployment: "false" + +CDrsu-adapter-INT.CN-PreProd: +- enabled: true +- namespace: "rsu-adapter-int" +- skipDeployment: "false" diff --git a/yamo/projects/CD_rsu-adapter/container-monitoring-rule/default.json b/yamo/projects/CD_rsu-adapter/container-monitoring-rule/default.json new file mode 100644 index 00000000..c110080f --- /dev/null +++ b/yamo/projects/CD_rsu-adapter/container-monitoring-rule/default.json @@ -0,0 +1,11 @@ +[{ + "schemaId": "builtin:container.monitoring-rule", + "scope": "environment", + "value": { + "enabled": "{{.enabled}}", + "mode": "MONITORING_ON", + "property": "KUBERNETES_NAMESPACE", + "value": "{{.namespace}}", + "operator": "EQUALS" + } +}] diff --git a/yamo/projects/environment.yaml b/yamo/projects/environment.yaml new file mode 100644 index 00000000..7e320b65 --- /dev/null +++ b/yamo/projects/environment.yaml @@ -0,0 +1,16 @@ +EMEA-PreProd: + - name: "EMEA-PreProd" + - env-url: "https://qqk70169.live.dynatrace.com/" + - env-token-name: "EUPREPROD_TOKEN_VAR" +NA-PreProd: + - name: "NA-PreProd" + - env-url: "https://onb44935.live.dynatrace.com/" + - env-token-name: "NAPREPROD_TOKEN_VAR" +naprod: + - name: "naprod" + - env-url: "https://wgv50241.live.dynatrace.com" + - env-token-name: "NAPROD_TOKEN_VAR" +euprod: + - name: "euprod" + - env-url: "https://xxu26128.live.dynatrace.com" + - env-token-name: "EUPROD_TOKEN_VAR" diff --git a/yamo/rest/RestCall.py b/yamo/rest/RestCall.py new file mode 100644 index 00000000..b312dc78 --- /dev/null +++ b/yamo/rest/RestCall.py @@ -0,0 +1,92 @@ +import json +import re +import requests +import coloredlogs, logging +from Options import Options + +class RestCall: + + setting={} + + logger = logging.getLogger("yamo") + + def validate(self): + pass + + def skip(self,execConfigValue): + skip=False + for x in execConfigValue: + if 'skipDeployment' in x: + if x['skipDeployment'] == 'true': + skip=True + return skip + + def execByEnv(self, env): + self.__exec(env) + + def exec(self): + if Options.getInstance().env: + self.execByEnv(Options.getInstance().env) + else: + self.execAll() + + def execAll(self): + for env, setting in self.setting.items(): + self.__exec(env) + + def __exec(self,env): + #print(env) + #context= Context.getInstance() + self.logger.debug("try to execute "+self.name+ " for Evironment "+ env) + variabledBody = self.setting[env] + for vb in variabledBody: + compiledBody = self.__compileBody(vb) + + envObj = self.context.getEnvironment(env) + url=envObj.env_url+self.endpoint + headers = {'Content-type': 'application/json', 'Authorization': 'Api-Token '+ envObj.token} + + self.logger.debug("Rest body: "+compiledBody) + response = requests.post(url, headers=headers, data=compiledBody) + #self.logger.debug(response.text) + + if response.status_code != 200: + self.logger.error(self.name+" Env: "+env+ " [Failed]" ) + self.logger.error(response.text ) + raise Exception(response.text) + else: + self.logger.info(self.name+" Env: "+env+" [SUCCESS]") + + + #for key, value in self.setting.items(): + # print(key) + #if not self.skip(value): + # print() + #print(value) + + #def __getVariable(self,variables,name): + + def __compileBody(self, variabledBody): + variables=json.dumps(variabledBody['variables']) + plainBody=json.dumps(variabledBody['body']) + matches = re.findall("\{\{.([a-zA-Z]*)\}\}", plainBody) + + + for m in matches: + v = re.findall('"'+m+'": ([^}]*)', variables) + plainBody=plainBody.replace('"{{.'+m+'}}"',v[0]) + + return plainBody + + + def call(self): + print("Calling rest: "+ self.name) + + def __init__(self, name, restConfig, executionConfig,context): + self.name=name + self.endpoint=restConfig["endpoint"] + self.schema=restConfig["schema"] + self.setting=executionConfig + self.context=context + #self.execConfig=execConfig + diff --git a/yamo/rest/RestFactory.py b/yamo/rest/RestFactory.py new file mode 100644 index 00000000..e5c2135f --- /dev/null +++ b/yamo/rest/RestFactory.py @@ -0,0 +1,62 @@ +import json +import yaml +from rest.RestCall import RestCall +from context.Context import Context +import coloredlogs, logging + +logger = logging.getLogger(__name__) + +class RestFactory: + + #def buildRequests(self, name, requestConfig, body): + + def __readBodies(self,execConfig, restPath): + bodies={} + for setting in execConfig['config']: + for key, value in setting.items(): + body=json.load(open(restPath+"/"+value)) + bodies[key]=body + + return bodies + + def __mapExecutionConfig(self, restName,projectRootPath): + #execConfig=self.readExecutionConfig(projectRootPath+"/"+restName+"/"+restName+".yaml") + mappedExecConfig={} + + executionConfigFilePath=projectRootPath+"/"+restName+"/"+restName+".yaml" + executionConfigFile=open(executionConfigFilePath) + execConfig=yaml.safe_load(executionConfigFile) + bodies = self.__readBodies(execConfig,projectRootPath+"/"+restName) + del execConfig['config'] + + for key, values in execConfig.items(): + envSplit = key.split('.') + if len(envSplit) > 1: + if envSplit[1] not in mappedExecConfig: + mappedExecConfig[envSplit[1]]=[] + + tmpObj= {} + #tmpBody = bodies[envSplit[0]] + #tmpBody['__yamo__values'] = values + tmpObj['variables']=values + tmpObj['body']=bodies[envSplit[0]] + mappedExecConfig[envSplit[1]].append(tmpObj) + else: + self.logger.warning("Missing Environment config for "+key+" in "+executionConfigFilePath+", will be ignored") + + return mappedExecConfig + + def getRest(self,restName, projectRootPath): + try: + #execConfig=self.readExecutionConfig(projectRootPath+"/"+name+"/"+name+".yaml") + mappedExecConfig = self.__mapExecutionConfig(restName, projectRootPath) + return RestCall(restName, self.data[restName], mappedExecConfig,Context.getInstance()) + except: + return None + + def readRestConfig(self, pathToRestConfig): + f = open(pathToRestConfig,) + self.data=json.load(f) + + def __init__(self, pathToRestConfig): + self.readRestConfig(pathToRestConfig) \ No newline at end of file diff --git a/yamo/restConfig.json b/yamo/restConfig.json new file mode 100644 index 00000000..f06ce188 --- /dev/null +++ b/yamo/restConfig.json @@ -0,0 +1,17 @@ +{ + + "container-monitoring-rule": { + "endpoint": "api/v2/settings/objects", + "schema": { + "type": "object", + "properties": { + "price": { + "type": "number" + }, + "name": { + "type": "string" + } + } + } + } +} \ No newline at end of file diff --git a/yamo/templates/applist.txt b/yamo/templates/applist.txt new file mode 100644 index 00000000..9b241577 --- /dev/null +++ b/yamo/templates/applist.txt @@ -0,0 +1,8 @@ +am-casa +am-usage +am-ecs +am-store +rsu-adapter +b2v-com-fe +am-vas +am-cnr diff --git a/yamo/templates/project/container-monitoring-rule/container-monitoring-rule.yaml b/yamo/templates/project/container-monitoring-rule/container-monitoring-rule.yaml new file mode 100644 index 00000000..fe01aaab --- /dev/null +++ b/yamo/templates/project/container-monitoring-rule/container-monitoring-rule.yaml @@ -0,0 +1,67 @@ +config: +- CD#project#-PROD: default.json +- CD#project#-E2E: default.json +- CD#project#-INT: default.json +- CD#project#-DEV: default.json + +##PROD E2E and PROD (disabled) +CD#project#-E2E.EMEA-Prod: +- enabled: true +- namespace: "#project#-e2e" +- skipDeployment: "false" + +CD#project#-PROD.EMEA-Prod: +- enabled: false +- namespace: "#project#-prod" +- skipDeployment: "true" + +CD#project#-E2E.NA-Prod: +- enabled: true +- namespace: "#project#-e2e" +- skipDeployment: "false" + +CD#project#-PROD.NA-Prod: +- enabled: false +- namespace: "#project#-prod" +- skipDeployment: "true" + +CD#project#-E2E.CN-Prod: +- enabled: true +- namespace: "#project#-e2e" +- skipDeployment: "false" + +CD#project#-PROD.CN-Prod: +- enabled: false +- namespace: "#project#-prod" +- skipDeployment: "true" + +##PREPROD DEV AND INT +CD#project#-DEV.EMEA-PreProd: +- enabled: true +- namespace: "#project#-dev" +- skipDeployment: "false" + +CD#project#-INT.EMEA-PreProd: +- enabled: true +- namespace: "#project#-int" +- skipDeployment: "false" + +CD#project#-DEV.NA-PreProd: +- enabled: true +- namespace: "#project#-dev" +- skipDeployment: "false" + +CD#project#-INT.NA-PreProd: +- enabled: true +- namespace: "#project#-int" +- skipDeployment: "false" + +CD#project#-DEV.CN-PreProd: +- enabled: true +- namespace: "#project#-dev" +- skipDeployment: "false" + +CD#project#-INT.CN-PreProd: +- enabled: true +- namespace: "#project#-int" +- skipDeployment: "false" diff --git a/yamo/templates/project/container-monitoring-rule/default.json b/yamo/templates/project/container-monitoring-rule/default.json new file mode 100644 index 00000000..c110080f --- /dev/null +++ b/yamo/templates/project/container-monitoring-rule/default.json @@ -0,0 +1,11 @@ +[{ + "schemaId": "builtin:container.monitoring-rule", + "scope": "environment", + "value": { + "enabled": "{{.enabled}}", + "mode": "MONITORING_ON", + "property": "KUBERNETES_NAMESPACE", + "value": "{{.namespace}}", + "operator": "EQUALS" + } +}] diff --git a/yamo/tokenStore/AbstractTokenStore.py b/yamo/tokenStore/AbstractTokenStore.py new file mode 100644 index 00000000..cf93fb4e --- /dev/null +++ b/yamo/tokenStore/AbstractTokenStore.py @@ -0,0 +1,19 @@ +from abc import ABC, abstractmethod + +class AbstractTokenStore(ABC): + + __tokenCache={} + + def get(self, tokenName): + if tokenName not in self.__tokenCache: + self.__tokenCache[tokenName] = self._getToken(tokenName) + + if self.__tokenCache[tokenName] is None: + print("WARNING: Token: "+tokenName+" could not be resolved!") + return "" + + return self.__tokenCache[tokenName] + + @abstractmethod + def _getToken(self, name): + pass \ No newline at end of file diff --git a/yamo/tokenStore/EnvTokenStore.py b/yamo/tokenStore/EnvTokenStore.py new file mode 100644 index 00000000..386cccf0 --- /dev/null +++ b/yamo/tokenStore/EnvTokenStore.py @@ -0,0 +1,11 @@ +import os +from tokenStore.AbstractTokenStore import AbstractTokenStore +from dotenv import load_dotenv + +class EnvTokenStore(AbstractTokenStore): + + def _getToken(self, name): + return os.getenv(name) + + def __init__(self): + load_dotenv() \ No newline at end of file diff --git a/yamo/yamo.py b/yamo/yamo.py new file mode 100644 index 00000000..1a1c5e3b --- /dev/null +++ b/yamo/yamo.py @@ -0,0 +1,102 @@ +from decouple import config + +import sys, getopt + +#import configBuilder +from context.Context import Context +#from Executer import Executer +from rest.RestFactory import RestFactory +from environment.YamlEnvReader import YamlEnvReader +from ProjectList import ProjectList +from tokenStore.EnvTokenStore import EnvTokenStore + +import coloredlogs, logging +from Report.ReportPrinter import ReportPrinter +from Report.ConsolePrinter import ConsolePrinter +from Options import Options +#, ConsolePrinter + +def printLogo(): + print(r""" + ___ ___ ________ _____ ______ ________ + |\ \ / /|\ __ \|\ _ \ _ \|\ __ \ + \ \ \/ / | \ \|\ \ \ \\\__\ \ \ \ \|\ \ + \ \ / / \ \ __ \ \ \\|__| \ \ \ \\\ \ + \/ / / \ \ \ \ \ \ \ \ \ \ \ \\\ \ + __/ / / \ \__\ \__\ \__\ \ \__\ \_______\ +|\___/ / \|__|\|__|\|__| \|__|\|_______| +\|___|/ + +""") + + +def printHelp(): + printLogo() + print("yamo.py -i -p -e -r ") + +def main(argv): + + options=Options.getInstance() + + pathToProjects = '.' + try: + opts, args = getopt.getopt(argv,"h:i:p:e:r:l:v",["help","iPath","project", "environment", "restcall","logLevel"]) + except getopt.GetoptError: + printHelp() + sys.exit(2) + for opt, arg in opts: + if opt in ('-h',"--help"): + printHelp + sys.exit() + elif opt in ("-i", "--iPath"): + options.pathToProjects = arg + elif opt in ("-p", "--project"): + options.project=arg + elif opt in ("-e", "--environment"): + options.env=arg + elif opt in ("-r", "--restcall"): + options.restCall=arg + elif opt in ("-l", "--logLevel"): + options.loglevel=arg + + + + try: + printLogo() + + logger = logging.getLogger(__name__) + coloredlogs.install(level=options.loglevel) + #logger.debug("this is a debugging message") + + tokenStore=EnvTokenStore() + #print(tokenStoreX.get('NTTDATA-Api-Token')) + + pathToRestConfig="restConfig.json" + restFactory = RestFactory(pathToRestConfig) + + pathToEnvironmentFile=options.pathToProjects+"/environment.yaml" + envReader = YamlEnvReader(pathToEnvironmentFile, tokenStore) + + context = Context.getInstance() + context.build(restFactory,envReader) + + pList=ProjectList(options.pathToProjects) + pList.exec() + #if options.project: + # pList.execProject(options.project) + #else: + # pList.execAll() + + #rp = ReportPrinter(pList) + #rp.append(ConsolePrinter()) + + #rp.print() + + + except: + raise + # print("Exception occured during yammo processing: ", sys.exc_info()[1]) + + +if __name__ == "__main__": + main(sys.argv[1:])