code: def evaluate_service_changes(services, envs, repo_root, func):
      
      for service_name, service in services.iteritems():
  
          for env_category in service['environments']:
              if env_category not in get_env_categories(envs):
                  logger.debug('Skipping not-included environment `%s` for service `%s`',
                               env_category, service_name)
                  continue
  
              environment = generate_test_environment_name(env_category)
  
              cf_client = get_cloudformation_client(service_name, environment)
  
              func(service_name, service, environment, cf_client, repo_root)
docs: Given a dict of services, and a list of environments, apply the diff
      function to evaluate the differences between the target environments
      and the rendered templates.
  
      Sub-services (names with '.' in them) are skipped.