Skip to content
This repository was archived by the owner on Sep 22, 2024. It is now read-only.

Commit ab13227

Browse files
authored
Merge pull request #9 from dynatrace-api-framework/test
Propogating to Master
2 parents 57eea0b + 5f770bc commit ab13227

File tree

11 files changed

+92
-50
lines changed

11 files changed

+92
-50
lines changed

Pipfile

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ verify_ssl = true
55

66
[dev-packages]
77
pylint = "*"
8+
autopep8 = "*"
89

910
[packages]
1011
requests = "*"

Pipfile.lock

+15-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

change_variables.py

+19-9
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
"""Replace active variables with another set"""
2-
import sys
2+
from platform import system
3+
import argparse
34
import os
45

5-
def replace_env():
6+
def replace_set(set_file):
67
"""Replace Variable File"""
7-
print("Enter Set to Import: ", end='')
8-
new_env = input()
9-
10-
if "windows" in sys.platform:
11-
os.system("copy variable_sets\\" + str(new_env) + ".py user_variables.py")
8+
# Options are Darwin, Linux, Java and Windows. Java not supported
9+
if "Windows" in system():
10+
os.system("copy variable_sets\\" + str(set_file) + ".py user_variables.py")
1211
else:
13-
os.system("cp variable_sets/" + str(new_env) + ".py user_variables.py")
12+
os.system("cp variable_sets/" + str(set_file) + ".py user_variables.py")
13+
14+
def get_variable_set_file(variable_set_arg):
15+
"""Checks if the set file was provided via arg else prompt"""
16+
if variable_set_arg:
17+
return variable_set_arg
18+
return input("Enter Set to Import: ")
1419

15-
replace_env()
20+
if __name__ == '__main__':
21+
parser = argparse.ArgumentParser()
22+
parser.add_argument('--set-file', '-s')
23+
args = parser.parse_args()
24+
set_file = get_variable_set_file(args.set_file)
25+
replace_set(set_file)

dynatrace/cluster/sso.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"""SSO Operations for Dynatrace"""
22
import dynatrace.requests.request_handler as rh
33

4+
ENDPOINT = "sso/ssoProvider"
5+
46
def disable_sso (cluster):
57
"""Disable SSO Sign-in"""
68
disable_payload = {
@@ -10,7 +12,7 @@ def disable_sso (cluster):
1012
"ssoGroupsEnabled": False,
1113
"ssoLoginDisabled": True
1214
}
13-
response = rh.cluster_post(cluster, "sso/ssoProvider", json=disable_payload)
15+
response = rh.cluster_post(cluster, ENDPOINT, json=disable_payload)
1416
return response.status_code
1517

1618
def enable_sso(cluster, disable_local=False, groups_enabled=False, is_openid=False):
@@ -30,9 +32,9 @@ def enable_sso(cluster, disable_local=False, groups_enabled=False, is_openid=Fal
3032
if is_openid:
3133
enable_payload['ssoProvider'] = "OIDC"
3234

33-
response = rh.cluster_post(cluster, "sso/ssoProvider", json=enable_payload)
35+
response = rh.cluster_post(cluster, ENDPOINT, json=enable_payload)
3436
return response.status_code
3537

3638
def get_sso_status (cluster):
37-
response = rh.cluster_get(cluster, "sso/ssoProvider")
39+
response = rh.cluster_get(cluster, ENDPOINT)
3840
return response.json()

dynatrace/cluster/user_groups.py

-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ def delete_app_groups (cluster, app_name):
6363
cluster,
6464
"groups/" + group_id
6565
)
66-
return
6766

6867
def delete_app_groups_setwide(app_name):
6968
"""Create Dynatrace User Groups for Applications"""

dynatrace/requests/request_handler.py

+18-13
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
import requests
55
from urllib3.exceptions import InsecureRequestWarning
66

7+
HTTPS_STR = "https://"
8+
CLUSTER_V1_PATH = "/api/v1.0/onpremise/"
9+
ENV_API_V1 = "/api/v1/"
10+
CONFIG_API_V1 = "/api/config/v1/"
11+
712
OLD_MERGE_ENVIRONMENT_SETTINGS = requests.Session.merge_environment_settings
813

914
@contextlib.contextmanager
@@ -55,7 +60,7 @@ def sanitize_endpoint (endpoint):
5560

5661
def generate_tenant_url(cluster, tenant):
5762
"""Generate URL based on SaaS or Managed"""
58-
url = "https://"
63+
url = HTTPS_STR
5964
if cluster["is_managed"]:
6065
url = url + cluster['url'] + "/e/" + cluster['tenant'][tenant]
6166
else:
@@ -75,7 +80,7 @@ def cluster_get(cluster, endpoint, params=None):
7580
params['Api-Token'] = cluster['cluster_token']
7681

7782
response = requests.get(
78-
"https://" + cluster['url'] + "/api/v1.0/onpremise/" + endpoint,
83+
HTTPS_STR + cluster['url'] + CLUSTER_V1_PATH + endpoint,
7984
params=params,
8085
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"])
8186
)
@@ -96,7 +101,7 @@ def cluster_post(cluster, endpoint, params=None, json=None):
96101
params['Api-Token'] = cluster['cluster_token']
97102

98103
response = requests.post(
99-
"https://" + cluster['url'] + "/api/v1.0/onpremise/" + endpoint,
104+
HTTPS_STR + cluster['url'] + CLUSTER_V1_PATH + endpoint,
100105
params=params,
101106
json=json,
102107
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"])
@@ -117,7 +122,7 @@ def cluster_put(cluster, endpoint, params=None, json=None):
117122
params['Api-Token'] = cluster['cluster_token']
118123

119124
response = requests.put(
120-
"https://" + cluster['url'] + "/api/v1.0/onpremise/" + endpoint,
125+
HTTPS_STR + cluster['url'] + CLUSTER_V1_PATH + endpoint,
121126
params=params,
122127
json=json,
123128
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"])
@@ -137,7 +142,7 @@ def cluster_delete(cluster, endpoint, params=None, json=None):
137142
with no_ssl_verification():
138143
params['Api-Token'] = cluster['cluster_token']
139144
response = requests.delete(
140-
"https://" + cluster['url'] + "/api/v1.0/onpremise/" + endpoint,
145+
HTTPS_STR + cluster['url'] + CLUSTER_V1_PATH + endpoint,
141146
params=params,
142147
json=json,
143148
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"])
@@ -155,7 +160,7 @@ def env_get(cluster, tenant, endpoint, params=None):
155160
with no_ssl_verification():
156161
params['Api-Token'] = cluster['api_token'][tenant]
157162
response = requests.get(
158-
generate_tenant_url(cluster, tenant) + "/api/v1/" + endpoint,
163+
generate_tenant_url(cluster, tenant) + ENV_API_V1 + endpoint,
159164
params=params,
160165
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"])
161166
)
@@ -173,7 +178,7 @@ def env_post(cluster, tenant, endpoint, params=None, json=None):
173178
params['Api-Token'] = cluster['api_token'][tenant]
174179

175180
response = requests.post(
176-
generate_tenant_url(cluster, tenant) + "/api/v1/" + endpoint,
181+
generate_tenant_url(cluster, tenant) + ENV_API_V1 + endpoint,
177182
params=params,
178183
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"]),
179184
json=json
@@ -192,7 +197,7 @@ def env_put(cluster, tenant, endpoint, params=None, json=None):
192197
params['Api-Token'] = cluster['api_token'][tenant]
193198

194199
response = requests.put(
195-
generate_tenant_url(cluster, tenant) + "/api/v1/" + endpoint,
200+
generate_tenant_url(cluster, tenant) + ENV_API_V1 + endpoint,
196201
params=params,
197202
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"]),
198203
json=json
@@ -210,7 +215,7 @@ def env_delete(cluster, tenant, endpoint, params=None):
210215
with no_ssl_verification():
211216
params['Api-Token'] = cluster['api_token'][tenant]
212217
response = requests.delete(
213-
generate_tenant_url(cluster, tenant) + "/api/v1/" + endpoint,
218+
generate_tenant_url(cluster, tenant) + ENV_API_V1 + endpoint,
214219
params=params,
215220
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"])
216221
)
@@ -229,7 +234,7 @@ def config_get(cluster, tenant, endpoint, params=None, json=None):
229234
params['Api-Token'] = cluster['api_token'][tenant]
230235

231236
response = requests.get(
232-
generate_tenant_url(cluster, tenant) + "/api/config/v1/" + endpoint,
237+
generate_tenant_url(cluster, tenant) + CONFIG_API_V1 + endpoint,
233238
params=params,
234239
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"]),
235240
json=json
@@ -248,7 +253,7 @@ def config_post(cluster, tenant, endpoint, params=None, json=None):
248253
params['Api-Token'] = cluster['api_token'][tenant]
249254

250255
response = requests.post(
251-
generate_tenant_url(cluster, tenant) + "/api/config/v1/" + endpoint,
256+
generate_tenant_url(cluster, tenant) + CONFIG_API_V1 + endpoint,
252257
params=params,
253258
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"]),
254259
json=json
@@ -267,7 +272,7 @@ def config_put(cluster, tenant, endpoint, params=None, json=None):
267272
params['Api-Token'] = cluster['api_token'][tenant]
268273

269274
response = requests.put(
270-
generate_tenant_url(cluster, tenant) + "/api/config/v1/" + endpoint,
275+
generate_tenant_url(cluster, tenant) + CONFIG_API_V1 + endpoint,
271276
params=params,
272277
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"]),
273278
json=json
@@ -286,7 +291,7 @@ def config_delete(cluster, tenant, endpoint, params=None, json=None):
286291
params['Api-Token'] = cluster['api_token'][tenant]
287292

288293
response = requests.delete(
289-
generate_tenant_url(cluster, tenant) + "/api/config/v1/" + endpoint,
294+
generate_tenant_url(cluster, tenant) + CONFIG_API_V1 + endpoint,
290295
params=params,
291296
verify=(True if "verify_ssl" not in cluster else cluster ["verify_ssl"]),
292297
json=json

dynatrace/tenant/maintenance.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import dynatrace.requests.request_handler as rh
55
import user_variables as uv
66

7+
8+
MZ_ENDPOINT = "/maintenanceWindows/"
9+
710
class InvalidDateFormatException(ValueError):
811
def __init__(self, required_format):
912
self.required_format = required_format
@@ -113,28 +116,28 @@ def generate_schedule(recurrence_type, start_time, duration, range_start, range_
113116

114117
def create_window (cluster, tenant, json):
115118
"""Create Maintenance Window"""
116-
response = rh.config_post(cluster, tenant, '/maintenanceWindows', json=json)
119+
response = rh.config_post(cluster, tenant, MZ_ENDPOINT, json=json)
117120
return response.status_code
118121

119122
def update_window (cluster, tenant, window_id, json):
120123
"""Update Maintenance Window"""
121-
response = rh.config_put(cluster, tenant, '/maintenanceWindows/' + window_id, json=json)
124+
response = rh.config_put(cluster, tenant, MZ_ENDPOINT + window_id, json=json)
122125
return response.status_code
123126

124127
def delete_window (cluster, tenant, window_id):
125128
"""Delete Maintenance Window"""
126-
response = rh.config_delete(cluster, tenant, '/maintenanceWindows/' + window_id)
129+
response = rh.config_delete(cluster, tenant, MZ_ENDPOINT + window_id)
127130
return response.status_code
128131

129132
def get_windows (cluster, tenant):
130133
"""Return List of Maintenance Windows in Effect"""
131-
response = rh.config_get(cluster, tenant, '/maintenanceWindows')
134+
response = rh.config_get(cluster, tenant, MZ_ENDPOINT)
132135
return response.json()
133136

134137

135138
def get_window (cluster, tenant, window_id):
136139
"""Return Maintenance Window Details"""
137-
response = rh.config_get(cluster, tenant, '/maintenanceWindows/' + window_id)
140+
response = rh.config_get(cluster, tenant, MZ_ENDPOINT + window_id)
138141
return response.json()
139142

140143
def parse_tag(tag_string):

dynatrace/tenant/request_attributes.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import json
44
from dynatrace.requests import request_handler as rh
55

6+
ENDPOINT = "/service/requestAttributes/"
7+
68
def pull_to_files(cluster, tenant, ignore_disabled=True):
79
"""Pull files from an environment to local"""
810
# API Calls needed: Pull RA, take the ID and pull the details of each RA
9-
all_ra_call = rh.config_get(cluster, tenant, "/service/requestAttributes")
11+
all_ra_call = rh.config_get(cluster, tenant, ENDPOINT)
1012
all_ra_json = all_ra_call.json()
1113
all_ra_json = all_ra_json['values']
1214
#print (json.dumps(all_ra_json, indent=2))
@@ -15,7 +17,7 @@ def pull_to_files(cluster, tenant, ignore_disabled=True):
1517
single_ra_call = rh.config_get(
1618
cluster,
1719
tenant,
18-
"/service/requestAttributes/" + str(request_attribute['id'])
20+
ENDPOINT + str(request_attribute['id'])
1921
)
2022
if single_ra_call.status_code == 200:
2123
single_ra_json = single_ra_call.json()
@@ -34,7 +36,7 @@ def push_from_files(file_list, cluster, tenant):
3436
"""Push Request Attributes in JSONs to a tenant"""
3537

3638
# Checks for Existing RAs to update them put request rather than a post that would fail
37-
existing_ra_get = rh.config_get(cluster, tenant, "/service/requestAttributes")
39+
existing_ra_get = rh.config_get(cluster, tenant, ENDPOINT)
3840
existing_ra_json = existing_ra_get.json()
3941
existing_ra_json = existing_ra_json['values']
4042
existing_ra_list = {}
@@ -48,14 +50,14 @@ def push_from_files(file_list, cluster, tenant):
4850
single_ra_post = rh.config_put(
4951
cluster,
5052
tenant,
51-
"/service/requestAttributes/" + existing_ra_list[file],
53+
ENDPOINT + existing_ra_list[file],
5254
json=ra_json
5355
)
5456
else:
5557
single_ra_post = rh.config_post(
5658
cluster,
5759
tenant,
58-
"/service/requestAttributes",
60+
ENDPOINT,
5961
json=ra_json
6062
)
6163
if single_ra_post.status_code >= 400:

dynatrace/timeseries/timeseries.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
from dynatrace.requests import request_handler as rh
22

3+
ENDPOINT = "timeseries/"
4+
35
def get_timeseries_list(cluster, tenant, params=None):
46
"""Get List of Timeseries Metics"""
5-
response = rh.env_get(cluster, tenant, "timeseries", params=params)
7+
response = rh.env_get(cluster, tenant, ENDPOINT, params=params)
68
return response.json()
79

810
def get_timeseries_metric (cluster, tenant, metric, params=None):
911
"""Get Timeseries Metric"""
1012
#Chose to do GET, but could also be done as POST. Don't think there are any advantages to post
11-
response = rh.env_get(cluster, tenant, "timeseries/" + metric, params=params)
13+
response = rh.env_get(cluster, tenant, ENDPOINT + metric, params=params)
1214
return response.json()
1315

1416
def create_custom_metric (cluster, tenant, metric, json, params=None):
15-
response = rh.env_put(cluster, tenant, "timeseries/" + metric, params=params, json=json)
17+
response = rh.env_put(cluster, tenant, ENDPOINT + metric, params=params, json=json)
1618
return response.status_code
1719

1820
def delete_custom_metic (cluster, tenant, metric):
19-
response = rh.env_delete(cluster, tenant, "timeseries/" + metric)
21+
response = rh.env_delete(cluster, tenant, ENDPOINT + metric)
2022
return response.status_code

0 commit comments

Comments
 (0)