#!/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")