From 1263c65609b74bc480ee7503a70ebb8876820caf Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Mon, 4 May 2026 11:18:41 +0530 Subject: [PATCH 01/12] Add BMC feature to foreman-proxy --- src/features.yaml | 4 ++++ src/playbooks/deploy/metadata.obsah.yaml | 11 +++++++++++ src/roles/foreman_proxy/defaults/main.yaml | 3 +++ .../foreman_proxy/templates/settings.d/bmc.yml.j2 | 3 +++ 4 files changed, 21 insertions(+) create mode 100644 src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 diff --git a/src/features.yaml b/src/features.yaml index 5a77a1585..24dc7a084 100644 --- a/src/features.yaml +++ b/src/features.yaml @@ -44,3 +44,7 @@ iop: description: iop services dependencies: - rh-cloud +bmc: + description: Power management for bare metal hosts (IPMI, Redfish, SSH) + foreman_proxy: + plugin_name: bmc diff --git a/src/playbooks/deploy/metadata.obsah.yaml b/src/playbooks/deploy/metadata.obsah.yaml index e572ff46d..370c6185b 100644 --- a/src/playbooks/deploy/metadata.obsah.yaml +++ b/src/playbooks/deploy/metadata.obsah.yaml @@ -46,6 +46,17 @@ variables: type: AbsolutePath parameter: --certificate-server-ca-certificate persist: false + foreman_proxy_bmc_default_provider: + parameter: --bmc-default-provider + help: Default BMC provider. + choices: + - freeipmi + - ipmitool + - redfish + foreman_proxy_bmc_redfish_verify_ssl: + parameter: --bmc-redfish-verify-ssl + help: Verify SSL certificates for Redfish BMC connections. + type: Boolean constraints: required_together: diff --git a/src/roles/foreman_proxy/defaults/main.yaml b/src/roles/foreman_proxy/defaults/main.yaml index 1d48354d3..cd4e343bc 100644 --- a/src/roles/foreman_proxy/defaults/main.yaml +++ b/src/roles/foreman_proxy/defaults/main.yaml @@ -19,3 +19,6 @@ foreman_proxy_available_features: "{{ [] | available_foreman_proxy_plugins }}" foreman_proxy_disabled_features: "{{ foreman_proxy_available_features | difference(foreman_proxy_features) }}" foreman_proxy_foreman_server_url: "https://{{ ansible_facts['fqdn'] }}" + +# BMC settings +foreman_proxy_bmc_default_provider: ipmitool diff --git a/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 b/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 new file mode 100644 index 000000000..21abd2baa --- /dev/null +++ b/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 @@ -0,0 +1,3 @@ +--- +:enabled: {{ feature_enabled }} +:bmc_default_provider: {{ foreman_proxy_bmc_default_provider }} From 2c9f0b693bd8ea3d1d518f8696889dd8862ac3fd Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Mon, 4 May 2026 17:13:53 +0530 Subject: [PATCH 02/12] Add Redfish configurations --- src/roles/foreman_proxy/defaults/main.yaml | 1 + src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/roles/foreman_proxy/defaults/main.yaml b/src/roles/foreman_proxy/defaults/main.yaml index cd4e343bc..11792e62a 100644 --- a/src/roles/foreman_proxy/defaults/main.yaml +++ b/src/roles/foreman_proxy/defaults/main.yaml @@ -22,3 +22,4 @@ foreman_proxy_foreman_server_url: "https://{{ ansible_facts['fqdn'] }}" # BMC settings foreman_proxy_bmc_default_provider: ipmitool +foreman_proxy_bmc_redfish_verify_ssl: true diff --git a/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 b/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 index 21abd2baa..a37d75c00 100644 --- a/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 +++ b/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 @@ -1,3 +1,7 @@ --- :enabled: {{ feature_enabled }} :bmc_default_provider: {{ foreman_proxy_bmc_default_provider }} + +{% if foreman_proxy_bmc_default_provider == 'redfish' %} +:redfish_verify_ssl: {{ foreman_proxy_bmc_redfish_verify_ssl }} +{% endif %} From a331e56f13a7f82d046b602df666577588cbbd41 Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Tue, 5 May 2026 14:43:30 +0530 Subject: [PATCH 03/12] tests --- tests/bmc_test.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/bmc_test.py diff --git a/tests/bmc_test.py b/tests/bmc_test.py new file mode 100644 index 000000000..265e002a7 --- /dev/null +++ b/tests/bmc_test.py @@ -0,0 +1,41 @@ +import json +import os +import pytest +import yaml + +FOREMAN_PROXY_PORT = 8443 +BMC_CONFIG = "/etc/foreman-proxy/settings.d/bmc.yml" + +test_dir = os.path.dirname(os.path.abspath(__file__)) +foremanctl_dir = os.path.dirname(test_dir) +params_file = os.path.join(foremanctl_dir, '.var', 'lib', 'foremanctl', 'parameters.yaml') + +def is_bmc_enabled(): + if os.path.exists(params_file): + with open(params_file, 'r') as f: + params = yaml.safe_load(f) + features = params.get('features', []) + if isinstance(features, str): + features = features.split() + return 'bmc' in features + return False + +def get_bmc_provider(): + if os.path.exists(params_file): + with open(params_file, 'r') as f: + params = yaml.safe_load(f) + return params.get('foreman_proxy_bmc_default_provider', 'ipmitool') + return 'ipmitool' + +@pytest.mark.skipif("not is_bmc_enabled()") +def test_bmc_feature_in_proxy(server, certificates, server_fqdn): + cmd = server.run(f"curl --cacert {certificates['ca_certificate']} --silent https://{server_fqdn}:{FOREMAN_PROXY_PORT}/features") + assert cmd.succeeded + features = json.loads(cmd.stdout) + assert "bmc" in features + +@pytest.mark.skipif("not is_bmc_enabled()") +def test_bmc_default_provider(server): + cmd = server.run(f"podman exec foreman-proxy grep ':bmc_default_provider:' {BMC_CONFIG}") + assert cmd.succeeded + assert get_bmc_provider() in cmd.stdout From 9d1c33fccc7aebb7bf79d25bf6924b1ac8d7e772 Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Wed, 6 May 2026 11:40:07 +0530 Subject: [PATCH 04/12] update parameters doc --- docs/user/parameters.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/user/parameters.md b/docs/user/parameters.md index 85d9c6619..5a09bf37b 100644 --- a/docs/user/parameters.md +++ b/docs/user/parameters.md @@ -103,6 +103,13 @@ There are multiple use cases from the users perspective that dictate what parame ## Smart Proxy +### Mapped + +| Parameter | Description | foreman-installer Parameters | +| --------- | ----------- | ---------------------------- | +| `--bmc-default-provider` | Default BMC provider | `--foreman-proxy-bmc-default-provider` | +| `--bmc-redfish-verify-ssl` | Verify SSL certificates for Redfish BMC connections | `--foreman-proxy-bmc-redfish-verify-ssl` | + ### Undetermined | Installer Parameter | Description | Module | Puppet Parameter | @@ -152,8 +159,6 @@ There are multiple use cases from the users perspective that dictate what parame | `--foreman-proxy-plugin-remote-execution-script-mode` | | foreman_proxy::plugin::remote_execution_script | mode | | `--foreman-proxy-plugin-openscap-ansible-module` | | foreman_proxy::plugin::openscap | ansible_module | | `--foreman-proxy-plugin-openscap-puppet-module` | | foreman_proxy::plugin::openscap | puppet_module | -| `--foreman-proxy-bmc` | | | | -| `--foreman-proxy-bmc-default-provider` | | | | | `--foreman-proxy-content-enable-ostree` | | | | | `--foreman-proxy-content-pulpcore-additional-import-paths` | | | | | `--foreman-proxy-http` | | | | From 59042b56f85601341e9b37fa14839df4980b4a64 Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Wed, 6 May 2026 14:04:05 +0530 Subject: [PATCH 05/12] refactor tests --- tests/bmc_test.py | 41 ------------------------------------- tests/conftest.py | 14 ++++++------- tests/foreman_proxy_test.py | 24 ++++++++++++++++++++++ 3 files changed, 30 insertions(+), 49 deletions(-) delete mode 100644 tests/bmc_test.py diff --git a/tests/bmc_test.py b/tests/bmc_test.py deleted file mode 100644 index 265e002a7..000000000 --- a/tests/bmc_test.py +++ /dev/null @@ -1,41 +0,0 @@ -import json -import os -import pytest -import yaml - -FOREMAN_PROXY_PORT = 8443 -BMC_CONFIG = "/etc/foreman-proxy/settings.d/bmc.yml" - -test_dir = os.path.dirname(os.path.abspath(__file__)) -foremanctl_dir = os.path.dirname(test_dir) -params_file = os.path.join(foremanctl_dir, '.var', 'lib', 'foremanctl', 'parameters.yaml') - -def is_bmc_enabled(): - if os.path.exists(params_file): - with open(params_file, 'r') as f: - params = yaml.safe_load(f) - features = params.get('features', []) - if isinstance(features, str): - features = features.split() - return 'bmc' in features - return False - -def get_bmc_provider(): - if os.path.exists(params_file): - with open(params_file, 'r') as f: - params = yaml.safe_load(f) - return params.get('foreman_proxy_bmc_default_provider', 'ipmitool') - return 'ipmitool' - -@pytest.mark.skipif("not is_bmc_enabled()") -def test_bmc_feature_in_proxy(server, certificates, server_fqdn): - cmd = server.run(f"curl --cacert {certificates['ca_certificate']} --silent https://{server_fqdn}:{FOREMAN_PROXY_PORT}/features") - assert cmd.succeeded - features = json.loads(cmd.stdout) - assert "bmc" in features - -@pytest.mark.skipif("not is_bmc_enabled()") -def test_bmc_default_provider(server): - cmd = server.run(f"podman exec foreman-proxy grep ':bmc_default_provider:' {BMC_CONFIG}") - assert cmd.succeeded - assert get_bmc_provider() in cmd.stdout diff --git a/tests/conftest.py b/tests/conftest.py index 7f0b31df0..e86a3cc1a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -205,22 +205,20 @@ def wait_for_tasks(foremanapi, search=None): def wait_for_metadata_generate(foremanapi): wait_for_tasks(foremanapi, 'label = Actions::Katello::Repository::MetadataGenerate') - -def is_iop_enabled(): +def enabled_features(): test_dir = os.path.dirname(os.path.abspath(__file__)) foremanctl_dir = os.path.dirname(test_dir) params_file = os.path.join(foremanctl_dir, '.var', 'lib', 'foremanctl', 'parameters.yaml') - if os.path.exists(params_file): with open(params_file, 'r') as f: - params = yaml.safe_load(f) - features = params.get('features', []) + features = yaml.safe_load(f).get('features', []) if isinstance(features, str): features = features.split() - return 'iop' in features - - return False + return features + return [] +def is_iop_enabled(): + return 'iop' in enabled_features() def pytest_configure(config): config.addinivalue_line("markers", "iop: tests requiring IOP to be enabled") diff --git a/tests/foreman_proxy_test.py b/tests/foreman_proxy_test.py index 9ffaddc97..2175e13f0 100644 --- a/tests/foreman_proxy_test.py +++ b/tests/foreman_proxy_test.py @@ -2,8 +2,24 @@ import json import pytest +import yaml +from conftest import enabled_features FOREMAN_PROXY_PORT = 8443 +BMC_CONFIG = "/etc/foreman-proxy/settings.d/bmc.yml" + +def get_proxy_feature_setting(server, feature, default=None): + cmd = server.run(f"podman exec foreman-proxy cat /etc/foreman-proxy/settings.d/{feature}.yml") + if cmd.succeeded: + return yaml.safe_load(cmd.stdout) + return default + +def is_bmc_enabled(): + return 'bmc' in enabled_features() + +def get_default_bmc_provider(server): + bmc_setting = get_proxy_feature_setting(server, 'bmc') + return bmc_setting.get(':bmc_default_provider', 'ipmitool') def test_foreman_proxy_features(server, certificates, server_fqdn): @@ -13,6 +29,8 @@ def test_foreman_proxy_features(server, certificates, server_fqdn): assert "logs" in features assert "script" in features assert "dynflow" in features + if is_bmc_enabled(): + assert "bmc" in features def test_foreman_proxy_service(server): @@ -38,3 +56,9 @@ def test_foreman_proxy_client_auth_to_foreman(server, certificates, server_fqdn) ) assert cmd.succeeded assert cmd.stdout == '201' + +@pytest.mark.skipif("not is_bmc_enabled()") +def test_bmc_default_provider(server): + cmd = server.run(f"podman exec foreman-proxy grep ':bmc_default_provider:' {BMC_CONFIG}") + assert cmd.succeeded + assert get_default_bmc_provider(server) in cmd.stdout From babe2070651b3a17cb2e50979cc68074769f2b3d Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Fri, 8 May 2026 14:58:59 +0530 Subject: [PATCH 06/12] don't apply config for only default provider --- src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 | 3 --- tests/foreman_proxy_test.py | 6 ++---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 b/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 index a37d75c00..20d496eb9 100644 --- a/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 +++ b/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 @@ -1,7 +1,4 @@ --- :enabled: {{ feature_enabled }} :bmc_default_provider: {{ foreman_proxy_bmc_default_provider }} - -{% if foreman_proxy_bmc_default_provider == 'redfish' %} :redfish_verify_ssl: {{ foreman_proxy_bmc_redfish_verify_ssl }} -{% endif %} diff --git a/tests/foreman_proxy_test.py b/tests/foreman_proxy_test.py index 2175e13f0..bbcc2246f 100644 --- a/tests/foreman_proxy_test.py +++ b/tests/foreman_proxy_test.py @@ -19,7 +19,7 @@ def is_bmc_enabled(): def get_default_bmc_provider(server): bmc_setting = get_proxy_feature_setting(server, 'bmc') - return bmc_setting.get(':bmc_default_provider', 'ipmitool') + return bmc_setting.get(':bmc_default_provider') def test_foreman_proxy_features(server, certificates, server_fqdn): @@ -59,6 +59,4 @@ def test_foreman_proxy_client_auth_to_foreman(server, certificates, server_fqdn) @pytest.mark.skipif("not is_bmc_enabled()") def test_bmc_default_provider(server): - cmd = server.run(f"podman exec foreman-proxy grep ':bmc_default_provider:' {BMC_CONFIG}") - assert cmd.succeeded - assert get_default_bmc_provider(server) in cmd.stdout + assert get_default_bmc_provider(server) == 'ipmitool' From 690f9d7149f1ca369b388ed4ebbb80e0079d46ed Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Fri, 8 May 2026 17:24:14 +0530 Subject: [PATCH 07/12] fix tests and enable bmc in CI --- .github/workflows/test.yml | 1 + tests/foreman_proxy_test.py | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e4bc75019..f7e074166 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -154,6 +154,7 @@ jobs: --add-feature azure-rm \ --add-feature google \ --add-feature remote-execution \ + --add-feature bmc \ ${{ matrix.iop == 'enabled' && '--add-feature iop' || '' }} - name: Run tests run: | diff --git a/tests/foreman_proxy_test.py b/tests/foreman_proxy_test.py index bbcc2246f..70e6d88b2 100644 --- a/tests/foreman_proxy_test.py +++ b/tests/foreman_proxy_test.py @@ -6,13 +6,12 @@ from conftest import enabled_features FOREMAN_PROXY_PORT = 8443 -BMC_CONFIG = "/etc/foreman-proxy/settings.d/bmc.yml" -def get_proxy_feature_setting(server, feature, default=None): +def get_proxy_feature_setting(server, feature): cmd = server.run(f"podman exec foreman-proxy cat /etc/foreman-proxy/settings.d/{feature}.yml") if cmd.succeeded: return yaml.safe_load(cmd.stdout) - return default + return {} def is_bmc_enabled(): return 'bmc' in enabled_features() From 7e6c7840ef9da14716f3cea71284cde01136d52e Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Mon, 11 May 2026 16:44:50 +0530 Subject: [PATCH 08/12] don't mention ssh --- src/features.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features.yaml b/src/features.yaml index 24dc7a084..f8284b019 100644 --- a/src/features.yaml +++ b/src/features.yaml @@ -45,6 +45,6 @@ iop: dependencies: - rh-cloud bmc: - description: Power management for bare metal hosts (IPMI, Redfish, SSH) + description: Power management for bare metal hosts (IPMI, Redfish) foreman_proxy: plugin_name: bmc From cf2c560a9ce9333531506c860086da457ec67e90 Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Tue, 12 May 2026 13:45:44 +0530 Subject: [PATCH 09/12] Limit default provider to only ipmi implementation --- docs/user/parameters.md | 2 +- src/playbooks/deploy/metadata.obsah.yaml | 7 +++---- src/roles/foreman_proxy/defaults/main.yaml | 2 +- src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/user/parameters.md b/docs/user/parameters.md index 5a09bf37b..dc55880ff 100644 --- a/docs/user/parameters.md +++ b/docs/user/parameters.md @@ -107,7 +107,7 @@ There are multiple use cases from the users perspective that dictate what parame | Parameter | Description | foreman-installer Parameters | | --------- | ----------- | ---------------------------- | -| `--bmc-default-provider` | Default BMC provider | `--foreman-proxy-bmc-default-provider` | +| `--bmc-ipmi-implementation` | IPMI implementation to use for BMC | `--foreman-proxy-bmc-default-provider` | | `--bmc-redfish-verify-ssl` | Verify SSL certificates for Redfish BMC connections | `--foreman-proxy-bmc-redfish-verify-ssl` | ### Undetermined diff --git a/src/playbooks/deploy/metadata.obsah.yaml b/src/playbooks/deploy/metadata.obsah.yaml index 370c6185b..3a6e6da6f 100644 --- a/src/playbooks/deploy/metadata.obsah.yaml +++ b/src/playbooks/deploy/metadata.obsah.yaml @@ -46,13 +46,12 @@ variables: type: AbsolutePath parameter: --certificate-server-ca-certificate persist: false - foreman_proxy_bmc_default_provider: - parameter: --bmc-default-provider - help: Default BMC provider. + foreman_proxy_bmc_ipmi_implementation: + parameter: --bmc-ipmi-implementation + help: IPMI implementation to use for BMC. choices: - freeipmi - ipmitool - - redfish foreman_proxy_bmc_redfish_verify_ssl: parameter: --bmc-redfish-verify-ssl help: Verify SSL certificates for Redfish BMC connections. diff --git a/src/roles/foreman_proxy/defaults/main.yaml b/src/roles/foreman_proxy/defaults/main.yaml index 11792e62a..cb62496ac 100644 --- a/src/roles/foreman_proxy/defaults/main.yaml +++ b/src/roles/foreman_proxy/defaults/main.yaml @@ -21,5 +21,5 @@ foreman_proxy_disabled_features: "{{ foreman_proxy_available_features | differen foreman_proxy_foreman_server_url: "https://{{ ansible_facts['fqdn'] }}" # BMC settings -foreman_proxy_bmc_default_provider: ipmitool +foreman_proxy_bmc_ipmi_implementation: ipmitool foreman_proxy_bmc_redfish_verify_ssl: true diff --git a/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 b/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 index 20d496eb9..f54ff3918 100644 --- a/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 +++ b/src/roles/foreman_proxy/templates/settings.d/bmc.yml.j2 @@ -1,4 +1,4 @@ --- :enabled: {{ feature_enabled }} -:bmc_default_provider: {{ foreman_proxy_bmc_default_provider }} +:bmc_default_provider: {{ foreman_proxy_bmc_ipmi_implementation }} :redfish_verify_ssl: {{ foreman_proxy_bmc_redfish_verify_ssl }} From 97dce2e3a4d0b998c12ff7343b8627efa9dca1da Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Tue, 12 May 2026 14:17:43 +0530 Subject: [PATCH 10/12] rename test --- tests/conftest.py | 6 +++++- tests/foreman_proxy_test.py | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index e86a3cc1a..8594d817a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -13,7 +13,8 @@ from jinja2 import select_autoescape from requests.adapters import HTTPAdapter -SSH_CONFIG='./.tmp/ssh-config' + +SSH_CONFIG = './.tmp/ssh-config' def pytest_addoption(parser): @@ -205,6 +206,7 @@ def wait_for_tasks(foremanapi, search=None): def wait_for_metadata_generate(foremanapi): wait_for_tasks(foremanapi, 'label = Actions::Katello::Repository::MetadataGenerate') + def enabled_features(): test_dir = os.path.dirname(os.path.abspath(__file__)) foremanctl_dir = os.path.dirname(test_dir) @@ -217,9 +219,11 @@ def enabled_features(): return features return [] + def is_iop_enabled(): return 'iop' in enabled_features() + def pytest_configure(config): config.addinivalue_line("markers", "iop: tests requiring IOP to be enabled") diff --git a/tests/foreman_proxy_test.py b/tests/foreman_proxy_test.py index 70e6d88b2..2d5860f0b 100644 --- a/tests/foreman_proxy_test.py +++ b/tests/foreman_proxy_test.py @@ -57,5 +57,5 @@ def test_foreman_proxy_client_auth_to_foreman(server, certificates, server_fqdn) assert cmd.stdout == '201' @pytest.mark.skipif("not is_bmc_enabled()") -def test_bmc_default_provider(server): +def test_bmc_default_ipmi_implementation(server): assert get_default_bmc_provider(server) == 'ipmitool' From 34cd62853715e79791ac26d41f3463a9c522eeb2 Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Wed, 13 May 2026 18:38:35 +0530 Subject: [PATCH 11/12] ruff fixes --- tests/conftest.py | 1 - tests/foreman_proxy_test.py | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index 8594d817a..4883e923a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -13,7 +13,6 @@ from jinja2 import select_autoescape from requests.adapters import HTTPAdapter - SSH_CONFIG = './.tmp/ssh-config' diff --git a/tests/foreman_proxy_test.py b/tests/foreman_proxy_test.py index 2d5860f0b..3e61d4079 100644 --- a/tests/foreman_proxy_test.py +++ b/tests/foreman_proxy_test.py @@ -7,15 +7,18 @@ FOREMAN_PROXY_PORT = 8443 + def get_proxy_feature_setting(server, feature): cmd = server.run(f"podman exec foreman-proxy cat /etc/foreman-proxy/settings.d/{feature}.yml") if cmd.succeeded: return yaml.safe_load(cmd.stdout) return {} + def is_bmc_enabled(): return 'bmc' in enabled_features() + def get_default_bmc_provider(server): bmc_setting = get_proxy_feature_setting(server, 'bmc') return bmc_setting.get(':bmc_default_provider') @@ -56,6 +59,7 @@ def test_foreman_proxy_client_auth_to_foreman(server, certificates, server_fqdn) assert cmd.succeeded assert cmd.stdout == '201' + @pytest.mark.skipif("not is_bmc_enabled()") def test_bmc_default_ipmi_implementation(server): assert get_default_bmc_provider(server) == 'ipmitool' From b9bb58b43310f6931d321f918014c6cfacc87c8f Mon Sep 17 00:00:00 2001 From: Arvind Jangir Date: Wed, 13 May 2026 19:21:48 +0530 Subject: [PATCH 12/12] test bmc capabilites --- tests/foreman_proxy_test.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/tests/foreman_proxy_test.py b/tests/foreman_proxy_test.py index 3e61d4079..847a723bb 100644 --- a/tests/foreman_proxy_test.py +++ b/tests/foreman_proxy_test.py @@ -2,26 +2,24 @@ import json import pytest -import yaml from conftest import enabled_features FOREMAN_PROXY_PORT = 8443 -def get_proxy_feature_setting(server, feature): - cmd = server.run(f"podman exec foreman-proxy cat /etc/foreman-proxy/settings.d/{feature}.yml") - if cmd.succeeded: - return yaml.safe_load(cmd.stdout) - return {} - - def is_bmc_enabled(): return 'bmc' in enabled_features() -def get_default_bmc_provider(server): - bmc_setting = get_proxy_feature_setting(server, 'bmc') - return bmc_setting.get(':bmc_default_provider') +def get_proxy_v2_features(server, certificates, server_fqdn): + cmd = server.run( + f"curl --cacert {certificates['server_ca_certificate']} " + f"--cert {certificates['client_certificate']} " + f"--key {certificates['client_key']} " + f"--silent https://{server_fqdn}:{FOREMAN_PROXY_PORT}/v2/features" + ) + assert cmd.succeeded, f"Failed to query /v2/features: {cmd.stderr}" + return json.loads(cmd.stdout) def test_foreman_proxy_features(server, certificates, server_fqdn): @@ -33,6 +31,8 @@ def test_foreman_proxy_features(server, certificates, server_fqdn): assert "dynflow" in features if is_bmc_enabled(): assert "bmc" in features + else: + assert "bmc" not in features def test_foreman_proxy_service(server): @@ -61,5 +61,10 @@ def test_foreman_proxy_client_auth_to_foreman(server, certificates, server_fqdn) @pytest.mark.skipif("not is_bmc_enabled()") -def test_bmc_default_ipmi_implementation(server): - assert get_default_bmc_provider(server) == 'ipmitool' +def test_bmc_capabilities(server, certificates, server_fqdn): + features = get_proxy_v2_features(server, certificates, server_fqdn) + assert 'bmc' in features + capabilities = features['bmc'].get('capabilities', []) + assert 'ipmitool' in capabilities + assert 'freeipmi' in capabilities + assert 'redfish' in capabilities