Merge pull request #946 from heddle317/add_policy_version
Add policy version
This commit is contained in:
commit
6ff8d500e5
4 changed files with 216 additions and 1 deletions
|
|
@ -43,6 +43,7 @@ class Policy(BaseModel):
|
|||
self.id = random_policy_id()
|
||||
self.path = path or '/'
|
||||
self.default_version_id = default_version_id or 'v1'
|
||||
self.versions = []
|
||||
|
||||
self.create_datetime = datetime.now(pytz.utc)
|
||||
self.update_datetime = datetime.now(pytz.utc)
|
||||
|
|
@ -52,6 +53,20 @@ class Policy(BaseModel):
|
|||
return 'arn:aws:iam::aws:policy{0}{1}'.format(self.path, self.name)
|
||||
|
||||
|
||||
class PolicyVersion(object):
|
||||
|
||||
def __init__(self,
|
||||
policy_arn,
|
||||
document,
|
||||
is_default=False):
|
||||
self.policy_arn = policy_arn
|
||||
self.document = document or {}
|
||||
self.is_default = is_default
|
||||
self.version_id = 'v1'
|
||||
|
||||
self.create_datetime = datetime.now(pytz.utc)
|
||||
|
||||
|
||||
class ManagedPolicy(Policy):
|
||||
"""Managed policy."""
|
||||
|
||||
|
|
@ -491,6 +506,9 @@ class IAMBackend(BaseBackend):
|
|||
self.managed_policies[policy.name] = policy
|
||||
return policy
|
||||
|
||||
def get_policy(self, policy_name):
|
||||
return self.managed_policies.get(policy_name)
|
||||
|
||||
def list_attached_role_policies(self, role_name, marker=None, max_items=100, path_prefix='/'):
|
||||
policies = self.get_role(role_name).managed_policies.values()
|
||||
|
||||
|
|
@ -568,6 +586,49 @@ class IAMBackend(BaseBackend):
|
|||
role = self.get_role(role_name)
|
||||
return role.policies.keys()
|
||||
|
||||
def create_policy_version(self, policy_arn, policy_document, set_as_default):
|
||||
policy_name = policy_arn.split(':')[-1]
|
||||
policy_name = policy_name.split('/')[1]
|
||||
policy = self.get_policy(policy_name)
|
||||
if not policy:
|
||||
raise IAMNotFoundException("Policy not found")
|
||||
version = PolicyVersion(policy_arn, policy_document, set_as_default)
|
||||
policy.versions.append(version)
|
||||
if set_as_default:
|
||||
policy.default_version_id = version.version_id
|
||||
return version
|
||||
|
||||
def get_policy_version(self, policy_arn, version_id):
|
||||
policy_name = policy_arn.split(':')[-1]
|
||||
policy_name = policy_name.split('/')[1]
|
||||
policy = self.get_policy(policy_name)
|
||||
if not policy:
|
||||
raise IAMNotFoundException("Policy not found")
|
||||
for version in policy.versions:
|
||||
if version.version_id == version_id:
|
||||
return version
|
||||
raise IAMNotFoundException("Policy version not found")
|
||||
|
||||
def list_policy_versions(self, policy_arn):
|
||||
policy_name = policy_arn.split(':')[-1]
|
||||
policy_name = policy_name.split('/')[1]
|
||||
policy = self.get_policy(policy_name)
|
||||
if not policy:
|
||||
raise IAMNotFoundException("Policy not found")
|
||||
return policy.versions
|
||||
|
||||
def delete_policy_version(self, policy_arn, version_id):
|
||||
policy_name = policy_arn.split(':')[-1]
|
||||
policy_name = policy_name.split('/')[1]
|
||||
policy = self.get_policy(policy_name)
|
||||
if not policy:
|
||||
raise IAMNotFoundException("Policy not found")
|
||||
for i, v in enumerate(policy.versions):
|
||||
if v.version_id == version_id:
|
||||
del policy.versions[i]
|
||||
return
|
||||
raise IAMNotFoundException("Policy not found")
|
||||
|
||||
def create_instance_profile(self, name, path, role_ids):
|
||||
instance_profile_id = random_resource_id()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue