From bf04be6878be6ef9a5479fa48ba97534748bafb4 Mon Sep 17 00:00:00 2001 From: Richard Henwood Date: Wed, 12 Aug 2026 11:32:16 -0500 Subject: [PATCH] Use hostnamectl Do not use `hostname` as it is old-fashioned https://github.com/dell/omnia/issues/4982 Signed-off-by: Richard Henwood --- src/main/omnia.sh | 10 +++++----- test/discovery/library/vars/common_vars.py | 4 ++-- .../library/functions/build_image_func.py | 11 ++++++----- .../library/messages/build_image_msgs.py | 4 ++-- test/image_build_manager/library/vars/common_vars.py | 8 ++++---- test/main/library/vars/common_vars.py | 2 +- test/orchestrator/library/vars/common_vars.py | 4 ++-- test/plugins/omnia_auto/functions/host_func.py | 6 ++++-- 8 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/main/omnia.sh b/src/main/omnia.sh index c930bc9244..e7218fc199 100755 --- a/src/main/omnia.sh +++ b/src/main/omnia.sh @@ -118,9 +118,9 @@ validate_env() { export SYSTEM_ADMIN_NIC_IPV4 - # --- Validate hostname matches system (hostname -s) --- + # --- Validate hostname matches system (hostnamectl hostname) --- local actual_hostname - actual_hostname="$(hostname -s 2>/dev/null || hostname 2>/dev/null)" + actual_hostname="$(hostnamectl hostname 2>/dev/null)" if [ -n "$actual_hostname" ] && [ "$actual_hostname" != "$SYSTEM_HOSTNAME" ]; then echo -e "${RED}ERROR: SYSTEM_HOSTNAME (${SYSTEM_HOSTNAME}) does not match actual hostname (${actual_hostname})${NC}" echo -e "${YELLOW} Fix: update SYSTEM_HOSTNAME in omnia.env${NC}" @@ -128,9 +128,9 @@ validate_env() { errors=$((errors + 1)) fi - # --- Validate domain matches system (hostname -d) --- + # --- Validate domain matches system (hostnamectl --static) --- local actual_domain - actual_domain="$(hostname -d 2>/dev/null || true)" + actual_domain="$(hostnamectl --static 2>/dev/null | cut -s -d. -f2-)" if [ -n "$actual_domain" ] && [ "$actual_domain" != "$SYSTEM_DOMAIN_NAME" ]; then echo -e "${YELLOW}WARNING: SYSTEM_DOMAIN_NAME (${SYSTEM_DOMAIN_NAME}) does not match system domain (${actual_domain})${NC}" echo -e "${YELLOW} Fix: update SYSTEM_DOMAIN_NAME in omnia.env${NC}" @@ -140,7 +140,7 @@ validate_env() { # --- Validate admin IP is assigned to a local interface --- local all_ips - all_ips="$(hostname -I 2>/dev/null || ip -4 addr show | grep -oP '(?<=inet\s)\d+\.\d+\.\d+\.\d+' 2>/dev/null || true)" + all_ips="$(ip -4 addr show 2>/dev/null | awk '/inet / {print $2}' | cut -d/ -f1 | tr '\n' ' ')" if [ -n "$all_ips" ]; then local ip_found=false for ip in $all_ips; do diff --git a/test/discovery/library/vars/common_vars.py b/test/discovery/library/vars/common_vars.py index 0510c6de93..3c786f6673 100644 --- a/test/discovery/library/vars/common_vars.py +++ b/test/discovery/library/vars/common_vars.py @@ -92,8 +92,8 @@ ), # --- System --- - "hostname_cmd": "hostname 2>/dev/null", - "hostname_ip": "hostname -I 2>/dev/null", + "hostname_cmd": "hostnamectl hostname 2>/dev/null", + "hostname_ip": "ip -4 addr show 2>/dev/null | awk '/inet / {print $2}' | cut -d/ -f1 | tr '\\n' ' '", "rpm_check": "rpm -q {package} 2>/dev/null", "which_cmd": "which {binary} 2>/dev/null", diff --git a/test/image_build_manager/library/functions/build_image_func.py b/test/image_build_manager/library/functions/build_image_func.py index 8057868cf1..0dabad66e7 100644 --- a/test/image_build_manager/library/functions/build_image_func.py +++ b/test/image_build_manager/library/functions/build_image_func.py @@ -1765,8 +1765,9 @@ def check_env_vars_present(host) -> Dict[str, Any]: def check_hostname_domain(host) -> Dict[str, Any]: """Verify hostname and domain match configured env vars on target. - Uses ``hostname -s`` (short hostname) and ``hostname -d`` (domain) - to compare against SYSTEM_HOSTNAME and SYSTEM_DOMAIN_NAME. + Uses ``hostnamectl hostname`` (short hostname) and + ``hostnamectl --static`` (domain) to compare against + SYSTEM_HOSTNAME and SYSTEM_DOMAIN_NAME. Returns: Dict with 'success', 'results', 'details'. @@ -1807,13 +1808,13 @@ def check_hostname_domain(host) -> Dict[str, Any]: if not hostname_match: error = ( f"Hostname mismatch: SYSTEM_HOSTNAME={cfg_hostname}, " - f"actual hostname -s={actual_hostname}. " + f"actual hostnamectl hostname={actual_hostname}. " "Fix: hostnamectl set-hostname or update omnia.env" ) elif not domain_match: error = ( f"Domain mismatch: SYSTEM_DOMAIN_NAME={cfg_domain}, " - f"actual hostname -d={actual_domain}. " + f"actual hostnamectl --static (domain)={actual_domain}. " "Fix: update SYSTEM_DOMAIN_NAME in omnia.env or " f"hostnamectl set-hostname {cfg_hostname}.{cfg_domain}" ) @@ -1830,7 +1831,7 @@ def check_admin_ip(host) -> Dict[str, Any]: """Verify SYSTEM_ADMIN_NIC_IPV4 is assigned to a local interface. Reads SYSTEM_ADMIN_NIC_IPV4 from the target and verifies the IP is - present in the output of ``hostname -I``. + present in the output of ``ip -4 addr show``. Returns: Dict with 'success', 'details', 'error'. diff --git a/test/image_build_manager/library/messages/build_image_msgs.py b/test/image_build_manager/library/messages/build_image_msgs.py index ec9cd7d0bb..2c4df44c5d 100644 --- a/test/image_build_manager/library/messages/build_image_msgs.py +++ b/test/image_build_manager/library/messages/build_image_msgs.py @@ -425,7 +425,7 @@ "\u2551 {error}\n" "\u2551\n" "\u2551 HOW TO FIX:\n" - "\u2551 1. Check actual: hostname -s (short), hostname -d (domain)\n" + "\u2551 1. Check actual: hostnamectl hostname (short), hostnamectl --static (FQDN)\n" "\u2551 2. Update SYSTEM_HOSTNAME / SYSTEM_DOMAIN_NAME in omnia.env\n" "\u2551 3. Or: hostnamectl set-hostname .\n" "\u2551 4. Re-run: omnia.sh --setup-venv\n" @@ -439,7 +439,7 @@ "\u2551 {error}\n" "\u2551\n" "\u2551 HOW TO FIX:\n" - "\u2551 1. Check assigned IPs: hostname -I\n" + "\u2551 1. Check assigned IPs: ip -4 addr show\n" "\u2551 2. Verify SYSTEM_ADMIN_NIC_IPV4 in omnia.env matches one of them\n" "\u2551 3. Re-run: omnia.sh --setup-venv\n" "\u255a" + _BORDER + "\u255d\n" diff --git a/test/image_build_manager/library/vars/common_vars.py b/test/image_build_manager/library/vars/common_vars.py index cf5427aceb..e9dcb42fb3 100644 --- a/test/image_build_manager/library/vars/common_vars.py +++ b/test/image_build_manager/library/vars/common_vars.py @@ -244,10 +244,10 @@ " --tags {tag} -v 2>&1" ), # --- System --- - "hostname_short": "hostname -s 2>/dev/null", - "hostname_domain": "hostname -d 2>/dev/null", - "hostname_fqdn": "hostname -f 2>/dev/null", - "hostname_ip": "hostname -I 2>/dev/null", + "hostname_short": "hostnamectl hostname 2>/dev/null | cut -d. -f1", + "hostname_domain": "hostnamectl --static 2>/dev/null | cut -s -d. -f2-", + "hostname_fqdn": "hostnamectl --static 2>/dev/null", + "hostname_ip": "ip -4 addr show 2>/dev/null | awk '/inet / {print $2}' | cut -d/ -f1 | tr '\\n' ' '", "rpm_check": "rpm -q {package} 2>/dev/null", "which_cmd": "which {binary} 2>/dev/null", # --- Systemd --- diff --git a/test/main/library/vars/common_vars.py b/test/main/library/vars/common_vars.py index 6c57338f08..7478a40eb4 100644 --- a/test/main/library/vars/common_vars.py +++ b/test/main/library/vars/common_vars.py @@ -244,7 +244,7 @@ " -type f 2>/dev/null | wc -l" ), # --- System --- - "hostname_cmd": "hostname 2>/dev/null", + "hostname_cmd": "hostnamectl hostname 2>/dev/null", "which_cmd": "which {binary} 2>/dev/null", # --- omnia-cli execution --- "omnia_cli_help": ( diff --git a/test/orchestrator/library/vars/common_vars.py b/test/orchestrator/library/vars/common_vars.py index eac56c0b22..f46e6f790e 100644 --- a/test/orchestrator/library/vars/common_vars.py +++ b/test/orchestrator/library/vars/common_vars.py @@ -143,8 +143,8 @@ ), # --- System --- - "hostname_cmd": "hostname 2>/dev/null", - "hostname_ip": "hostname -I 2>/dev/null", + "hostname_cmd": "hostnamectl hostname 2>/dev/null", + "hostname_ip": "ip -4 addr show 2>/dev/null | awk '/inet / {print $2}' | cut -d/ -f1 | tr '\\n' ' '", "rpm_check": "rpm -q {package} 2>/dev/null", "which_cmd": "which {binary} 2>/dev/null", diff --git a/test/plugins/omnia_auto/functions/host_func.py b/test/plugins/omnia_auto/functions/host_func.py index 4b210c159e..c61cd1432a 100644 --- a/test/plugins/omnia_auto/functions/host_func.py +++ b/test/plugins/omnia_auto/functions/host_func.py @@ -26,6 +26,7 @@ """ import os +import re import subprocess import tempfile from typing import Dict, Any, Optional, Tuple @@ -247,10 +248,11 @@ def _is_local_ip(ip: str) -> bool: return True try: result = subprocess.run( - ["hostname", "-I"], + ["ip", "-4", "addr", "show"], capture_output=True, text=True, timeout=5, check=False, ) - return ip in result.stdout.strip().split() + ips = re.findall(r'\binet (\d+\.\d+\.\d+\.\d+)/', result.stdout) + return ip in ips except (OSError, subprocess.SubprocessError): return False