Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 48 additions & 4 deletions src/saltext/vmware/modules/vmc_security_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 = (
Expand Down Expand Up @@ -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 = (
Expand Down Expand Up @@ -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 = (
Expand Down Expand Up @@ -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 = (
Expand Down
52 changes: 46 additions & 6 deletions src/saltext/vmware/utils/vmc_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
26 changes: 26 additions & 0 deletions tests/integration/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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"


Expand Down
24 changes: 20 additions & 4 deletions tests/integration/modules/test_vmc_security_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
25 changes: 23 additions & 2 deletions tests/unit/modules/test_vmc_security_rules.py
Original file line number Diff line number Diff line change
@@ -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 = {
Expand Down Expand Up @@ -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",
Expand All @@ -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"
Expand Down