48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
from glob import glob
|
|
import json
|
|
from dataclasses import dataclass
|
|
from os.path import join as path_join
|
|
|
|
|
|
class AzurePolicyManager:
|
|
def __init__(self, static_policy_location):
|
|
self._static_policy_location = static_policy_location
|
|
|
|
@property
|
|
def portfolio_definitions(self):
|
|
if getattr(self, "_portfolio_definitions", None) is None:
|
|
portfolio_files = self._glob_json("portfolios")
|
|
self._portfolio_definitions = self._load_policies(portfolio_files)
|
|
|
|
return self._portfolio_definitions
|
|
|
|
@property
|
|
def application_definitions(self):
|
|
pass
|
|
|
|
@property
|
|
def environment_definitions(self):
|
|
pass
|
|
|
|
def _glob_json(self, path):
|
|
return glob(path_join(self._static_policy_location, "portfolios", "*.json"))
|
|
|
|
def _load_policies(self, json_policies):
|
|
return [self._load_policy(pol) for pol in json_policies]
|
|
|
|
def _load_policy(self, policy_file):
|
|
with open(policy_file, "r") as file_:
|
|
doc = json.loads(file_.read())
|
|
return AzurePolicy(
|
|
definition_point=doc["definitionPoint"],
|
|
definition=doc["policyDefinition"],
|
|
parameters=doc["parameters"],
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class AzurePolicy:
|
|
definition_point: str
|
|
definition: dict
|
|
parameters: dict
|