master
Rene Forstner 2023-02-28 08:36:53 +01:00
commit 847d48cf86
9 changed files with 172 additions and 0 deletions

Binary file not shown.

73
src/createTFFiles.py Normal file
View File

@ -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()

Binary file not shown.

View File

@ -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()

11
src/helper/osInterface.py Normal file
View File

@ -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

30
src/key_requests.tf Normal file
View File

@ -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
}

30
src/services_data.tf Normal file
View File

@ -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"]
}

View File

@ -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
}

View File

@ -0,0 +1,4 @@
data "dynatrace_service" "{{ key_request.service_name }}" {
name = "{{ key_request.service_raw_name }}"
tags = ["Environment=PROD"]
}