in gcpdiag/lint/datafusion/warn_2024_004_datafusion_dataproc_compatabillity.py [0:0]
def run_rule(context: models.Context, report: lint.LintReportRuleInterface):
"""
Checks if the datafusion version is compatible with dataproc version
from the corresponding compute profiles.
"""
if not apis.is_enabled(context.project_id, 'datafusion'):
report.add_skipped(
None,
'Cloud Data Fusion API is not enabled in'
f' {crm.get_project(context.project_id)}',
)
return
datafusion_instances = projects_instances[context.project_id]
if not datafusion_instances:
report.add_skipped(None, f'no Cloud Data Fusion instances found {context}')
return
for _, datafusion_instance in sorted(datafusion_instances.items()):
compute_profiles = []
# fetch compute profiles of the instance
compute_profiles.extend(
datafusion.get_instance_system_compute_profile(context,
datafusion_instance))
compute_profiles.extend(
datafusion.get_instance_user_compute_profile(context,
datafusion_instance))
if not compute_profiles:
report.add_skipped(None, 'No compute profile found')
return
datafusion_dataproc_version = datafusion.extract_datafusion_dataproc_version(
)
if not datafusion_dataproc_version:
report.add_skipped(None,
"No datafusion and dataproc version's data obtained")
# Check the autoscaling property
for profile in compute_profiles:
if profile.image_version != 'No imageVersion defined':
dataproc_version = profile.image_version
dataproc_parsed_version = re.match(r'(\d+\.\d+)', dataproc_version)
if not dataproc_parsed_version:
report.add_skipped(
None, f'Dataproc version : {dataproc_version} is not valid')
return
datafusion_version = version.parse(str(datafusion_instance.version))
version_to_compare = (
f'{datafusion_version.major}.{datafusion_version.minor}')
if version_to_compare in datafusion_dataproc_version:
if (dataproc_parsed_version.group(1)
in datafusion_dataproc_version[version_to_compare]):
report.add_ok(
datafusion_instance,
f'\n\t{profile}\n\tDatafusion version :'
f' {datafusion_version}\n\tDataproc version :'
f' {dataproc_version}\n',
)
else:
report.add_failed(
datafusion_instance,
f'\t{profile}\n\tDatafusion version :'
f' {datafusion_version}\n\tDataproc version :'
f' {dataproc_version}\n',
)
else:
report.add_ok(datafusion_instance,
f'\n\t{profile}\n\t(No imageVersion defined)\n')