EP, EPG, and Contract renaming and other cleanup
The following resources are being renamed as follows: Endpoints -> Policy Targets Endpoint Groups -> Policy Target Groups Contracts -> Policy Rule Sets Also fixing other inconsistencies in the spec. Change-Id: Id483805141d8face46f1502f1fb8089d8af4d4eb
This commit is contained in:
parent
7b9c5e2c3b
commit
ea8adf50f1
@ -4,47 +4,47 @@
|
|||||||
|
|
||||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
===========================================
|
==============================================
|
||||||
Group-based Policy Abstractions for Neutron
|
Group-based Policy Abstractions for Networking
|
||||||
===========================================
|
==============================================
|
||||||
|
|
||||||
Launchpad blueprint:
|
Launchpad blueprint:
|
||||||
|
|
||||||
https://blueprints.launchpad.net/group-based-policy/+spec/group-based-policy-abstraction
|
https://blueprints.launchpad.net/group-based-policy/+spec/group-based-policy-abstraction
|
||||||
|
|
||||||
This blueprint proposes an extension to the Neutron API with a declarative
|
This blueprint proposes a networking API with a declarative policy driven
|
||||||
policy driven connectivity model that presents simplified application-oriented
|
connectivity model that presents simplified application-oriented
|
||||||
interfaces to the user.
|
interfaces to the user.
|
||||||
|
|
||||||
Problem description
|
Problem description
|
||||||
===================
|
===================
|
||||||
|
|
||||||
The current Neutron model of networks, ports, subnets, routers, and security
|
The current OpenStack networking model of networks, ports, subnets, routers,
|
||||||
groups provides the necessary building blocks to build a logical network
|
and security groups provides the necessary building blocks to build a logical
|
||||||
topology for connectivity. However, it does not provide the right level
|
network topology for connectivity. However, it does not provide the right level
|
||||||
of abstraction for an application administrator who understands the
|
of abstraction for an application administrator who understands the
|
||||||
application's details (like application port numbers), but not the
|
application's details (like application port numbers), but not the
|
||||||
infrastructure details likes networks and routes. Not only that, the current
|
infrastructure details likes networks and routes. Not only that, the current
|
||||||
abstraction puts the burden of maintaining the consistency of the network
|
abstraction puts the burden of maintaining the consistency of the network
|
||||||
topology on the user. The lack of application developer/administrator focussed
|
topology on the user. The lack of application developer/administrator focussed
|
||||||
abstractions supported by a declarative model make it hard for those users
|
abstractions supported by a declarative model make it hard for those users
|
||||||
to consume Neutron as a connectivity layer.
|
to consume the existing connectivity layer.
|
||||||
|
|
||||||
Proposed change
|
Proposed change
|
||||||
===============
|
===============
|
||||||
|
|
||||||
The policy framework described in this blueprint complements the current
|
The policy framework described in this blueprint complements the current
|
||||||
Neutron model with the notion of policies that can be applied between groups of
|
OpenStack networking model with the notion of policies that can be applied
|
||||||
endpoints. As users look beyond basic connectivity, richer network services
|
between groups of network endpoints. As users look beyond basic connectivity,
|
||||||
with diverse implementations and network properties are naturally expressed as
|
richer network services with diverse implementations and network properties are
|
||||||
policies. Examples include service chaining, QoS, path properties, access
|
naturally expressed as policies. Examples include service chaining, QoS, path
|
||||||
control, etc.
|
properties, access control, etc.
|
||||||
|
|
||||||
This proposal suggests a model that allows application administrators to
|
This proposal suggests a model that allows application administrators to
|
||||||
express their networking requirements using group and policy abstractions, with
|
express their networking requirements using group and policy abstractions, with
|
||||||
the specifics of policy enforcement and implementation left to the underlying
|
the specifics of policy enforcement and implementation left to the underlying
|
||||||
policy driver. The main advantage of the extensions described in this blueprint
|
policy driver. The main advantage of the extensions described in this blueprint
|
||||||
is that they allow for an application-centric interface to Neutron that
|
is that they allow for an application-centric interface to OpenStack networking that
|
||||||
complements the existing network-centric interface.
|
complements the existing network-centric interface.
|
||||||
|
|
||||||
More specifically the new abstractions will achieve the following:
|
More specifically the new abstractions will achieve the following:
|
||||||
@ -75,53 +75,54 @@ More specifically the new abstractions will achieve the following:
|
|||||||
specific actions.
|
specific actions.
|
||||||
|
|
||||||
* Complement the governance model proposed in the OpenStack Congress project by
|
* Complement the governance model proposed in the OpenStack Congress project by
|
||||||
making Policy Labels available for enforcement.
|
making Policy Tags available for enforcement.
|
||||||
|
|
||||||
The following new terminology is being introduced:
|
The following new terminology is being introduced:
|
||||||
|
|
||||||
**Endpoint (EP):** An L2/L3 addressable entity.
|
**Policy Target (PT):** It is the smallest unit of resource abstraction at
|
||||||
|
which policy can be applied.
|
||||||
|
|
||||||
**Endpoint Group (EPG):** A collection of endpoints.
|
**Policy Target Group (PTG):** A collection of policy targets.
|
||||||
|
|
||||||
**Contract:** It defines how the application services provided by an EPG can be
|
**Policy Rule Set (PRS):** It defines how the application services provided by
|
||||||
accessed. In effect it specifies how an EPG communicates with other EPGs. A
|
a PTG can be accessed. In effect it specifies how a PTG communicates with other
|
||||||
Contract consists of Policy Rules.
|
PTGs. A Policy Rule Set consists of Policy Rules.
|
||||||
|
|
||||||
**Policy Rule:** These are individual rules used to define the communication
|
**Policy Rule (PR):** These are individual rules used to define the communication
|
||||||
criteria between EPGs. Each rule contains a Filter, Classifier, and Action.
|
criteria between PTGs. Each rule contains a Filter, Classifier, and Action.
|
||||||
|
|
||||||
**Classifier:** Characterizes the traffic that a particular Policy Rule acts on.
|
**Classifier:** Characterizes the traffic that a particular Policy Rule acts on.
|
||||||
Corresponding action is taken on traffic that satisfies this classification
|
Corresponding action is taken on traffic that satisfies this classification
|
||||||
criteria.
|
criteria.
|
||||||
|
|
||||||
**Action:** The action that is taken for a matching Policy Rule defined in a
|
**Action:** The action that is taken for a matching Policy Rule defined in a
|
||||||
Contract.
|
Policy Rule Set.
|
||||||
|
|
||||||
**Filter:** Provides a way to tag a Policy Rule with Capability and Role labels.
|
**Filter:** Provides a way to tag a Policy Rule with Capability and Role tags.
|
||||||
|
|
||||||
**Capability:** It is a Policy Label that defines what part of a Contract a
|
**Capability:** It is a Policy Label that defines what part of a Policy Rule Set a
|
||||||
particular EPG provides.
|
particular PTG provides.
|
||||||
|
|
||||||
**Role:** It is a Policy Label that defines what part of a Contract an EPG wants
|
**Role:** It is a Policy Label that defines what part of a Policy Rule Set a PTG wants
|
||||||
to consume.
|
to consume.
|
||||||
|
|
||||||
**Contract Scope:** An EPG conveys its intent to provide or consume a Contract
|
**Policy Rule Set Scope:** An PTG conveys its intent to provide or consume a Policy Rule Set
|
||||||
(or its part) by defining a Contract Scope which references the target
|
(or its part) by defining a Policy Rule Set Scope which references the target
|
||||||
Contract.
|
Policy Rule Set.
|
||||||
|
|
||||||
**Selector:** A Contract Scope can define additional constraints around choosing
|
**Selector:** A Policy Rule Set Scope can define additional constraints around choosing
|
||||||
the matching provider or consumer EPGs for a Contract via a Selector.
|
the matching provider or consumer PTGs for a Policy Rule Set via a Selector.
|
||||||
|
|
||||||
**Policy Tags:** These are labels contained within a namespace hierarchy and
|
**Policy Tags:** These are labels contained within a namespace hierarchy and
|
||||||
used to define Capability and Role tags used in Filters.
|
used to define Capability and Role tags used in Filters.
|
||||||
|
|
||||||
**L2 Policy:** Used to define a L2 boundary and impose additional
|
**L2 Policy (L2P):** Used to define a L2 boundary and impose additional
|
||||||
constraints (such as no broadcast) within that L2 boundary.
|
constraints (such as no broadcast) within that L2 boundary.
|
||||||
|
|
||||||
**L3 Policy:** Used to define a non-overlapping IP address space.
|
**L3 Policy (L3P):** Used to define a non-overlapping IP address space.
|
||||||
|
|
||||||
**Network Service Policy:** Used to define policies that are used for assigning
|
**Network Service Policy (NSP):** Used to define policies that are used for
|
||||||
resources in an EPG to be consumed by network services.
|
assigning resources in a PTG to be consumed by network services.
|
||||||
|
|
||||||
Here is an example of how a three tier application would look like:
|
Here is an example of how a three tier application would look like:
|
||||||
|
|
||||||
@ -129,10 +130,10 @@ Here is an example of how a three tier application would look like:
|
|||||||
|
|
||||||
+–––––––––+ +–––––––+ +–––––––+ +–––––––+
|
+–––––––––+ +–––––––+ +–––––––+ +–––––––+
|
||||||
| | | Web | | App | |DB |
|
| | | Web | | App | |DB |
|
||||||
| Outside | | EPG | | EPG | |EPG |
|
| Outside | | PTG | | PTG | |PTG |
|
||||||
| Public | +––––––––+ +––+ | +––––––––+ +––+ | +––––––––+ +––+ |
|
| Public | +––––––––+ +––+ | +––––––––+ +––+ | +––––––––+ +––+ |
|
||||||
| Network +–+Web | |VM| +–+App | |VM| +–+DB | |VM| |
|
| Network +–+Web | |VM| +–+App | |VM| +–+DB | |VM| |
|
||||||
| EPG | |Contract| +––+ | |Contract| +––+ | |Contract| +––+ |
|
| PTG | |PRS | +––+ | |PRS | +––+ | |PRS | +––+ |
|
||||||
| | +––––––––+ | +––––––––+ | +––––––––+ |
|
| | +––––––––+ | +––––––––+ | +––––––––+ |
|
||||||
| | | +––+ | | +––+ | | +––+ |
|
| | | +––+ | | +––+ | | +––+ |
|
||||||
| | | |VM| | | |VM| | | |VM| |
|
| | | |VM| | | |VM| | | |VM| |
|
||||||
@ -150,65 +151,65 @@ Create Classifier
|
|||||||
neutron classifier-create Insecure-Web-Access --port 80 --protocol TCP
|
neutron classifier-create Insecure-Web-Access --port 80 --protocol TCP
|
||||||
--direction IN
|
--direction IN
|
||||||
|
|
||||||
Create Contract using the Classifier
|
Create Policy Rule Set using the Classifier
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
neutron contract-create Web-Server-Contract --classifier Insecure-Web-Access
|
neutron policy-rule-set-create Web-Server-PRS --classifier Insecure-Web-Access
|
||||||
--action ALLOW
|
--action ALLOW
|
||||||
|
|
||||||
Create EPG providing the Contract
|
Create PTG providing the Policy Rule Set
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
neutron epg-create Web-Server-EPG --provides-contract Web-Server-Contract
|
neutron ptg-create Web-Server-PTG --provides-policy-rule-set Web-Server-PRS
|
||||||
|
|
||||||
Create Endpoint in EPG
|
Create PT in PTG
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
neutron ep-create --epg Web-Server-EPG
|
neutron pt-create --epg Web-Server-PTG
|
||||||
|
|
||||||
Launch Web Server VM using Endpoint in EPG
|
Launch Web Server VM using PT in PTG
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
nova boot --image cirros --flavor m1.nano --nic port-id=<EP-NAME> Web-Server
|
nova boot --image cirros --flavor m1.nano --nic port-id=<PT-NAME> Web-Server
|
||||||
|
|
||||||
Specify connectivity of Outside world VMs to Web Server
|
Specify connectivity of Outside world VMs to Web Server
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
neutron epg-create Outside-EPG --consumes-contract Web-Server-Contract
|
neutron ptg-create Outside-PTG --consumes-policy-rule-set Web-Server-PRS
|
||||||
|
|
||||||
Note that the Contract Provider/Consuming Scopes are not explicitly shown in
|
Note that the Policy Rule Set Provider/Consuming Scopes are not explicitly shown in
|
||||||
the above diagram but define each providing and consuming relation between an
|
the above diagram but define each providing and consuming relation between an
|
||||||
EPG and a Contract as shown below:
|
PTG and a Policy Rule Set as shown below:
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
+––––––––––+
|
+––––––––––+
|
||||||
|Web |
|
|Web |
|
||||||
|Contract |
|
|PRS |
|
||||||
|Consuming |
|
|Consuming |
|
||||||
|Scope |
|
|Scope |
|
||||||
+–––+––––––+
|
+–––+––––––+
|
||||||
+–––––––––+ | +––––––––––+
|
+–––––––––+ | +––––––––––+
|
||||||
| | | | Web |
|
| | | | Web |
|
||||||
| Outside | | | EPG |
|
| Outside | | | PTG |
|
||||||
| Public | | +––––––––+ | +––+ |
|
| Public | | +––––––––+ | +––+ |
|
||||||
| Network +–+–+Web +––+–+ |VM|EP |
|
| Network +–+–+Web +––+–+ |VM|PT |
|
||||||
| EPG | |Contract| | | +––+ |
|
| PTG | |PRS | | | +––+ |
|
||||||
| | +––––––––+ | | |
|
| | +––––––––+ | | |
|
||||||
| | | | +––+ |
|
| | | | +––+ |
|
||||||
| | | | |VM|EP |
|
| | | | |VM|PT |
|
||||||
| | | | +––+ |
|
| | | | +––+ |
|
||||||
+–––––––––+ | | |
|
+–––––––––+ | | |
|
||||||
| +––––––––––+
|
| +––––––––––+
|
||||||
+
|
+
|
||||||
+––––+–––––+
|
+––––+–––––+
|
||||||
|Web |
|
|Web |
|
||||||
|Contract |
|
|PRS |
|
||||||
|Providing |
|
|Providing |
|
||||||
|Scope |
|
|Scope |
|
||||||
+––––––––––+
|
+––––––––––+
|
||||||
@ -227,16 +228,16 @@ New Database Objects to support Group Policy:
|
|||||||
::
|
::
|
||||||
|
|
||||||
+–––––––––––––+ +–––––––––––––––+ +–––––––––––+
|
+–––––––––––––+ +–––––––––––––––+ +–––––––––––+
|
||||||
| | | Contract | |Contracts |
|
| Policy | | PRS | | Policy |
|
||||||
| Endpoint | | Providing/ | | |
|
| Target | | Providing/ | | Rule |
|
||||||
| Groups +–––––+ Consuming +––––––+ |
|
| Groups +–––––+ Consuming +––––––+ Sets(PRS)|
|
||||||
| | | Scopes | +–––––+–––––+
|
| | | Scopes | +–––––+–––––+
|
||||||
+––––––+––––––+ +–––––––––––––––+ |
|
+––––––+––––––+ +–––––––––––––––+ |
|
||||||
| +–––––+–––––+
|
| +–––––+–––––+
|
||||||
| |Policy |
|
| | Policy |
|
||||||
+––––––+––––––+ |Rules |
|
+––––––+––––––+ | Rules |
|
||||||
| | | |
|
| Policy | | |
|
||||||
| Endpoints | +–––––+––––––+––––+––––––––+
|
| Targets | +–––––+––––––+––––+––––––––+
|
||||||
| | | | |
|
| | | | |
|
||||||
+–––––––––––––+ | | |
|
+–––––––––––––+ | | |
|
||||||
| | |
|
| | |
|
||||||
@ -250,39 +251,39 @@ All objects have the following common attributes:
|
|||||||
* name - optional name
|
* name - optional name
|
||||||
* description - optional annotation
|
* description - optional annotation
|
||||||
|
|
||||||
Endpoint
|
PolicyTarget
|
||||||
* epg_id - UUID of the EndpointGroup (EPG) that this Endpoint (EP) belongs to
|
* ptg_id - UUID of the PolicyTargetGroup (PTG) that this PolicyTarget (PT) belongs to
|
||||||
* policy_tags - a list of PolicyTag uuids
|
* policy_tags - a list of PolicyTag uuids
|
||||||
|
|
||||||
EndpointGroup
|
PolicyTargetGroup
|
||||||
* endpoints - list of endpoint uuids
|
* policy_targets - list of PolicyTarget uuids
|
||||||
* contract_providing_scopes - list of ContractProvidingScope uuids
|
* policy_rule_set_providing_scopes - list of PolicyRuleSetProvidingScope uuids
|
||||||
* contract_consuming_scopes - list of ContractConsumingScope uuids
|
* policy_rule_set_consuming_scopes - list of PolicyRuleSetConsumingScope uuids
|
||||||
|
|
||||||
Contract
|
PolicyRuleSet
|
||||||
* policy_rules - ordered list of PolicyRule uuids
|
* policy_rules - ordered list of PolicyRule uuids
|
||||||
* contract_providing_scopes - list of ContractProvidingScope uuids
|
* policy_rule_set_providing_scopes - list of PolicyRuleSetProvidingScope uuids
|
||||||
* contract_consuming_scopes - list of ContractConsumingScope uuids
|
* policy_rule_set_consuming_scopes - list of PolicyRuleSetConsumingScope uuids
|
||||||
* child_contracts - ordered list of Contract uuids
|
* child_policy_rule_sets - ordered list of PolicyRuleSet uuids
|
||||||
|
|
||||||
ContractProvidingScope
|
PolicyRuleSetProvidingScope
|
||||||
* contract_id - uuid of the Contract that is being provided by the EPG
|
* policy_rule_set_id - uuid of the PolicyRuleSet that is being provided by the PTG
|
||||||
* selectors - list of Selectors uuids
|
* selectors - list of Selectors uuids
|
||||||
* capabilites - list of PolicyTag uuids
|
* capabilites - list of PolicyTag uuids
|
||||||
* providing_epg - EndpointGroup uuid
|
* providing_ptg - PolicyTargetGroup uuid
|
||||||
|
|
||||||
ContractConsumingScope
|
PolicyRuleSetConsumingScope
|
||||||
* contract_id - uuid of the Contract that is being consumed by the EPG
|
* policy_rule_set_id - uuid of the PolicyRuleSet that is being consumed by the PTG
|
||||||
* selectors - list of Selectors uuids
|
* selectors - list of Selectors uuids
|
||||||
* roles - list of PolicyTags
|
* roles - list of PolicyTags
|
||||||
* consuming_epg - EndpointGroup uuid
|
* consuming_ptg - PolicyTargetGroup uuid
|
||||||
|
|
||||||
Selector
|
Selector
|
||||||
* scope - enum: GLOBAL, TENANT, EPG
|
* scope - enum: GLOBAL, TENANT, PTG
|
||||||
* value - None for GLOBAL, or uuid of tenant/EPG
|
* value - None for GLOBAL, or uuid of tenant/PTG
|
||||||
|
|
||||||
PolicyTag
|
PolicyTag
|
||||||
* namespace - string, a namespace identifier for policy labels
|
* namespace - string, a namespace identifier for policy tags
|
||||||
* name - string, not optional
|
* name - string, not optional
|
||||||
* values - list of PolicyValue uuids
|
* values - list of PolicyValue uuids
|
||||||
|
|
||||||
@ -309,24 +310,24 @@ Action
|
|||||||
case of REDIRECT, its the uuid of the Service Chain
|
case of REDIRECT, its the uuid of the Service Chain
|
||||||
|
|
||||||
L2Policy
|
L2Policy
|
||||||
* endpoint_groups - list of EndpointGroup uuids
|
* policy_target_groups - list of PolicyTargetGroup uuids
|
||||||
* l3_policy_id - uuid of the l3_policy
|
* l3_policy_id - uuid of the l3_policy
|
||||||
|
|
||||||
L3Policy
|
L3Policy
|
||||||
* l2_policies - list of L2Policy uuids
|
* l2_policies - list of L2Policy uuids
|
||||||
* ip_version - enum, v4 or v6
|
* ip_version - enum, v4 or v6
|
||||||
* ip_pool - string, IPSubnet with mask, used to pull subnets from if the
|
* ip_pool - string, IPSubnet with mask, used to pull subnets from if the
|
||||||
user creates an EPG without specifying a subnet
|
user creates a PTG without specifying a subnet
|
||||||
* default_subnet_prefix_length - int, used as the default subnet length if
|
* subnet_prefix_length - int, used as the default subnet length if
|
||||||
the user creates an EPG without a subnet
|
the user creates a PTG without a subnet
|
||||||
|
|
||||||
The way ip_pool and default_subnet_prefix_length work is as follows: When
|
The way ip_pool and subnet_prefix_length work is as follows: When
|
||||||
creating L3Policy a default ip_pool and default_subnet_prefix_length are
|
creating L3Policy a default ip_pool and default_subnet_prefix_length are
|
||||||
created. If a user creates an EPG, a subnet will be pulled from ip_pool using
|
created. If a user creates a PTG, a subnet will be pulled from ip_pool using
|
||||||
default_subnet_prefix_length.
|
default_subnet_prefix_length.
|
||||||
|
|
||||||
NetworkServicePolicy
|
NetworkServicePolicy
|
||||||
* endpoint_groups - list of EndpointGroup uuids
|
* policy_target_groups - list of PolicyTargetGroup uuids
|
||||||
* network_service_params - list of ServiceArgument uuids
|
* network_service_params - list of ServiceArgument uuids
|
||||||
|
|
||||||
NetworkServiceParams
|
NetworkServiceParams
|
||||||
@ -341,18 +342,18 @@ NetworkServiceParams
|
|||||||
The supported values are: self_subnet and external_subnet,
|
The supported values are: self_subnet and external_subnet,
|
||||||
but the values are not validated when the tpye is 'string'.
|
but the values are not validated when the tpye is 'string'.
|
||||||
Valid combinations are:
|
Valid combinations are:
|
||||||
ip_single, self_subnet: Allocate a single IP addr from epg subnet,
|
ip_single, self_subnet: Allocate a single IP addr from ptg subnet,
|
||||||
e.g. VIP (in the private network)
|
e.g. VIP (in the private network)
|
||||||
ip_single, external_subnet: Allocate a single floating-ip addr,
|
ip_single, external_subnet: Allocate a single floating-ip addr,
|
||||||
e.g. Public address for the VIP
|
e.g. Public address for the VIP
|
||||||
ip_pool, external_subnet: Allocate a floating-ip for every EP in EPG
|
ip_pool, external_subnet: Allocate a floating-ip for every PT in PTG
|
||||||
|
|
||||||
Objects to support Mapping to existing Neutron resources
|
Objects to support Mapping to existing Neutron resources
|
||||||
|
|
||||||
EndpointPortBinding (extends Endpoint)
|
PolicyTargetPortBinding (extends PolicyTarget)
|
||||||
* neutron_port_id - uuid of Neutron Port that this EP maps to
|
* neutron_port_id - uuid of Neutron Port that this PT maps to
|
||||||
|
|
||||||
EndpointGroupNetworkBinding (extends EndpointGroup)
|
PolicyTargetGroupNetworkBinding (extends PolicyTargetGroup)
|
||||||
* neutron_subnets - list of Neutron Subnet uuids
|
* neutron_subnets - list of Neutron Subnet uuids
|
||||||
|
|
||||||
L2PolicyBinding (extends l2_policy)
|
L2PolicyBinding (extends l2_policy)
|
||||||
@ -378,13 +379,13 @@ The following new resources are being introduced:
|
|||||||
gp_supported_actions = [None, 'ALLOW', 'REDIRECT']
|
gp_supported_actions = [None, 'ALLOW', 'REDIRECT']
|
||||||
gp_supported_directions = [None, 'IN', 'OUT', 'BI']
|
gp_supported_directions = [None, 'IN', 'OUT', 'BI']
|
||||||
gp_supported_protocols = [None, 'TCP', 'UDP', 'ICMP']
|
gp_supported_protocols = [None, 'TCP', 'UDP', 'ICMP']
|
||||||
gp_supported_scopes = [None, 'GLOBAL', 'TENANT', 'EPG']
|
gp_supported_scopes = [None, 'GLOBAL', 'TENANT', 'PTG']
|
||||||
|
|
||||||
ENDPOINTS = 'endpoints'
|
POLICY_TARGETS = 'policy_targets'
|
||||||
ENDPOINT_GROUPS = 'endpoint_groups'
|
POLICY_TARGET_GROUPS = 'policy_target_groups'
|
||||||
CONTRACTS = 'contracts'
|
POLICY_RULE_SETS = 'policy_rule_sets'
|
||||||
CONTRACT_PROVIDING_SCOPES = 'contract_providing_scopes'
|
POLICY_RULE_SET_PROVIDING_SCOPES = 'policy_rule_set_providing_scopes'
|
||||||
CONTRACT_CONSUMING_SCOPES = 'contract_consuming_scopes'
|
POLICY_RULE_SET_CONSUMING_SCOPES = 'policy_rule_set_consuming_scopes'
|
||||||
POLICY_RULES = 'policy_rules'
|
POLICY_RULES = 'policy_rules'
|
||||||
FILTERS = 'filters'
|
FILTERS = 'filters'
|
||||||
CLASSIFIERS = 'classifiers'
|
CLASSIFIERS = 'classifiers'
|
||||||
@ -396,7 +397,7 @@ The following new resources are being introduced:
|
|||||||
NETWORK_SERVICE_POLICIES = 'network_service_policies'
|
NETWORK_SERVICE_POLICIES = 'network_service_policies'
|
||||||
|
|
||||||
RESOURCE_ATTRIBUTE_MAP = {
|
RESOURCE_ATTRIBUTE_MAP = {
|
||||||
ENDPOINTS: {
|
POLICY_TARGETS: {
|
||||||
'id': {'allow_post': False, 'allow_put': False,
|
'id': {'allow_post': False, 'allow_put': False,
|
||||||
'validate': {'type:uuid': None}, 'is_visible': True,
|
'validate': {'type:uuid': None}, 'is_visible': True,
|
||||||
'primary_key': True},
|
'primary_key': True},
|
||||||
@ -409,11 +410,11 @@ The following new resources are being introduced:
|
|||||||
'tenant_id': {'allow_post': True, 'allow_put': False,
|
'tenant_id': {'allow_post': True, 'allow_put': False,
|
||||||
'validate': {'type:string': None},
|
'validate': {'type:string': None},
|
||||||
'required_by_policy': True, 'is_visible': True},
|
'required_by_policy': True, 'is_visible': True},
|
||||||
'endpointgroup_id': {'allow_post': True, 'allow_put': True,
|
'policy_target_group_id': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid__or_none': None},
|
'validate': {'type:uuid__or_none': None},
|
||||||
'required': True, 'is_visible': True},
|
'required': True, 'is_visible': True},
|
||||||
},
|
},
|
||||||
ENDPOINT_GROUPS: {
|
POLICY_TARGET_GROUPS: {
|
||||||
'id': {'allow_post': False, 'allow_put': False,
|
'id': {'allow_post': False, 'allow_put': False,
|
||||||
'validate': {'type:uuid': None}, 'is_visible': True,
|
'validate': {'type:uuid': None}, 'is_visible': True,
|
||||||
'primary_key': True},
|
'primary_key': True},
|
||||||
@ -426,28 +427,28 @@ The following new resources are being introduced:
|
|||||||
'tenant_id': {'allow_post': True, 'allow_put': False,
|
'tenant_id': {'allow_post': True, 'allow_put': False,
|
||||||
'validate': {'type:string': None},
|
'validate': {'type:string': None},
|
||||||
'required_by_policy': True, 'is_visible': True},
|
'required_by_policy': True, 'is_visible': True},
|
||||||
'endpoints': {'allow_post': False, 'allow_put': False,
|
'policy_targets': {'allow_post': False, 'allow_put': False,
|
||||||
'validate': {'type:uuid_list': None},
|
'validate': {'type:uuid_list': None},
|
||||||
'convert_to': attr.convert_none_to_empty_list,
|
'convert_to': attr.convert_none_to_empty_list,
|
||||||
'default': None, 'is_visible': True},
|
'default': None, 'is_visible': True},
|
||||||
'l2_policy_id': {'allow_post': True, 'allow_put': True,
|
'l2_policy_id': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid_or_none': None},
|
'validate': {'type:uuid_or_none': None},
|
||||||
'default': None, 'is_visible': True},
|
'default': None, 'is_visible': True},
|
||||||
'network_service_policy_id': {'allow_post': True, 'allow_put': True,
|
'network_service_policy_id': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid_or_none': None},
|
'validate': {'type:uuid_or_none': None},
|
||||||
'default': None, 'is_visible': True},
|
'default': None, 'is_visible': True},
|
||||||
'provided_contract_scopes': {'allow_post': True, 'allow_put': True,
|
'provided_policy_rule_set_scopes': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid_list': None},
|
'validate': {'type:uuid_list': None},
|
||||||
'convert_to':
|
'convert_to':
|
||||||
attr.convert_none_to_empty_list,
|
attr.convert_none_to_empty_list,
|
||||||
'default': None, 'is_visible': True},
|
'default': None, 'is_visible': True},
|
||||||
'consumed_contract_scopes': {'allow_post': True, 'allow_put': True,
|
'consumed_policy_rule_set_scopes': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid_list': None},
|
'validate': {'type:uuid_list': None},
|
||||||
'convert_to':
|
'convert_to':
|
||||||
attr.convert_none_to_empty_list,
|
attr.convert_none_to_empty_list,
|
||||||
'default': None, 'is_visible': True},
|
'default': None, 'is_visible': True},
|
||||||
},
|
},
|
||||||
CONTRACTS: {
|
POLICY_RULE_SETS: {
|
||||||
'id': {'allow_post': False, 'allow_put': False,
|
'id': {'allow_post': False, 'allow_put': False,
|
||||||
'validate': {'type:uuid': None},
|
'validate': {'type:uuid': None},
|
||||||
'is_visible': True,
|
'is_visible': True,
|
||||||
@ -463,18 +464,18 @@ The following new resources are being introduced:
|
|||||||
'validate': {'type:string': None},
|
'validate': {'type:string': None},
|
||||||
'required_by_policy': True,
|
'required_by_policy': True,
|
||||||
'is_visible': True},
|
'is_visible': True},
|
||||||
'child_contracts': {'allow_post': True, 'allow_put': True,
|
'child_policy_rule_sets': {'allow_post': True, 'allow_put': True,
|
||||||
'default': None,
|
'default': None,
|
||||||
'validate': {'type:uuid_list': None},
|
'validate': {'type:uuid_list': None},
|
||||||
'convert_to': attr.convert_none_to_empty_list,
|
'convert_to': attr.convert_none_to_empty_list,
|
||||||
'required': True, 'is_visible': True},
|
'required': True, 'is_visible': True},
|
||||||
'policy_rules': {'allow_post': True, 'allow_put': True,
|
'policy_rules': {'allow_post': True, 'allow_put': True,
|
||||||
'default': None,
|
'default': None,
|
||||||
'validate': {'type:uuid_list': None},
|
'validate': {'type:uuid_list': None},
|
||||||
'convert_to': attr.convert_none_to_empty_list,
|
'convert_to': attr.convert_none_to_empty_list,
|
||||||
'required': True, 'is_visible': True},
|
'required': True, 'is_visible': True},
|
||||||
},
|
},
|
||||||
CONTRACT_PROVIDING_SCOPES: {
|
POLICY_RULE_SET_PROVIDING_SCOPES: {
|
||||||
'id': {'allow_post': False, 'allow_put': False,
|
'id': {'allow_post': False, 'allow_put': False,
|
||||||
'validate': {'type:uuid': None},
|
'validate': {'type:uuid': None},
|
||||||
'is_visible': True,
|
'is_visible': True,
|
||||||
@ -490,12 +491,12 @@ The following new resources are being introduced:
|
|||||||
'validate': {'type:string': None},
|
'validate': {'type:string': None},
|
||||||
'required_by_policy': True,
|
'required_by_policy': True,
|
||||||
'is_visible': True},
|
'is_visible': True},
|
||||||
'endpointgroup_id': {'allow_post': True, 'allow_put': True,
|
'policy_target_group_id': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid': None},
|
'validate': {'type:uuid': None},
|
||||||
'required': True, 'is_visible': True},
|
'required': True, 'is_visible': True},
|
||||||
'contract_id': {'allow_post': True, 'allow_put': True,
|
'policy_rule_set_id': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid': None},
|
'validate': {'type:uuid': None},
|
||||||
'required': True, 'is_visible': True},
|
'required': True, 'is_visible': True},
|
||||||
'selector_id': {'allow_post': True, 'allow_put': True,
|
'selector_id': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid_or_none': None},
|
'validate': {'type:uuid_or_none': None},
|
||||||
'required': True, 'is_visible': True},
|
'required': True, 'is_visible': True},
|
||||||
@ -505,7 +506,7 @@ The following new resources are being introduced:
|
|||||||
'convert_to': attr.convert_none_to_empty_list,
|
'convert_to': attr.convert_none_to_empty_list,
|
||||||
'required': True, 'is_visible': True},
|
'required': True, 'is_visible': True},
|
||||||
},
|
},
|
||||||
CONTRACT_CONSUMING_SCOPES: {
|
POLICY_RULE_SET_CONSUMING_SCOPES: {
|
||||||
'id': {'allow_post': False, 'allow_put': False,
|
'id': {'allow_post': False, 'allow_put': False,
|
||||||
'validate': {'type:uuid': None},
|
'validate': {'type:uuid': None},
|
||||||
'is_visible': True, 'primary_key': True},
|
'is_visible': True, 'primary_key': True},
|
||||||
@ -520,12 +521,12 @@ The following new resources are being introduced:
|
|||||||
'validate': {'type:string': None},
|
'validate': {'type:string': None},
|
||||||
'required_by_policy': True,
|
'required_by_policy': True,
|
||||||
'is_visible': True},
|
'is_visible': True},
|
||||||
'endpointgroup_id': {'allow_post': True, 'allow_put': True,
|
'policy_target_group_id': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid': None},
|
'validate': {'type:uuid': None},
|
||||||
'required': True, 'is_visible': True},
|
'required': True, 'is_visible': True},
|
||||||
'contract_id': {'allow_post': True, 'allow_put': True,
|
'policy_rule_set_id': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid': None},
|
'validate': {'type:uuid': None},
|
||||||
'required': True, 'is_visible': True},
|
'required': True, 'is_visible': True},
|
||||||
'selector_id': {'allow_post': True, 'allow_put': True,
|
'selector_id': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid_or_none': None},
|
'validate': {'type:uuid_or_none': None},
|
||||||
'required': True, 'is_visible': True},
|
'required': True, 'is_visible': True},
|
||||||
@ -697,10 +698,10 @@ The following new resources are being introduced:
|
|||||||
'tenant_id': {'allow_post': True, 'allow_put': False,
|
'tenant_id': {'allow_post': True, 'allow_put': False,
|
||||||
'validate': {'type:string': None},
|
'validate': {'type:string': None},
|
||||||
'required_by_policy': True, 'is_visible': True},
|
'required_by_policy': True, 'is_visible': True},
|
||||||
'endpoint_groups': {'allow_post': False, 'allow_put': False,
|
'policy_target_groups': {'allow_post': False, 'allow_put': False,
|
||||||
'validate': {'type:uuid_list': None},
|
'validate': {'type:uuid_list': None},
|
||||||
'convert_to': attr.convert_none_to_empty_list,
|
'convert_to': attr.convert_none_to_empty_list,
|
||||||
'default': None, 'is_visible': True},
|
'default': None, 'is_visible': True},
|
||||||
'l3_policy_id': {'allow_post': True, 'allow_put': True,
|
'l3_policy_id': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid_or_none': None},
|
'validate': {'type:uuid_or_none': None},
|
||||||
'default': None, 'is_visible': True,
|
'default': None, 'is_visible': True,
|
||||||
@ -724,19 +725,18 @@ The following new resources are being introduced:
|
|||||||
'validate': {'type:values': [4, 6]},
|
'validate': {'type:values': [4, 6]},
|
||||||
'is_visible': True},
|
'is_visible': True},
|
||||||
'ip_pool': {'allow_post': True, 'allow_put': False,
|
'ip_pool': {'allow_post': True, 'allow_put': False,
|
||||||
'validate': {'type:subnet': None},
|
'validate': {'type:subnet': None},
|
||||||
'default': '10.0.0.0/8', 'is_visible': True},
|
'default': '10.0.0.0/8', 'is_visible': True},
|
||||||
'default_subnet_prefix_length': {'allow_post': True, 'allow_put': True,
|
'subnet_prefix_length': {'allow_post': True, 'allow_put': True,
|
||||||
'convert_to': attr.convert_to_int,
|
'convert_to': attr.convert_to_int,
|
||||||
'validate': {
|
'validate': {
|
||||||
# ipv4 specific validation is
|
# for ipv4 legal values are 2 to 30
|
||||||
# performed in the plugin code.
|
# for ipv6 legal values are 2 to 127
|
||||||
'type:values': range(1, 127)},
|
'default': 24, 'is_visible': True},
|
||||||
'default': 24, 'is_visible': True},
|
|
||||||
'l2_policies': {'allow_post': False, 'allow_put': False,
|
'l2_policies': {'allow_post': False, 'allow_put': False,
|
||||||
'validate': {'type:uuid_list': None},
|
validate': {'type:uuid_list': None},
|
||||||
'convert_to': attr.convert_none_to_empty_list,
|
'convert_to': attr.convert_none_to_empty_list,
|
||||||
'default': None, 'is_visible': True},
|
'default': None, 'is_visible': True},
|
||||||
},
|
},
|
||||||
NETWORK_SERVICE_POLICIES: {
|
NETWORK_SERVICE_POLICIES: {
|
||||||
'id': {'allow_post': False, 'allow_put': False,
|
'id': {'allow_post': False, 'allow_put': False,
|
||||||
@ -751,7 +751,7 @@ The following new resources are being introduced:
|
|||||||
'tenant_id': {'allow_post': True, 'allow_put': False,
|
'tenant_id': {'allow_post': True, 'allow_put': False,
|
||||||
'validate': {'type:string': None},
|
'validate': {'type:string': None},
|
||||||
'required_by_policy': True, 'is_visible': True},
|
'required_by_policy': True, 'is_visible': True},
|
||||||
'endpoint_groups': {'allow_post': False, 'allow_put': False,
|
'policy_target_groups': {'allow_post': False, 'allow_put': False,
|
||||||
'validate': {'type:uuid_list': None},
|
'validate': {'type:uuid_list': None},
|
||||||
'convert_to': attr.convert_none_to_empty_list,
|
'convert_to': attr.convert_none_to_empty_list,
|
||||||
'default': None, 'is_visible': True},
|
'default': None, 'is_visible': True},
|
||||||
@ -773,12 +773,12 @@ using attribute extension:
|
|||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
EXTENDED_ATTRIBUTES_2_0 = {
|
EXTENDED_ATTRIBUTES_2_0 = {
|
||||||
gpolicy.ENDPOINTS: {
|
gpolicy.POLICY_TARGETS: {
|
||||||
'neutron_port_id': {'allow_post': True, 'allow_put': False,
|
'neutron_port_id': {'allow_post': True, 'allow_put': False,
|
||||||
'validate': {'type:uuid_or_none': None},
|
'validate': {'type:uuid_or_none': None},
|
||||||
'is_visible': True, 'default': None},
|
'is_visible': True, 'default': None},
|
||||||
},
|
},
|
||||||
gpolicy.ENDPOINT_GROUPS: {
|
gpolicy.POLICY_TARGET_GROUPS: {
|
||||||
'neutron_subnets': {'allow_post': True, 'allow_put': True,
|
'neutron_subnets': {'allow_post': True, 'allow_put': True,
|
||||||
'validate': {'type:uuid_list': None},
|
'validate': {'type:uuid_list': None},
|
||||||
'convert_to': attr.convert_none_to_empty_list,
|
'convert_to': attr.convert_none_to_empty_list,
|
||||||
@ -801,7 +801,7 @@ Security impact
|
|||||||
---------------
|
---------------
|
||||||
|
|
||||||
The connectivity model used here is consistent with OpenStack/Neutron's current
|
The connectivity model used here is consistent with OpenStack/Neutron's current
|
||||||
white list model - that is, there is no connectivity outside an EPG unless
|
white list model - that is, there is no connectivity outside a PTG unless
|
||||||
explicitly allowed.
|
explicitly allowed.
|
||||||
|
|
||||||
The rendering of the proposed new abstractions happens via existing Security
|
The rendering of the proposed new abstractions happens via existing Security
|
||||||
@ -890,6 +890,8 @@ Assignee(s)
|
|||||||
|
|
||||||
Mandeep Dhami (mandeep-dhami)
|
Mandeep Dhami (mandeep-dhami)
|
||||||
|
|
||||||
|
Ivar Lazzaro (mmaleckk)
|
||||||
|
|
||||||
Mohammad Banikazemi (banix)
|
Mohammad Banikazemi (banix)
|
||||||
|
|
||||||
Stephen Wong (s3wong)
|
Stephen Wong (s3wong)
|
||||||
@ -900,6 +902,8 @@ Assignee(s)
|
|||||||
|
|
||||||
Subrahmanyam Ongole (osms69)
|
Subrahmanyam Ongole (osms69)
|
||||||
|
|
||||||
|
Magesh GV (magesh-gv)
|
||||||
|
|
||||||
Ronak Shah (ronak-malav-shah)
|
Ronak Shah (ronak-malav-shah)
|
||||||
|
|
||||||
Rudra Rugge (rudrarugge)
|
Rudra Rugge (rudrarugge)
|
||||||
|
Loading…
Reference in New Issue
Block a user