Bug 341 - input-parameter-xpath complains errors
[osm/UI.git] / skyquake / plugins / launchpad / src / instantiate / instantiateStore.js
index 2e6e242..dacf316 100644 (file)
@@ -20,7 +20,8 @@ import NetworkServiceSource from './launchNetworkServiceSource.js';
 import GUID from 'utils/guid.js';
 import AppHeaderActions from 'widgets/header/headerActions.js';
 import Alt from '../alt';
-import _ from 'lodash';
+import _cloneDeep from 'lodash/cloneDeep';
+import _find from 'lodash/find';
 
 
 class LaunchNetworkServiceStore {
@@ -139,7 +140,7 @@ class LaunchNetworkServiceStore {
             Alt.actions.global.showNotification.defer({type: 'warning', msg: 'One or more VIM accounts have failed to connect'});
         }
         if(cloudAccounts && cloudAccounts.length > 0) {
-            newState.selectedCloudAccount = cloudAccounts[0];
+            newState.selectedCloudAccount = newState.cloudAccounts[0];
             if (cloudAccounts[0]['account-type'] == 'openstack') {
                 newState.displayPlacementGroups = true;
             } else {
@@ -188,10 +189,13 @@ class LaunchNetworkServiceStore {
         });
         return window.location.hash = 'launchpad/' + tokenizedHash[2];
     }
-    launchNSRError(error) {
+    launchNSRError(data) {
         var msg = 'Something went wrong while trying to instantiate. Check the error logs for more information';
-        if(error) {
-            msg = error;
+        if(data) {
+            msg = data;
+        }
+        if (data.error) {
+            msg = data.error;
         }
         Alt.actions.global.showNotification.defer(msg);
         Alt.actions.global.hideScreenLoader.defer();
@@ -251,9 +255,13 @@ class LaunchNetworkServiceStore {
             ipProfiles: NSD['ip-profiles']
         };
         newState.selectedNSD = data;
+        newState['input-parameters'] = [];
         if (NSD['input-parameter-xpath']) {
             newState.hasConfigureNSD = true;
-            newState['input-parameters'] = NSD['input-parameter-xpath'];
+            NSD['input-parameter-xpath'].map(function(p) {
+                newState.hasConfigureNSD = true;
+                newState['input-parameters'].push(_cloneDeep(p));
+            })
         } else {
             newState.hasConfigureNSD = false;
             newState['input-parameters'] = null;
@@ -306,14 +314,16 @@ class LaunchNetworkServiceStore {
                     dataCenterID: JSON.parse(dataCenter.target.value)
                 });
             },
-            placementGroupUpdate: (i, k, value) => {
+            placementGroupUpdate: (i, k, event) => {
+                let value = event.target.value;
                 let pg = self['ns-placement-groups'];
                 pg[i][k] = value;
                 self.setState({
                     'ns-placement-groups': pg
                 })
             },
-            hostAggregateUpdate: (pgi, hai, k, value) => {
+            hostAggregateUpdate: (pgi, hai, k, event) => {
+                let value = event.target.value;
                 let pg = self['ns-placement-groups'];
                 let ha = pg[pgi]['host-aggregate'][hai];
                 ha[k] = value;
@@ -345,14 +355,16 @@ class LaunchNetworkServiceStore {
     vnfFn = () => {
         let self = this;
         return {
-            placementGroupUpdate: (i, k, value) => {
+            placementGroupUpdate: (i, k, event) => {
+                let value = event.target.value;
                 let pg = self['vnf-placement-groups'];
                 pg[i][k] = value;
                 self.setState({
                     'vnf-placement-groups': pg
                 })
             },
-            hostAggregateUpdate: (pgi, hai, k, value) => {
+            hostAggregateUpdate: (pgi, hai, k, event) => {
+                let value = event.target.value;
                 let pg = self['vnf-placement-groups'];
                 let ha = pg[pgi]['host-aggregate'][hai];
                 ha[k] = value;
@@ -484,6 +496,11 @@ class LaunchNetworkServiceStore {
                     let value = e.target.nodeName == "SELECT" ? JSON.parse(e.target.value) : e.target.value;
                     self.ipProfiles[i]['ip-profile-params'][key] = value;
 
+                    if (value == '') {
+                        // Don't send this key
+                        delete self.ipProfiles[i]['ip-profile-params'][key];
+                    }
+
                     self.setState({ipProfiles:self.ipProfiles});
                 }
             },
@@ -635,7 +652,7 @@ class LaunchNetworkServiceStore {
             },
             updateSSHkeyRef: function(i, j, remove){
                 return function(e) {
-                    let usersList = _.cloneDeep(self.usersList)
+                    let usersList = _cloneDeep(self.usersList)
                     let keys = usersList[i]['ssh-authorized-key'];
                     if(!remove) {
                         let keyRef = JSON.parse(e.target.value).name;
@@ -667,7 +684,7 @@ class LaunchNetworkServiceStore {
 
         // Create a filtered NSD payload from the decorated one as RW.REST cannot handle extra parameters now
         let nsdPayload = {};
-        nsdPayload = _.cloneDeep(_.find(this.state.nsd[0].descriptors, {id: this.state.selectedNSDid}));
+        nsdPayload = _cloneDeep(_find(this.state.nsd[0].descriptors, {id: this.state.selectedNSDid}));
 
         if (nsdPayload != {}) {
             nsdPayload['meta'] && delete nsdPayload['meta'];
@@ -701,14 +718,22 @@ class LaunchNetworkServiceStore {
         if (this.state.ro && this.state.ro['account-type'] == 'openmano') {
             payload['om-datacenter'] = this.state.dataCenterID;
         } else {
+            if(!this.state.selectedCloudAccount) {
+                Alt.actions.global.showNotification.defer("No VIM Account Selected");
+                return;
+            }
             payload["cloud-account"] = this.state.selectedCloudAccount.name;
         }
+        //Clean Input Parameters
         if (this.state.hasConfigureNSD) {
-            let ips = this.state['input-parameters'];
+            let ips = _cloneDeep(this.state['input-parameters']);
+
             let ipsToSend = ips.filter(function(ip) {
                 if (ip.value && ip.value != "") {
-                    ip.uuid = GUID();
+                    delete ip.label;
                     delete ip.name;
+                    delete ip['default-value'];
+
                     return true;
                 }
                 return false;
@@ -846,5 +871,4 @@ function getMockData() {
         pnfd: data.pnfd
     });
 }
-// export default Alt.createStore(LaunchNetworkServiceStore);
 export default LaunchNetworkServiceStore;