var url = require('url');
var sockjs = require('sockjs');
var websocket_multiplex = require('websocket-multiplex');
+var utils = require('./utils.js');
-function getPortForProtocol (protocol) {
- switch (protocol) {
- case 'http':
- return 8000;
- case 'https':
- return 8443;
- }
-}
-
var Subscriptions = function() {
this.ID = 0;
this.socketServers = {};
var origin = '';
if (req.query['api_server']) {
var api_server_protocol = req.query['api_server'].match(protocolTest)[1];
- var api_server_origin = req.query['api_server'] + ':' + getPortForProtocol(api_server_protocol);
+ var api_server_origin = req.query['api_server'] + ':' + utils.getPortForProtocol(api_server_protocol);
origin = api_server_origin;
protocol = api_server_protocol;
} else {
});
}
+var getPortForProtocol = function(protocol) {
+ switch (protocol) {
+ case 'http':
+ return 8000;
+ case 'https':
+ return 8443;
+ }
+}
+
module.exports = {
/**
* Ensure confd port is on api_server variable.
sendSuccessResponse: sendSuccessResponse,
- passThroughConstructor: passThroughConstructor
+ passThroughConstructor: passThroughConstructor,
+
+ getPortForProtocol: getPortForProtocol
};
}, {
label: "Authentication URL",
ref: 'auth_url'
- },{
- label: "User Domain",
- ref: 'user-domain',
- optional: true
- },{
- label: "Project Domain",
- ref: 'project-domain',
- optional: true
}, {
label: "Tenant",
ref: 'tenant'
label: 'Floating IP Pool',
ref: 'floating-ip-pool',
optional: true
+ }, {
+ label: "User Domain",
+ ref: 'user-domain',
+ optional: true
+ }, {
+ label: "Project Domain",
+ ref: 'project-domain',
+ optional: true
+ }, {
+ label: "Region",
+ ref: 'region',
+ optional: true
}],
"openvim": [{
label: "Host",
});
});
};
-// Composer.update = function(req) {
-// var api_server = req.query['api_server'];
-// var catalogType = req.params.catalogType;
-// var id = req.params.id;
-// var data = req.body;
-// console.log('Updating', catalogType, 'id', id, 'on', api_server);
-// var jsonData = {};
-// jsonData[catalogType] = {};
-// jsonData[catalogType] = data;
-// return new Promise(function(resolve, reject) {
-// var requestHeaders = {};
-// _.extend(requestHeaders, constants.HTTP_HEADERS.accept.data, constants.HTTP_HEADERS.content_type.data, {
-// 'Authorization': req.get('Authorization')
-// });
-// request({
-// uri: utils.confdPort(api_server) + APIVersion + '/api/config/' + catalogType + '-catalog' + '/' + catalogType + '/' + id,
-// method: 'PUT',
-// headers: requestHeaders,
-// forever: constants.FOREVER_ON,
-// rejectUnauthorized: false,
-// json: jsonData
-// }, function(error, response, body) {
-// if (utils.validateResponse('Composer.update', error, response, body, resolve, reject)) {
-// resolve({
-// statusCode: response.statusCode
-// });
-// }
-// });
-// });
-//
+Composer.updateSave = function(req) {
+ var api_server = req.query['api_server'];
+ var catalogType = req.params.catalogType;
+ var id = req.params.id;
+ var data = req.body;
+ console.log('Updating', catalogType, 'id', id, 'on', api_server);
+ var jsonData = {};
+ jsonData[catalogType] = {};
+ jsonData[catalogType] = data;
+ return new Promise(function(resolve, reject) {
+ var requestHeaders = {};
+ _.extend(requestHeaders, constants.HTTP_HEADERS.accept.data, constants.HTTP_HEADERS.content_type.data, {
+ 'Authorization': req.get('Authorization')
+ });
+ request({
+ uri: utils.confdPort(api_server) + APIVersion + '/api/config/' + catalogType + '-catalog' + '/' + catalogType + '/' + id,
+ method: 'PUT',
+ headers: requestHeaders,
+ forever: constants.FOREVER_ON,
+ rejectUnauthorized: false,
+ json: jsonData
+ }, function(error, response, body) {
+ if (utils.validateResponse('Composer.update', error, response, body, resolve, reject)) {
+ resolve({
+ statusCode: response.statusCode
+ });
+ }
+ });
+ });
+}
Composer.update = function(req) {
console.log(' Updating file', req.file.originalname, 'as', req.file.filename);
var download_host = req.query['dev_download_server'];
if (!download_host) {
- download_host = req.protocol + '://' + req.headers.host;
+ download_host = api_server + ':' + utils.getPortForProtocol(req.protocol);
}
var input = {
'external-url': download_host + '/composer/update/' + req.file.filename,
var download_host = req.query['dev_download_server'];
if (!download_host) {
- download_host = req.protocol + '://' + req.headers.host;
+ download_host = api_server + ':' + utils.getPortForProtocol(req.protocol);
}
return new Promise(function(resolve, reject) {
var package_type = req.query['package_type'].toUpperCase();
var package_path = req.query['package_path'];
if (!download_host) {
- download_host = req.protocol + '://' + req.headers.host;
+ download_host = api_server + ':' + utils.getPortForProtocol(req.protocol);
}
return new Promise(function(resolve, reject) {
});
});
router.put('/api/catalog/:catalogType/:id', cors(), function(req, res) {
- Composer.update(req).then(function(data) {
+ Composer.updateSave(req).then(function(data) {
res.send(data);
}, function(error) {
res.status(error.statusCode);
}
}
- let cpNumber = 0;
+
let AppHeader = (<div className="AppHeader">
<RiftHeader />
</div>);
const isModified = self.state.item && self.state.item.uiState.modified;
const isEditingNSD = self.state.item && self.state.item.uiState && /nsd/.test(self.state.item.uiState.type);
const isEditingVNFD = self.state.item && self.state.item.uiState && /vnfd/.test(self.state.item.uiState.type);
- const containers = [self.state.item].reduce(DescriptorModelFactory.buildCatalogItemFactory(CatalogDataStore.getState().catalogs), []);
-
- containers.filter(d => DescriptorModelFactory.isConnectionPoint(d)).forEach(d => {
- d.cpNumber = ++cpNumber;
- containers.filter(d => DescriptorModelFactory.isVnfdConnectionPointRef(d)).filter(ref => ref.key === d.key).forEach(ref => ref.cpNumber = d.cpNumber);
- });
+ const containers = self.state.containers;
const canvasTitle = containers.length ? containers[0].model.name : '';
const hasNoCatalogs = CatalogDataStore.getState().catalogs.length === 0;
const isLoading = self.state.isLoading;
nsd: common.concat(['constituent-vnfd', 'vnffgd', 'vld']),
vld: common.concat([]),
vnfd: common.concat(['vdu', 'internal-vld']),
- 'vnfd.vdu': common.concat(['image', 'external-interface', 'vm-flavor', 'cloud-init', 'filename']),
+ 'vnfd.vdu': common.concat(['image', 'image-checksum', 'external-interface', 'vm-flavor', 'cloud-init', 'filename']),
// white-list valid fields to send in the meta field
meta: ['containerPositionMap']
};
for (let subKey in catalogs[key]) {
let found = _.find(catalogs[key][subKey], {id: fieldKeyArray[0]});
if (found) {
- results = this.getResults(found, pathArray.splice(-i, i));
+ results = this.getAbsoluteResults(found, pathArray.splice(-i, i));
return results;
}
}
for (let foundKey in found) {
let topLevel = _.find(found[foundKey], {id: fieldKeyArray[1]});
if (topLevel) {
- results = this.getResults(topLevel, pathArray.splice(-i, i));
+ results = this.getAbsoluteResults(topLevel, pathArray.splice(-i, i));
return results;
}
}
this.fullScreenMode = false;
this.panelTabShown = 'descriptor';
//File manager values
- this.files = [];
+ this.files = false;
this.filesState = {};
this.downloadJobs = {};
+ this.containers = [];
//End File manager values
this.bindListeners({
onResize: PanelResizeAction.RESIZE,
}
updateItem(item) {
+ const self = this;
+ let containers = [];
+ let cpNumber = 0;
if(!document.body.classList.contains('resizing')) {
- this.setState({item: _.cloneDeep(item)});
+ containers = [item].reduce(DescriptorModelFactory.buildCatalogItemFactory(CatalogDataStore.getState().catalogs), []);
+
+ containers.filter(d => DescriptorModelFactory.isConnectionPoint(d)).forEach(d => {
+ d.cpNumber = ++cpNumber;
+ containers.filter(d => DescriptorModelFactory.isVnfdConnectionPointRef(d)).filter(ref => ref.key === d.key).forEach(ref => ref.cpNumber = d.cpNumber);
+ });
+ this.setState({containers: containers, item: _.cloneDeep(item)});
}
SelectionManager.refreshOutline();
}
let self = this;
let ws = window.multiplexer.channel(id);
let downloadJobs = _.cloneDeep(self.downloadJobs);
- let newFiles = {};
+ let newFiles = false;
ws.onmessage = (socket) => {
if (self.files && self.files.length > 0) {
let jobs = [];
openFileManagerSockets(i) {
let self = this;
let item = i || self.item;
- this.files = {data:[]};
// this.closeFileManagerSockets();
this.getInstance().openFileMonitoringSocket(item.id, item.uiState.type).then(function() {
// // self.getInstance().openDownloadMonitoringSocket(item.id);
vdur['console-url'] = 'api/vnfr/' + vnfr.id + '/vdur/' + vdur.id + '/console-url';
nsr['console-urls'].push({
id: vdur.id,
- name: vdur.name,
+ name: vnfr.name,
'console-url': vdur['console-url']
});
});
<PanelWrapper>
<InstantiateDescriptorPanel descriptor={selectedNSD} />
<Panel title="Input Parameters">
- <InstantiateInputParams
+ <InstantiateInputParams
- nsFn={this.props.nsFn()}
- vnfFn={this.props.vnfFn()}
- vldFn={this.props.vldFn()}
- ipProfileFn={this.props.ipProfileFn()}
- dnsFn={this.props.dnsFn()}
- usersFn={this.props.usersFn()}
- sshFn={this.props.sshFn()}
- updateName={this.props.nameUpdated}
- updateInputParam={this.props.updateInputParam}
+ nsFn={this.props.nsFn()}
+ vnfFn={this.props.vnfFn()}
+ vldFn={this.props.vldFn()}
+ ipProfileFn={this.props.ipProfileFn()}
+ dnsFn={this.props.dnsFn()}
+ usersFn={this.props.usersFn()}
+ sshFn={this.props.sshFn()}
+ updateName={this.props.nameUpdated}
+ updateInputParam={this.props.updateInputParam}
- nsd={selectedNSD}
- selectedNSDid={this.props.selectedNSDid}
- name={this.props.name}
+ nsd={selectedNSD}
+ selectedNSDid={this.props.selectedNSDid}
+ name={this.props.name}
- cloudAccounts={this.props.cloudAccounts}
- selectedCloudAccount={this.props.selectedCloudAccount}
- vnfdCloudAccounts={this.props.vnfdCloudAccounts}
- ro={this.props.ro}
- dataCenters={this.props.dataCenters}
- configAgentAccounts={this.props.configAgentAccounts}
- inputParameters={this.props['input-parameters']}
+ cloudAccounts={this.props.cloudAccounts}
+ selectedCloudAccount={this.props.selectedCloudAccount}
+ vnfdCloudAccounts={this.props.vnfdCloudAccounts}
+ ro={this.props.ro}
+ dataCenters={this.props.dataCenters}
+ configAgentAccounts={this.props.configAgentAccounts}
+ inputParameters={this.props['input-parameters']}
- displayPlacementGroups={this.props.displayPlacementGroups}
+ displayPlacementGroups={this.props.displayPlacementGroups}
- nsPlacementGroups={this.props['ns-placement-groups']}
- vnfPlacementGroups={this.props['vnf-placement-groups']}
+ nsPlacementGroups={this.props['ns-placement-groups']}
+ vnfPlacementGroups={this.props['vnf-placement-groups']}
- vlds={this.props.vld}
+ vlds={this.props.vld}
- ipProfileList={this.props.ipProfiles}
+ ipProfileList={this.props.ipProfiles}
- sshKeysList={this.props.sshKeysList}
- sshKeysRef={this.props.sshKeysRef}
+ sshKeysList={this.props.sshKeysList}
+ sshKeysRef={this.props.sshKeysRef}
- dnsServers={this.props.dnsServers}
+ dnsServers={this.props.dnsServers}
- usersList = {this.props.usersList}
- selectedID={this.props.selectedNSDid}
- selectedNSD={selectedNSD}
+ usersList = {this.props.usersList}
+ selectedID={this.props.selectedNSDid}
+ selectedNSD={selectedNSD}
- isOpenMano={this.props.isOpenMano}
+ isOpenMano={this.props.isOpenMano}
- /></Panel>
+ />
+ </Panel>
</PanelWrapper>
)
}
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});
}
},
//That match the currently selected job id
if(v.id == cardData.id) {
return v.primitive.map(function(p, i) {
- return <JobListCard type="vnfr" job-id={job['job-id']} cardData={cardData} key={ob['job-id'] + '-' + i} {...p} />
+ return <JobListCard type="vnfr" job-id={job['job-id']} cardData={cardData} key={job['job-id'] + '-' + i} {...p} />
})
}
})
//That match the currently selected job id
if(v.id == cardData.id) {
return v.primitive.map(function(p, i) {
- return <JobListCard type="vnfr" job-id={job['job-id']} cardData={cardData} key={ob['job-id'] + '-' + 'vnfr' + '-' + h} {...p} />
+ return <JobListCard type="vnfr" job-id={job['job-id']} cardData={cardData} key={job['job-id'] + '-' + 'vnfr' + '-' + h} {...p} />
})
}
})
let vnfrIndex = data.vnfrIndex;
let configPrimitiveIndex = data.configPrimitiveIndex;
let payload = {};
- let isValid = false;
+ let isValid = true;
let configPrimitive = vnfrs[vnfrIndex]['vnf-configuration']['service-primitive'][configPrimitiveIndex];
payload['name'] = '';
payload['vnf-list'] = [];
payload['triggered-by'] = 'vnf-primitive';
let parameters = [];
- configPrimitive['parameter'].map((parameter) => {
+ configPrimitive['parameter'] && configPrimitive['parameter'].map((parameter) => {
if(!isValid) {
isValid = validateParameter(parameter);
}
let vnfPrimitive = [];
vnfPrimitive[0] = {
name: configPrimitive['name'],
- index: configPrimitiveIndex,
- parameter: parameters
+ index: configPrimitiveIndex
+ };
+
+ if (parameters.length > 0) {
+ vnfPrimitive[0].parameter = parameters;
}
payload['vnf-list'].push({