import os import sys import json import requests def _get_ps_id(hostname, header, org, name): """ GET /organizations/:organization_name/policy-sets """ ps_endpoint = '/'.join(['https:/', hostname, 'api', 'v2', 'organizations', org, 'policy-sets']) r = requests.get(url=ps_endpoint, headers=header) ps_id = [ i['id'] for i in r.json()['data'] if i['attributes']['name'] == name ] return ps_id[0] def _get_psp_id(hostname, header, org, policy_set, parameter): """ GET /policy-sets/:policy_set_id/parameters """ ps_id = _get_ps_id(hostname=hostname, header=header, org=org, name=policy_set) psp_endpoint = '/'.join(['https:/', hostname, 'api', 'v2', 'policy-sets', ps_id, 'parameters']) r = requests.get(url=psp_endpoint, headers=header) psp_id = [ i['id'] for i in r.json()['data'] if i['attributes']['key'] == parameter ] return psp_id[0] def create(hostname, org, policy_set, key, value, sensitive=False, **kwargs): """ POST /policy-sets/:policy_set_id/parameters """ if kwargs.get('tfe_token'): token = kwargs.get('tfe_token') kwargs.pop('tfe_token') elif os.getenv('TFE_TOKEN'): token = os.getenv('TFE_TOKEN') else: print('ERROR: Missing API token.') sys.exit() header = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/vnd.api+json' } ps_id = _get_ps_id(hostname=hostname, header=header, org=org, name=policy_set) psp_endpoint = '/'.join(['https:/', hostname, 'api', 'v2', 'policy-sets', ps_id, 'parameters']) payload = {} data = {} data['type'] = 'vars' attributes = {} attributes['key'] = key attributes['value'] = value attributes['category'] = 'policy-set' attributes['sensitive'] = sensitive data['attributes'] = attributes payload['data'] = data r = requests.post(url=psp_endpoint, headers=header, data=json.dumps(payload)) r.raise_for_status() return r def list(hostname, org, policy_set, **kwargs): """ GET /policy-sets/:policy_set_id/parameters """ if kwargs.get('tfe_token'): token = kwargs.get('tfe_token') kwargs.pop('tfe_token') elif os.getenv('TFE_TOKEN'): token = os.getenv('TFE_TOKEN') else: print('ERROR: Missing API token.') sys.exit() header = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/vnd.api+json' } ps_id = _get_ps_id(hostname=hostname, header=header, org=org, name=policy_set) psp_endpoint = '/'.join(['https:/', hostname, 'api', 'v2', 'policy-sets', ps_id, 'parameters']) r = requests.get(url=psp_endpoint, headers=header) r.raise_for_status() return r def update(hostname, org, policy_set, parameter, **kwargs): """ PATCH /policy-sets/:policy_set_id/parameters/:parameter_id """ psp_attributes_list = [ 'key', 'value', 'sensitive' ] if kwargs.get('tfe_token'): token = kwargs.get('tfe_token') kwargs.pop('tfe_token') elif os.getenv('TFE_TOKEN'): token = os.getenv('TFE_TOKEN') else: print('ERROR: Missing API token.') sys.exit() header = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/vnd.api+json' } ps_id = _get_ps_id(hostname=hostname, header=header, org=org, name=policy_set) psp_id = _get_psp_id(hostname=hostname, header=header, org=org, policy_set=policy_set, parameter=parameter) psp_endpoint = '/'.join(['https:/', hostname, 'api', 'v2', 'policy-sets', ps_id, 'parameters', psp_id]) payload = {} data = {} data['type'] = 'vars' data['id'] = psp_id attributes = {} for key, value in kwargs.items(): if key in psp_attributes_list: attributes[key] = value else: print("ERROR: '{}' is an invalid key for Policy Set Parameters API".format(key)) attributes['category'] = 'policy-set' data['attributes'] = attributes payload['data'] = data r = requests.patch(url=psp_endpoint, headers=header, data=json.dumps(payload)) r.raise_for_status() return r def delete(hostname, org, policy_set, parameter, **kwargs): """ DELETE /policy-sets/:policy_set_id/parameters/:parameter_id """ if kwargs.get('tfe_token'): token = kwargs.get('tfe_token') kwargs.pop('tfe_token') elif os.getenv('TFE_TOKEN'): token = os.getenv('TFE_TOKEN') else: print('ERROR: Missing API token.') sys.exit() header = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/vnd.api+json' } ps_id = _get_ps_id(hostname=hostname, header=header, org=org, name=policy_set) psp_id = _get_psp_id(hostname=hostname, header=header, org=org, policy_set=policy_set, parameter=parameter) psp_endpoint = '/'.join(['https:/', hostname, 'api', 'v2', 'policy-sets', ps_id, 'parameters', psp_id]) r = requests.delete(url=psp_endpoint, headers=header) r.raise_for_status() return r