Merge "Add INFO.yaml file" 2.0.0-ONAP beijing 2.0.0-ONAP
authorSteven Wright <sw3588@att.com>
Tue, 8 May 2018 10:56:34 +0000 (10:56 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 8 May 2018 10:56:34 +0000 (10:56 +0000)
41 files changed:
.gitignore
.gitreview [new file with mode: 0644]
ice_validator/tests/fixtures/test_allowed_address_pair_format/pass/valid_heat_template.yaml
ice_validator/tests/fixtures/test_base_template_names/pass/base_well_named_4/base.yaml [new file with mode: 0644]
ice_validator/tests/fixtures/test_fixed_ips_format/pass/valid_heat_template.yaml
ice_validator/tests/fixtures/test_fixed_ips_format_use_get_param/pass/valid_heat_template.yaml
ice_validator/tests/fixtures/test_fixed_ips_include_vm_type_network_role/pass/valid_template.yaml
ice_validator/tests/fixtures/test_network_format/pass/valid_heat_template.yaml
ice_validator/tests/fixtures/test_port_resource_ids/pass/valid_template.yaml
ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference.yaml [deleted file]
ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/pass/params_referenced_are_defined_and_vice_versa_1.yaml
ice_validator/tests/fixtures/test_reserve_port_fixed_ips_format/fail/invalid_base_naming_for_fixed_ips.yaml [new file with mode: 0644]
ice_validator/tests/fixtures/test_reserve_port_fixed_ips_format/pass/valid_base_heat_template.yaml [new file with mode: 0644]
ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/fail/invalid_base_heat_template_1.yaml [new file with mode: 0644]
ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/fail/invalid_base_heat_template_2.yaml [new file with mode: 0644]
ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/pass/valid_base_heat_template_1.yaml [new file with mode: 0644]
ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/pass/valid_base_heat_template_2.yaml [new file with mode: 0644]
ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/fail/invalid_base_naming_for_fixed_ips.yaml [moved from ice_validator/tests/fixtures/test_network_format/fail/invalid_naming_used_for_internal_network_resource.yaml with 78% similarity]
ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_base_heat_template_1.yaml [new file with mode: 0644]
ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_base_heat_template_2.yaml [new file with mode: 0644]
ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_base_heat_template_3.yaml [new file with mode: 0644]
ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_module_heat_template.yaml [new file with mode: 0644]
ice_validator/tests/fixtures/test_subnet_format/pass/valid_heat_template.yaml
ice_validator/tests/test_allowed_address_pair_format.py
ice_validator/tests/test_base_template_names.py
ice_validator/tests/test_fixed_ips_format.py
ice_validator/tests/test_fixed_ips_format_use_get_param.py
ice_validator/tests/test_heat_parameter_section.py
ice_validator/tests/test_network_format.py
ice_validator/tests/test_port_resource_ids.py
ice_validator/tests/test_reserve_port_fixed_ips_format.py [new file with mode: 0644]
ice_validator/tests/test_reserve_port_fixed_ips_has_base_outputs.py [new file with mode: 0644]
ice_validator/tests/test_reserve_port_only_in_base_template.py [new file with mode: 0644]
ice_validator/tests/test_subnet_format.py
ice_validator/tests/test_unique_resources_across_all_templates.py
ice_validator/tests/utils/nested_iterables.py
ice_validator/tests/utils/network_roles.py
ice_validator/tests/utils/ports.py
mvn-phase-script.sh [new file with mode: 0755]
pom.xml [new file with mode: 0644]
tox.ini

index 72364f9..1772dfe 100644 (file)
@@ -87,3 +87,9 @@ ENV/
 
 # Rope project settings
 .ropeproject
+
+# OS X
+*DS_Store*
+
+# pytest
+*pytest_cache*
diff --git a/.gitreview b/.gitreview
new file mode 100644 (file)
index 0000000..f64c21e
--- /dev/null
@@ -0,0 +1,5 @@
+[gerrit]
+host=gerrit.onap.org
+port=29418
+project=vvp/validation-scripts.git
+
index 9a66ae5..47343c3 100644 (file)
@@ -122,4 +122,26 @@ resources:
         properties:
           network: { get_param: extnet_net_id }
           allowed_address_pairs:
-            - ip_address: { get_param: [lb_2_extnet_v6_ips, 0] }
\ No newline at end of file
+            - ip_address: { get_param: [lb_2_extnet_v6_ips, 0] }
+  int_oam_net:
+        type: OS::Neutron::Net
+        properties:
+          name: { get_param: int_oam_net_name }
+  vm_type_1_int_intranet_10_port:
+       type: OS::Neutron::Port
+       properties:
+         network: { get_resource: int_oam_net }
+         allowed_address_pairs:
+           - ip_address: { get_param: [lb_2_int_intranet_v6_ips, 1] }
+  vm_type_1_int_intranet_11_port:
+       type: OS::Neutron::Port
+       properties:
+         network: { get_resource: int_oam_net }
+         allowed_address_pairs:
+           - ip_address: { get_param: [lb_2_int_intranet_ips, 1] }
+  vm_type_1_int_intranet_10_port:
+       type: OS::Neutron::Port
+       properties:
+         network: { get_resource: int_oam_net }
+         allowed_address_pairs:
+           - ip_address: { get_param: lb_2_int_intranet_v6_ip_1 }
diff --git a/ice_validator/tests/fixtures/test_base_template_names/pass/base_well_named_4/base.yaml b/ice_validator/tests/fixtures/test_base_template_names/pass/base_well_named_4/base.yaml
new file mode 100644 (file)
index 0000000..24b4c8f
--- /dev/null
@@ -0,0 +1,57 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+---
+description:
+    base
+parameters:
+    vm_type_volume_name_0:
+        type: string
+    vm_type_volume_size_0:
+        type: number
+
+resources:
+    server_0:
+        type: OS::Nova::Server
+        properties:
+            name: {get_param: server_name_0}
+
+outputs:
+    vm_type_volume_id_0:
+        value: {get_resource: vm_type_volume_0}
\ No newline at end of file
index f1b4f4d..46cfdab 100644 (file)
@@ -91,4 +91,40 @@ resources:
           network: { get_param: extnet_net_id }
           fixed_ips:
             - subnet_id: { get_param: extnet_subnet_id }
-            - subnet_id: { get_param: extnet_v6_subnet_id }
\ No newline at end of file
+            - subnet_id: { get_param: extnet_v6_subnet_id }
+  reserve_port_vm_type_1_network_role_a_floating_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: network_role_a_net_id }
+          fixed_ips:
+            - ip_address : { get_param: vm_type_1_network_role_a_floating_ip }
+  reserve_port_vm_type_1_network_role_a_floating_v6_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: network_role_a_net_id }
+          fixed_ips:
+            - ip_address : { get_param: vm_type_1_network_role_a_floating_v6_ip }
+  int_oam_net:
+        type: OS::Neutron::Net
+        properties:
+          name: { get_param: int_oam_net_name }
+  vm_type_1_int_vpnnet_8_port:
+       type: OS::Neutron::Port
+       properties:
+         network: { get_resource: int_oam_net }
+         fixed_ips:
+            - ip_address: { get_param: [db_1_int_vpnnet_ips, 0] }
+            - ip_address: { get_param: [db_1_int_vpnnet_ips, 1] }
+  vm_type_1_int_vpnnet_9_port:
+       type: OS::Neutron::Port
+       properties:
+         network: { get_resource: int_oam_net }
+         fixed_ips:
+            - ip_address: { get_param: [db_1_int_vpnnet_ips, 0] }
+            - subnet_id: { get_resource: int_vpnnet_subnet_id }
+  vm_type_1_int_vpnnet_10_port:
+       type: OS::Neutron::Port
+       properties:
+         network: { get_resource: int_oam_net }
+         fixed_ips:
+            - ip_address: { get_param: lb_0_int_intranet_ip_0 }
index f1b4f4d..b08c671 100644 (file)
@@ -91,4 +91,16 @@ resources:
           network: { get_param: extnet_net_id }
           fixed_ips:
             - subnet_id: { get_param: extnet_subnet_id }
-            - subnet_id: { get_param: extnet_v6_subnet_id }
\ No newline at end of file
+            - subnet_id: { get_param: extnet_v6_subnet_id }
+  reserve_port_vm_type_1_network_role_a_floating_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: network_role_a_net_id }
+          fixed_ips:
+            - ip_address : { get_param: vm_type_1_network_role_a_floating_ip }
+  reserve_port_vm_type_1_network_role_a_floating_v6_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: network_role_a_net_id }
+          fixed_ips:
+            - ip_address : { get_param: vm_type_1_network_role_a_floating_v6_ip }
\ No newline at end of file
index f67b794..48b0080 100644 (file)
@@ -211,3 +211,15 @@ resources:
           fixed_ips:
             - subnet_id: { get_param: extnet_subnet_id }
             - subnet_id: { get_param: extnet_v6_subnet_id }
+  reserve_port_vm_type_1_network_role_a_floating_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: network_role_a_net_id }
+          fixed_ips:
+            - ip_address : { get_param: vm_type_1_network_role_a_floating_ip }
+  reserve_port_vm_type_1_network_role_a_floating_v6_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: network_role_a_net_id }
+          fixed_ips:
+            - ip_address : { get_param: vm_type_1_network_role_a_floating_v6_ip }
index 422a979..ef28f27 100644 (file)
@@ -59,7 +59,11 @@ resources:
         properties:
           network: { get_param: extnet_net_id }
 
+  int_oam_net:
+        type: OS::Neutron::Net
+        properties:
+          name: { get_param: int_oam_net_name }
   vm_type_1_int_oam_1_port:
     type: OS::Neutron::Port
     properties:
-      network: { get_resource: int_oam_net_id }
+      network: { get_resource: int_oam_net }
index dd5d768..a16badc 100644 (file)
@@ -95,6 +95,9 @@ parameters:
   int_vpnnet_net_id:
     type: string
     description: network id for the internal network vpnnet 
+  int_oam_net_name:
+    type: string
+    description: name for the OAM network to be created in the resources section
 
 resources:
 
@@ -126,6 +129,18 @@ resources:
         vnf_id: { get_param: vnf_id }
         vf_module_id: { get_param: vf_module_id }
 
+  admin_server_2:
+    type: OS::Nova::Server
+    properties:
+      availability_zone: { get_param: availability_zone_0 }
+      name: { get_param: [admin_names, 2]  }
+      flavor: { get_param: admin_flavor_name}
+      networks:
+        - port: { get_resource: admin_2_int_vpnnet_0_port }
+      metadata:
+        vnf_name: { get_param: vnf_name }
+        vnf_id: { get_param: vnf_id }
+        vf_module_id: { get_param: vf_module_id }
   lb_server_0:
     type: OS::Nova::Server
     properties:
@@ -155,4 +170,15 @@ resources:
   admin_1_extnet_1_port:
       type: OS::Neutron::Port
       properties:
-        network: { get_param: extnet_net_id }
\ No newline at end of file
+        network: { get_param: extnet_net_id }
+  int_oam_net:
+        type: OS::Neutron::Net
+        properties:
+          name: { get_param: int_oam_net_name }
+  admin_2_int_vpnnet_0_port:
+       type: OS::Neutron::Port
+       properties:
+         network: { get_resource: int_oam_net }
+         fixed_ips:
+            - ip_address: { get_param: [db_1_int_vpnnet_ips, 0] }
+            - ip_address: { get_param: [db_1_int_vpnnet_ips, 1] }
diff --git a/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference.yaml b/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference.yaml
deleted file mode 100644 (file)
index 78632b8..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-# -*- coding: utf8 -*-
-# ============LICENSE_START=======================================================
-# org.onap.vvp/validation-scripts
-# ===================================================================
-# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
-# ===================================================================
-#
-# Unless otherwise specified, all software contained herein is licensed
-# under the Apache License, Version 2.0 (the “License”);
-# you may not use this software except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#             http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-#
-# Unless otherwise specified, all documentation contained herein is licensed
-# under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
-# you may not use this documentation except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#             https://creativecommons.org/licenses/by/4.0/
-#
-# Unless required by applicable law or agreed to in writing, documentation
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# ============LICENSE_END============================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-#
----
-heat_template_version: 2013-05-23
-
-description: Simple template to deploy a single compute instance
-
-parameters:
-  vnf_id:
-    description: Unique ID for this VNF
-    type: string
-  vf_module_id:
-    description: Unique ID for this VF module
-    type: string
-  vnf_name:
-    type: string
-    description: Unique name for this VNF instance
-  ex_image_name:
-    type: string
-    label: Image name or ID
-    description: Image to be used for compute instance
-  ex_key:
-    type: string
-    label: key pair
-    description: Name of the key apir the nova server will use
-  ex_vm_name:
-    type: string
-    description: Name of the VM
-  ex1_vm_names:
-    type: comma_delimited_list
-    description: Name of the VM
-  ex1_image_name:
-    type: string
-    label: Image name or ID
-    description: Image to be used for compute instance
-  ex1_flavor_name:
-    type: string
-    label: Flavor
-    description: Type of instance (flavor) to be used  
-  ex1_key:
-    type: string
-    label: key pair
-    description: Name of the key apir the nova server will use
-  ex1_server_index:
-    type: number
-    label: server index
-    description: Index of server
-    constraint:
-      - range: { min: 1, max: 100 }
-
-resources:
-  ex_software_config_0:
-    type: OS::Heat::SoftwareConfig
-    properties:
-      group: ungrouped
-      config:
-          params:
-            $stack_name: { get_param: 'OS::stack_name' }
-
-  ex_nova_server_0:
-    type: OS::Nova::Server
-    properties:
-      name: { get_param: ex_vm_name }
-      metadata:
-        vnf_id: { get_param: vnf_id }
-        vf_module_id: { get_param: vf_module_id }
-        vnf_name: { get_param: vnf_name }
-      image: { get_param: ex_image_name }
-      flavor: { get_param: ex_flavor_name }
-      key_name: { get_param: ex_key }
-      user_data:
-        get_resource: ex_software_config_0
-
-  ex1_nova_server_0:
-    type: OS::Nova::Server
-    properties:
-      name: { get_param: [ ex1_vm_names, 0 ] }
-      metadata:
-        vnf_id: { get_param: vnf_id }
-        vf_module_id: { get_param: vf_module_id }
-        vnf_name: { get_param: vnf_name }
-        project_id: { get_param: "OS::project_id" }
-      image: { get_param: ex1_image_name }
-      flavor: { get_param: ex1_flavor_name }
-      key_name: { get_param: ex1_key }
-
-  ex1_nova_server_1:
-    type: OS::Nova::Server
-    properties:
-      name: { get_param: [ ex1_vm_names, { get_param: ex1_server_index } ] }
-      metadata:
-        vnf_id: { get_param: vnf_id }
-        vf_module_id: { get_param: vf_module_id }
-        vnf_name: { get_param: vnf_name }
-      image: { get_param: ex1_image_name}
-      flavor: { get_param: ex1_flavor_name }
-      key_name: { get_param: ex1_key }
\ No newline at end of file
index 3080018..cf9e241 100644 (file)
@@ -82,12 +82,16 @@ parameters:
     type: string
     label: key pair
     description: Name of the key apir the nova server will use
-  ex1_server_index:
+  ex1_server_index_0:
     type: number
     label: server index
     description: Index of server
     constraint:
       - range: { min: 1, max: 100 }
+  ex1_server_info:
+    type: json
+    label: Json containing server index
+    description: Json containing the index of server
 
 resources:
   ex_software_config_0:
@@ -129,7 +133,24 @@ resources:
   ex1_nova_server_1:
     type: OS::Nova::Server
     properties:
-      name: { get_param: [ ex1_vm_names, { get_param: ex1_server_index } ] }
+      name: { get_param: [ ex1_vm_names, { get_param: ex1_server_index_0 } ] }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+        vf_module_id: { get_param: vf_module_id }
+        vnf_name: { get_param: vnf_name }
+      image: { get_param: ex1_image_name}
+      flavor: { get_param: ex1_flavor_name }
+      key_name: { get_param: ex1_key }
+  ex1_nova_server_2:
+    type: OS::Nova::Server
+    properties:
+      name:
+        get_param:
+        - ex1_vm_names
+        - get_param:
+          - ex1_server_info
+          - ex1_server_metadata
+          - ex1_server_index_1
       metadata:
         vnf_id: { get_param: vnf_id }
         vf_module_id: { get_param: vf_module_id }
diff --git a/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_format/fail/invalid_base_naming_for_fixed_ips.yaml b/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_format/fail/invalid_base_naming_for_fixed_ips.yaml
new file mode 100644 (file)
index 0000000..d686e65
--- /dev/null
@@ -0,0 +1,69 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+---
+resources:
+
+  reserve_port_lb_1_int_intranet_floating_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_int_intranet_floating_ips }
+
+  reserve_port_lb_2_int_intranet_floating_v6_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_int_intranet_v6_ip }
+
+  reserve_port_lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  reserve_port_lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
\ No newline at end of file
diff --git a/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_format/pass/valid_base_heat_template.yaml b/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_format/pass/valid_base_heat_template.yaml
new file mode 100644 (file)
index 0000000..2efaa5d
--- /dev/null
@@ -0,0 +1,69 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+---
+resources:
+
+  reserve_port_lb_1_int_intranet_floating_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_int_intranet_floating_ip }
+
+  reserve_port_lb_2_int_intranet_floating_v6_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_int_intranet_floating_v6_ip }
+
+  reserve_port_lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  reserve_port_lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
\ No newline at end of file
diff --git a/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/fail/invalid_base_heat_template_1.yaml b/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/fail/invalid_base_heat_template_1.yaml
new file mode 100644 (file)
index 0000000..1fd21a2
--- /dev/null
@@ -0,0 +1,90 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+---
+resources:
+
+  reserve_port_lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  reserve_port_lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
+
+  reserve_port_lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  reserve_port_lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
+
+  lb_3_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_3_extnet_floating_v6_ip }
+
+outputs:
+
+  lb_1_int_intranet_vip:
+        description: "vip for lb_1_int_intranet_floating_ip"
+        value: { get_param: lb_1_int_intranet_floating_ip }
+
+  lb_2_int_intranet_v6_vip:
+        description: "vip for lb_2_int_intranet_v6_vip"
+        value: { get_param: lb_2_int_intranet_floating_v6_ip }
+
+  lb_1_extnet_vip:
+        description: "vip for lb_1_extnet_floating_ip"
+        value: { get_param: lb_1_extnet_floating_ip }
\ No newline at end of file
diff --git a/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/fail/invalid_base_heat_template_2.yaml b/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/fail/invalid_base_heat_template_2.yaml
new file mode 100644 (file)
index 0000000..d4e38e6
--- /dev/null
@@ -0,0 +1,95 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+---
+resources:
+
+  reserve_port_lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  reserve_port_lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
+
+  reserve_port_lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  reserve_port_lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
+
+  lb_3_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_3_extnet_floating_v6_ip }
+
+outputs:
+
+
+  lb_1_int_intranet_vip:
+        description: "vip for lb_1_int_intranet_floating_ip"
+        value: { get_param: lb_1_int_intranet_floating_ip }
+
+  lb_2_int_intranet_v6_vip:
+        description: "vip for lb_2_int_intranet_v6_vip"
+        value: { get_param: lb_2_int_intranet_floating_v6_ip }
+
+  lb_1_extnet_vip:
+        description: "vip for lb_1_extnet_floating_ip"
+        value: { get_param: lb_1_extnet_floating_ip }
+
+  lb_2_extnet_v6_vip:
+        description: "vip for lb_2_extnet_floating_v6_ip"
+        value: { get_param: lb_2_extnet_floating_v6_ips }
\ No newline at end of file
diff --git a/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/pass/valid_base_heat_template_1.yaml b/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/pass/valid_base_heat_template_1.yaml
new file mode 100644 (file)
index 0000000..9d52e98
--- /dev/null
@@ -0,0 +1,94 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+---
+resources:
+
+  reserve_port_lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  reserve_port_lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
+
+  reserve_port_lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  reserve_port_lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
+
+  lb_3_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_3_extnet_floating_v6_ip }
+
+outputs:
+
+  lb_1_int_intranet_vip:
+        description: "vip for lb_1_int_intranet_floating_ip"
+        value: { get_param: lb_1_int_intranet_floating_ip }
+
+  lb_2_int_intranet_v6_vip:
+        description: "vip for lb_2_int_intranet_v6_vip"
+        value: { get_param: lb_2_int_intranet_floating_v6_ip }
+
+  lb_1_extnet_vip:
+        description: "vip for lb_1_extnet_floating_ip"
+        value: { get_param: lb_1_extnet_floating_ip }
+
+  lb_2_extnet_v6_vip:
+        description: "vip for lb_2_extnet_floating_v6_ip"
+        value: { get_param: lb_2_extnet_floating_v6_ip }
\ No newline at end of file
diff --git a/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/pass/valid_base_heat_template_2.yaml b/ice_validator/tests/fixtures/test_reserve_port_fixed_ips_has_base_outputs/pass/valid_base_heat_template_2.yaml
new file mode 100644 (file)
index 0000000..ebec57b
--- /dev/null
@@ -0,0 +1,76 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+---
+resources:
+
+  lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
+
+  lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
+
+  lb_3_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_3_extnet_floating_v6_ip }
@@ -6,7 +6,7 @@
 # ===================================================================
 #
 # Unless otherwise specified, all software contained herein is licensed
-# under the Apache License, Version 2.0 (the “License”);
+# under the Apache License, Version 2.0 (the "License");
 # you may not use this software except in compliance with the License.
 # You may obtain a copy of the License at
 #
@@ -21,7 +21,7 @@
 #
 #
 # Unless otherwise specified, all documentation contained herein is licensed
-# under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
 # you may not use this documentation except in compliance with the License.
 # You may obtain a copy of the License at
 #
 #
 ---
 resources:
-  vm_type_1_int_intranet_0_port:
+
+  lb_1_int_intranet_port:
         type: OS::Neutron::Port
         properties:
           network: { get_param: int_intranet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_int_intranet_ip }
 
-  vm_type_1_int_vpnnet_0_port:
+  lb_2_int_intranet_port:
         type: OS::Neutron::Port
         properties:
-            network: { get_param: int_vpnnet_net_id }
+          network: { get_param: int_intranet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_int_intranet_floating_v6_ips }
 
-  vm_type_1_extnet_net_0_port:
+  lb_1_extnet_port:
         type: OS::Neutron::Port
         properties:
           network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
 
-  vm_type_1_extnet_0_port:
+  lb_2_extnet_port:
         type: OS::Neutron::Port
         properties:
           network: { get_param: extnet_net_id }
-
-  vm_type_1_int_oam_1_port:
-    type: OS::Neutron::Port
-    properties:
-      network: { get_resource: int_oam_net }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
\ No newline at end of file
diff --git a/ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_base_heat_template_1.yaml b/ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_base_heat_template_1.yaml
new file mode 100644 (file)
index 0000000..2efaa5d
--- /dev/null
@@ -0,0 +1,69 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+---
+resources:
+
+  reserve_port_lb_1_int_intranet_floating_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_int_intranet_floating_ip }
+
+  reserve_port_lb_2_int_intranet_floating_v6_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_int_intranet_floating_v6_ip }
+
+  reserve_port_lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  reserve_port_lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
\ No newline at end of file
diff --git a/ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_base_heat_template_2.yaml b/ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_base_heat_template_2.yaml
new file mode 100644 (file)
index 0000000..90d46c3
--- /dev/null
@@ -0,0 +1,69 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+---
+resources:
+
+  lb_1_int_intranet_floating_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_int_intranet_floating_ip }
+
+  lb_2_int_intranet_floating_v6_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_int_intranet_floating_v6_ip }
+
+  lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
\ No newline at end of file
diff --git a/ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_base_heat_template_3.yaml b/ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_base_heat_template_3.yaml
new file mode 100644 (file)
index 0000000..6cb3fb4
--- /dev/null
@@ -0,0 +1,69 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+---
+resources:
+
+  reserve_port_lb_1_int_intranet_floating_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_int_intranet_floating_ip }
+
+  lb_2_int_intranet_floating_v6_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_int_intranet_floating_v6_ip }
+
+  lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
\ No newline at end of file
diff --git a/ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_module_heat_template.yaml b/ice_validator/tests/fixtures/test_reserve_port_only_in_base_template/pass/valid_module_heat_template.yaml
new file mode 100644 (file)
index 0000000..90d46c3
--- /dev/null
@@ -0,0 +1,69 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+---
+resources:
+
+  lb_1_int_intranet_floating_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_int_intranet_floating_ip }
+
+  lb_2_int_intranet_floating_v6_ip_0:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: int_intranet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_int_intranet_floating_v6_ip }
+
+  lb_1_extnet_floating_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_name }
+          fixed_ips:
+            - ip_address: { get_param: lb_1_extnet_floating_ip }
+
+  lb_2_extnet_floating_v6_ip_1:
+        type: OS::Neutron::Port
+        properties:
+          network: { get_param: extnet_net_id }
+          fixed_ips:
+            - ip_address: { get_param: lb_2_extnet_floating_v6_ip }
\ No newline at end of file
index 76f92e6..5251083 100644 (file)
@@ -84,3 +84,14 @@ resources:
         properties:
           network: { get_param: extnet_net_id }
 
+  int_oam_net:
+        type: OS::Neutron::Net
+        properties:
+          name: { get_param: int_oam_net_name }
+  vm_type_1_int_vpnnet_3_port:
+       type: OS::Neutron::Port
+       properties:
+         network: { get_resource: int_oam_net }
+         fixed_ips:
+            - ip_address: { get_param: [db_1_int_vpnnet_ips, 1] }
+            - subnet_id: { get_resource: int_vpnnet_subnet_id }
index c8a84c6..683d560 100644 (file)
@@ -40,7 +40,8 @@
 
 import pytest
 import yaml
-from .utils.network_roles import get_network_role_from_port
+from .utils.network_roles import get_network_role_from_port,\
+                                 property_uses_get_resource
 import re
 
 
@@ -93,6 +94,8 @@ def test_allowed_address_pairs_format(heat_template):
             continue
         if v1.get("type") != "OS::Neutron::Port":
             continue
+        if property_uses_get_resource(v1, "network"):
+            continue
         network_role = get_network_role_from_port(v1)
 
         for k2, v2 in v1["properties"].items():
index 0f903bd..d3fd7b4 100644 (file)
@@ -60,6 +60,7 @@ def test_base_template_names(template_dir):
 
         if (filename.endswith("_base") or
                 filename.startswith("base_") or
+                filename == "base" or
                 filename.find("_base_") > 0):
             base_template_count += 1
     assert base_template_count == 1
index 039c619..8e159ba 100644 (file)
@@ -40,7 +40,9 @@
 
 import pytest
 import yaml
-from .utils.network_roles import get_network_role_from_port
+from .utils.ports import is_reserved_port
+from .utils.network_roles import get_network_role_from_port,\
+                                 property_uses_get_resource
 import re
 
 
@@ -76,13 +78,17 @@ def test_fixed_ips_format(heat_template):
         pytest.skip("No resources specified in the heat template")
 
     invalid_fixed_ips = []
-    for v1 in yml["resources"].values():
+    for k1, v1 in yml["resources"].items():
         if not isinstance(v1, dict):
             continue
         if "properties" not in v1:
             continue
         if v1.get("type") != "OS::Neutron::Port":
             continue
+        if is_reserved_port(k1):
+            continue
+        if property_uses_get_resource(v1, "network"):
+            continue
         network_role = get_network_role_from_port(v1)
 
         for k2, v2 in v1["properties"].items():
index afd52e5..13f028d 100644 (file)
@@ -40,6 +40,7 @@
 
 import pytest
 import yaml
+from .utils.ports import is_reserved_port
 
 
 def test_fixed_ips_format_use_get_parm(heat_template):
@@ -61,6 +62,8 @@ def test_fixed_ips_format_use_get_parm(heat_template):
             continue
         if v.get("type") != "OS::Neutron::Port":
             continue
+        if is_reserved_port(k):
+            continue
 
         valid_fixed_ip = True
         for k2, v2 in v["properties"].items():
index 7559ee6..c5d0b4c 100644 (file)
@@ -63,7 +63,7 @@ def test_parameter_valid_keys(yaml_file):
             continue
         detected_keys = set(v1) & set(key_values)
         if set(v1) != set(detected_keys):
-            invalid_params.append(v1)
+            invalid_params.append(str(v1))
 
     assert not set(invalid_params)
 
@@ -84,6 +84,6 @@ def test_default_values(yaml_file):
         if not isinstance(v1, dict):
             continue
         if any(k == 'default' for k in v1):
-            invalid_params.append(v1)
+            invalid_params.append(str(v1))
 
     assert not set(invalid_params)
index 28144d3..17d000c 100644 (file)
@@ -40,7 +40,8 @@
 
 import pytest
 import yaml
-from .utils.network_roles import get_network_role_from_port
+from .utils.network_roles import get_network_role_from_port,\
+                                 property_uses_get_resource
 
 
 def test_network_format(heat_template):
@@ -61,6 +62,8 @@ def test_network_format(heat_template):
             continue
         if "properties" not in v:
             continue
+        if property_uses_get_resource(v, "network"):
+            continue
         if v.get("type") != "OS::Neutron::Port":
             continue
         if not get_network_role_from_port(v):
index 78a6751..f7bf1e8 100644 (file)
@@ -43,7 +43,8 @@ import pytest
 import yaml
 from .utils.vm_types import get_vm_type_for_nova_server
 from .utils.network_roles import get_network_role_from_port,\
-                                 get_network_type_from_port
+                                 get_network_type_from_port,\
+                                 property_uses_get_resource
 
 
 def test_port_resource_ids(heat_template):
@@ -111,6 +112,8 @@ def test_port_resource_ids(heat_template):
                 has_vm_type = vm_type+"_" in port_id
 
                 if port_resource:
+                    if property_uses_get_resource(v, "network"):
+                        continue
                     network_role = get_network_role_from_port(port_resource)
                     if not network_role:
                         continue
diff --git a/ice_validator/tests/test_reserve_port_fixed_ips_format.py b/ice_validator/tests/test_reserve_port_fixed_ips_format.py
new file mode 100644 (file)
index 0000000..42d9a61
--- /dev/null
@@ -0,0 +1,118 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+
+import pytest
+import yaml
+from .utils.network_roles import get_network_role_from_port
+from .utils.ports import is_reserved_port
+import re
+
+
+def test_reserve_port_fixed_ips_format(heat_template):
+    '''
+    Make sure all fixed_ips properties for a reserved port
+    follow the allowed naming conventions
+    '''
+    allowed_formats = [
+                      ["fixed_ips", "string", "internal",
+                       re.compile(r'(.+?)_int_(.+?)_floating_v6_ip')],
+                      ["fixed_ips", "string", "internal",
+                       re.compile(r'(.+?)_int_(.+?)_floating_ip')],
+                      ["fixed_ips", "string", "external",
+                       re.compile(r'(.+?)_floating_v6_ip')],
+                      ["fixed_ips", "string", "external",
+                       re.compile(r'(.+?)_floating_ip')],
+                      ]
+
+    with open(heat_template) as fh:
+        yml = yaml.load(fh)
+
+    # skip if resources are not defined
+    if "resources" not in yml:
+        pytest.skip("No resources specified in the heat template")
+
+    # check both valid and invalid patterns to catch edge cases
+    invalid_fixed_ips = []
+
+    for k1, v1 in yml["resources"].items():
+        if not isinstance(v1, dict):
+            continue
+        if "properties" not in v1:
+            continue
+        if v1.get("type") != "OS::Neutron::Port":
+            continue
+        if not is_reserved_port(k1):
+            continue
+
+        network_role = get_network_role_from_port(v1)
+
+        for k2, v2 in v1["properties"].items():
+            if k2 != "fixed_ips":
+                continue
+            for v3 in v2:
+                if "ip_address" not in v3:
+                    continue
+                if "get_param" not in v3["ip_address"]:
+                    continue
+
+                valid_fixed_ip = False
+                for v4 in allowed_formats:
+                    param = v3["ip_address"]["get_param"]
+                    if isinstance(param, list):
+                        param = param[0]
+
+                    # check if pattern matches
+                    m = v4[3].match(param)
+                    if m:
+                        if v4[2] == "internal" and\
+                            len(m.groups()) > 1 and\
+                                m.group(2) == network_role:
+                                valid_fixed_ip = True
+                                break
+                        elif v4[2] == "external" and\
+                                len(m.groups()) > 0 and\
+                                m.group(1).endswith("_" + network_role):
+                                    valid_fixed_ip = True
+                                    break
+
+                if not valid_fixed_ip:
+                    invalid_fixed_ips.append(param)
+
+    assert not set(invalid_fixed_ips)
diff --git a/ice_validator/tests/test_reserve_port_fixed_ips_has_base_outputs.py b/ice_validator/tests/test_reserve_port_fixed_ips_has_base_outputs.py
new file mode 100644 (file)
index 0000000..7245ba8
--- /dev/null
@@ -0,0 +1,114 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+
+import pytest
+from os import path, sep
+import yaml
+from .utils.ports import is_reserved_port
+
+
+def test_reserve_port_fixed_ips_has_base_outputs(heat_template):
+    '''
+    Make sure all fixed ips specified in reserved ports are
+    also exported as outputs in the same base template
+    '''
+    basename = path.splitext(heat_template)[0].rsplit(sep, 1)[1]
+    if not (basename.endswith("_base") or
+            basename.startswith("base_") or
+            basename.find("_base_") > 0):
+            pytest.skip("Skipping as it is not a base template")
+
+    # parse the yml
+    with open(heat_template) as fh:
+        yml = yaml.load(fh)
+
+    # get the outputs
+    try:
+        outputs = yml["outputs"]
+    except (TypeError, KeyError):
+        outputs = {}
+
+    # skip if resources are not defined
+    if "resources" not in yml:
+        pytest.skip("No resources specified in the heat template")
+
+    invalid_fixed_ips = []
+    for k1, v1 in yml["resources"].items():
+        if not isinstance(v1, dict):
+            continue
+        if "properties" not in v1:
+            continue
+        if v1.get("type") != "OS::Neutron::Port":
+            continue
+        if not is_reserved_port(k1):
+            continue
+
+        for k2, v2 in v1["properties"].items():
+            if k2 != "fixed_ips":
+                continue
+            for v3 in v2:
+                if "ip_address" not in v3:
+                    continue
+                if "get_param" not in v3["ip_address"]:
+                    continue
+
+                param = v3["ip_address"]["get_param"]
+
+                # construct the expected output param
+                if 'v6' in param:
+                    output_param = param.replace('floating_v6_ip', 'v6_vip')
+                else:
+                    output_param = param.replace('floating_ip', 'vip')
+
+                # check the output is constructed correctly
+                try:
+                    output_vip = outputs[output_param]
+                    if not output_vip:
+                        invalid_fixed_ips.append(param)
+                    else:
+                        # make sure the value is set properly using the
+                        # original param value
+                        output_value_param = output_vip["value"]["get_param"]
+                        if output_value_param != param:
+                            invalid_fixed_ips.append(param)
+                except (TypeError, KeyError):
+                    invalid_fixed_ips.append(param)
+
+    assert not set(invalid_fixed_ips)
diff --git a/ice_validator/tests/test_reserve_port_only_in_base_template.py b/ice_validator/tests/test_reserve_port_only_in_base_template.py
new file mode 100644 (file)
index 0000000..52cbec2
--- /dev/null
@@ -0,0 +1,78 @@
+# -*- coding: utf8 -*-
+# ============LICENSE_START=======================================================
+# org.onap.vvp/validation-scripts
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the "License");
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#             https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+
+import pytest
+from os import path, sep
+import yaml
+from .utils.ports import is_reserved_port
+
+
+def test_reserve_port_only_in_base_template(heat_template):
+    '''
+    Make sure reserved ports are only specified in the base template
+    '''
+    basename = path.splitext(heat_template)[0].rsplit(sep, 1)[1]
+    if (basename.endswith("_base") or
+            basename.startswith("base_") or
+            basename.find("_base_") > 0):
+            pytest.skip("A base template may or may not have reserved ports")
+
+    # parse the yaml
+    with open(heat_template) as fh:
+        yml = yaml.load(fh)
+
+    # skip if resources are not defined
+    if "resources" not in yml:
+        pytest.skip("No resources specified in the heat template")
+
+    has_reserved_ports = False
+    for k1, v1 in yml["resources"].items():
+        if not isinstance(v1, dict):
+            continue
+        if "properties" not in v1:
+            continue
+        if v1.get("type") != "OS::Neutron::Port":
+            continue
+        if not is_reserved_port(k1):
+            continue
+
+        has_reserved_ports = True
+
+    assert not has_reserved_ports
index f1bab44..e5f28cc 100644 (file)
@@ -40,7 +40,8 @@
 
 import pytest
 import yaml
-from .utils.network_roles import get_network_role_from_port
+from .utils.network_roles import get_network_role_from_port,\
+                                 property_uses_get_resource
 import re
 
 
@@ -75,6 +76,8 @@ def test_subnet_format(heat_template):
             continue
         if v1.get("type") != "OS::Neutron::Port":
             continue
+        if property_uses_get_resource(v1, "network"):
+            continue
         network_role = get_network_role_from_port(v1)
 
         # get the network param to define the network_type
index 13b4121..7682782 100644 (file)
@@ -39,6 +39,7 @@
 #
 
 import yaml
+import collections
 
 
 def test_unique_resources_across_all_yaml_files(yaml_files):
@@ -54,4 +55,8 @@ def test_unique_resources_across_all_yaml_files(yaml_files):
             continue
         resources_ids.extend(yml['resources'].keys())
 
-    assert len(resources_ids) == len(set(resources_ids))
+    dup_ids = [item
+               for item, count in collections.Counter(resources_ids).items()
+               if count > 1]
+
+    assert not dup_ids
index 19290c0..eea6e19 100644 (file)
@@ -73,11 +73,13 @@ def find_all_get_param_in_yml(yml):
     params = []
     for k, v in yml.items():
         if k == 'get_param' and v not in os_pseudo_parameters:
+            if isinstance(v, list) and not isinstance(v[0], dict):
+                params.append(v[0])
+            elif not isinstance(v, dict) and isinstance(v, str):
+                params.append(v)
             for item in (v if isinstance(v, list) else [v]):
                 if isinstance(item, dict):
                     params.extend(find_all_get_param_in_yml(item))
-                elif isinstance(item, str):
-                    params.append(item)
             continue
         elif k == 'list_join':
             for item in (v if isinstance(v, list) else [v]):
index 5a551ab..fbe6dce 100644 (file)
@@ -161,3 +161,20 @@ def is_valid_ipv6_address(ip_address):
     except (OSError, socket.error):
         return False
     return True
+
+
+def property_uses_get_resource(resource, property_name):
+    '''
+    returns true if a port's network property
+    uses the get_resource function
+    '''
+    if not isinstance(resource, dict):
+        return False
+    if 'properties' not in resource:
+        return False
+    for k1, v1 in resource["properties"].items():
+        if k1 != property_name:
+            continue
+        if "get_resource" in v1:
+            return True
+    return False
index 51e920a..4d0b4ca 100644 (file)
@@ -177,3 +177,21 @@ def get_invalid_ip_addresses(resources, port_property):
                             invalid_ip_addresses.append(ip_address)
 
     return invalid_ip_addresses
+
+
+def is_reserved_port(port_id):
+    '''
+    Checks to see if the resource id for a port follows
+    the reserve port concept
+    '''
+    formats = [
+            ["port_id",
+             re.compile(r'reserve_port_(.+?)_floating_ip_\d+')],
+            ["port_id",
+             re.compile(r'reserve_port_(.+?)_floating_v6_ip_\d+')],
+            ]
+    for f in formats:
+        m = f[1].match(port_id.lower())
+        if m and m.group(1):
+            return True
+    return False
diff --git a/mvn-phase-script.sh b/mvn-phase-script.sh
new file mode 100755 (executable)
index 0000000..1490547
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+# ================================================================================
+# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+set -ex
+
+
+echo "running script: [$0] for module [$1] at stage [$2]"
+
+MVN_PROJECT_MODULEID="$1"
+MVN_PHASE="$2"
+PROJECT_ROOT=$(dirname $0)
+
+run_tox_test () {
+  CURDIR=$(pwd)
+  TOXINIS=$(find . -name "tox.ini")
+  for TOXINI in "${TOXINIS[@]}"; do
+    DIR=$(echo "$TOXINI" | rev | cut -f2- -d'/' | rev)
+    cd "${CURDIR}/${DIR}"
+    rm -rf ./venv-tox ./.tox
+    virtualenv ./venv-tox
+    source ./venv-tox/bin/activate
+    pip install --upgrade pip
+    pip install --upgrade tox argparse
+    pip freeze
+    tox
+    deactivate
+    rm -rf ./venv-tox ./.tox
+  done
+}
+
+# Customize the section below for each project
+case $MVN_PHASE in
+test)
+  echo "==> test phase script"
+  run_tox_test
+  ;;
+*)
+  echo "==> unprocessed phase"
+  ;;
+esac
+
+
diff --git a/pom.xml b/pom.xml
new file mode 100644 (file)
index 0000000..ea9e9a2
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,102 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.onap.oparent</groupId>
+    <artifactId>oparent</artifactId>
+    <version>1.1.0</version>
+  </parent>
+
+  <groupId>org.onap.vvp.validation-scripts</groupId>
+  <artifactId>validation-scripts</artifactId>
+  <packaging>pom</packaging>
+  <version>1.0.0-SNAPSHOT</version>
+  <name>vvp-validation-scripts</name>
+
+  <properties>
+        <!--nexus-->
+        <onap.nexus.url>https://nexus.onap.org</onap.nexus.url>
+        <sitePath>/content/sites/site/org/onap/vvp/${project.artifactId}/${project.version}</sitePath>
+        <!--maven-->
+        <timestamp>${maven.build.timestamp}</timestamp>
+        <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
+        <!--sonar-->
+        <sonar.sourceEncoding>UTF-8</sonar.sourceEncoding>
+        <sonar.sources>.</sonar.sources>
+        <sonar.python.coverage.reportPath>coverage.xml</sonar.python.coverage.reportPath>
+        <sonar.language>py</sonar.language>
+        <sonar.pluginName>python</sonar.pluginName>
+        <sonar.inclusions>ice_validator/tests/**.py</sonar.inclusions>
+  </properties>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>exec-maven-plugin</artifactId>
+            <version>1.2.1</version>
+            <configuration>
+              <executable>${session.executionRootDirectory}/mvn-phase-script.sh</executable>
+            </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+    <plugins>
+        <plugin>
+            <groupId>org.sonatype.plugins</groupId>
+            <artifactId>nexus-staging-maven-plugin</artifactId>
+            <version>1.6.7</version>
+            <extensions>true</extensions>
+            <configuration>
+                <nexusUrl>${onap.nexus.url}</nexusUrl>
+                <stagingProfileId>176c31dfe190a</stagingProfileId>
+                <serverId>ecomp-staging</serverId>
+            </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>exec-maven-plugin</artifactId>
+          <version>1.2.1</version>
+          <executions>
+            <execution>
+              <id>test script</id>
+              <phase>test</phase>
+              <goals>
+                <goal>exec</goal>
+              </goals>
+              <configuration>
+                <arguments>
+                  <argument>__</argument>
+                  <argument>test</argument>
+                </arguments>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+    </plugins>
+  </build>
+  <distributionManagement>
+      <site>
+          <id>ecomp-site</id>
+          <url>dav:${onap.nexus.url}${sitePath}</url>
+      </site>
+  </distributionManagement>
+  <repositories>
+    <repository>
+        <id>ecomp-releases</id>
+          <name>ECOMP Release Repository</name>
+          <url>${onap.nexus.url}/content/repositories/releases/</url>
+    </repository>
+    <repository>
+          <id>ecomp-snapshots</id>
+          <name>ECOMP Snapshot Repository</name>
+          <url>${onap.nexus.url}/content/repositories/snapshots/</url>
+    </repository>
+    <repository>
+        <id>ecomp-staging</id>
+        <name>ECOMP Staging Repository</name>
+        <url>${onap.nexus.url}/content/repositories/staging/</url>
+    </repository>
+  </repositories>
+</project>
\ No newline at end of file
diff --git a/tox.ini b/tox.ini
index 882140f..465cf5b 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -48,10 +48,11 @@ commands =
    {envpython} --version
     pytest --version
     coverage run --module pytest ice_validator --self-test -rxXs
-    coverage report
+    coverage xml
 deps = -rrequirements.txt
     flake8
     coverage
+    pytest
 
 [testenv:style]
 commands = flake8 ice_validator