Merge "NSX|V+V3: Move FW section logging update to admin utility"
This commit is contained in:
commit
61599c7cb2
@ -269,6 +269,10 @@ Security Groups, Firewall and Spoofguard
|
|||||||
|
|
||||||
nsxadmin -r security-groups -o migrate-to-policy --property policy-id=policy-10 --property security-group-id=733f0741-fa2c-4b32-811c-b78e4dc8ec39
|
nsxadmin -r security-groups -o migrate-to-policy --property policy-id=policy-10 --property security-group-id=733f0741-fa2c-4b32-811c-b78e4dc8ec39
|
||||||
|
|
||||||
|
- Update logging flag of the security groups on the NSX DFW
|
||||||
|
|
||||||
|
nsxadmin -r security-groups -o update-logging --property log-allowed-traffic=true
|
||||||
|
|
||||||
- Spoofguard support::
|
- Spoofguard support::
|
||||||
|
|
||||||
nsxadmin -r spoofguard-policy -o list-mismatches
|
nsxadmin -r spoofguard-policy -o list-mismatches
|
||||||
@ -390,6 +394,10 @@ Security Groups & NSX Security Groups
|
|||||||
|
|
||||||
nsxadmin -r nsx-security-groups -o migrate-to-dynamic-criteria
|
nsxadmin -r nsx-security-groups -o migrate-to-dynamic-criteria
|
||||||
|
|
||||||
|
- Update logging flag of the security groups on the NSX DFW
|
||||||
|
|
||||||
|
nsxadmin -r security-groups -o update-logging --property log-allowed-traffic=true
|
||||||
|
|
||||||
Firewall Sections
|
Firewall Sections
|
||||||
~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -295,7 +295,6 @@ class NsxVPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
|||||||
"NSX 6.3 onwards")
|
"NSX 6.3 onwards")
|
||||||
self.sg_container_id = self._create_security_group_container()
|
self.sg_container_id = self._create_security_group_container()
|
||||||
self.default_section = self._create_cluster_default_fw_section()
|
self.default_section = self._create_cluster_default_fw_section()
|
||||||
self._process_security_groups_rules_logging()
|
|
||||||
|
|
||||||
self._router_managers = managers.RouterTypeManager(self)
|
self._router_managers = managers.RouterTypeManager(self)
|
||||||
|
|
||||||
@ -574,47 +573,6 @@ class NsxVPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
|||||||
section_id = self.nsx_sg_utils.parse_and_get_section_id(c)
|
section_id = self.nsx_sg_utils.parse_and_get_section_id(c)
|
||||||
return section_id
|
return section_id
|
||||||
|
|
||||||
def _process_security_groups_rules_logging(self):
|
|
||||||
|
|
||||||
def process_security_groups_rules_logging(*args, **kwargs):
|
|
||||||
with locking.LockManager.get_lock('nsx-dfw-section',
|
|
||||||
lock_file_prefix='dfw-section'):
|
|
||||||
context = n_context.get_admin_context()
|
|
||||||
log_allowed = cfg.CONF.nsxv.log_security_groups_allowed_traffic
|
|
||||||
|
|
||||||
# If the section/sg is already logged, then no action is
|
|
||||||
# required.
|
|
||||||
for sg in [sg for sg in self.get_security_groups(context)
|
|
||||||
if sg.get(sg_logging.LOGGING) is False]:
|
|
||||||
if sg.get(sg_policy.POLICY):
|
|
||||||
# Logging is not relevant with a policy
|
|
||||||
continue
|
|
||||||
|
|
||||||
section_uri = self._get_section_uri(context.session,
|
|
||||||
sg['id'])
|
|
||||||
if section_uri is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# Section/sg is not logged, update rules logging according
|
|
||||||
# to the 'log_security_groups_allowed_traffic' config
|
|
||||||
# option.
|
|
||||||
try:
|
|
||||||
h, c = self.nsx_v.vcns.get_section(section_uri)
|
|
||||||
section = self.nsx_sg_utils.parse_section(c)
|
|
||||||
section_needs_update = (
|
|
||||||
self.nsx_sg_utils.set_rules_logged_option(
|
|
||||||
section, log_allowed))
|
|
||||||
if section_needs_update:
|
|
||||||
self.nsx_v.vcns.update_section(
|
|
||||||
section_uri,
|
|
||||||
self.nsx_sg_utils.to_xml_string(section), h)
|
|
||||||
except Exception as exc:
|
|
||||||
LOG.error('Unable to update security group %(sg)s '
|
|
||||||
'section for logging. %(e)s',
|
|
||||||
{'e': exc, 'sg': sg['id']})
|
|
||||||
|
|
||||||
c_utils.spawn_n(process_security_groups_rules_logging)
|
|
||||||
|
|
||||||
def _create_dhcp_static_binding(self, context, neutron_port_db):
|
def _create_dhcp_static_binding(self, context, neutron_port_db):
|
||||||
|
|
||||||
network_id = neutron_port_db['network_id']
|
network_id = neutron_port_db['network_id']
|
||||||
|
@ -274,7 +274,6 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
|||||||
self._init_dhcp_metadata()
|
self._init_dhcp_metadata()
|
||||||
|
|
||||||
self._prepare_default_rules()
|
self._prepare_default_rules()
|
||||||
self._process_security_group_logging()
|
|
||||||
|
|
||||||
# init profiles on nsx backend
|
# init profiles on nsx backend
|
||||||
self._init_nsx_profiles()
|
self._init_nsx_profiles()
|
||||||
@ -779,27 +778,6 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
|||||||
tags=self.nsxlib.build_v3_api_version_tag())
|
tags=self.nsxlib.build_v3_api_version_tag())
|
||||||
return self._get_port_security_profile()
|
return self._get_port_security_profile()
|
||||||
|
|
||||||
def _process_security_group_logging(self):
|
|
||||||
def process_security_group_logging(*args, **kwargs):
|
|
||||||
context = q_context.get_admin_context()
|
|
||||||
log_all_rules = cfg.CONF.nsx_v3.log_security_groups_allowed_traffic
|
|
||||||
secgroups = self.get_security_groups(context,
|
|
||||||
fields=['id',
|
|
||||||
sg_logging.LOGGING])
|
|
||||||
for sg in [sg for sg in secgroups
|
|
||||||
if sg.get(sg_logging.LOGGING) is False]:
|
|
||||||
nsgroup_id, section_id = nsx_db.get_sg_mappings(
|
|
||||||
context.session, sg['id'])
|
|
||||||
if section_id:
|
|
||||||
try:
|
|
||||||
self.nsxlib.firewall_section.set_rule_logging(
|
|
||||||
section_id, logging=log_all_rules)
|
|
||||||
except nsx_lib_exc.ManagerError:
|
|
||||||
LOG.error("Failed to update firewall rule logging "
|
|
||||||
"for rule in section %s", section_id)
|
|
||||||
|
|
||||||
utils.spawn_n(process_security_group_logging)
|
|
||||||
|
|
||||||
def _init_default_section_rules(self):
|
def _init_default_section_rules(self):
|
||||||
with locking.LockManager.get_lock('nsxv3_default_section'):
|
with locking.LockManager.get_lock('nsxv3_default_section'):
|
||||||
section_description = ("This section is handled by OpenStack to "
|
section_description = ("This section is handled by OpenStack to "
|
||||||
|
@ -31,6 +31,7 @@ from vmware_nsx.db import extended_security_group_rule as extend_sg_rule
|
|||||||
from vmware_nsx.db import nsx_models
|
from vmware_nsx.db import nsx_models
|
||||||
from vmware_nsx.db import nsxv_db
|
from vmware_nsx.db import nsxv_db
|
||||||
from vmware_nsx.db import nsxv_models
|
from vmware_nsx.db import nsxv_models
|
||||||
|
from vmware_nsx.extensions import securitygrouplogging as sg_logging
|
||||||
from vmware_nsx.extensions import securitygrouppolicy as sg_policy
|
from vmware_nsx.extensions import securitygrouppolicy as sg_policy
|
||||||
from vmware_nsx.shell.admin.plugins.common import constants
|
from vmware_nsx.shell.admin.plugins.common import constants
|
||||||
from vmware_nsx.shell.admin.plugins.common import formatters
|
from vmware_nsx.shell.admin.plugins.common import formatters
|
||||||
@ -464,6 +465,63 @@ def firewall_update_cluster_default_fw_section(resource, event, trigger,
|
|||||||
LOG.info("Cluster default FW section updated.")
|
LOG.info("Cluster default FW section updated.")
|
||||||
|
|
||||||
|
|
||||||
|
@admin_utils.output_header
|
||||||
|
def update_security_groups_logging(resource, event, trigger, **kwargs):
|
||||||
|
"""Update allowed traffic logging for all neutron security group rules"""
|
||||||
|
errmsg = ("Need to specify log-allowed-traffic property. Add --property "
|
||||||
|
"log-allowed-traffic=true/false")
|
||||||
|
if not kwargs.get('property'):
|
||||||
|
LOG.error("%s", errmsg)
|
||||||
|
return
|
||||||
|
properties = admin_utils.parse_multi_keyval_opt(kwargs['property'])
|
||||||
|
log_allowed_str = properties.get('log-allowed-traffic')
|
||||||
|
if not log_allowed_str or log_allowed_str.lower() not in ['true', 'false']:
|
||||||
|
LOG.error("%s", errmsg)
|
||||||
|
return
|
||||||
|
log_allowed = log_allowed_str.lower() == 'true'
|
||||||
|
|
||||||
|
context = n_context.get_admin_context()
|
||||||
|
|
||||||
|
with utils.NsxVPluginWrapper() as plugin:
|
||||||
|
vcns = plugin.nsx_v.vcns
|
||||||
|
sg_utils = plugin. nsx_sg_utils
|
||||||
|
# If the section/sg is already logged, then no action is
|
||||||
|
# required.
|
||||||
|
security_groups = plugin.get_security_groups(context)
|
||||||
|
LOG.info("Going to update logging of %s sections",
|
||||||
|
len(security_groups))
|
||||||
|
for sg in [sg for sg in plugin.get_security_groups(context)
|
||||||
|
if sg.get(sg_logging.LOGGING) is False]:
|
||||||
|
if sg.get(sg_policy.POLICY):
|
||||||
|
# Logging is not relevant with a policy
|
||||||
|
continue
|
||||||
|
|
||||||
|
section_uri = plugin._get_section_uri(context.session,
|
||||||
|
sg['id'])
|
||||||
|
if section_uri is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Section/sg is not logged, update rules logging according
|
||||||
|
# to the 'log_security_groups_allowed_traffic' config
|
||||||
|
# option.
|
||||||
|
try:
|
||||||
|
h, c = vcns.get_section(section_uri)
|
||||||
|
section = sg_utils.parse_section(c)
|
||||||
|
section_needs_update = sg_utils.set_rules_logged_option(
|
||||||
|
section, log_allowed)
|
||||||
|
if section_needs_update:
|
||||||
|
vcns.update_section(section_uri,
|
||||||
|
sg_utils.to_xml_string(section), h)
|
||||||
|
except Exception as exc:
|
||||||
|
LOG.error('Unable to update security group %(sg)s '
|
||||||
|
'section for logging. %(e)s',
|
||||||
|
{'e': exc, 'sg': sg['id']})
|
||||||
|
|
||||||
|
|
||||||
|
registry.subscribe(update_security_groups_logging,
|
||||||
|
constants.SECURITY_GROUPS,
|
||||||
|
shell.Operations.UPDATE_LOGGING.value)
|
||||||
|
|
||||||
registry.subscribe(migrate_sg_to_policy,
|
registry.subscribe(migrate_sg_to_policy,
|
||||||
constants.SECURITY_GROUPS,
|
constants.SECURITY_GROUPS,
|
||||||
shell.Operations.MIGRATE_TO_POLICY.value)
|
shell.Operations.MIGRATE_TO_POLICY.value)
|
||||||
|
@ -75,9 +75,6 @@ class NsxVPluginWrapper(plugin.NsxVPlugin):
|
|||||||
# skip getting the Qos policy ID because get_object calls
|
# skip getting the Qos policy ID because get_object calls
|
||||||
# plugin init again on admin-util environment
|
# plugin init again on admin-util environment
|
||||||
|
|
||||||
def _process_security_groups_rules_logging(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def count_spawn_jobs(self):
|
def count_spawn_jobs(self):
|
||||||
# check if there are any spawn jobs running
|
# check if there are any spawn jobs running
|
||||||
return self.edge_manager._get_worker_pool().running()
|
return self.edge_manager._get_worker_pool().running()
|
||||||
|
@ -29,6 +29,7 @@ from vmware_nsx.shell.admin.plugins.common import formatters
|
|||||||
from vmware_nsx.shell.admin.plugins.common import utils as admin_utils
|
from vmware_nsx.shell.admin.plugins.common import utils as admin_utils
|
||||||
from vmware_nsx.shell.admin.plugins.nsxv3.resources import utils as v3_utils
|
from vmware_nsx.shell.admin.plugins.nsxv3.resources import utils as v3_utils
|
||||||
from vmware_nsx.shell import resources as shell
|
from vmware_nsx.shell import resources as shell
|
||||||
|
from vmware_nsxlib.v3 import exceptions as nsx_lib_exc
|
||||||
from vmware_nsxlib.v3 import nsx_constants as consts
|
from vmware_nsxlib.v3 import nsx_constants as consts
|
||||||
from vmware_nsxlib.v3 import security
|
from vmware_nsxlib.v3 import security
|
||||||
|
|
||||||
@ -314,6 +315,46 @@ def clean_orphaned_sections(resource, event, trigger, **kwargs):
|
|||||||
LOG.info("Backend firewall section %s was deleted.", sec['id'])
|
LOG.info("Backend firewall section %s was deleted.", sec['id'])
|
||||||
|
|
||||||
|
|
||||||
|
def update_security_groups_logging(resource, event, trigger, **kwargs):
|
||||||
|
"""Update allowed traffic logging for all neutron security group rules"""
|
||||||
|
errmsg = ("Need to specify log-allowed-traffic property. Add --property "
|
||||||
|
"log-allowed-traffic=true/false")
|
||||||
|
if not kwargs.get('property'):
|
||||||
|
LOG.error("%s", errmsg)
|
||||||
|
return
|
||||||
|
properties = admin_utils.parse_multi_keyval_opt(kwargs['property'])
|
||||||
|
log_allowed_str = properties.get('log-allowed-traffic')
|
||||||
|
if not log_allowed_str or log_allowed_str.lower() not in ['true', 'false']:
|
||||||
|
LOG.error("%s", errmsg)
|
||||||
|
return
|
||||||
|
log_allowed = log_allowed_str.lower() == 'true'
|
||||||
|
|
||||||
|
context = neutron_context.get_admin_context()
|
||||||
|
nsxlib = v3_utils.get_connected_nsxlib()
|
||||||
|
|
||||||
|
with v3_utils.NsxV3PluginWrapper() as plugin:
|
||||||
|
secgroups = plugin.get_security_groups(context,
|
||||||
|
fields=['id',
|
||||||
|
sg_logging.LOGGING])
|
||||||
|
LOG.info("Going to update logging of %s sections",
|
||||||
|
len(secgroups))
|
||||||
|
for sg in [sg for sg in secgroups
|
||||||
|
if sg.get(sg_logging.LOGGING) is False]:
|
||||||
|
nsgroup_id, section_id = nsx_db.get_sg_mappings(
|
||||||
|
context.session, sg['id'])
|
||||||
|
if section_id:
|
||||||
|
try:
|
||||||
|
nsxlib.firewall_section.set_rule_logging(
|
||||||
|
section_id, logging=log_allowed)
|
||||||
|
except nsx_lib_exc.ManagerError:
|
||||||
|
LOG.error("Failed to update firewall rule logging "
|
||||||
|
"for rule in section %s", section_id)
|
||||||
|
|
||||||
|
|
||||||
|
registry.subscribe(update_security_groups_logging,
|
||||||
|
constants.SECURITY_GROUPS,
|
||||||
|
shell.Operations.UPDATE_LOGGING.value)
|
||||||
|
|
||||||
registry.subscribe(migrate_nsgroups_to_dynamic_criteria,
|
registry.subscribe(migrate_nsgroups_to_dynamic_criteria,
|
||||||
constants.FIREWALL_NSX_GROUPS,
|
constants.FIREWALL_NSX_GROUPS,
|
||||||
shell.Operations.MIGRATE_TO_DYNAMIC_CRITERIA.value)
|
shell.Operations.MIGRATE_TO_DYNAMIC_CRITERIA.value)
|
||||||
|
@ -169,9 +169,6 @@ class NsxV3PluginWrapper(plugin.NsxV3Plugin):
|
|||||||
def _init_dhcp_metadata(self):
|
def _init_dhcp_metadata(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _process_security_group_logging(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _extend_get_network_dict_provider(self, context, net):
|
def _extend_get_network_dict_provider(self, context, net):
|
||||||
self._extend_network_dict_provider(context, net)
|
self._extend_network_dict_provider(context, net)
|
||||||
# skip getting the Qos policy ID because get_object calls
|
# skip getting the Qos policy ID because get_object calls
|
||||||
|
@ -59,6 +59,7 @@ class Operations(enum.Enum):
|
|||||||
MIGRATE_TO_DYNAMIC_CRITERIA = 'migrate-to-dynamic-criteria'
|
MIGRATE_TO_DYNAMIC_CRITERIA = 'migrate-to-dynamic-criteria'
|
||||||
NSX_MIGRATE_V_V3 = 'nsx-migrate-v-v3'
|
NSX_MIGRATE_V_V3 = 'nsx-migrate-v-v3'
|
||||||
MIGRATE_TO_POLICY = 'migrate-to-policy'
|
MIGRATE_TO_POLICY = 'migrate-to-policy'
|
||||||
|
UPDATE_LOGGING = 'update-logging'
|
||||||
NSX_MIGRATE_EXCLUDE_PORTS = 'migrate-exclude-ports'
|
NSX_MIGRATE_EXCLUDE_PORTS = 'migrate-exclude-ports'
|
||||||
MIGRATE_VDR_DHCP = 'migrate-vdr-dhcp'
|
MIGRATE_VDR_DHCP = 'migrate-vdr-dhcp'
|
||||||
STATUS = 'status'
|
STATUS = 'status'
|
||||||
@ -80,7 +81,8 @@ class Resource(object):
|
|||||||
nsxv3_resources = {
|
nsxv3_resources = {
|
||||||
constants.SECURITY_GROUPS: Resource(constants.SECURITY_GROUPS,
|
constants.SECURITY_GROUPS: Resource(constants.SECURITY_GROUPS,
|
||||||
[Operations.LIST.value,
|
[Operations.LIST.value,
|
||||||
Operations.FIX_MISMATCH.value]),
|
Operations.FIX_MISMATCH.value,
|
||||||
|
Operations.UPDATE_LOGGING.value]),
|
||||||
constants.FIREWALL_SECTIONS: Resource(constants.FIREWALL_SECTIONS,
|
constants.FIREWALL_SECTIONS: Resource(constants.FIREWALL_SECTIONS,
|
||||||
[Operations.LIST.value,
|
[Operations.LIST.value,
|
||||||
Operations.LIST_MISMATCHES.value]),
|
Operations.LIST_MISMATCHES.value]),
|
||||||
@ -186,7 +188,8 @@ nsxv_resources = {
|
|||||||
constants.SECURITY_GROUPS: Resource(constants.SECURITY_GROUPS,
|
constants.SECURITY_GROUPS: Resource(constants.SECURITY_GROUPS,
|
||||||
[Operations.LIST.value,
|
[Operations.LIST.value,
|
||||||
Operations.FIX_MISMATCH.value,
|
Operations.FIX_MISMATCH.value,
|
||||||
Operations.MIGRATE_TO_POLICY.value]),
|
Operations.MIGRATE_TO_POLICY.value,
|
||||||
|
Operations.UPDATE_LOGGING.value]),
|
||||||
constants.FIREWALL_NSX_GROUPS: Resource(
|
constants.FIREWALL_NSX_GROUPS: Resource(
|
||||||
constants.FIREWALL_NSX_GROUPS, [Operations.LIST.value,
|
constants.FIREWALL_NSX_GROUPS, [Operations.LIST.value,
|
||||||
Operations.LIST_MISMATCHES.value]),
|
Operations.LIST_MISMATCHES.value]),
|
||||||
|
@ -214,10 +214,6 @@ class NsxVPluginV2TestCase(test_plugin.NeutronDbPluginV2TestCase):
|
|||||||
mock_deploy_backup_edges_at_backend = mock.patch("%s.%s" % (
|
mock_deploy_backup_edges_at_backend = mock.patch("%s.%s" % (
|
||||||
vmware.EDGE_MANAGE_NAME, '_deploy_backup_edges_at_backend'))
|
vmware.EDGE_MANAGE_NAME, '_deploy_backup_edges_at_backend'))
|
||||||
mock_deploy_backup_edges_at_backend.start()
|
mock_deploy_backup_edges_at_backend.start()
|
||||||
mock_process_security_group_logging = mock.patch(
|
|
||||||
'vmware_nsx.plugin.NsxVPlugin.'
|
|
||||||
'_process_security_groups_rules_logging')
|
|
||||||
mock_process_security_group_logging.start()
|
|
||||||
|
|
||||||
self.default_res_pool = 'respool-28'
|
self.default_res_pool = 'respool-28'
|
||||||
cfg.CONF.set_override("resource_pool_id", self.default_res_pool,
|
cfg.CONF.set_override("resource_pool_id", self.default_res_pool,
|
||||||
@ -3988,10 +3984,6 @@ class NsxVSecurityGroupsTestCase(ext_sg.SecurityGroupDBTestCase):
|
|||||||
mock_check_backup_edge_pools = mock.patch("%s.%s" % (
|
mock_check_backup_edge_pools = mock.patch("%s.%s" % (
|
||||||
vmware.EDGE_MANAGE_NAME, '_check_backup_edge_pools'))
|
vmware.EDGE_MANAGE_NAME, '_check_backup_edge_pools'))
|
||||||
mock_check_backup_edge_pools.start()
|
mock_check_backup_edge_pools.start()
|
||||||
mock_process_security_group_logging = mock.patch(
|
|
||||||
'vmware_nsx.plugin.NsxVPlugin.'
|
|
||||||
'_process_security_groups_rules_logging')
|
|
||||||
mock_process_security_group_logging.start()
|
|
||||||
|
|
||||||
c_utils.spawn_n = mock.Mock(side_effect=lambda f: f())
|
c_utils.spawn_n = mock.Mock(side_effect=lambda f: f())
|
||||||
super(NsxVSecurityGroupsTestCase, self).setUp(plugin=plugin,
|
super(NsxVSecurityGroupsTestCase, self).setUp(plugin=plugin,
|
||||||
|
@ -197,10 +197,6 @@ class NsxV3PluginTestCaseMixin(test_plugin.NeutronDbPluginV2TestCase,
|
|||||||
'neutron.scheduler.dhcp_agent_scheduler.AZAwareWeightScheduler')
|
'neutron.scheduler.dhcp_agent_scheduler.AZAwareWeightScheduler')
|
||||||
|
|
||||||
def mock_plugin_methods(self):
|
def mock_plugin_methods(self):
|
||||||
# mock unnecessary call which causes spawn
|
|
||||||
mock_process_security_group_logging = mock.patch.object(
|
|
||||||
nsx_plugin.NsxV3Plugin, '_process_security_group_logging')
|
|
||||||
mock_process_security_group_logging.start()
|
|
||||||
# need to mock the global placeholder. This is due to the fact that
|
# need to mock the global placeholder. This is due to the fact that
|
||||||
# the generic security group tests assume that there is just one
|
# the generic security group tests assume that there is just one
|
||||||
# security group.
|
# security group.
|
||||||
|
@ -220,7 +220,8 @@ class TestNsxvAdminUtils(AbstractTestAdminUtils,
|
|||||||
"security-group-id=sg-1",
|
"security-group-id=sg-1",
|
||||||
"dvs-id=dvs-1",
|
"dvs-id=dvs-1",
|
||||||
"moref=virtualwire-1",
|
"moref=virtualwire-1",
|
||||||
"teamingpolicy=LACP_ACTIVE"
|
"teamingpolicy=LACP_ACTIVE",
|
||||||
|
"log-allowed-traffic=true"
|
||||||
]
|
]
|
||||||
self._test_resources_with_args(
|
self._test_resources_with_args(
|
||||||
resources.nsxv_resources, args)
|
resources.nsxv_resources, args)
|
||||||
@ -281,7 +282,8 @@ class TestNsxv3AdminUtils(AbstractTestAdminUtils,
|
|||||||
"metadata_proxy_uuid=e5b9b249-0034-4729-8ab6-fe4dacaa3a12",
|
"metadata_proxy_uuid=e5b9b249-0034-4729-8ab6-fe4dacaa3a12",
|
||||||
"nsx-id=e5b9b249-0034-4729-8ab6-fe4dacaa3a12",
|
"nsx-id=e5b9b249-0034-4729-8ab6-fe4dacaa3a12",
|
||||||
"availability-zone=default",
|
"availability-zone=default",
|
||||||
"server-ip=1.1.1.1"
|
"server-ip=1.1.1.1",
|
||||||
|
"log-allowed-traffic=true"
|
||||||
]
|
]
|
||||||
# Create some neutron objects for the utilities to run on
|
# Create some neutron objects for the utilities to run on
|
||||||
self._create_router()
|
self._create_router()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user