coco_apm_dynatrace_terrafor.../export.py

72 lines
2.5 KiB
Python

#!/usr/bin/python
import os
import subprocess
import sys
import time
import shutil
import hcl
from dotenv import load_dotenv
from decouple import config
from glob import glob
import yaml
def setEnv(doc, timestamp, configuration):
os.environ['DYNATRACE_ENV_URL'] = dict(doc[1]).get("env-url")
os.environ['DYNATRACE_API_TOKEN'] = config(dict(doc[2])
.get("env-token-name"))
os.environ['DYNATRACE_TARGET_FOLDER'] = str(dict(doc[4]).get("output-dir")
+ timestamp + "_"
+ dict(doc[0]).get("name")
+ configuration)
return os.environ
def runProcess(process_name, input_params):
process_names = ["Export", "Terraform init"]
success = False
try:
process = subprocess.Popen(input_params)
process.wait(timeout=60*10) # 10 minutes
success = True
print("[DEBUG]", "Process:", process_name, "Success:", success)
except subprocess.TimeoutExpired:
print("[DEBUG]", "Exception occured:", subprocess.TimeoutExpired)
print("[DEBUG]", "Killing process:", process_name)
process.kill()
success = False
print("[DEBUG]", "Process:", process_name, "Success:", success)
except:
if process_name in process_names and success == False:
print("[DEBUG]", "Process:", process_name, "Success:", success)
print("[DEBUG]", "Exiting program.")
process.kill()
success = False
sys.exit(1)
else:
print("[FAILED]", input_params)
if __name__ == "__main__":
if(len(sys.argv) == 1):
with open(os.path.basename("./tf-provider-config.yaml")) as tf_cfg:
tf_config = yaml.safe_load(tf_cfg)
bin = os.path.join(str(tf_config.get('directory')),
str(tf_config.get('executable')))
timestamp = time.strftime("%Y%m%d-%H%M%S")
with open(os.path.basename("./env-config.yaml")) as env_cfg:
env_config = yaml.safe_load(env_cfg)
for item, doc in env_config.items():
setEnv(doc, timestamp, "_configurations")
runProcess("Export", [bin, "-export", "-id"])
setEnv(doc, timestamp, "_dashboards")
runProcess("Export", [bin, "-export", "-id", "dynatrace_dashboard"])
print("Finished!")
else:
print("Usage example: ")
print("python3 .\export.py")