<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='eipam-allocate-network-role-subnet' mode='sync'>
<block atomic='true'><set>
	<parameter name="tmp.eipam-error" value="false" />
	<parameter name="eipam-ip-block.ip-prefix" value='' />
	<parameter name="eipam-ip-block.mask" value='' />
	<parameter name="pfx.eipam-pool-row" value='' />
	<parameter name="tmp.level1-key-name" value="CLLI:CLOUD_REGION" />
	<parameter name="tmp.level2-key-name" value="NETWORK_ROLE:NETWORK_ID" /></set><!--Need to know which ipv version to get the plan name from the network-model.--><switch test="`$eipam-ip-block.allocate-version`"><outcome value='ipv4'><block atomic='true'><switch test="`$eipam-ip-block.level`"><outcome value='1'><block atomic='true'><!--subnet and subnet_keys are deleted in the EIPAMPlugin--><set>
	<parameter name="eipam-ip-block.plan-name" value="`$network-model.eipam-v4-address-plan`"/>
	<parameter name="eipam-ip-block.activate-subnet-flag" value="Y"/>	
	<parameter name="eipam-ip-block.leaf-level-indicator" value="N"/>
	<!-- Number of Pool Levels -->
	<parameter name="eipam-ip-block.pools_length" value="1"/>

	<!-- Level 1 -->
	<parameter name="eipam-ip-block.pools[0].key-name" value="`$tmp.level1-key-name`"/>
	<parameter name="eipam-ip-block.pools[0].key-value" value="`$tmp.level1-key-value`"/></set><!--subnet and subnet_keys are deleted in the EIPAMPlugin--><execute plugin="com.att.sdnctl.sli.plugin.eipam.EIPAMPlugin" method="allocateSubnet">
<outcome value='failure'><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while allocating V4 subnet in EIPAM." />
	</return></outcome></execute><get-resource
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="SELECT * from EIPAM_IP_POOLS WHERE plan_name = $network-model.eipam-v4-address-plan and level = 1 and key_value = $tmp.level1-key-value ; "
        pfx='pfx.eipam-pool-row'>

<outcome value='failure'><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while looking for entry in EIPAM_IP_POOLS for V4 subnet in EIPAM." />
	</return></outcome><outcome value="not-found"><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while looking for entry in EIPAM_IP_POOLS for V4 subnet in EIPAM." />
	</return></outcome></get-resource><record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
<parameter name="logger" value="message-log"/>
<parameter name="field1" value="__TIMESTAMP__"/>
<parameter name="field2" value="network-topology-operation"/>
<parameter name="field3" value="eipam-allocate-network-role-subnet"/>
<parameter name="field4" value="`$network-model.eipam-v4-address-plan`"/>
<parameter name="field5" value="`$tmp.level1-key-value`"/>
<parameter name="field6" value="`$tmp.eipam-pool-row.pool-id`"/>
<parameter name="field7" value="Level 1 subnet saved to DB."/></record><save
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="INSERT EIPAM_IP_SUBNETS
             SET
             entity_id = $eipam-ip-block.entity-id ,
             service_type = $tmp.service-type ,
             ip_address = $eipam-ip-block.ip-prefix ,
             prefix_length = $eipam-ip-block.mask ,
             plan_name = $network-model.eipam-v4-address-plan ,
             status = 'ACTIVE' ,
             pool_id = $pfx.eipam-pool-row.pool-id ,
             address_family = $network-model.ipv4-ip-version ,
             network_id = $tmp.network-id ; "
    force='true'
        pfx='pfx.eipam-v4subnet-row'>
<outcome value='failure'><return status='failure'>
<parameter name='error-code' value='500' />
<parameter name='error-message' value='failed to update EIPAM_IP_SUBNETS table.' />
</return></outcome><outcome value='success'>
</outcome></save><save
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="INSERT EIPAM_IP_SUBNET_KEYS
             SET
             entity_id = $eipam-ip-block.entity-id ,
             key_name = $tmp.level1-key-name ,
             key_value = $tmp.level1-key-value ,
             level = 1 ; "
    force='true'
        pfx='pfx.eipam-v4subnet-key-row'>
<outcome value='failure'><return status='failure'>
<parameter name='error-code' value='500' />
<parameter name='error-message' value='failed to update EIPAM_IP_SUBNET_KEYS table.' />
</return></outcome><outcome value='success'>
</outcome></save></block></outcome><outcome value='2'><block atomic='true'><!--subnet and subnet_keys are deleted in the EIPAMPlugin--><set>
	<parameter name="eipam-ip-block.plan-name" value="`$network-model.eipam-v4-address-plan`"/>
	<parameter name="eipam-ip-block.activate-subnet-flag" value="N"/>	
	<parameter name="eipam-ip-block.leaf-level-indicator" value="Y"/>

	<!-- Number of Pool Levels -->
	<parameter name="eipam-ip-block.pools_length" value="2"/>

	<!-- Level 1 -->
	<parameter name="eipam-ip-block.pools[0].key-name" value="`$tmp.level1-key-name`"/>
	<parameter name="eipam-ip-block.pools[0].key-value" value="`$tmp.level1-key-value`"/>

	<!-- Level 2 -->
	<parameter name="eipam-ip-block.pools[1].key-name" value="`$tmp.level2-key-name`"/>
	<parameter name="eipam-ip-block.pools[1].key-value" value="`$tmp.level2-key-value`"/></set><switch test="`$eipam-ip-block.subnet-size-override`"><outcome value=''>
<block atomic='true'><record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
<parameter name="logger" value="message-log"/>
<parameter name="field1" value="__TIMESTAMP__"/>
<parameter name="field2" value="network-topology-operation"/>
<parameter name="field3" value="eipam-allocate-network-role-subnet"/>
<parameter name="field4" value="`$network-model.eipam-v4-address-plan`"/>
<parameter name="field5" value="`$tmp.level2-key-value`"/>
<parameter name="field6" value="Level 2 subnet override not set, default to network model value."/>

</record><!--subnet and subnet_keys are deleted in the EIPAMPlugin--><set>
	<parameter name="eipam-ip-block.subnet-size-override" value="`$network-model.ipv4-cidr-mask`" />
</set></block></outcome></switch><!--subnet and subnet_keys are deleted in the EIPAMPlugin--><execute plugin="com.att.sdnctl.sli.plugin.eipam.EIPAMPlugin" method="allocateSubnet">
<outcome value='failure'><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while allocating V4 subnet in EIPAM." />
	</return></outcome></execute><get-resource
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="SELECT * from EIPAM_IP_POOLS WHERE plan_name = $network-model.eipam-v4-address-plan and level = 2 and parent_pool = $tmp.level1-key-value AND key_value = $tmp.level2-key-value ; "
        pfx='pfx.eipam-pool-row'>

<outcome value='failure'><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while looking for entry in EIPAM_IP_POOLS for V4 subnet in EIPAM." />
	</return></outcome><outcome value="not-found"><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while looking for entry in EIPAM_IP_POOLS for V4 subnet in EIPAM." />
	</return></outcome></get-resource><save
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="INSERT EIPAM_IP_SUBNETS
             SET
             entity_id = $eipam-ip-block.entity-id ,
             service_type = $tmp.service-type ,
             ip_address = $eipam-ip-block.ip-prefix ,
             prefix_length = $eipam-ip-block.mask ,
             plan_name = $network-model.eipam-v4-address-plan ,
             status = 'ALLOCATED' ,
             pool_id = $pfx.eipam-pool-row.pool-id ,
             address_family = $network-model.ipv4-ip-version ,
             network_id = $tmp.network-id ; "
    force='true'
        pfx='pfx.eipam-subnet-row'>
<outcome value='failure'><return status='failure'>
<parameter name='error-code' value='500' />
<parameter name='error-message' value='failed to update EIPAM_IP_SUBNETS table.' />
</return></outcome><outcome value='success'>
</outcome></save><save
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="INSERT EIPAM_IP_SUBNET_KEYS
             SET
             entity_id = $eipam-ip-block.entity-id ,
             key_name = $tmp.level1-key-name ,
             key_value = $tmp.level1-key-value ,
             level = 1 ; "
    force='true'
        pfx='pfx.eipam-v4subnet-key-row'>
<outcome value='success'>
</outcome><outcome value='failure'><return status='failure'>
<parameter name='error-code' value='500' />
<parameter name='error-message' value='failed to update EIPAM_IP_SUBNET_KEYS table.' />
</return></outcome></save><save
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="INSERT EIPAM_IP_SUBNET_KEYS
             SET
             entity_id = $eipam-ip-block.entity-id ,
             key_name = $tmp.level2-key-name ,
             key_value = $tmp.level2-key-value ,
             level = 2 ; "
    force='true'
        pfx='pfx.eipam-v4subnet-key-row'>
<outcome value='success'>
</outcome><outcome value='failure'><return status='failure'>
<parameter name='error-code' value='500' />
<parameter name='error-message' value='failed to update EIPAM_IP_SUBNET_KEYS table.' />
</return></outcome></save><record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
<parameter name="logger" value="message-log"/>
<parameter name="field1" value="__TIMESTAMP__"/>
<parameter name="field2" value="network-topology-operation"/>
<parameter name="field3" value="eipam-allocate-network-role-subnet"/>
<parameter name="field4" value="`$network-model.eipam-v4-address-plan`"/>
<parameter name="field5" value="`$tmp.level1-key-value`"/>

<!-- Level 2 -->
	<parameter name="field6" value="NETWORK_ROLE_NETWORK_ID"/>
	<parameter name="field7" value="`$tmp.level2-key-value`"/>
<parameter name="field8" value="Level 2 subnet saved to DB."/></record></block></outcome><outcome value=''><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="Please set the eipam-ip-block.level for appropriate EIPAM request." />
	</return></outcome></switch></block></outcome><outcome value='ipv6'><block atomic='true'><switch test="`$eipam-ip-block.level`"><outcome value='1'><block atomic='true'><!--subnet and subnet_keys are deleted in the EIPAMPlugin--><set>
	<parameter name="eipam-ip-block.plan-name" value="`$network-model.eipam-v6-address-plan`"/>
	<parameter name="eipam-ip-block.activate-subnet-flag" value="Y"/>	
	<parameter name="eipam-ip-block.leaf-level-indicator" value="N"/>
	<!-- Number of Pool Levels -->
	<parameter name="eipam-ip-block.pools_length" value="1"/>

	<!-- Level 1 -->
	<parameter name="eipam-ip-block.pools[0].key-name" value="`$tmp.level1-key-name`"/>
	<parameter name="eipam-ip-block.pools[0].key-value" value="`$tmp.level1-key-value`"/></set><!--subnet and subnet_keys are deleted in the EIPAMPlugin--><execute plugin="com.att.sdnctl.sli.plugin.eipam.EIPAMPlugin" method="allocateSubnet">
<outcome value='failure'><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while allocating V4 subnet in EIPAM." />
	</return></outcome></execute><get-resource
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="SELECT * from EIPAM_IP_POOLS WHERE plan_name = $network-model.eipam-v6-address-plan and level = 1 and key_value = $tmp.level1-key-value ; "
        pfx='pfx.eipam-pool-row'>

<outcome value='failure'><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while looking for entry in EIPAM_IP_POOLS for V6 subnet in EIPAM." />
	</return></outcome><outcome value="not-found"><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while looking for entry in EIPAM_IP_POOLS for V6 subnet in EIPAM." />
	</return></outcome></get-resource><save
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="INSERT EIPAM_IP_SUBNETS
             SET
             entity_id = $eipam-ip-block.entity-id ,
             service_type = $tmp.service-type ,
             ip_address = $eipam-ip-block.ip-prefix ,
             prefix_length = $eipam-ip-block.mask ,
             plan_name = $network-model.eipam-v6-address-plan ,
             status = 'ACTIVE' ,
             pool_id = $pfx.eipam-pool-row.pool-id ,
             address_family = $network-model.ipv6-ip-version ,
             network_id = $tmp.network-id ; "
    force='true'
        pfx='pfx.eipam-v6subnet-row'>
<outcome value='failure'><return status='failure'>
<parameter name='error-code' value='500' />
<parameter name='error-message' value='failed to update EIPAM_IP_SUBNETS table.' />
</return></outcome><outcome value='success'>
</outcome></save><save
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="INSERT EIPAM_IP_SUBNET_KEYS
             SET
             entity_id = $eipam-ip-block.entity-id ,
             key_name = $tmp.level1-key-name ,
             key_value = $tmp.level1-key-value ,
             level = 1 ; "
    force='true'
        pfx='pfx.eipam-v6subnet-key-row'>
<outcome value='failure'><return status='failure'>
<parameter name='error-code' value='500' />
<parameter name='error-message' value='failed to update EIPAM_IP_SUBNET_KEYS table.' />
</return></outcome><outcome value='success'>
</outcome></save><record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
<parameter name="logger" value="message-log"/>
<parameter name="field1" value="__TIMESTAMP__"/>
<parameter name="field2" value="network-topology-operation"/>
<parameter name="field3" value="eipam-allocate-network-role-subnet"/>
<parameter name="field4" value="`$network-model.eipam-v4-address-plan`"/>
<parameter name="field5" value="`$tmp.level1-key-value`"/>
<parameter name="field6" value="`$tmp.eipam-pool-row.pool-id`"/>
<parameter name="field7" value="Level 1 subnet saved to DB."/></record></block></outcome><outcome value='2'><block atomic='true'><!--subnet and subnet_keys are deleted in the EIPAMPlugin--><set>
	<parameter name="eipam-ip-block.plan-name" value="`$network-model.eipam-v6-address-plan`"/>
	<parameter name="eipam-ip-block.activate-subnet-flag" value="N"/>	
	<parameter name="eipam-ip-block.leaf-level-indicator" value="Y"/>
	
	<!-- Number of Pool Levels -->
	<parameter name="eipam-ip-block.pools_length" value="2"/>

	<!-- Level 1 -->
	<parameter name="eipam-ip-block.pools[0].key-name" value="`$tmp.level1-key-name`"/>
	<parameter name="eipam-ip-block.pools[0].key-value" value="`$tmp.level1-key-value`"/>

	<!-- Level 2 -->
	<parameter name="eipam-ip-block.pools[1].key-name" value="`$tmp.level2-key-name`"/>
	<parameter name="eipam-ip-block.pools[1].key-value" value="`$tmp.level2-key-value`"/></set><switch test="`$eipam-ip-block.subnet-size-override`"><outcome value=''>
<block atomic='true'><record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
<parameter name="logger" value="message-log"/>
<parameter name="field1" value="__TIMESTAMP__"/>
<parameter name="field2" value="network-topology-operation"/>
<parameter name="field3" value="eipam-allocate-network-role-subnet"/>
<parameter name="field4" value="`$network-model.eipam-v6-address-plan`"/>
<parameter name="field5" value="`$tmp.level2-key-value`"/>
<parameter name="field6" value="Level 2 subnet override not set, default to network model value."/>

</record><!--subnet and subnet_keys are deleted in the EIPAMPlugin--><set>
	<parameter name="eipam-ip-block.subnet-size-override" value="`$network-model.ipv6-cidr-mask`" />
</set></block></outcome></switch><!--subnet and subnet_keys are deleted in the EIPAMPlugin--><execute plugin="com.att.sdnctl.sli.plugin.eipam.EIPAMPlugin" method="allocateSubnet">
<outcome value='failure'><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while allocating V4 subnet in EIPAM." />
	</return></outcome></execute><get-resource
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="SELECT * from EIPAM_IP_POOLS WHERE plan_name = $network-model.eipam-v6-address-plan and level = 2 and parent_pool = $tmp.level1-key-value AND key_value = $tmp.level2-key-value ; "
        pfx='pfx.eipam-pool-row'>

<outcome value='failure'><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while looking for entry in EIPAM_IP_POOLS for V6 subnet in EIPAM." />
	</return></outcome><outcome value="not-found"><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="An error occured while looking for entry in EIPAM_IP_POOLS for V6 subnet in EIPAM." />
	</return></outcome></get-resource><save
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="INSERT EIPAM_IP_SUBNETS
             SET
             entity_id = $eipam-ip-block.entity-id ,
             service_type = $tmp.service-type ,
             ip_address = $eipam-ip-block.ip-prefix ,
             prefix_length = $eipam-ip-block.mask ,
             plan_name = $network-model.eipam-v6-address-plan ,
             status = 'ALLOCATED' ,
             pool_id = $pfx.eipam-pool-row.pool-id ,
             address_family = $network-model.ipv6-ip-version ,
             network_id = $tmp.network-id ; "
    force='true'
        pfx='pfx.eipam-v6subnet-row'>
<outcome value='failure'><return status='failure'>
<parameter name='error-code' value='500' />
<parameter name='error-message' value='failed to update EIPAM_IP_SUBNETS table.' />
</return></outcome><outcome value='success'>
</outcome></save><save
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="INSERT EIPAM_IP_SUBNET_KEYS
             SET
             entity_id = $eipam-ip-block.entity-id ,
             key_name = $tmp.level1-key-name ,
             key_value = $tmp.level1-key-value ,
             level = 1 ; "
    force='true'
        pfx='pfx.eipam-v6subnet-key-row'>
<outcome value='failure'><return status='failure'>
<parameter name='error-code' value='500' />
<parameter name='error-message' value='failed to update EIPAM_IP_SUBNET_KEYS table.' />
</return></outcome><outcome value='success'>
</outcome></save><save
        plugin='org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource'
        resource='SQL'
        key="INSERT EIPAM_IP_SUBNET_KEYS
             SET
             entity_id = $eipam-ip-block.entity-id ,
             key_name = $tmp.level2-key-name ,
             key_value = $tmp.level2-key-value ,
             level = 2 ; "
    force='true'
        pfx='pfx.eipam-v6subnet-key-row'>
<outcome value='failure'><return status='failure'>
<parameter name='error-code' value='500' />
<parameter name='error-message' value='failed to update EIPAM_IP_SUBNET_KEYS table.' />
</return></outcome><outcome value='success'>
</outcome></save><record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
<parameter name="logger" value="message-log"/>
<parameter name="field1" value="__TIMESTAMP__"/>
<parameter name="field2" value="network-topology-operation"/>
<parameter name="field3" value="eipam-allocate-network-role-subnet"/>
<parameter name="field4" value="`$network-model.eipam-v4-address-plan`"/>
<parameter name="field5" value="`$tmp.level1-key-value`"/>

<!-- Level 2 -->
	<parameter name="field6" value="NETWORK_ROLE_NETWORK_ID"/>
	<parameter name="field7" value="`$tmp.level2-key-value`"/>
<parameter name="field8" value="Level 2 subnet saved to DB."/></record></block></outcome><outcome value=''><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="Please set the eipam-ip-block.level for appropriate EIPAM request." />
	</return></outcome></switch></block></outcome><outcome value=''><return status="failure">
	<parameter name="tmp.eipam-error" value="true" />
	<parameter name="error-code" value="500"/>
	<parameter name="error-message" value="Please set the eipam-ip-block.allocate-version for appropriate EIPAM request." />
	</return></outcome></switch><return status='success'>
	<parameter name="error-code" value="200" />
</return></block></method></service-logic>