diff --git a/tools/policy/poltool.py b/tools/policy/poltool.py index 77ec0106..f359b702 100755 --- a/tools/policy/poltool.py +++ b/tools/policy/poltool.py @@ -53,7 +53,7 @@ path.append(os.path.abspath("../../")) OPERATIONS = ("create", "update", "delete", "get", "state") RESOURCES = ("domain", "service", "icmp_service", "group", "tier1", - "segment", "tier1_segment", "segment_port") + "segment", "tier1_segment", "segment_port", "tier1_segment_port") def get_resource_api(lib, resource_type): diff --git a/vmware_nsxlib/v3/__init__.py b/vmware_nsxlib/v3/__init__.py index fef69470..cc1a32af 100644 --- a/vmware_nsxlib/v3/__init__.py +++ b/vmware_nsxlib/v3/__init__.py @@ -396,6 +396,8 @@ class NsxPolicyLib(NsxLibBase): self.segment = policy_resources.NsxPolicySegmentApi(self.policy_api) self.segment_port = policy_resources.NsxPolicySegmentPortApi( self.policy_api) + self.tier1_segment_port = ( + policy_resources.NsxPolicyTier1SegmentPortApi(self.policy_api)) self.comm_map = policy_resources.NsxPolicyCommunicationMapApi( self.policy_api) self.enforcement_point = policy_resources.NsxPolicyEnforcementPointApi( diff --git a/vmware_nsxlib/v3/policy_defs.py b/vmware_nsxlib/v3/policy_defs.py index 0feb0268..3894ccc9 100644 --- a/vmware_nsxlib/v3/policy_defs.py +++ b/vmware_nsxlib/v3/policy_defs.py @@ -510,6 +510,21 @@ class SegmentPortDef(ResourceDef): return body +class Tier1SegmentPortDef(SegmentPortDef): + '''Tier1 segment port''' + + @property + def path_pattern(self): + return TIER1S_PATH_PATTERN + "%s/segments/%s/ports/" + + @property + def path_ids(self): + return ('tenant', 'tier1_id', 'segment_id', 'port_id') + + def path_defs(self): + return (TenantDef, Tier1Def, SegmentDef) + + class Condition(object): def __init__(self, value, key=policy_constants.CONDITION_KEY_TAG, member_type=policy_constants.CONDITION_MEMBER_PORT, diff --git a/vmware_nsxlib/v3/policy_resources.py b/vmware_nsxlib/v3/policy_resources.py index d592b77b..26739751 100644 --- a/vmware_nsxlib/v3/policy_resources.py +++ b/vmware_nsxlib/v3/policy_resources.py @@ -1054,6 +1054,142 @@ class NsxPolicySegmentPortApi(NsxPolicyResourceBase): return self._get_realization_info(port_def) +class NsxPolicyTier1SegmentPortApi(NsxPolicyResourceBase): + """NSX Tier1 Segment Port API """ + @property + def entry_def(self): + return policy_defs.Tier1SegmentPortDef + + def build_address_binding(self, ip_address, mac_address, + vlan_id=None): + return policy_defs.PortAddressBinding(ip_address, + mac_address, + vlan_id) + + def create_or_overwrite(self, name, + tier1_id, + segment_id, + port_id=None, + description=IGNORE, + address_bindings=IGNORE, + attachment_type=IGNORE, + vif_id=IGNORE, + app_id=IGNORE, + context_id=IGNORE, + traffic_tag=IGNORE, + allocate_addresses=IGNORE, + tags=IGNORE, + tenant=policy_constants.POLICY_INFRA_TENANT): + port_id = self._init_obj_uuid(port_id) + port_def = self._init_def(segment_id=segment_id, + tier1_id=tier1_id, + port_id=port_id, + name=name, + description=description, + address_bindings=address_bindings, + attachment_type=attachment_type, + vif_id=vif_id, + app_id=app_id, + context_id=context_id, + allocate_addresses=allocate_addresses, + tags=tags, + tenant=tenant) + self._create_or_store(port_def) + return port_id + + def delete(self, tier1_id, segment_id, port_id, + tenant=policy_constants.POLICY_INFRA_TENANT): + port_def = self.entry_def(segment_id=segment_id, + tier1_id=tier1_id, + port_id=port_id, + tenant=tenant) + self.policy_api.delete(port_def) + + def get(self, tier1_id, segment_id, port_id, + tenant=policy_constants.POLICY_INFRA_TENANT): + port_def = self.entry_def(segment_id=segment_id, + tier1_id=tier1_id, + port_id=port_id, + tenant=tenant) + return self.policy_api.get(port_def) + + def list(self, tier1_id, segment_id, + tenant=policy_constants.POLICY_INFRA_TENANT): + port_def = self.entry_def(segment_id=segment_id, tier1_id=tier1_id, + tenant=tenant) + return self._list(port_def) + + def update(self, tier1_id, segment_id, port_id, + name=IGNORE, + description=IGNORE, + address_bindings=IGNORE, + tags=IGNORE, + tenant=policy_constants.POLICY_INFRA_TENANT): + + self._update(segment_id=segment_id, + tier1_id=tier1_id, + port_id=port_id, + name=name, + description=description, + address_bindings=address_bindings, + tags=tags, + tenant=tenant) + + def detach(self, tier1_id, segment_id, port_id, + tenant=policy_constants.POLICY_INFRA_TENANT): + + port_def = self.entry_def(segment_id=segment_id, + tier1_id=tier1_id, + port_id=port_id, + attachment_type=None, + tenant=tenant) + self.policy_api.create_or_update(port_def) + + def attach(self, tier1_id, segment_id, port_id, + attachment_type, + vif_id, + allocate_addresses, + app_id=None, + context_id=None, + tenant=policy_constants.POLICY_INFRA_TENANT): + + port_def = self.entry_def(segment_id=segment_id, + tier1_id=tier1_id, + port_id=port_id, + attachment_type=attachment_type, + allocate_addresses=allocate_addresses, + vif_id=vif_id, + app_id=app_id, + context_id=context_id, + tenant=tenant) + + self.policy_api.create_or_update(port_def) + + def get_realized_state(self, tier1_id, segment_id, port_id, + tenant=policy_constants.POLICY_INFRA_TENANT): + port_def = self.entry_def(segment_id=segment_id, + tier1_id=tier1_id, + port_id=port_id, + tenant=tenant) + return self._get_realized_state(port_def) + + def get_realized_id(self, tier1_id, segment_id, port_id, + tenant=policy_constants.POLICY_INFRA_TENANT): + port_def = self.entry_def(segment_id=segment_id, + tier1_id=tier1_id, + port_id=port_id, + tenant=tenant) + return self._get_realized_id(port_def) + + def get_realization_info(self, tier1_id, segment_id, port_id, + tenant=policy_constants.POLICY_INFRA_TENANT): + port_def = self.entry_def(segment_id=segment_id, + tier1_id=tier1_id, + port_id=port_id, + tenant=tenant) + return self._get_realization_info(port_def) + + class NsxPolicyCommunicationMapApi(NsxPolicyResourceBase): """NSX Policy CommunicationMap (Under a Domain).""" @property