diff --git a/src/saltext/vmware/modules/vmc_security_rules.py b/src/saltext/vmware/modules/vmc_security_rules.py index 84918053..b624adb3 100644 --- a/src/saltext/vmware/modules/vmc_security_rules.py +++ b/src/saltext/vmware/modules/vmc_security_rules.py @@ -91,6 +91,18 @@ def get( (Optional) Opaque cursor to be used for getting next page of records (supplied by current result page) """ + vmc_connection_dict = vmc_request._vmc_connection_details(None, __pillar__) + print(vmc_connection_dict) + hostname = vmc_connection_dict["nsxt_host"] + refresh_key = vmc_connection_dict["api_key"] + authorization_host = vmc_connection_dict["console_host"] + sddc_id = vmc_connection_dict["sddc_id"] + org_id = vmc_connection_dict["org_id"] + # verify_ssl = vmc_connection_dict["verify_ssl"] + + verify_ssl = False + + cert = vmc_connection_dict["verify_ssl"] log.info("Retrieving %s Security rules for SDDC %s", domain_id, sddc_id) api_url_base = vmc_request.set_base_url(hostname) @@ -171,7 +183,15 @@ def get_by_id( The certificate can be retrieved from browser. """ - + vmc_connection_dict = vmc_request._vmc_connection_details(None, __pillar__) + print(vmc_connection_dict) + hostname = vmc_connection_dict["nsxt_host"] + refresh_key = vmc_connection_dict["api_key"] + authorization_host = vmc_connection_dict["console_host"] + sddc_id = vmc_connection_dict["sddc_id"] + org_id = vmc_connection_dict["org_id"] + # verify_ssl = vmc_connection_dict["verify_ssl"] + verify_ssl = False log.info("Retrieving Security rule %s for SDDC %s", rule_id, sddc_id) api_url_base = vmc_request.set_base_url(hostname) api_url = ( @@ -243,7 +263,15 @@ def delete( The certificate can be retrieved from browser. """ - + vmc_connection_dict = vmc_request._vmc_connection_details(None, __pillar__) + print(vmc_connection_dict) + hostname = vmc_connection_dict["nsxt_host"] + refresh_key = vmc_connection_dict["api_key"] + authorization_host = vmc_connection_dict["console_host"] + sddc_id = vmc_connection_dict["sddc_id"] + org_id = vmc_connection_dict["org_id"] + # verify_ssl = vmc_connection_dict["verify_ssl"] + verify_ssl = False log.info("Deleting Security rule %s for SDDC %s", rule_id, sddc_id) api_url_base = vmc_request.set_base_url(hostname) api_url = ( @@ -428,7 +456,15 @@ def create( } """ - + vmc_connection_dict = vmc_request._vmc_connection_details(None, __pillar__) + print(vmc_connection_dict) + hostname = vmc_connection_dict["nsxt_host"] + refresh_key = vmc_connection_dict["api_key"] + authorization_host = vmc_connection_dict["console_host"] + sddc_id = vmc_connection_dict["sddc_id"] + org_id = vmc_connection_dict["org_id"] + # verify_ssl = vmc_connection_dict["verify_ssl"] + verify_ssl = False log.info("Creating Security rule %s for SDDC %s", rule_id, sddc_id) api_url_base = vmc_request.set_base_url(hostname) api_url = ( @@ -637,7 +673,15 @@ def update( } """ - + vmc_connection_dict = vmc_request._vmc_connection_details(None, __pillar__) + print(vmc_connection_dict) + hostname = vmc_connection_dict["nsxt_host"] + refresh_key = vmc_connection_dict["api_key"] + authorization_host = vmc_connection_dict["console_host"] + sddc_id = vmc_connection_dict["sddc_id"] + org_id = vmc_connection_dict["org_id"] + # verify_ssl = vmc_connection_dict["verify_ssl"] + verify_ssl = False log.info("Updating Security rule %s for SDDC %s", rule_id, sddc_id) api_url_base = vmc_request.set_base_url(hostname) api_url = ( diff --git a/src/saltext/vmware/utils/vmc_request.py b/src/saltext/vmware/utils/vmc_request.py index 0b07e25b..d650ba5a 100644 --- a/src/saltext/vmware/utils/vmc_request.py +++ b/src/saltext/vmware/utils/vmc_request.py @@ -83,6 +83,7 @@ def call_api( cert=None, data=None, params=None, + vmc_connection_dict=None, ): """ This function is used to make the http requests for the given operation on VMC and return its response @@ -113,12 +114,17 @@ def call_api( Path to the SSL certificate file to connect to VMC Cloud Console. The certificate can be retrieved from browser. """ - verify = verify_ssl - if verify_ssl: - if cert: - verify = cert - else: - return {vmc_constants.ERROR: vmc_constants.NO_CERTIFICATE_ERROR_MSG} + if vmc_connection_dict: + refresh_key = vmc_connection_dict["api_key"] + authorization_host = vmc_connection_dict["console_host"] + verify = vmc_connection_dict["verify_ssl"] + else: + verify = verify_ssl + if verify_ssl: + if cert: + verify = cert + else: + return {vmc_constants.ERROR: vmc_constants.NO_CERTIFICATE_ERROR_MSG} try: headers = get_headers(refresh_key, authorization_host) @@ -201,3 +207,37 @@ def _filter_kwargs(allowed_kwargs, allow_none=[], default_dict=None, **kwargs): if field in allow_none and val != vmc_constants.VMC_NONE: result[field] = val return result + + +def _vmc_connection_details(opts, pillar): + print(opts) + opts = opts or {} + + console_host = opts.get("vmc_connection_details", {}).get("console_host") or pillar.get( + "vmc_connection_details", {} + ).get("console_host") + nsxt_host = opts.get("vmc_connection_details", {}).get("nsxt_host") or pillar.get( + "vmc_connection_details", {} + ).get("nsxt_host") + org_id = opts.get("vmc_connection_details", {}).get("org_id") or pillar.get( + "vmc_connection_details", {} + ).get("org_id") + sddc_id = opts.get("vmc_connection_details", {}).get("sddc_id") or pillar.get( + "vmc_connection_details", {} + ).get("sddc_id") + api_key = opts.get("vmc_connection_details", {}).get("api_key") or pillar.get( + "vmc_connection_details", {} + ).get("api_key") + verify_ssl = opts.get("vmc_connection_details", {}).get("verify_ssl") or pillar.get( + "vmc_connection_details", {} + ).get("verify_ssl") + + vmc_connection_dict = {} + vmc_connection_dict["console_host"] = console_host + vmc_connection_dict["nsxt_host"] = nsxt_host + vmc_connection_dict["api_key"] = api_key + vmc_connection_dict["org_id"] = org_id + vmc_connection_dict["sddc_id"] = sddc_id + vmc_connection_dict["verify_ssl"] = verify_ssl + + return vmc_connection_dict diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index dc75e348..f7f21fce 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -17,6 +17,7 @@ import saltext.vmware.modules.license_mgr as license_mgr_mod import saltext.vmware.modules.tag as tagging import saltext.vmware.modules.vm as virtual_machine +import saltext.vmware.modules.vmc_security_rules as vmc_security_rule import saltext.vmware.states.datacenter as datacenter_st import saltext.vmware.states.datastore as datastore_state import saltext.vmware.states.esxi as esxi_st @@ -391,6 +392,31 @@ def vmc_nsx_connect(vmc_config): ) +@pytest.fixture() +def vmc_connect_pillar_data(vmc_config): + config = vmc_config["vmc_nsx_connect"] + return { + "vmc_connection_details": { + "nsxt_host": config["hostname"], + "api_key": config["refresh_key"], + "console_host": config["authorization_host"], + "org_id": config["org_id"], + "sddc_id": config["sddc_id"], + "verify_ssl": config["verify_ssl"], + } + } + + +@pytest.fixture +def patch_salt_globals_vmc_security_rule(vmc_connect_pillar_data): + """ + Patch __opts__ and __pillar__ + """ + + setattr(vmc_security_rule, "__opts__", {}) + setattr(vmc_security_rule, "__pillar__", vmc_connect_pillar_data) + + NSXT_CONFIG_FILE_NAME = "nsxt_config.json" diff --git a/tests/integration/modules/test_vmc_security_rules.py b/tests/integration/modules/test_vmc_security_rules.py index bd7c8901..9ed2b57f 100644 --- a/tests/integration/modules/test_vmc_security_rules.py +++ b/tests/integration/modules/test_vmc_security_rules.py @@ -113,7 +113,11 @@ def create_security_rule(get_security_rules, vmc_nsx_connect, security_rule_test def test_create_security_rule( - salt_call_cli, delete_security_rule, vmc_nsx_connect, security_rule_test_data + salt_call_cli, + delete_security_rule, + vmc_nsx_connect, + security_rule_test_data, + patch_salt_globals_vmc_security_rule, ): hostname, refresh_key, authorization_host, org_id, sddc_id, verify_ssl, cert = vmc_nsx_connect domain_id, rule_id = security_rule_test_data @@ -136,7 +140,11 @@ def test_create_security_rule( def test_get_security_rules( - salt_call_cli, get_security_rules, vmc_nsx_connect, security_rule_test_data + salt_call_cli, + get_security_rules, + vmc_nsx_connect, + security_rule_test_data, + patch_salt_globals_vmc_security_rule, ): hostname, refresh_key, authorization_host, org_id, sddc_id, verify_ssl, cert = vmc_nsx_connect domain_id, rule_id = security_rule_test_data @@ -158,7 +166,11 @@ def test_get_security_rules( def test_delete_security_rule( - salt_call_cli, create_security_rule, vmc_nsx_connect, security_rule_test_data + salt_call_cli, + create_security_rule, + vmc_nsx_connect, + security_rule_test_data, + patch_salt_globals_vmc_security_rule, ): hostname, refresh_key, authorization_host, org_id, sddc_id, verify_ssl, cert = vmc_nsx_connect domain_id, rule_id = security_rule_test_data @@ -181,7 +193,11 @@ def test_delete_security_rule( def test_update_security_rule( - salt_call_cli, create_security_rule, vmc_nsx_connect, security_rule_test_data + salt_call_cli, + create_security_rule, + vmc_nsx_connect, + security_rule_test_data, + patch_salt_globals_vmc_security_rule, ): hostname, refresh_key, authorization_host, org_id, sddc_id, verify_ssl, cert = vmc_nsx_connect domain_id, rule_id = security_rule_test_data diff --git a/tests/unit/modules/test_vmc_security_rules.py b/tests/unit/modules/test_vmc_security_rules.py index e20f21c3..7f54f85f 100644 --- a/tests/unit/modules/test_vmc_security_rules.py +++ b/tests/unit/modules/test_vmc_security_rules.py @@ -1,12 +1,27 @@ """ Unit tests for vmc_security_rules execution module """ +from unittest.mock import MagicMock from unittest.mock import patch import pytest import saltext.vmware.modules.vmc_security_rules as vmc_security_rules +@pytest.fixture +def pillar_data(): + return { + "vmc_connection_details": { + "nsxt_host": "hostname", + "api_key": "refresh_key", + "console_host": "authorization_host", + "org_id": "org_id", + "sddc_id": "sddc_id", + "verify_ssl": False, + } + } + + @pytest.fixture def security_rules_data_by_id(mock_vmc_request_call_api): data = { @@ -55,7 +70,10 @@ def security_rules_data(mock_vmc_request_call_api, security_rules_data_by_id): yield data -def test_get_security_rules_should_return_api_response(security_rules_data): +def test_get_security_rules_should_return_api_response(security_rules_data, pillar_data): + setattr(vmc_security_rules, "__opts__", MagicMock()) + setattr(vmc_security_rules, "__pillar__", pillar_data) + result = vmc_security_rules.get( hostname="hostname", refresh_key="refresh_key", @@ -68,7 +86,10 @@ def test_get_security_rules_should_return_api_response(security_rules_data): assert result == security_rules_data -def test_get_security_rules_called_with_url(): +def test_get_security_rules_called_with_url(pillar_data): + setattr(vmc_security_rules, "__opts__", MagicMock()) + setattr(vmc_security_rules, "__pillar__", pillar_data) + expected_url = ( "https://hostname/vmc/reverse-proxy/api/orgs/org_id/sddcs/sddc_id/policy/api/" "v1/infra/domains/domain_id/gateway-policies/default/rules"