72 lines
2.5 KiB
Python
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")
|