From 5e880aefe549a5825429740962c1acf9ff91e49e Mon Sep 17 00:00:00 2001 From: liboNet Date: Mon, 1 Oct 2018 04:01:30 +0800 Subject: [PATCH] Update the schema parse based on newer version the schema format of HPA requirement has been modified so that the parse needs update too based on the wiki: https://wiki.onap.org/display/DW/Specifying+HPA+ Capability+Requirements+using+TOSCA-based+VNF+Descriptors Change-Id: I48b39797e70d686ed0b9b2e7001b9a00068e76fd Issue-ID: POLICY-1160 Signed-off-by: liboNet --- .../reception/decoding/pdpx/ExtractFromNode.java | 32 ++++++++++++--------- .../src/test/resources/hpaPolicyHugePage.csar | Bin 131275 -> 131287 bytes .../test/resources/hpaPolicyPciePassthrough.csar | Bin 131411 -> 131424 bytes .../src/test/resources/hpaPolicySriov.csar | Bin 131404 -> 131412 bytes 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/ExtractFromNode.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/ExtractFromNode.java index d60aa113..4f822b20 100644 --- a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/ExtractFromNode.java +++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/ExtractFromNode.java @@ -48,7 +48,7 @@ import org.onap.sdc.toscaparser.api.RequirementAssignment; */ public class ExtractFromNode { - private static final String CONFIGURATION_VALUE = "configuration-value"; + private static final String CONFIGURATION_VALUE = "configurationValue"; private static final Logger LOGGER = FlexLogger.getLogger(ExtractFromNode.class); private static final String VDU_TYPE = "tosca.nodes.nfv.Vdu.Compute"; private static final String VDU_CP_TYPE = "tosca.nodes.nfv.VduCp"; @@ -215,8 +215,8 @@ public class ExtractFromNode { /** * GenerateHugePages, supported hpa features, All under the capability of tosca.nodes.nfv.Vdu.Compute. The format is - * a map like: {"schema-version": "0", "schema-location": "", "platform-id": "generic", "mandatory": true, - * "configuration-value": "2 MB"} + * a map like: {"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": "generic", "mandatory": "true", + * "configurationValue": "2 MB"} * * @param capabilityAssignment represents the capability of node * @@ -227,11 +227,14 @@ public class ExtractFromNode { sdcCsarHelper.getCapabilityPropertyLeafValue(capabilityAssignment, MEMORY_PAGE_SIZE_PATH); LOGGER.debug("the memoryPageSize = " + memoryPageSize); if (memoryPageSize != null) { - final Map retMap = - gson.fromJson(memoryPageSize, new TypeToken>() {}.getType()); + final Map retMap = + gson.fromJson(memoryPageSize, new TypeToken>() {}.getType()); LOGGER.debug("the retMap = " + retMap); - final String memoryPageSizeValue = retMap.get(CONFIGURATION_VALUE).toString(); - final String mandatory = retMap.get("mandatory").toString(); + final String memoryPageSizeValue = retMap.get(CONFIGURATION_VALUE); + final String mandatory = retMap.get("mandatory"); + if (memoryPageSizeValue == null) { + return; + } final HpaFeatureAttribute hpaFeatureAttribute = generateHpaFeatureAttribute("memoryPageSize", memoryPageSizeValue); final FlavorProperty flavorProperty = new FlavorProperty(); @@ -283,7 +286,7 @@ public class ExtractFromNode { return; } } else { - LOGGER.debug(" no configuration-value defined in interfaceType"); + LOGGER.debug(" no configurationValue defined in interfaceType"); return; } @@ -303,8 +306,8 @@ public class ExtractFromNode { /** * GenerateNetworkFeature, all pci feature are grouped into FlavorFeature together. The format is a map like: - * {"schema-version": "0", "schema-location": "", "platform-id": "generic", "mandatory": true, - * "configuration-value": "2 MB"} + * {"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": "generic", "mandatory": "true", + * "configurationValue": "2 MB"} * * @param networkHpaFeature represents the specified Hpa feature * @param node represents the CP Node @@ -321,9 +324,12 @@ public class ExtractFromNode { final String pciValue = sdcCsarHelper.getNodeTemplatePropertyLeafValue(node, pciKeyPath); if (pciValue != null) { LOGGER.debug("the pciValue = " + pciValue); - final Map retMap = - gson.fromJson(pciValue, new TypeToken>() {}.getType()); - final String pciConfigValue = retMap.get(CONFIGURATION_VALUE).toString(); + final Map retMap = + gson.fromJson(pciValue, new TypeToken>() {}.getType()); + final String pciConfigValue = retMap.get(CONFIGURATION_VALUE); + if (pciConfigValue == null) { + return; + } final HpaFeatureAttribute hpaFeatureAttribute = generateHpaFeatureAttribute(pciKey, pciConfigValue); flavorProperty.getHpaFeatureAttributes().add(hpaFeatureAttribute); } diff --git a/plugins/reception-plugins/src/test/resources/hpaPolicyHugePage.csar b/plugins/reception-plugins/src/test/resources/hpaPolicyHugePage.csar index e1fdc70ccecbf1974202bc2ca125e34e8d369005..1e462e10698dcbd894e5e82cc3938fbd32dc175c 100644 GIT binary patch delta 2744 zcmZWrc{r5&7xy(7QO48^u4S@am4-VZ`yR!Jkt;iQESD%{ja(T^xR%G#;6=zt8BvX; zrtHhLltkS^VX{Poa=X%KEO%z;_j`W7`##V2ea?G6=X1{IeBVFL>5CH_juXr}0t-{7 zWmA;Nv#{3F zdD)Hw+hh!RzDgguz5ouAt*hbO0LN-;K8{BYsiqp`AM~G^Y%+O>_68bQ1P9vt|5DhQ$4LS`w*WbuAo>|gkoa8= zBzY2W^+3TV0ap-R)EdBfIf0NQ0T5tO)`rkI0+5G0D$_WBfh}Be58G)iNoxpb72x5i zftm@h+FgSFhrH^^qy~@`IfUhw;qXqxLGw zWGulsQr=ne4W;=>zWk9>K85#Oy|?=RSNDAB_YLBV63k_!KJp^WcDpX4}$$8Pb0A_PI-(clel0t>>eXn{kNP1V>IH7e632ww6OjCes-mSHrUZU5-xCtfah@NsW$fv z>5tWyKbT!1HVy~c>pwl030HObQ`S^MPl8{YAv@biLV8~Du5hHF70vVXhu0W$-c!zF zpLf;r>KW(Xxm@2amQ*sKjm(hO^77kg`4VP+e@(-Hm_=yzA-xou<#9jp(1B*rL^R0kU{jY1bphuwPdE0oH9< zWZ0|@PdQ$Cc%!Ji&`QJ2?nnzFXZLhZtS(9IwyAsl@g%9t&LV2(5U#(GPJ|29D1XAd zu541s)$NtPL`u4SgM>hNyML6r-~7x&azR9-T; z=q@Fw6}QJ$cZN=8@S#uM&MKb|@bWiHc%~%tfHJE-Kq{=mcdHe{6<%8iAv*nngk9U; zFjvl}CNQGok z^@a`e(nLtlzD0~TQzELQ#tS_IhqOjRmj9^R^!+6}}W-F;+hK1umTI zn|@2=r{%>N4-JRtK&uc6Ms4>-*L^qmq(s9hlzO~8>6m8RucN_DCH0Ee8f}Q}L6dsv z?eAh`>T4cl$|vgvLtJVIzI;5Evm`X|3;Zs78(oC$%;*zC@+qI{nmspGi*B6U5 ze!741e%yLp8WuQcUR!m^Rw*6v>3A|GTO`Hzq+u0fL_*i zqc@cJnB@sKqk+V-hhJeHxCZ+g3oS@JXWAOajjb{eGecna+*t+g&81DV~C;y+Tw!G7M z%hGyqRj!jk4C-^dT|v_HLUKwywzAyP0Ni}X7ucB4A#7kY_1D>5(uWTyC0$+hyq>(& zA(+!JSRWD@CC#Aa@vYh z)3W#F$<5iZlGe_;$~2rup;PKaN8{&0@i2{im9C{172;DzSAsJB+V>%hQJxYRoo#e% zSvaO=H&sU6gm5onqdFA%);Uz1(u|`8jR@au3Su1bR673N&6O506Wg~|V^ONAunC}M z2Vlb;p(2i;f;%JW51rXp&h=Rm0kl0ggC~H@18?9C!MY%Jc@fF};>;VoTnLzsg2D~m4 zm~$~X7LbMd9DoQ!V}jkV#|{9ZcmXkJ*#V%S{xzTkA=ZE-2!WK>Kp>3u%MMIiV_!y= z7xzmWLTmteDBv5wz{Gt2%jY8>>e~nPt$~Bk#5Z=1Jc#uT5CIZ$V*wYKdjWvX7l8fH z2n!g)Fcbj&L}5$OTL;Eq8j4;AuDr;*&|!{(t#x1vN+8<};0(Lmzg>Wgc#eT4Hh?K? zeE^V+OMZY1H-RZAfZ{em5KLthkWE}AA(1V%4+EXr0tRdqnOi^~Ryqx!nrR>dEo`wX WA#<_3_P`}Kj@L{;a}Ka~oPPkfy~=w4 delta 2838 zcmZWrc{tSj7xtMM+YrN`vF{RP>!yojPqrZmqY@!pJC&kLq^l9a;A`zhVyt(>ZIZnk zBOZAp6@*8dEfV(^Pcbbk8_4&dAehHQnlfZ8@XwPYD99W z7BoHsc#*suaGA!eQ!M!64x35Rf?$(Ee=1m7VaRv|h!O27*?N~sI|NHl3`GhG>1agxhyJGvqaJaH zJi0?mu^LR&P_vi_nizZ!`Tvdz3NNu_VnqqC9sga$PRx+uIG@F}KG6Ekxe>`V!o;&A z-W_Qs$?dz8Ib6*5kq&*AGlvLZVJ?+d5v*W{%mY}#M9o4LGZpGT1~Qlk#m@@d-0=WO z*aDUbD9jeHTu@MUfE&gXLK61C9R=1Q?)Q$J2e^YPmQ# z%EX|W0iXzt+XFP7DPlesFY|E#1P9~C`g`m8j+m#5ifL(ytA_%76;foMVp^0TU1E+( z&reXaPkd^iM5-!JX|wG&S~bd}H8k?t+`yGvRrE`LxLs?gFjNk(exI>y>#asCO1V>6 zKGEIlSVihh)bU*=h+LWPSUlM#VntABP{((7Jxg;E7n<#cXd#hVX1XT1D)OKGCFG>^ z`7Hv8_u@BVCRg_Vts`5&J0u{Cr(+;kLAf|#=IvDSy`U#p90`ox+qM!o7sOkr+8K z;@OP7qp%n;85V+e)Radw+^9azs}%v4`RZqOAK^LgDKc^4wkyxJa=cJVlgUlpR1u4{ zk?Dqhs#54PaJ<%7yx(nUe#5pE;e4f-r@b3ybN}2f|C%kM)m3VugZJmOx!$b! zrr?@X;{UP3H+y<% z?7*?M+G{7$5c(^^9FEF%V=>t99%YH&%Us`CT4$|#nHLy|pRCbvL;uikh}0FH$=Dq<>Gj+a7gXhZkn02OJ z{Aod%yJd}4Y&PtScxFr{t+joy*MGfk_nuWthIPY~WT=7uI zJ2v6D&J*mpXVg{p?-yYxyqCN?vP-pO{|q{RCL&;Qdh?>4V5JyWKAvz`9!c_< zT|&0pT{1b*4n0zkot68u&*dtWhQb!|DeqNO<)wH_>Q(2Jz6D9_(cn;7+d}k zvr|xl>N1I1_VP^9OEtbKzYh-w9$=y%OON-Vm^uXs&dwFXBy{f~yeFoyQFOmdbfIF^ z__yDZt%eb2q&D5Sr`n=u=fh_RuC?>!qVF=bMRpz1$U}4_`r;y8n%8^K@mOI_5l$If zXe7bKRwPJqQt0JsV+QxL-_Sh~Fsb;o%|2*Srk2f++w=KT^y#LeWXQ5YZ z8nW_qzwp6_B%G`0RH7!e3T)WIe^8vyuV_ zGX=Y)t2Ye~3oMu>@+0r0gj=a~YI4pSSo*EqG9MCdKBWH@-P*TrA(JBGcEUAU$$h;! z9B&h>`EKI%fCa`y)2`AYbjt8+#_kI`sa5R@uS$L2A6yG1EFYNt^7mxU`o=zd$GGnn zR@}kBC+@EM;s)-cLi6ou4bx~(k16u*(^sY&Pdt5*q*4Fq+!6s^{gJ8`yOFfc4Lx@T zSl05CZ~>*P?MQis11VfA?4$>P*x1rJ5Cvypf#*RWI~wx`;cV6+5IF2-vG;R83+v9H z_!NQ$b`?buuw+L;)jPRwYQUx>D`T_=c(SV;=>t`)9Zy*t0C;vr=osMQ%d}% zlY^?)fdstC89?KvKn&_JXPi^>bf5}Jer4e2aR9o51M1Ks9jHJACbV>xEhVP*O0t#P zOgR1=3zmTT27myRuno|V3?0ZqsBZuPMQtz?$n)QORBZqpNQAgIfd`y35I`D%00ZsW zWHboK0Rn;;=83@p7*BER@f-j}5;lrgMiv+~k{BtJH zSj|2qsLPD~pg)_bs^JU9HP1_6?86N=D^Z`giv~5N&&di@-P5_&k3^V6a In_-UjF9Y}r-v9sr diff --git a/plugins/reception-plugins/src/test/resources/hpaPolicyPciePassthrough.csar b/plugins/reception-plugins/src/test/resources/hpaPolicyPciePassthrough.csar index 652bc8772af622d5afc97bc1120a37cd07572401..613dd741c923db4fccdf64507525a283c891bd8c 100644 GIT binary patch delta 4483 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 LIJM#nV{`upju_&G delta 4475 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 IJpf+)1K|F^&Hw-a delta 4400 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 -- 2.16.6