code: def create_pipeline(self):
          
          clean_pipelines(app=self.app_name, settings=self.settings)
  
          pipeline_envs = self.environments
          self.log.debug('Envs from pipeline.json: %s', pipeline_envs)
  
          regions_envs = collections.defaultdict(list)
          for env in pipeline_envs:
              for region in self.settings[env]['regions']:
                  regions_envs[region].append(env)
          self.log.info('Environments and Regions for Pipelines:\n%s', json.dumps(regions_envs, indent=4))
  
          pipelines = {}
          for region, envs in regions_envs.items():
              # TODO: Overrides for an environment no longer makes sense. Need to
              # provide override for entire Region possibly.
              pipelines[region] = self.render_wrapper(region=region)
  
              previous_env = None
              for env in envs:
  
                  block = construct_pipeline_block_s3(
                      env=env,
                      generated=self.generated,
                      previous_env=previous_env,
                      region=region,
                      settings=self.settings[env][region],
                      pipeline_data=self.settings['pipeline'])
                  pipelines[region]['stages'].extend(json.loads(block))
  
                  previous_env = env
  
          self.log.debug('Assembled Pipelines:\n%s', pformat(pipelines))
  
          for region, pipeline in pipelines.items():
              renumerate_stages(pipeline)
  
              self.post_pipeline(pipeline)
  
          return True
docs: Main wrapper for pipeline creation.
          1. Runs clean_pipelines to clean up existing ones
          2. determines which environments the pipeline needs
          3. Renders all of the pipeline blocks as defined in configs
          4. Runs post_pipeline to create pipeline