1 <service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'><method rpc='vnf-topology-operation-assign' mode='sync'>
\r 
   2 <block atomic="true"><switch test='`$vnf-topology-operation-input.request-information.request-action`'>
\r 
   3 <outcome value='CreateVnfInstance'>
\r 
   5 </block></outcome><outcome value='Other'>
\r 
   6 <return status='failure'>
\r 
   7         <parameter name='ack-final' value='Y'/>
\r 
   8         <parameter name="error-code" value="500" />
\r 
   9     <parameter name="error-message" value="If svc-action is 'assign' then request-action must be 'CreateVnfInstance'" />
\r 
  10 </return></outcome></switch><get-resource plugin='org.onap.ccsdk.sli.adaptors.sli.resource.sql.SqlResource' resource='SQL'
\r 
  11   key='SELECT * from VF_MODEL WHERE customization_uuid = $vnf-topology-operation-input.vnf-information.onap-model-information.model-customization-uuid'
\r 
  14 <outcome value='failure'>
\r 
  15 <return status='failure'>
\r 
  16         <parameter name='ack-final' value='Y'/>
\r 
  17         <parameter name="error-code" value="500" />
\r 
  18     <parameter name="error-message" value="Error reading VF_MODEL table" />
\r 
  19 </return></outcome><outcome value='not-found'>
\r 
  20 <return status='failure'>
\r 
  21         <parameter name='ack-final' value='Y'/>
\r 
  22         <parameter name="error-code" value="500" />
\r 
  23     <parameter name="error-message" value="`'No model found for VNF customization UUID ' + $vnf-topology-operation-input.vnf-information.onap-model-information.model-customization-uuid`" />
\r 
  24 </return></outcome></get-resource><switch test='`$service-data.vnfs.vnf_length`'>
\r 
  27 <parameter name='vnf-index' value='0' />
\r 
  28 </set></outcome><outcome value='Other'>
\r 
  31 <parameter name='vnf-index' value='`$service-data.vnfs.vnf_length`' />
\r 
  32 </set><for index='idx' start='0' end='`$service-data.vnfs.vnf_length`' >
\r 
  33 <switch test='`$vnf-topology-operation-input.vnf-information.vnf-id == $service-data.vnfs.vnf[$idx].vnf-id`'>
\r 
  34 <outcome value='true'>
\r 
  35 <return status='failure'>
\r 
  36         <parameter name='ack-final' value='Y'/>
\r 
  37         <parameter name="error-code" value="500" />
\r 
  38     <parameter name="error-message" value="`'VNF id ' + $service-data.vnfs.vnf[$idx].vnf-id
\r 
  39       + ' already exists, and has order status ' + $service-data.vnfs.vnf[$idx].vnf-data.vnf-level-oper-status.order-status`" />
\r 
  40 </return></outcome></switch></for></block></outcome></switch><set>
\r 
  41 <parameter name='service-data.vnfs.vnf_length' value='`$vnf-index + 1`' />
\r 
  43 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-topology-identifier-structure.vnf-id'
\r 
  44  value='`$vnf-topology-operation-input.vnf-information.vnf-id`' />
\r 
  45 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-topology-identifier-structure.vnf-type'
\r 
  46  value='`$vnf-topology-operation-input.vnf-information.vnf-type`' />
\r 
  47 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-topology-identifier-structure.nf-type'
\r 
  48  value='`$db.vf-model.nf-type`' />
\r 
  49 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-topology-identifier-structure.nf-role'
\r 
  50  value='`$db.vf-model.nf-role`' />
\r 
  51 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-topology-identifier-structure.nf-function'
\r 
  52  value='`$db.vf-model.nf-function`' />
\r 
  53 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-topology-identifier-structure.nf-code'
\r 
  54  value='`$db.vf-model.nf-code`' />
\r 
  55 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.tenant'
\r 
  56  value='`$vnf-topology-operation-input.vnf-request-input.tenant`' />
\r 
  57 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.aic-cloud-region'
\r 
  58  value='`$vnf-topology-operation-input.vnf-request-input.aic-cloud-region`' />
\r 
  60 </set><switch test='`$vnf-topology-operation-input.vnf-request-input.vnf-name`'>
\r 
  61 <outcome value=''><block atomic="true"><switch test='`$db.vf-model.ecomp-generated-naming`'>
\r 
  62 <outcome value='Y'><block>
\r 
  63 </block></outcome><outcome value='N'><return status='failure'>
\r 
  64         <parameter name='ack-final' value='Y'/>
\r 
  65         <parameter name="error-code" value="500" />
\r 
  66     <parameter name="error-message" value="No vnf-name was received but ecomp-generated-naming is not Y" />
\r 
  67 </return></outcome><outcome value='Other'>
\r 
  68 <return status='failure'>
\r 
  69         <parameter name='ack-final' value='Y'/>
\r 
  70         <parameter name="error-code" value="500" />
\r 
  71     <parameter name="error-message" value="No vnf-name was received but ecomp-generated-naming is not Y" />
\r 
  72 </return></outcome></switch><set>
\r 
  73 <parameter name='generate-unique-name-input.index-table-name' value='VNF_NAME_INDEX' />
\r 
  74 <parameter name='generate-unique-name-input.index-table-prefix-column' value='vnf_name_prefix' />
\r 
  75 <parameter name='generate-unique-name-input.name-table-type' value='VNF_INSTANCE' />
\r 
  76 <parameter name='generate-unique-name-input.prefix' value="`'z' + $vnf-topology-operation-input.vnf-request-input.aic-cloud-region + $db.vf-model.nf-code`" />
\r 
  77 <parameter name='generate-unique-name-input.index-length' value='2' />
\r 
  78 </set><call module='GENERIC-RESOURCE-API' rpc='generate-unique-name' mode='sync' >
\r 
  79 <outcome value='failure'>
\r 
  80 <return status='failure'>
\r 
  81         <parameter name='ack-final' value='Y'/>
\r 
  82         <parameter name="error-code" value="500" />
\r 
  83     <parameter name="error-message" value="`$generate-unique-name-output.error-message`" />
\r 
  84 </return></outcome><outcome value='success'>
\r 
  86 <parameter name='tmp.vnf-name' value='`$generate-unique-name-output.generated-name`' />
\r 
  87 </set></outcome></call></block></outcome><outcome value='Other'>
\r 
  88 <block atomic="true"><set>
\r 
  89 <parameter name='generate-unique-name-input.name-table-type' value='VNF_INSTANCE' />
\r 
  90 <parameter name='generate-unique-name-input.supplied-name' value='`$vnf-topology-operation-input.vnf-request-input.vnf-name`' />
\r 
  91 </set><call module='GENERIC-RESOURCE-API' rpc='generate-unique-name' mode='sync' >
\r 
  92 <outcome value='failure'>
\r 
  93 <return status='failure'>
\r 
  94         <parameter name='ack-final' value='Y'/>
\r 
  95         <parameter name="error-code" value="500" />
\r 
  96     <parameter name="error-message" value="`$generate-unique-name-output.error-message`" />
\r 
  97 </return></outcome><outcome value='success'>
\r 
  99 <parameter name='tmp.vnf-name' value="`$vnf-topology-operation-input.vnf-request-input.vnf-name`" />
\r 
 100 </set></outcome></call></block></outcome></switch><set>
\r 
 101 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-id'
\r 
 102    value='`$vnf-topology-operation-input.vnf-information.vnf-id`' />
\r 
 104 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-topology-identifier-structure.vnf-name'
\r 
 105    value='`$tmp.vnf-name`' />
\r 
 106 </set><switch test='`$vnf-topology-operation-input.vnf-information.onap-model-information.model-invariant-uuid`'>
\r 
 107 <outcome value=''><set>
\r 
 108 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-invariant-uuid'
\r 
 109   value='`$db.vf-model.invariant-uuid`' />
\r 
 110 </set></outcome><outcome value='Other'>
\r 
 112 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-invariant-uuid'
\r 
 113   value='`$vnf-topology-operation-input.vnf-information.onap-model-information.model-invariant-uuid`' />
\r 
 114 </set></outcome></switch><switch test='`$vnf-topology-operation-input.vnf-information.onap-model-information.model-uuid`'>
\r 
 115 <outcome value=''><set>
\r 
 116 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-uuid'
\r 
 117   value='`$db.vf-model.uuid`' />
\r 
 118 </set></outcome><outcome value='Other'>
\r 
 120 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-uuid'
\r 
 121   value='`$vnf-topology-operation-input.vnf-information.onap-model-information.model-uuid`' />
\r 
 122 </set></outcome></switch><switch test='`$vnf-topology-operation-input.vnf-information.onap-model-information.model-version`'>
\r 
 123 <outcome value=''><set>
\r 
 124 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-version'
\r 
 125   value='`$db.vf-model.version`' />
\r 
 126 </set></outcome><outcome value='Other'>
\r 
 128 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-version'
\r 
 129   value='`$vnf-topology-operation-input.vnf-information.onap-model-information.model-version`' />
\r 
 130 </set></outcome></switch><switch test='`$vnf-topology-operation-input.vnf-information.onap-model-information.model-name`'>
\r 
 131 <outcome value=''><set>
\r 
 132 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-name'
\r 
 133   value='`$db.vf-model.name`' />
\r 
 134 </set></outcome><outcome value='Other'>
\r 
 136 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-name'
\r 
 137   value='`$vnf-topology-operation-input.vnf-information.onap-model-information.model-name`' />
\r 
 138 </set></outcome></switch><set>
\r 
 139 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-customization-uuid'
\r 
 140   value='`$vnf-topology-operation-input.vnf-information.onap-model-information.model-customization-uuid`' />
\r 
 141 </set><get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService" 
\r 
 142                 resource="cloud-region" 
\r 
 143                 key="cloud-region.cloud-owner = 'Rackspace' AND 
\r 
 144                      cloud-region.cloud-region-id = $vnf-topology-operation-input.vnf-request-input.aic-cloud-region AND
\r 
 146         pfx='aai.cloud-region' local-only='false' >
\r 
 148 <outcome value='not-found'>
\r 
 149 <return status='failure'>
\r 
 150         <parameter name='ack-final' value='Y'/>
\r 
 151         <parameter name="error-code" value="500" />
\r 
 152     <parameter name="error-message" value="Cloud region not found in AAI" />
\r 
 153 </return></outcome><outcome value='failure'>
\r 
 154 <return status='failure'>
\r 
 155         <parameter name='ack-final' value='Y'/>
\r 
 156         <parameter name="error-code" value="500" />
\r 
 157     <parameter name="error-message" value="Error retrieving cloud region from AAI" />
\r 
 158 </return></outcome></get-resource><for index='idx' start='0' end='`$aai.cloud-region.relationship-list.relationship_length`' >
\r 
 159 <switch test='`$aai.cloud-region.relationship-list.relationship[$idx].related-to`'>
\r 
 160 <outcome value='complex'>
\r 
 161 <block atomic="true"><execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split'>
\r 
 162    <parameter name='ctx_memory_result_key' value='aai-uid-split' />
\r 
 163    <parameter name='original_string' value='`$aai.cloud-region.relationship-list.relationship[$idx].related-link`' />
\r 
 164    <parameter name='regex' value='/' />
\r 
 166 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.aic-clli'
\r 
 167   value='`$aai-uid-split[$aai-uid-split_length - 1]`' />
\r 
 168 </set><break/></block></outcome></switch></for><get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService" 
\r 
 169                 resource="availability-zones" 
\r 
 170                 key="cloud-region.cloud-owner = 'Rackspace' AND 
\r 
 171                      cloud-region.cloud-region-id = $vnf-topology-operation-input.vnf-request-input.aic-cloud-region AND
\r 
 173         pfx='aai.az' local-only='false' >
\r 
 175 <outcome value='failure'>
\r 
 176 <return status='failure'>
\r 
 177         <parameter name='ack-final' value='Y'/>
\r 
 178         <parameter name="error-code" value="500" />
\r 
 179     <parameter name="error-message" value="Error retrieving availability zones from AAI" />
\r 
 180 </return></outcome></get-resource><switch test='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.aic-clli`'>
\r 
 181 <outcome value=''><return status='failure'>
\r 
 182         <parameter name='ack-final' value='Y'/>
\r 
 183         <parameter name="error-code" value="500" />
\r 
 184     <parameter name="error-message" value="`'Unable to find aic-clli in AAI for aic-cloud-region ' + $vnf-topology-operation-input.vnf-request-input.aic-cloud-region`" />
\r 
 185 </return></outcome></switch><get-resource plugin='org.onap.ccsdk.sli.adaptors.sli.resource.sql.SqlResource' resource='SQL'
\r 
 186   key='SELECT * from VF_TO_NETWORK_ROLE_MAPPING WHERE vf_customization_uuid = $vnf-topology-operation-input.vnf-information.onap-model-information.model-customization-uuid'
\r 
 187   pfx='db.vf-network-role-mapping[]'>
\r 
 189 <outcome value='failure'>
\r 
 190 <return status='failure'>
\r 
 191         <parameter name='ack-final' value='Y'/>
\r 
 192         <parameter name="error-code" value="500" />
\r 
 193     <parameter name="error-message" value="Error reading VF_TO_NETWORK_ROLE_MAPPING table" />
\r 
 194 </return></outcome><outcome value='not-found'>
\r 
 196 <parameter name='db.vf-network-role-mapping_length' value='0' />
\r 
 197 </set></outcome></get-resource><set>
\r 
 198 <parameter name='network-index' value='0' />
\r 
 199 </set><for index='role-index' start='0' end='`$db.vf-network-role-mapping_length`'><block atomic="true"><get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService" 
\r 
 200                 resource="l3-networks" 
\r 
 201                 key="l3-network.network-role = $db.vf-network-role-mapping[$role-index].network-role"
\r 
 202         pfx='aai.l3-network' local-only='false'
\r 
 204 <outcome value='not-found'>
\r 
 205 <return status='failure'>
\r 
 206         <parameter name='ack-final' value='Y'/>
\r 
 207         <parameter name="error-code" value="500" />
\r 
 208     <parameter name="error-message" value="`'No active l3-network found in AAI with cloud_region_id '
\r 
 209           + $vnf-topology-operation-input.vnf-request-input.aic-cloud-region + ' and network_role '
\r 
 210           + $db.vf-network-role-mapping[$network-index].network-role`" />
\r 
 211 </return></outcome><outcome value='failure'>
\r 
 212 <return status='failure'>
\r 
 213         <parameter name='ack-final' value='Y'/>
\r 
 214         <parameter name="error-code" value="500" />
\r 
 215     <parameter name="error-message" value="Error retrieving l3-network from AAI" />
\r 
 216 </return></outcome></get-resource><set>
\r 
 217 <parameter name='l3-network-id' value='-1' />
\r 
 219 <for index='db-network-index' start='0' end='`$aai.l3-network.l3-network_length`' >
\r 
 220 <switch test='`$aai.l3-network.l3-network[$db-network-index].orchestration-status`'>
\r 
 221 <outcome value='PendingCreate'>
\r 
 223 </block></outcome><outcome value='Pending Create'>
\r 
 225 </block></outcome><outcome value='PendingDelete'>
\r 
 227 </block></outcome><outcome value='Pending Delete'>
\r 
 229 </block></outcome><outcome value='Other'>
\r 
 230 <for silentFailure='true' index='db-rel-index' start='0' end='`$aai.l3-network.l3-network[$db-network-index].relationship-list.relationship_length`' >
\r 
 231 <switch test='`$aai.l3-network.l3-network[$db-network-index].relationship-list.relationship[$db-rel-index].related-to`'>
\r 
 232 <outcome value='cloud-region'>
\r 
 233 <for silentFailure='true' index='db-data-index' start='0' end='`$aai.l3-network.l3-network[$db-network-index].relationship-list.relationship[$db-rel-index].relationship-data_length`' >
\r 
 234 <switch test='`$aai.l3-network.l3-network[$db-network-index].relationship-list.relationship[$db-rel-index].relationship-data[$db-data-index].relationship-key`'>
\r 
 235 <outcome value='cloud-region.cloud-region-id'>
\r 
 236 <switch test='`$aai.l3-network.l3-network[$db-network-index].relationship-list.relationship[$db-rel-index].relationship-data[$db-data-index].relationship-value == $vnf-topology-operation-input.vnf-request-input.aic-cloud-region`'>
\r 
 237 <outcome value='true'>
\r 
 238 <block atomic="true"><set>
\r 
 239 <parameter name='l3-network-id' value='`$aai.l3-network.l3-network[$db-network-index].network-id`' />
\r 
 240 </set><return status='failure'>
\r 
 241 </return></block></outcome></switch></outcome></switch></for></outcome></switch></for></outcome></switch></for><return status='success'>
\r 
 243 </return></block><switch test='`$l3-network-id`'>
\r 
 244 <outcome value='-1'>
\r 
 245 <return status='failure'>
\r 
 246         <parameter name='ack-final' value='Y'/>
\r 
 247         <parameter name="error-code" value="500" />
\r 
 248     <parameter name="error-message" value="`'Unable to find l3-network in AAI for network role ' + $db.vf-network-role-mapping[$role-index].network-role`" />
\r 
 249 </return></outcome></switch><set>
\r 
 250 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[$network-index].network-role'
\r 
 251     value='`$db.vf-network-role-mapping[$role-index].network-role`' />
\r 
 252 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[$network-index].network-name'
\r 
 253     value='`$aai.l3-network.l3-network[$db-network-index].network-name`' />
\r 
 254 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[$network-index].neutron-id'
\r 
 255     value='`$aai.l3-network.l3-network[$db-network-index].neutron-network-id`' />
\r 
 256 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[$network-index].network-id'
\r 
 257     value='`$aai.l3-network.l3-network[$db-network-index].network-id`' />
\r 
 258 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[$network-index].contrail-network-fqdn'
\r 
 259     value='`$aai.l3-network.l3-network[$db-network-index].contrail-network-fqdn`' />
\r 
 260 </set><for index='subnet-index' start='0' end='`$aai.l3-network.l3-network[0].subnets.subnet_length`' >
\r 
 262 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[$network-index].subnets-data.subnet-data[$subnet-index].ip-version'
\r 
 263    value='`$aai.l3-network.l3-network[$db-network-index].subnets.subnet[$subnet-index].ip-version`' />
\r 
 264 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[$network-index].subnets-data.subnet-data[$subnet-index].subnet-id'
\r 
 265    value='`$aai.l3-network.l3-network[$db-network-index].subnets.subnet[$subnet-index].subnet-id`' />
\r 
 267 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[$network-index].subnets-data.subnet-data_length'
\r 
 268    value='`$aai.l3-network.l3-network[0].subnets.subnet_length`' />
\r 
 270 <parameter name='network-index' value='`$network-index + 1`' />
\r 
 271 </set></block></for><set>
\r 
 272 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network_length'
\r 
 273   value='`$network-index`' />
\r 
 275 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.'
\r 
 276   value='vnf-topology-operation-input.vnf-request-input.vnf-input-parameters.' />
\r 
 277 </set><switch test='`$aai.az.availability-zone_length`'>
\r 
 278 <outcome value=''><switch test='`$db.vf-model.avail-zone-max-count > 0`'>
\r 
 279 <outcome value='true'>
\r 
 280 <return status='failure'>
\r 
 281         <parameter name='ack-final' value='Y'/>
\r 
 282         <parameter name="error-code" value="500" />
\r 
 283     <parameter name="error-message" value="`'No availability zones found in AAI for cloud region '
\r 
 284        + $vnf-topology-operation-input.vnf-request-input.aic-cloud-region`" />
\r 
 285 </return></outcome><outcome value='false'>
\r 
 287 <parameter name='aai.az.availability-zone_length' value='0' />
\r 
 288 </set></outcome></switch></outcome></switch><for index='idx' start='0' end='`$aai.az.availability-zone_length`' >
\r 
 289 <block atomic="true"><set>
\r 
 290 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[$idx]'
\r 
 291   value='`$aai.az.availability-zone[$idx].availability-zone-name`' />
\r 
 292 </set><save plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
\r 
 293    resource="generic-vnf:relationship-list"
\r 
 294    key="generic-vnf.vnf-id = $service-data.vnfs.vnf[$vnf-index].vnf-id"
\r 
 295    force="true" pfx="tmp.AnAI-data">
\r 
 296     <parameter name="relationship-list.relationship[0].related-to" value="availability-zone" />
\r 
 297     <parameter name="relationship-list.relationship[0].relationship-data[0].relationship-key" value="cloud-region.cloud-owner" />
\r 
 298     <parameter name="relationship-list.relationship[0].relationship-data[0].relationship-value" value="Rackspace" />
\r 
 299     <parameter name="relationship-list.relationship[0].relationship-data[1].relationship-key" value="cloud-region.cloud-region-id" />
\r 
 300     <parameter name="relationship-list.relationship[0].relationship-data[1].relationship-value" value="`$vnf-topology-operation-input.vnf-request-input.aic-cloud-region`" />
\r 
 301     <parameter name="relationship-list.relationship[0].relationship-data[2].relationship-key" value="availability-zone.availability-zone-name" />
\r 
 302     <parameter name="relationship-list.relationship[0].relationship-data[2].relationship-value" value="`$aai.az.availability-zone[$idx].availability-zone-name`" />
\r 
 303 <outcome value='failure'>
\r 
 304 <return status='failure'>
\r 
 305         <parameter name='ack-final' value='Y'/>
\r 
 306         <parameter name="error-code" value="500" />
\r 
 307     <parameter name="error-message" value="Error updating generic-vnf in AAI" />
\r 
 308 </return></outcome><outcome value='not-found'>
\r 
 309 <return status='failure'>
\r 
 310         <parameter name='ack-final' value='Y'/>
\r 
 311         <parameter name="error-code" value="500" />
\r 
 312     <parameter name="error-message" value="`'No generic-vnf found in AAI for vnf ID ' + $service-data.vnfs.vnf[$vnf-index].vnf-id`" />
\r 
 313 </return></outcome></save></block></for><set>
\r 
 314 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.availability-zones.max-count'
\r 
 315    value='`$db.vf-model.avail-zone-max-count`' />
\r 
 316 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone_length'
\r 
 317    value='`$aai.az.availability-zone_length`' />
\r 
 318 </set><for index='vnf-nw-index' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network_length`' >
\r 
 319 <block atomic="true"><save plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
\r 
 320    resource="generic-vnf:relationship-list"
\r 
 321    key="generic-vnf.vnf-id = $service-data.vnfs.vnf[$vnf-index].vnf-id"
\r 
 322    force="true" pfx="tmp.AnAI-data">
\r 
 323     <parameter name="relationship-list.relationship[0].related-to" value="l3-network" />
\r 
 324     <parameter name="relationship-list.relationship[0].relationship-data[0].relationship-key" value="l3-network.network-id" />
\r 
 325     <parameter name="relationship-list.relationship[0].relationship-data[0].relationship-value" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[$vnf-nw-index].network-id`" />
\r 
 326 <outcome value='failure'>
\r 
 327 <return status='failure'>
\r 
 328         <parameter name='ack-final' value='Y'/>
\r 
 329         <parameter name="error-code" value="500" />
\r 
 330     <parameter name="error-message" value="Error updating generic-vnf in AAI" />
\r 
 331 </return></outcome><outcome value='not-found'>
\r 
 332 <return status='failure'>
\r 
 333         <parameter name='ack-final' value='Y'/>
\r 
 334         <parameter name="error-code" value="500" />
\r 
 335     <parameter name="error-message" value="`'No generic-vnf found in AAI for vnf ID ' + $service-data.vnfs.vnf[$vnf-index].vnf-id`" />
\r 
 336 </return></outcome></save></block></for><set>
\r 
 337 <parameter name='vnf-object-path'
\r 
 338  value="`'restconf/config/GENERIC-RESOURCE-API:services/service/'
\r 
 339  + $vnf-topology-operation-input.service-information.service-instance-id
\r 
 340  + '/service-data/vnfs/vnf/'
\r 
 341  + $service-data.vnfs.vnf[$vnf-index].vnf-id
\r 
 342  + '/vnf-data/vnf-topology'`"/>
\r 
 344 </set><update plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
\r 
 345    resource="generic-vnf"
\r 
 346    key="generic-vnf.vnf-id = $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-topology-identifier-structure.vnf-id"
\r 
 347    force="true" pfx="tmp.AnAI-data">
\r 
 348 <parameter name="vnf-name" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-topology-identifier-structure.vnf-name`" />
\r 
 349 <parameter name="prov-status" value="PREPROV" />
\r 
 350 <parameter name="operational-status" value="out-of-service-path" />
\r 
 351 <parameter name="equipment-role" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-topology-identifier-structure.nf-role`" />
\r 
 352 <parameter name="model-invariant-id" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-invariant-uuid`" />
\r 
 353 <parameter name="model-version-id" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-uuid`" />
\r 
 354 <parameter name="model-customization-id" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.onap-model-information.model-customization-uuid`" />
\r 
 355 <parameter name="selflink" value="`$vnf-object-path`" />
\r 
 356 <outcome value='failure'>
\r 
 357 <return status='failure'>
\r 
 358         <parameter name='ack-final' value='Y'/>
\r 
 359         <parameter name="error-code" value="500" />
\r 
 360     <parameter name="error-message" value="Error updating selflink in generic-vnf in AAI" />
\r 
 361 </return></outcome><outcome value='not-found'>
\r 
 362 <return status='failure'>
\r 
 363         <parameter name='ack-final' value='Y'/>
\r 
 364         <parameter name="error-code" value="500" />
\r 
 365     <parameter name="error-message" value="`'No generic-vnf found in AAI for vnf ID ' + $service-data.vnfs.vnf[$vnf-index].vnf-id`" />
\r 
 366 </return></outcome></update><set>
\r 
 367 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.sdnc-request-header.' value='$vnf-topology-operation-input.sdnc-request-header.' />
\r 
 368 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.request-information.' value='$vnf-topology-operation-input.request-information.' />
\r 
 369 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.service-information.' value='$vnf-topology-operation-input.service-information.' />
\r 
 370 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-information.' value='$vnf-topology-operation-input.vnf-information.' />
\r 
 371 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-request-input.' value='$vnf-topology-operation-input.vnf-request-input.' />
\r 
 374 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-level-oper-status.order-status' value='PendingCreate' />
\r 
 375 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-level-oper-status.last-rpc-action' value='`$vnf-topology-operation-input.sdnc-request-header.svc-action`' />
\r 
 376 <parameter name='service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-level-oper-status.last-action' value='`$vnf-topology-operation-input.request-information.request-action`' />
\r 
 377 </set><execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='printContext' >
\r 
 378 <parameter name='filename' value='/var/tmp/bgb-viprend.log' />
\r 
 379 </execute><return status='success'>
\r 
 380 <parameter name="ack-final-indicator" value="Y" />
\r 
 381 <parameter name="error-code" value="200" />
\r 
 382 <parameter name="error-message" value="`$error-message`" />
\r 
 383 </return></block></method></service-logic>