def generate_sources(self, stages, env, reponame, role, sharedlibrary_release): action = {} pipeline = NewPipeline() shared_configuration = {'BranchName': sharedlibrary_release, 'RepositoryName': 'pipelineaws-sharedlibrary', "PollForSourceChanges": "false", "OutputArtifacts": "Libs"} # action['Source'] = [pipeline.create_action( # 'SharedLibrary', "1", shared_configuration, 'Source', role)] action['Source'] = [pipeline.create_action( 'SharedLibrary', "1", shared_configuration, 'Source')] for t_codebuild in stages: if isinstance(t_codebuild, str): source_ = t_codebuild else: source_ = ''.join(t_codebuild.keys()) if 'source' == source_.lower() or 'source::custom' == source_.lower(): if isinstance(t_codebuild, str): configuration = {'RepositoryName': reponame, 'BranchName': env, 'OutputArtifacts': 'App'} elif isinstance(t_codebuild, dict): if 'source' == source_.lower(): branch = t_codebuild[source_][0]['BranchName'] configuration = {'RepositoryName': reponame, 'BranchName': branch, 'OutputArtifacts': 'App'} elif 'source::custom' in source_.lower(): configuration = {} for config in t_codebuild['Source::custom']: configuration.update(config) if 'BranchName' not in configuration: configuration.update({'BranchName': env}) action['Source'].append( pipeline.create_action(configuration['RepositoryName'], "1", configuration, 'Source')) return action
def test_deve_retornar_um_Action_tipo_Build_Multiplos_Sources( self, params): action = params['action'] configuration = { 'ProjectName': 'proj', 'PrimarySource': 'App', 'InputArtifacts': ['App', 'App2'], 'runorder': '1' } pipeline = NewPipeline() cf_action = pipeline.create_action(action['name'], action['runorder'], configuration, action['type'], action['role']) cf = self.gerando_cloudformation(cf_action) print(cf) assert 'Build' == cf['Resources']['compilar']['ActionTypeId'][ 'Category'] assert 'CodeBuild' == cf['Resources']['compilar']['ActionTypeId'][ 'Provider'] assert 'compilar' in cf['Resources'] assert 1 == cf['Resources']['compilar']['RunOrder'] assert 'App' in [ input['Name'] for input in cf['Resources']['compilar']['InputArtifacts'] ] assert 'App2' in [ input['Name'] for input in cf['Resources']['compilar']['InputArtifacts'] ]
def test_deve_retornar_um_stage_Com_Nome_Alphanumerico(self, params): action = params['action'] name = 'Stage-Compilacao' pipeline = NewPipeline() cf_action = pipeline.create_action(action['name'], action['runorder'], action['configuration'], action['type'], action['role']) cf_stage = pipeline.create_stage(name, [cf_action]) cf = self.gerando_cloudformation(cf_stage) print(cf) assert 'StageCompilacao' in cf['Resources'] assert 'Stage-Compilacao' == cf['Resources']['StageCompilacao']['Name']
def test_deve_retornar_um_stage(self, params): action = params['action'] stage = params['stage'] pipeline = NewPipeline() cf_action = pipeline.create_action(action['name'], action['runorder'], action['configuration'], action['type'], action['role']) cf_stage = pipeline.create_stage(stage['name'], [cf_action]) cf = self.gerando_cloudformation(cf_stage) print(cf) assert 'Compilador' in cf['Resources'] assert 'Compilador' == cf['Resources']['Compilador']['Name']
def test_deve_retornar_um_Action_tipo_source(self, params): action = params['source'] pipeline = NewPipeline() cf_action = pipeline.create_action(action['name'], action['runorder'], action['configuration'], action['type'], action['role']) cf = self.gerando_cloudformation(cf_action) print(cf) assert 'Source' == cf['Resources'][ action['name']]['ActionTypeId']['Category'] assert 'CodeCommit' == cf['Resources'][ action['name']]['ActionTypeId']['Provider'] assert 'source' in cf['Resources'] assert 1 == cf['Resources']['source']['RunOrder']
def test_deve_retornar_uma_pipeline(self, params): action = params['action'] stage = params['stage'] pipeline = params['pipeline'] obj_pipeline = NewPipeline() cf_action = obj_pipeline.create_action(action['name'], action['runorder'], action['configuration'], action['type'], action['role']) cf_stage = obj_pipeline.create_stage(stage['name'], [cf_action]) cf_pipeline = obj_pipeline.create_pipeline(pipeline['name'], pipeline['role'], [cf_stage]) cf = self.gerando_cloudformation(cf_pipeline) print(cf) assert 'Pipelineecs' in cf['Resources']
def test_deve_retornar_um_Action_tipo_Build_Nome_Alphanumerico( self, params): action = params['action'] name = 'Build-App' pipeline = NewPipeline() cf_action = pipeline.create_action(name, action['runorder'], action['configuration'], action['type'], action['role']) cf = self.gerando_cloudformation(cf_action) print(cf) assert 'Build' == cf['Resources']['BuildApp']['ActionTypeId'][ 'Category'] assert 'CodeBuild' == cf['Resources']['BuildApp']['ActionTypeId'][ 'Provider'] assert 'BuildApp' in cf['Resources'] assert 1 == cf['Resources']['BuildApp']['RunOrder']
def test_deve_retornar_um_Action_tipo_source_Nome_Alphanumerico( self, params): action = params['source'] name = 'Source-App' pipeline = NewPipeline() cf_action = pipeline.create_action(name, action['runorder'], action['configuration'], action['type'], action['role']) cf = self.gerando_cloudformation(cf_action) print(cf) assert 'Source' == cf['Resources']['SourceApp']['ActionTypeId'][ 'Category'] assert 'CodeCommit' == cf['Resources']['SourceApp']['ActionTypeId'][ 'Provider'] assert 'SourceApp' in cf['Resources'] assert 1 == cf['Resources']['SourceApp']['RunOrder'] assert 'arn:aws:iam::033921349789:role/RoleCodepipelineRole' == cf[ 'Resources']['SourceApp']['RoleArn']
def test_deve_retornar_um_Action_tipo_aprovacao(self, params): # action = params['action'] name = 'Aprovacao' config = { 'CustomData': 'Você aprova a entrada desta versão em produção?' } config['NotificationArn'] = '!Ref CodePipelineBOSNSTopic' pipeline = NewPipeline() cf_action = pipeline.create_action(name, 1, config, 'Approval') cf = self.gerando_cloudformation(cf_action) print(cf) assert 'Approval' == cf['Resources']['Aprovacao']['ActionTypeId'][ 'Category'] assert 'Manual' == cf['Resources']['Aprovacao']['ActionTypeId'][ 'Provider'] assert 'Aprovacao' in cf['Resources'] assert 1 == cf['Resources']['Aprovacao']['RunOrder']
def test_deve_retornar_um_Action_tipo_InvokeLambda(self, params): # action = params['action'] name = 'InvokeLambda' config = { "type": "InvokeLambda", "FunctionName": "Agendamento2", "UserParameters": "paramerters", "InputArtifacts": [], "RoleArn": "arn:aws:iam::123456780:role/role", "runorder": "1" } pipeline = NewPipeline() cf_action = pipeline.create_action(name, 1, config, 'InvokeLambda') cf = self.gerando_cloudformation(cf_action) print(cf) assert 'Invoke' == cf['Resources']['InvokeLambda']['ActionTypeId'][ 'Category'] assert 'Lambda' == cf['Resources']['InvokeLambda']['ActionTypeId'][ 'Provider'] assert 'InvokeLambda' in cf['Resources'] assert 1 == cf['Resources']['InvokeLambda']['RunOrder']
def generate_action(self, stages, pipeline_template, list_codebuild, env): types = ['InvokeLambda', 'Approval'] template_action = {} pipeline = NewPipeline() # Buscando o invokelambda e approval no template base e criando o action for type_ in types: actions = self.check_type_action( stages, pipeline_template, type_) for key in actions: for action in actions[key]: name = ' '.join(action.keys()) configuration = action[name] runorder = configuration.pop('runorder') configuration.pop('type') template_action[name.lower()] = pipeline.create_action( name.capitalize(), int(runorder), configuration, type_) # Criando Actions com codebuild for code in list_codebuild: title = code.title.lower() configuration = 0 for k in pipeline_template: for t in pipeline_template[k]: code_template = list(t.keys())[0] code_template_env = f"{code_template}{env}" if (code_template.lower() == title) or (code_template_env.lower() == title): configuration = list(t.values())[0] runorder = configuration.pop('runorder') if 'type' in configuration: configuration.pop('type') configuration['ProjectName'] = code.Name template_action[title] = pipeline.create_action( title.capitalize(), int(runorder), configuration, 'CodeBuild') # Action custom for action in stages: if isinstance(action, dict): index_action = ' '.join(action.keys()) custom = index_action.split('::') if custom[-1].lower() == 'custom' and custom[0].lower() != 'source': # print(stage[index_stage]) for confs in action[index_action]: name = ' '.join(confs.keys()) params = self.getparams_codebuild( confs[name]) type_ = params.get('type') if type_ != None: configuration = params runorder = params.pop('runorder') params.pop('type') template_action[name.lower()] = pipeline.create_action( name.capitalize(), int(runorder), configuration, type_) tstage = custom[0] t_build_template = [ item for item in pipeline_template if item.split('-')[1] == tstage][0] action_custom = [{name: {'ProjectName': name}}] pipeline_template[t_build_template].extend( action_custom) return template_action