def run_rule()

in gcpdiag/lint/apigee/warn_2022_001_env_groups_created.py [0:0]


def run_rule(context: models.Context, report: lint.LintReportRuleInterface):
  if not apis.is_enabled(context.project_id, 'logging'):
    report.add_skipped(None, 'logging api is disabled')
    return

  # Apigee Connect is enabled by default for any Kubernetes cluster running Apigee service.
  if not apis.is_enabled(context.project_id, 'apigeeconnect'):
    report.add_skipped(None, 'Apigee connect api is disabled')
    return

  project = crm.get_project(context.project_id)
  env_group_errors: Dict[str, Dict[str, str]] = {}
  # Process apigee_watcher container logs and search for env group creation errors
  if k8s_container_logs_by_project.get(context.project_id) and \
    k8s_container_logs_by_project[context.project_id].entries:
    for log_entry in k8s_container_logs_by_project[context.project_id].entries:
      # Determine the problematic environment group name
      m = re.findall(
          r'cannot find ApigeeRouteConfig for environment group "([^"]*)":',
          get_path(log_entry, ('jsonPayload', 'error'), default=''))
      if not m:
        continue
      for env_group_name in m:
        cluster_name = get_path(log_entry,
                                ('resource', 'labels', 'cluster_name'),
                                default='Unknown')
        location = get_path(log_entry, ('resource', 'labels', 'location'),
                            default='Unknown')
        organization = get_path(log_entry, ('labels', 'k8s-pod/org'),
                                default='Unknown')
        if organization not in env_group_errors:
          env_group_errors[organization] = {}
        if env_group_name not in env_group_errors[organization].keys():
          env_group_errors[organization][env_group_name] = (
              f'Environment group {env_group_name} in '
              f'organization {organization}: is not created in cluster: '
              f'{cluster_name}, location: {location}')

    for org_name, env_group_error in env_group_errors.items():
      apigee_org = apigee.ApigeeOrganization(project_id=context.project_id,
                                             org_name=org_name)
      if env_group_error:
        report.add_failed(apigee_org, 'Environment group creation issue detected: \n. '+\
                          '\n. '.join(err for _, err in env_group_error.items()))
  else:
    report.add_ok(project)