commit 847d48cf86328a4671415d0e1fe38563e2220107 Author: Rene Forstner Date: Tue Feb 28 08:36:53 2023 +0100 init diff --git a/src/__pycache__/createTFFiles.cpython-311.pyc b/src/__pycache__/createTFFiles.cpython-311.pyc new file mode 100644 index 0000000..1707527 Binary files /dev/null and b/src/__pycache__/createTFFiles.cpython-311.pyc differ diff --git a/src/createTFFiles.py b/src/createTFFiles.py new file mode 100644 index 0000000..bfa8b26 --- /dev/null +++ b/src/createTFFiles.py @@ -0,0 +1,73 @@ +import yaml +from jinja2 import Environment, FileSystemLoader, select_autoescape +from helper import osInterface +import re +import pandas as pd + + +#CHECKOUT shared_config +#CHECKOUT terraform_config + +#load + +def load_yaml(path): + try: + with open(path) as file: + yaml_doc = yaml.safe_load(file) + return yaml_doc + except Exception as e: + print('Could not open YAML file %s' % e) + +def store_terraform_keyrequest_files(terraform, filename): + with open('./'+filename,'a') as file: + file.write(terraform + '\n') + + +def main(): + yamls = osInterface.findYAML('../../shared_configuration/') + df = pd.DataFrame() + df_visual = pd.DataFrame() + + env = Environment( + loader=FileSystemLoader('../terraform_templates/') + ) + + for f in yamls: + slo = load_yaml(f) + try: + for sloDefinition in slo["slo_definition"]['EMEA-Prod']: + for service in sloDefinition["filter"]: + #print(service) + for req in service["keyRequests"]: + df = pd.concat([df,pd.DataFrame({'service_name':service["service"],'key_req': req},index=[0])],ignore_index=True) + df_visual = pd.concat([df_visual,pd.DataFrame({'service_name':service["service"],'key_req': req,'SLO':slo["slo_name"]},index=[0])],ignore_index=True) + except: + print("not a valid slo file: " + f +", next...") + + + df = df.drop_duplicates() + + + for name in pd.unique(df["service_name"]): + + svc = {'service_name':re.sub('[^a-zA-Z0-9]','_',name), + 'service_raw_name':name + } + + template = env.get_template('dynatrace_service_data.tf') + terraform = template.render(key_request = svc) + store_terraform_keyrequest_files(terraform,'services_data.tf') + + grouped = df.groupby('service_name') + + for name, group in grouped: + key_req = {'service_name':re.sub('[^a-zA-Z0-9]','_',name), + 'service_raw_name':name, + 'keyRequests': group["key_req"].values + } + + template = env.get_template('dynatrace_key_request.tf') + terraform = template.render(key_request = key_req) + store_terraform_keyrequest_files(terraform,'key_requests.tf') + +main() \ No newline at end of file diff --git a/src/helper/__pycache__/osInterface.cpython-311.pyc b/src/helper/__pycache__/osInterface.cpython-311.pyc new file mode 100644 index 0000000..34c357f Binary files /dev/null and b/src/helper/__pycache__/osInterface.cpython-311.pyc differ diff --git a/src/helper/gitInterface.py b/src/helper/gitInterface.py new file mode 100644 index 0000000..ed1eaff --- /dev/null +++ b/src/helper/gitInterface.py @@ -0,0 +1,19 @@ +from git import Repo +#import os + + +def clone_repo_if_notexist(repourl, reponame): + if(not os.path.isdir(reponame)): + repo = Repo.clone_from(repourl, reponame) + return repo + return Repo(reponame) + +def pull_repo(repo): + origin = repo.remotes.origin + origin.pull() + +def push_repo(repo, message): + repo.git.add(all=True) + repo.index.commit(message) + origin = repo.remotes.origin + origin.push() \ No newline at end of file diff --git a/src/helper/osInterface.py b/src/helper/osInterface.py new file mode 100644 index 0000000..cdc5653 --- /dev/null +++ b/src/helper/osInterface.py @@ -0,0 +1,11 @@ +import os + +def findYAML(path: str): + files = [] + + for dirpath, dirnames, filenames in os.walk(path): + for filename in [f for f in filenames if f.endswith(".yaml")]: + yield os.path.join(dirpath, filename) + #files.append(os.path.join(dirpath, filename)) + + #return files \ No newline at end of file diff --git a/src/key_requests.tf b/src/key_requests.tf new file mode 100644 index 0000000..672786b --- /dev/null +++ b/src/key_requests.tf @@ -0,0 +1,30 @@ +resource "dynatrace_key_requests" "Netty_on_0_0_0_0_8080___eroute_adapter___prod" { + names = ["/route/eroute"] + service = data.dynatrace_service.Netty_on_0_0_0_0_8080___eroute_adapter___prod.id +} + +resource "dynatrace_key_requests" "Netty_on_0_0_0_0_8080___eroute_ext___prod" { + names = ["/api/eu/2.5/eroute/protobuf3","/api/eu/2.5/eroute-costs/protobuf3"] + service = data.dynatrace_service.Netty_on_0_0_0_0_8080___eroute_ext___prod.id +} + +resource "dynatrace_key_requests" "Netty_on_0_0_0_0_8080___rtti___prod" { + names = ["/api/default","/api/tw","/api/ru","/api/au","/api/sea","/api/br","/api/mx","/api/za","/api/tw-mgu21","/api/nz","/api/ae","/api/kw"] + service = data.dynatrace_service.Netty_on_0_0_0_0_8080___rtti___prod.id +} + +resource "dynatrace_key_requests" "POIs" { + names = ["getPOIs (FTS Calls)"] + service = data.dynatrace_service.POIs.id +} + +resource "dynatrace_key_requests" "SimplePOIs" { + names = ["getSimplePOIs (FTS Calls)"] + service = data.dynatrace_service.SimplePOIs.id +} + +resource "dynatrace_key_requests" "TripService___PROD" { + names = ["/v2/motorist/[UUID]/trips","/v3/motorist/[UUID]/trips"] + service = data.dynatrace_service.TripService___PROD.id +} + diff --git a/src/services_data.tf b/src/services_data.tf new file mode 100644 index 0000000..56d940c --- /dev/null +++ b/src/services_data.tf @@ -0,0 +1,30 @@ +data "dynatrace_service" "Netty_on_0_0_0_0_8080___rtti___prod" { + name = "Netty on 0.0.0.0:8080 - rtti - prod" + tags = ["Environment=PROD"] +} + +data "dynatrace_service" "Netty_on_0_0_0_0_8080___eroute_ext___prod" { + name = "Netty on 0.0.0.0:8080 - eroute-ext - prod" + tags = ["Environment=PROD"] +} + +data "dynatrace_service" "Netty_on_0_0_0_0_8080___eroute_adapter___prod" { + name = "Netty on 0.0.0.0:8080 - eroute-adapter - prod" + tags = ["Environment=PROD"] +} + +data "dynatrace_service" "TripService___PROD" { + name = "TripService - PROD" + tags = ["Environment=PROD"] +} + +data "dynatrace_service" "SimplePOIs" { + name = "SimplePOIs" + tags = ["Environment=PROD"] +} + +data "dynatrace_service" "POIs" { + name = "POIs" + tags = ["Environment=PROD"] +} + diff --git a/terraform_templates/dynatrace_key_request.tf b/terraform_templates/dynatrace_key_request.tf new file mode 100644 index 0000000..2010b20 --- /dev/null +++ b/terraform_templates/dynatrace_key_request.tf @@ -0,0 +1,5 @@ +resource "dynatrace_key_requests" "{{ key_request.service_name }}" { + names = [{% for req in key_request.keyRequests %}"{{ req }}"{%if not loop.last %},{% endif %}{% endfor %}] + service = data.dynatrace_service.{{ key_request.service_name }}.id +} + diff --git a/terraform_templates/dynatrace_service_data.tf b/terraform_templates/dynatrace_service_data.tf new file mode 100644 index 0000000..83fb0c6 --- /dev/null +++ b/terraform_templates/dynatrace_service_data.tf @@ -0,0 +1,4 @@ +data "dynatrace_service" "{{ key_request.service_name }}" { + name = "{{ key_request.service_raw_name }}" + tags = ["Environment=PROD"] +} \ No newline at end of file