88
99from .multisite import *
1010
11+ from .conn import get_gateway_sts_connection
12+
1113log = logging .getLogger (__name__ )
1214
1315def check_object_eq (k1 , k2 , check_extra = True ):
@@ -106,7 +108,7 @@ def check_bucket_eq(self, zone_conn, bucket_name):
106108 return True
107109
108110 def get_role (self , role_name ):
109- return self .iam_conn .get_role (role_name )
111+ return self .iam_conn .get_role (RoleName = role_name )
110112
111113 def check_role_eq (self , zone_conn , role_name ):
112114 log .info ('comparing role=%s zones={%s, %s}' , role_name , self .name , zone_conn .name )
@@ -130,10 +132,10 @@ def check_role_eq(self, zone_conn, role_name):
130132 def create_role (self , path , rolename , policy_document , tag_list ):
131133 if policy_document is None :
132134 policy_document = "{\" Version\" :\" 2012-10-17\" ,\" Statement\" :[{\" Effect\" :\" Allow\" ,\" Principal\" :{\" AWS\" :[\" arn:aws:iam:::user/testuser\" ]},\" Action\" :[\" sts:AssumeRole\" ]}]}"
133- return self .iam_conn .create_role (rolename , policy_document , path )
135+ return self .iam_conn .create_role (RoleName = rolename , AssumeRolePolicyDocument = policy_document , Path = path )
134136
135137 def delete_role (self , role_name ):
136- return self .iam_conn .delete_role (role_name )
138+ return self .iam_conn .delete_role (RoleName = role_name )
137139
138140 def has_role (self , role_name ):
139141 try :
@@ -142,6 +144,11 @@ def has_role(self, role_name):
142144 return False
143145 return True
144146
147+ def put_role_policy (self , rolename , policyname , policy_document ):
148+ if policy_document is None :
149+ policy_document = "{\" Version\" :\" 2012-10-17\" ,\" Statement\" :[{\" Effect\" :\" Allow\" ,\" Resource\" :\" *\" ,\" Action\" :\" s3:*\" }]}"
150+ return self .iam_conn .put_role_policy (RoleName = rolename , PolicyName = policyname , PolicyDocument = policy_document )
151+
145152 def create_topic (self , topicname , attributes ):
146153 result = self .sns_client .create_topic (Name = topicname , Attributes = attributes )
147154 self .topic_arn = result ['TopicArn' ]
@@ -173,6 +180,17 @@ def list_notifications(self, bucket_name):
173180 def head_object (self , bucket_name , obj_name ):
174181 return self .s3_client .head_object (Bucket = bucket_name , Key = obj_name )
175182
183+ def assume_role_create_bucket (self , bucket , role_arn , session_name , alt_user_creds ):
184+ region = "" if self .zone .zonegroup is None else self .zone .zonegroup .name
185+ sts_conn = None
186+ if self .zone .gateways is not None :
187+ sts_conn = get_gateway_sts_connection (self .zone .gateways [0 ], alt_user_creds , region )
188+ assumed_role_object = sts_conn .assume_role (RoleArn = role_arn , RoleSessionName = session_name )
189+ assumed_role_credentials = assumed_role_object ['Credentials' ]
190+ credentials = Credentials (assumed_role_credentials ['AccessKeyId' ], assumed_role_credentials ['SecretAccessKey' ])
191+ self .get_temp_s3_connection (credentials , assumed_role_credentials ['SessionToken' ])
192+ self .temp_s3_client .create_bucket (Bucket = bucket )
193+
176194 def get_conn (self , credentials ):
177195 return self .Conn (self , credentials )
178196
0 commit comments