summaryrefslogtreecommitdiffstats
path: root/bundleconfig/etc/rules/poa-event
diff options
context:
space:
mode:
authorPrudence Au <prudence.au@amdocs.com>2018-08-13 17:06:59 -0400
committerPierre Rioux <pierre.rioux@amdocs.com>2018-08-21 11:21:26 -0400
commitc604f64b971491f8c9b953adce54b847d7946e26 (patch)
tree134f7fc91b4da9e04c564c92337d44df420c8df0 /bundleconfig/etc/rules/poa-event
parent3baa3ebd0000b15f1c54c736f4a307731b16b923 (diff)
Initial submission for validation service
Change-Id: I9372430f1ae347373d5a9a0c7a427d7bd393d61e Issue-ID: LOG-427 Signed-off-by: Prudence Au (prudence.au@amdocs.com) Signed-off-by: Geora Barsky <georab@amdocs.com> Signed-off-by: Pierre Rioux <pierre.rioux@amdocs.com>
Diffstat (limited to 'bundleconfig/etc/rules/poa-event')
-rw-r--r--bundleconfig/etc/rules/poa-event/default-rules.groovy168
1 files changed, 168 insertions, 0 deletions
diff --git a/bundleconfig/etc/rules/poa-event/default-rules.groovy b/bundleconfig/etc/rules/poa-event/default-rules.groovy
new file mode 100644
index 0000000..8397abd
--- /dev/null
+++ b/bundleconfig/etc/rules/poa-event/default-rules.groovy
@@ -0,0 +1,168 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2018 Amdocs
+ * ============================================================================
+ * 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=====================================================
+ */
+
+entity {
+ name 'POA-EVENT'
+ indexing {
+ indices 'default-rules'
+ }
+ validation {
+ useRule {
+ name 'Verify AAI nf-naming-code'
+ attributes 'context-list.aai.vf-list[*]'
+ }
+ useRule {
+ name 'port-mirroring-AAI-has-valid-vnfc'
+ attributes 'context-list.sdc.vf-list[*]', 'context-list.aai.vf-list[*]'
+ }
+ useRule {
+ name 'port-mirroring-SDC-vnfc-types-missing'
+ attributes 'context-list.sdc.vf-list[*]', 'context-list.aai.vf-list[*]'
+ }
+ useRule {
+ name 'port-mirroring-AAI-vnfc-type-exists-in-SDC-SUCCESS'
+ attributes 'context-list.sdc.vf-list[*]', 'context-list.aai.vf-list[*]'
+ }
+ }
+}
+
+rule {
+ name 'Verify AAI nf-naming-code'
+ category 'INVALID_VALUE'
+ description 'Validate that nf-naming-code exists and is populated in AAI VNF instance'
+ errorText 'The nf-naming-code is not populated in AAI VNF instance'
+ severity 'CRITICAL'
+ attributes 'vfList'
+ validate '''
+ def parsed = new groovy.json.JsonSlurper().parseText(vfList.toString())
+ for (vf in parsed) {
+ String nfNamingCode = vf."nf-naming-code"
+ if (nfNamingCode == null || nfNamingCode.equals("")) {
+ return false
+ }
+ }
+ return true
+ '''
+}
+
+rule {
+ name 'port-mirroring-AAI-has-valid-vnfc'
+ category 'INVALID_VALUE'
+ description 'Validate that each VNFC instance in AAI conforms to a VNFC type defined in SDC model'
+ errorText 'AAI VNFC instance includes non-specified type in design SDC model'
+ severity 'ERROR'
+ attributes 'sdcVfList', 'aaiVfList'
+ validate '''
+ def slurper = new groovy.json.JsonSlurper()
+ def parsedSdc = slurper.parseText(sdcVfList.toString())
+ def parsedAai = slurper.parseText(aaiVfList.toString())
+
+ // gather all SDC nfc-naming-codes
+ List<String> sdcNfcNamingCodeList = new ArrayList<>()
+ parsedSdc.each {
+ for(sdcVnfc in it.vnfc) {
+ String sdcNfcNamingCode = sdcVnfc."nfc-naming-code"
+ if(sdcNfcNamingCode != null) {
+ sdcNfcNamingCodeList.add(sdcNfcNamingCode)
+ }
+ }
+ }
+
+ // check that all SDC nfc-naming-codes exist in AAI
+ parsedAai.each {
+ for(aaiVnfc in it.vnfc) {
+ String aaiNfcNamingCode = aaiVnfc."nfc-naming-code"
+ if(aaiNfcNamingCode != null) {
+ if(!sdcNfcNamingCodeList.contains(aaiNfcNamingCode)) {
+ return false
+ }
+ }
+ }
+ }
+ return true
+ '''
+}
+
+
+rule {
+ name 'port-mirroring-SDC-vnfc-types-missing'
+ category 'INVALID_VALUE'
+ description 'Validate that each VNFC type specified in SDC model exists in AAI'
+ errorText 'Design has specified types but not all of them exist in AAI'
+ severity 'WARNING'
+ attributes 'sdcVfList', 'aaiVfList'
+ validate '''
+ def getNfcNamingCodeSet = { parsedEntity ->
+ Set<String> namingCodeSet = new HashSet<>()
+ parsedEntity.each {
+ for(vnfcItem in it."vnfc") {
+ println "vnfc: " + vnfcItem
+ String namingCode = vnfcItem."nfc-naming-code"
+ if(namingCode != null) {
+ namingCodeSet.add(namingCode)
+ }
+ }
+ }
+ return namingCodeSet
+ }
+
+ // gather all unique nfc-naming-codes from AAI and SDC
+ def slurper = new groovy.json.JsonSlurper()
+ def aaiNfcNamingCodeSet = getNfcNamingCodeSet(slurper.parseText(aaiVfList.toString())) as java.util.HashSet
+ def sdcNfcNamingCodeSet = getNfcNamingCodeSet(slurper.parseText(sdcVfList.toString())) as java.util.HashSet
+
+ println "AAI: " + aaiNfcNamingCodeSet
+ println "SDC: " + sdcNfcNamingCodeSet
+
+ // check that all nfc-naming-codes in SDC exist in AAI
+ return aaiNfcNamingCodeSet.containsAll(sdcNfcNamingCodeSet)
+ '''
+}
+
+
+rule {
+ name 'port-mirroring-AAI-vnfc-type-exists-in-SDC-SUCCESS'
+ category 'SUCCESS'
+ description 'Verify that every vnfc in sdc has been created in AAI'
+ errorText 'Every vnfc type specified in sdc has been created in AAI'
+ severity 'INFO'
+ attributes 'sdcVfList', 'aaiVfList'
+ validate '''
+ def getNfcNamingCodeSet = { parsedEntity ->
+ Set<String> namingCodeSet = new HashSet<>()
+ parsedEntity.each {
+ for(vnfcItem in it."vnfc") {
+ String namingCode = vnfcItem."nfc-naming-code"
+ if(namingCode != null) {
+ namingCodeSet.add(namingCode)
+ }
+ }
+ }
+ return namingCodeSet
+ }
+
+ // gather all unique nfc-naming-codes from AAI and SDC
+ def slurper = new groovy.json.JsonSlurper()
+ def aaiNfcNamingCodeSet = getNfcNamingCodeSet(slurper.parseText(aaiVfList.toString())) as java.util.HashSet
+ def sdcNfcNamingCodeSet = getNfcNamingCodeSet(slurper.parseText(sdcVfList.toString())) as java.util.HashSet
+
+ // check that all nfc-naming-codes in SDC exist in AAI
+ // return false if all SDC naming codes exist in AAI to trigger an INFO violation
+ return !aaiNfcNamingCodeSet.containsAll(sdcNfcNamingCodeSet)
+ '''
+}