diff --git a/.github/workflows/ossf-scoreboard.yml b/.github/workflows/ossf-scoreboard.yml index a6e09be7..38fb72a4 100644 --- a/.github/workflows/ossf-scoreboard.yml +++ b/.github/workflows/ossf-scoreboard.yml @@ -50,6 +50,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@07bb2b932c90fc1ec97637495e4072a0966fa74c # v3.28.20 + uses: github/codeql-action/upload-sarif@32f7c15247fa6542dc765bd40f6a15dc2caeed89 # v4.31.2 with: sarif_file: results.sarif diff --git a/VERSION b/VERSION new file mode 100644 index 00000000..afaf360d --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.0.0 \ No newline at end of file diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 6361e43e..79d3cfda 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,3 +1,16 @@ # Changelog All notable changes to this project will be documented in this file. + + +## 1.0.0 +Release Date: 11-04-2025 + +1. High Availability Functional Tests: + - Added comprehensive functional tests for High Availability (HA) configurations for SAP HANA Database with scale-up architecture. + - Added functional tests for HA configurations for SAP Central Services (ASCS) with Primary and Secondary nodes for ENSA1 and ENSA2 system types. + - Support for running HA functional tests for systems with new HANA topology - SAP HANA SR-angi. + - Offline Validation for HA configurations for SAP HANA Database and Central Services. +2. Configuration Checks (preview release): + - Initial implementation of configuration checks for SAP systems. + - Support for validating SAP systems with HANA and IBM Db2 databases. diff --git a/docs/CONFIGURATION_CHECKS.md b/docs/CONFIGURATION_CHECKS.md index 0c09446a..cf561f0e 100644 --- a/docs/CONFIGURATION_CHECKS.md +++ b/docs/CONFIGURATION_CHECKS.md @@ -68,7 +68,10 @@ You first need to make sure that you are logged into Azure CLI on the management az login --identity # Login to Azure using User Assigned Managed Identity -az login --identity -u +# When using management server with SLES or Ubuntu OS +az login --identity -client-id +# When using management server with RHEL OS +az login --identity --username # Set the desired subscription context az account set --subscription diff --git a/src/module_utils/filesystem_collector.py b/src/module_utils/filesystem_collector.py index dc0f9471..73197c9a 100644 --- a/src/module_utils/filesystem_collector.py +++ b/src/module_utils/filesystem_collector.py @@ -4,6 +4,7 @@ """ Collectors for data collection in SAP Automation QA """ +import ipaddress import json import logging from typing import Any diff --git a/src/modules/render_html_report.py b/src/modules/render_html_report.py index 7a6ffdb7..6b837f39 100644 --- a/src/modules/render_html_report.py +++ b/src/modules/render_html_report.py @@ -53,6 +53,11 @@ - Reports will be created in {workspace_directory}/quality_assurance/ type: str required: true + framework_version: + description: + - Version of the SAP Automation QA framework + type: str + required: false author: - Microsoft Corporation notes: @@ -71,6 +76,7 @@ test_group_name: "hana_cluster_validation" report_template: "{{ lookup('file', 'templates/report_template.html') }}" workspace_directory: "/var/log/sap-automation-qa" + framework_version: "1.0.0" register: report_result - name: Show path to generated report @@ -115,6 +121,7 @@ def __init__( workspace_directory: str, test_case_results: List[Dict[str, Any]] = [], system_info: Dict[str, Any] = {}, + framework_version: str = "unknown", ): super().__init__() self.test_group_invocation_id = test_group_invocation_id @@ -128,6 +135,7 @@ def __init__( ) self.test_case_results = test_case_results or [] self.system_info = system_info or {} + self.framework_version = framework_version def read_log_file(self) -> List[Dict[str, Any]]: """ @@ -184,6 +192,7 @@ def render_report(self, test_case_results: List[Dict[str, Any]]) -> None: "%m/%d/%Y, %I:%M:%S %p" ), "system_info": self.system_info, + "framework_version": self.framework_version, } ) ) @@ -205,6 +214,7 @@ def run_module() -> None: workspace_directory=dict(type="str", required=True), test_case_results=dict(type="list", required=False), system_info=dict(type="dict", required=False), + framework_version=dict(type="str", required=False), ) module = AnsibleModule(argument_spec=module_args, supports_check_mode=True) @@ -216,6 +226,7 @@ def run_module() -> None: workspace_directory=module.params["workspace_directory"], test_case_results=module.params.get("test_case_results", []), system_info=module.params.get("system_info", {}), + framework_version=module.params.get("framework_version", "unknown"), ) test_case_results = ( diff --git a/src/roles/configuration_checks/tasks/files/hana.yml b/src/roles/configuration_checks/tasks/files/hana.yml index 243a1a8e..dc412ce7 100644 --- a/src/roles/configuration_checks/tasks/files/hana.yml +++ b/src/roles/configuration_checks/tasks/files/hana.yml @@ -1289,7 +1289,7 @@ checks: - id: "DB-HANA-0050" name: "Disk performance for /hana/data (MBPS)" - description: "The disk performance for /hana/data should be >= 64 MByte/s" + description: "The disk performance for /hana/data should be >= 400 MByte/s" category: *sap_check severity: *high workload: *sap @@ -1307,7 +1307,7 @@ checks: mount_point: "/hana/data" validator_type: *range validator_args: - min: "64" + min: "400" report: *check references: sap: "2972496" @@ -1315,7 +1315,7 @@ checks: - id: "DB-HANA-0051" name: "Disk performance for /hana/log (MBPS)" - description: "The disk performance for /hana/log should be >= 64 MByte/s" + description: "The disk performance for /hana/log should be >= 250 MByte/s" category: *sap_check severity: *high workload: *sap @@ -1333,7 +1333,7 @@ checks: mount_point: "/hana/log" validator_type: *range validator_args: - min: "64" + min: "250" report: *check references: sap: "2972496" diff --git a/src/roles/misc/tasks/render-html-report.yml b/src/roles/misc/tasks/render-html-report.yml index 1e30fb64..4476311a 100644 --- a/src/roles/misc/tasks/render-html-report.yml +++ b/src/roles/misc/tasks/render-html-report.yml @@ -14,6 +14,11 @@ ansible.builtin.set_fact: html_report_template: "{{ lookup('file', html_template_name | default('./templates/report.html')) }}" + - name: "Get framework version" + no_log: true + ansible.builtin.set_fact: + framework_version: "{{ lookup('file', '../../../../VERSION') | default('unknown') }}" + - name: "Read the log file and create a HTML report" render_html_report: test_group_invocation_id: "{{ test_group_invocation_id }}" @@ -22,4 +27,5 @@ workspace_directory: "{{ _workspace_directory }}" test_case_results: "{{ all_results | default([]) }}" system_info: "{{ system_info | default({}) }}" + framework_version: "{{ framework_version | default('unknown') }}" register: report_file_path diff --git a/src/templates/config_checks_report.html b/src/templates/config_checks_report.html index f8d0c1f1..74b4ac9c 100644 --- a/src/templates/config_checks_report.html +++ b/src/templates/config_checks_report.html @@ -1391,7 +1391,7 @@

Report generated on: {{ report_generation_time }} +