def test_can_run_apicall_step_with_query(self): loaded = load_wizard(""" plan: start: values: foo: type: apicall operation: iam.ListPolicies params: Scope: AWS query: Policies[].Name """) mock_session = mock.Mock(spec=Session) mock_client = mock.Mock() mock_session.create_client.return_value = mock_client mock_client.list_policies.return_value = { 'Policies': [{'Name': 'one'}, {'Name': 'two'}], } api_step = core.APICallStep( api_invoker=core.APIInvoker(session=mock_session) ) planner = core.Planner( step_handlers={ 'apicall': api_step, }, ) parameters = planner.plan(loaded['plan']) # Note this value is the result is applying the # Polices[].Name jmespath query to the response. self.assertEqual(parameters['foo'], ['one', 'two'])
def test_can_run_apicall_step(self): loaded = load_wizard(""" plan: start: values: foo: type: apicall operation: iam.ListPolicies params: Scope: AWS """) mock_session = mock.Mock(spec=Session) mock_client = mock.Mock() mock_session.create_client.return_value = mock_client mock_client.list_policies.return_value = { 'Policies': ['foo'], } api_step = core.APICallStep( api_invoker=core.APIInvoker(session=mock_session) ) planner = core.Planner( step_handlers={ 'apicall': api_step, }, ) parameters = planner.plan(loaded['plan']) self.assertEqual(parameters['foo'], {'Policies': ['foo']})
def create_default_wizard_runner(session): api_invoker = core.APIInvoker(session=session) shared_config = core.SharedConfigAPI(session=session, config_writer=ConfigFileWriter()) planner = core.Planner( step_handlers={ core.StaticStep.NAME: core.StaticStep(), core.PromptStep.NAME: core.PromptStep(ui.UIPrompter()), core.YesNoPrompt.NAME: core.YesNoPrompt(ui.UIPrompter()), core.FilePromptStep.NAME: core.FilePromptStep(ui.UIFilePrompter(ui.FileCompleter())), core.TemplateStep.NAME: core.TemplateStep(), core.APICallStep.NAME: core.APICallStep(api_invoker=api_invoker), core.SharedConfigStep.NAME: core.SharedConfigStep(config_api=shared_config), }) executor = core.Executor( step_handlers={ core.APICallExecutorStep.NAME: core.APICallExecutorStep(api_invoker), core.SharedConfigExecutorStep.NAME: core.SharedConfigExecutorStep(shared_config), core.DefineVariableStep.NAME: core.DefineVariableStep(), core.MergeDictStep.NAME: core.MergeDictStep(), }) runner = core.Runner(planner, executor) return runner
def test_can_invoke_with_plan_variables(self): invoker = core.APIInvoker(self.mock_session) invoker.invoke( 'iam', 'CreateUser', api_params={'UserName': '******'}, plan_variables={'username': '******'} ) call_method_args = self.get_call_args(self.mock_session) self.assertEqual(call_method_args, mock.call(UserName='******'))
def setUp(self): self.session = mock.Mock(spec=Session) self.client = mock.Mock() self.session.create_client.return_value = self.client self.mock_config_writer = mock.Mock(spec=ConfigFileWriter) self.shared_config_file = 'shared-config-file' self.config_api = mock.Mock(spec=core.SharedConfigAPI) self.executor = core.Executor( step_handlers={ 'apicall': core.APICallExecutorStep( core.APIInvoker(session=self.session), ), 'sharedconfig': core.SharedConfigExecutorStep( config_api=self.config_api, ), 'define-variable': core.DefineVariableStep(), 'merge-dict': core.MergeDictStep(), } )
def test_can_open_file_with_builtin_function(self): invoker = core.APIInvoker(self.mock_session) with temporary_file('r+') as f: f.write('admin') f.flush() invoker.invoke( 'iam', 'CreateUser', # There's two parts to this test. First, we have the # filename stored as a variable. plan_variables={'myfile': f.name}, api_params={ # Then we reference the file with the builtin File # type. We should replace this entire value with # the contents of the temp file ('admin'). 'UserName': {'__wizard__:File': {'path': '{myfile}'}}, }, ) call_method_args = self.get_call_args(self.mock_session) self.assertEqual(call_method_args, mock.call(UserName=b'admin'))