55
66import argparse
77import json
8- import logging
98import os
109import subprocess
1110import sys
1211from functools import partial
13- from pathlib import Path
1412from urllib .parse import quote_plus
1513
1614from pymongo import MongoClient
1715from pymongo .errors import OperationFailure
1816
19- HERE = Path (__file__ ).absolute ().parent
20- LOGGER = logging .getLogger (__name__ )
21- logging .basicConfig (level = logging .INFO , format = "%(levelname)-8s %(message)s" )
17+ HERE = os .path .abspath (os .path .dirname (__file__ ))
2218
2319
2420def join (* parts ):
2521 return os .path .join (* parts ).replace (os .sep , "/" )
2622
2723
28- sys .path .insert (0 , str (HERE / "lib" ))
24+ sys .path .insert (0 , join (HERE , "lib" ))
2925from aws_assign_instance_profile import _assign_instance_policy
3026from aws_assume_role import _assume_role
3127from aws_assume_web_role import _assume_role_with_web_identity
@@ -39,7 +35,7 @@ def join(*parts):
3935_USE_AWS_SECRETS = False
4036
4137try :
42- with ( HERE / "aws_e2e_setup.json" ). open ( ) as fid :
38+ with open ( join ( HERE , "aws_e2e_setup.json" )) as fid :
4339 CONFIG = json .load (fid )
4440 get_key = partial (_get_key , uppercase = False )
4541except FileNotFoundError :
@@ -55,7 +51,7 @@ def run(args, env):
5551
5652def create_user (user , kwargs ):
5753 """Create a user and verify access."""
58- LOGGER . info ("Creating user %s " , user )
54+ print ("Creating user" , user )
5955 client = MongoClient (username = "bob" , password = "pwd123" )
6056 db = client ["$external" ]
6157 try :
@@ -80,7 +76,7 @@ def setup_assume_role():
8076
8177 role_name = CONFIG [get_key ("iam_auth_assume_role_name" )]
8278 creds = _assume_role (role_name , quiet = True )
83- with ( HERE / "creds.json" ). open ( "w" ) as fid :
79+ with open ( join ( HERE , "creds.json" ), "w" ) as fid :
8480 json .dump (creds , fid )
8581
8682 # Create the user.
@@ -91,11 +87,6 @@ def setup_assume_role():
9187 authmechanismproperties = f"AWS_SESSION_TOKEN:{ token } " ,
9288 )
9389 create_user (ASSUMED_ROLE , kwargs )
94- return dict (
95- USER = kwargs ["username" ],
96- PASS = kwargs ["password" ],
97- SESSION_TOKEN = creds ["SessionToken" ],
98- )
9990
10091
10192def setup_ec2 ():
@@ -104,7 +95,6 @@ def setup_ec2():
10495 os .environ .pop ("AWS_ACCESS_KEY_ID" , None )
10596 os .environ .pop ("AWS_SECRET_ACCESS_KEY" , None )
10697 create_user (AWS_ACCOUNT_ARN , dict ())
107- return dict ()
10898
10999
110100def setup_ecs ():
@@ -148,8 +138,6 @@ def setup_ecs():
148138 # Run the test in a container
149139 subprocess .check_call (["/bin/sh" , "-c" , run_test_command ], env = env )
150140
151- return dict ()
152-
153141
154142def setup_regular ():
155143 # Create the user.
@@ -159,8 +147,6 @@ def setup_regular():
159147 )
160148 create_user (CONFIG [get_key ("iam_auth_ecs_account_arn" )], kwargs )
161149
162- return dict (USER = kwargs ["username" ], PASS = kwargs ["password" ])
163-
164150
165151def setup_web_identity ():
166152 # Unassign the instance profile.
@@ -175,7 +161,7 @@ def setup_web_identity():
175161 raise RuntimeError ("Request limit exceeded for AWS API" )
176162
177163 if ret != 0 :
178- LOGGER . debug ( "return code was %s " , ret )
164+ print ( "ret was" , ret )
179165 raise RuntimeError (
180166 "Failed to unassign an instance profile from the current machine"
181167 )
@@ -200,11 +186,10 @@ def setup_web_identity():
200186
201187 # Assume the web role to get temp credentials.
202188 os .environ ["AWS_WEB_IDENTITY_TOKEN_FILE" ] = token_file
203- role_arn = CONFIG [get_key ("iam_auth_assume_web_role_name" )]
204- os .environ ["AWS_ROLE_ARN" ] = role_arn
189+ os .environ ["AWS_ROLE_ARN" ] = CONFIG [get_key ("iam_auth_assume_web_role_name" )]
205190
206191 creds = _assume_role_with_web_identity (True )
207- with ( HERE / "creds.json" ). open ( "w" ) as fid :
192+ with open ( join ( HERE , "creds.json" ), "w" ) as fid :
208193 json .dump (creds , fid )
209194
210195 # Create the user.
@@ -216,37 +201,12 @@ def setup_web_identity():
216201 )
217202 create_user (ASSUMED_WEB_ROLE , kwargs )
218203
219- return dict (AWS_WEB_IDENTITY_TOKEN_FILE = token_file , AWS_ROLE_ARN = role_arn )
220-
221-
222- def handle_creds (creds : dict ):
223- if "USER" in creds :
224- USER = quote_plus (creds .pop ("USER" ))
225- PASS = quote_plus (creds .pop ("PASS" ))
226- MONGODB_URI = f"mongodb://{ USER } :{ PASS } @localhost"
227- else :
228- MONGODB_URI = "mongodb://localhost"
229- MONGODB_URI = f"{ MONGODB_URI } /aws?authMechanism=MONGODB-AWS"
230- if "SESSION_TOKEN" in creds :
231- SESSION_TOKEN = quote_plus (creds .pop ("SESSION_TOKEN" ))
232- MONGODB_URI = (
233- f"{ MONGODB_URI } &authMechanismProperties=AWS_SESSION_TOKEN:{ SESSION_TOKEN } "
234- )
235- with (HERE / "test-env.sh" ).open ("w" , newline = "\n " ) as fid :
236- fid .write ("#!/usr/bin/env bash\n \n " )
237- fid .write ("set +x\n " )
238- for key , value in creds .items ():
239- fid .write (f"export { key } ={ value } \n " )
240- fid .write (f"export MONGODB_URI={ MONGODB_URI } \n " )
241-
242204
243205def main ():
244206 parser = argparse .ArgumentParser (description = "MONGODB-AWS tester." )
245207 sub = parser .add_subparsers (title = "Tester subcommands" , help = "sub-command help" )
246208
247- run_assume_role_cmd = sub .add_parser (
248- "assume-role" , aliases = ["session-creds" ], help = "Assume role test"
249- )
209+ run_assume_role_cmd = sub .add_parser ("assume-role" , help = "Assume role test" )
250210 run_assume_role_cmd .set_defaults (func = setup_assume_role )
251211
252212 run_ec2_cmd = sub .add_parser ("ec2" , help = "EC2 test" )
@@ -255,20 +215,14 @@ def main():
255215 run_ecs_cmd = sub .add_parser ("ecs" , help = "ECS test" )
256216 run_ecs_cmd .set_defaults (func = setup_ecs )
257217
258- run_regular_cmd = sub .add_parser (
259- "regular" , aliases = ["env-creds" ], help = "Regular credentials test"
260- )
218+ run_regular_cmd = sub .add_parser ("regular" , help = "Regular credentials test" )
261219 run_regular_cmd .set_defaults (func = setup_regular )
262220
263221 run_web_identity_cmd = sub .add_parser ("web-identity" , help = "Web identity test" )
264222 run_web_identity_cmd .set_defaults (func = setup_web_identity )
265223
266224 args = parser .parse_args ()
267- func_name = args .func .__name__ .replace ("setup_" , "" )
268- LOGGER .info ("Running aws_tester.py with %s..." , func_name )
269- creds = args .func ()
270- handle_creds (creds )
271- LOGGER .info ("Running aws_tester.py with %s... done." , func_name )
225+ args .func ()
272226
273227
274228if __name__ == "__main__" :
0 commit comments