ranger-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bhargavi (Jira)" <j...@apache.org>
Subject [jira] [Created] (RANGER-2798) existing policy is getting replaced when using update_policy from a python script
Date Fri, 17 Apr 2020 09:41:00 GMT
Bhargavi created RANGER-2798:
--------------------------------

             Summary: existing policy is getting replaced when using update_policy from a
python script
                 Key: RANGER-2798
                 URL: https://issues.apache.org/jira/browse/RANGER-2798
             Project: Ranger
          Issue Type: Bug
          Components: Ranger
            Reporter: Bhargavi


#!/usr/bin/env python
"""
Input file is a CSV:
Policy name, Resource path, AD groups, Read, Write, Execute, Comment
"""
policy_id =''
import time
import requests
import csv
import json
from httplib import HTTPSConnection
from base64 import b64encode
import sys

ranger_host = sys.argv[2]
ranger_port = sys.argv[3]
policy_api = '/service/public/api/policy'
ranger_user = 'admin'
ranger_password = 
repository_name = sys.argv[4]
repository_name += '_hadoop'
description_template = 'Policy for %s'
policy_template = {
 'policyType': 'access',
 'policyName': '',
 'resourceName': '',
 'description': '',
 'repositoryName': repository_name,
 'repositoryType': 'hdfs',
 'isEnabled': True,
 'isRecursive': True,
 'isAuditEnabled': True,
 'permMapList': []
}

 

 


def get_policy(policy_name):
 """Retrieve the policy definition
 """
 global policyid
 conn = HTTPSConnection(host=ranger_host, port=ranger_port)
 headers = {
 'Authorization' : 'Basic %s' % b64encode('%s:%s' % (ranger_user, ranger_password)),
 'Content-Type': 'application/json'
 }
 conn.request('GET', policy_api + '?policyName=' + policy_name, headers=headers)
 response = conn.getresponse()
 json_data = response.read()
 result = json.loads(json_data)
 count = result['totalCount']
 print count
 if count == 1:
 for data in result['vXPolicies']:
 policy_id = data['id']
 print(policy_id)

update_policy(policy,policy_id)
 print(policy)
 else:
 create_policy(policy)
 print(policy)

def update_policy(data,policy_id):
 conn = HTTPSConnection(host=ranger_host, port=ranger_port)
 headers = {
 'Authorization' : 'Basic %s' % b64encode('%s:%s' % (ranger_user, ranger_password)),
 'Content-Type': 'application/json'
 }

conn.request('PUT', policy_api + '/' + str(policy_id), headers=headers, body=json.dumps(data))
 response = conn.getresponse()
 if response.status != 200:
 print 'Error updating policy'
 print response.read()
 else:
 print 'Policy %s updated'

 

 

 

def create_policy(data):
 conn = HTTPSConnection(host=ranger_host, port=ranger_port)
 headers = {
 'Authorization' : 'Basic %s' % b64encode('%s:%s' % (ranger_user, ranger_password)),
 'Content-Type': 'application/json'
 }
 conn.request('POST', policy_api, headers=headers, body=json.dumps(data))
 response = conn.getresponse()
 if response.status != 200:
 print 'Error creating policy %s: %s' % (data['policyName'], data)
 print response.read()
 else:
 print 'Policy %s created' % data['policyName']

 


with open(sys.argv[1]) as csvfile:
 reader = csv.DictReader(csvfile, delimiter=',')
 policy = policy_template
 i=0
 for row in reader:
 if row['Policy name']:
 policy['policyName'] = row['Policy name']
 policy['resourceName'] = row['Resource path']
 policy['description'] = description_template % row['Resource path']
 policy['permMapList'] = [ {
 'groupList': [row['AD groups']],
 'permList': []
 }]

if row['Read']: policy['permMapList'][int(i)]['permList'].append('Read')
 if row['Write']: policy['permMapList'][int(i)]['permList'].append('Write')
 if row['Execute']: policy['permMapList'][int(i)]['permList'].append('Execute')

else:
 policy['permMapList'].append({
 'groupList': [row['AD groups']],
 'permList': []
 })
 i=i+1
 print i
 if row['Read']: policy['permMapList'][int(i)]['permList'].append('Read')
 if row['Write']: policy['permMapList'][int(i)]['permList'].append('Write')
 if row['Execute']: policy['permMapList'][int(i)]['permList'].append('Execute')

get_policy(policy['policyName'])
 policy=policy_template



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Mime
View raw message