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)