nsConfigHTML = (props) => {
return (
<div className="configure-nsd_section">
+ <div className="noticeSubText noticeSubText_right">
+ * required
+ </div>
<div className="inputControls">
- <TextInput label="Instance Name" type="text" pattern="^[a-zA-Z0-9_]*$" style={{textAlign:'left'}} onChange={props.updateName} value={props.name}/>
- {
- !isOpenMano(props.ro) ?
- (
- <label>Select VIM Account
- <SelectOption options={constructCloudAccountOptions(props.cloudAccounts)} onChange={props.nsFn.updateSelectedCloudAccount} />
- </label>
- )
- : null
- }
+ <TextInput label="Instance Name" required={true} type="text" pattern="^[a-zA-Z0-9_]*$" style={{textAlign:'left'}} onChange={props.updateName} value={props.name}/>
+ <label>Resource Orchestrator
+ <SelectOption options={constructROOptions(props.resourceOrchestrators)} onChange={props.nsFn.updateSelectedRoAccount} />
+ </label>
{
- isOpenMano(props.ro) ?
- dataCentersHTML(props.dataCenters[props.ro.name],
- props.nsFn.updateSelectedDataCenter)
- : null
+ (props.selectedResourceOrchestrator.datacenters && props.selectedResourceOrchestrator.datacenters.datacenters) ?
+ (
+ <label>Datacenter
+ <SelectOption options={constructDataCenterOptions(props.selectedResourceOrchestrator.datacenters.datacenters)} onChange={props.nsFn.updateSelectedDataCenter} />
+ </label>
+ )
+ : <span>No datacenters configured</span>
}
</div>
</div>
}
return (
<div className="inputControls" key={i}>
- <h4 className="inputControls-title">VNFD: {v.name}</h4>
+ <h4 className="inputControls-title">VNFD: {v['vnf-name']}</h4>
{
- !isOpenMano(props.ro) ?
- (
- <label>Select VIM Account
- <SelectOption options={constructCloudAccountOptions(props.cloudAccounts)} initial={true} onChange={props.vnfFn.updateSelectedCloudAccount.bind(null, v['member-vnf-index'])} defaultValue={defaultValue} />
- </label>
- )
- : null
+ (props.selectedResourceOrchestrator.datacenters && props.selectedResourceOrchestrator.datacenters.datacenters) ?
+ (
+ <label>Datacenter
+ <SelectOption options={constructDataCenterOptions(props.selectedResourceOrchestrator.datacenters.datacenters)} onChange={props.vnfFn.updateSelectedDataCenter.bind(null, v['member-vnf-index'])} initial={true} />
+ </label>
+ )
+ : <span>No datacenters configured</span>
}
- {
- isOpenMano(props.ro) ?
- dataCentersHTML(
- props.dataCenters[props.ro.name],
- props.vnfFn.updateSelectedDataCenter.bind(null, v['member-vnf-index']), true)
- : null
- }
{
(props.configAgentAccounts && props.configAgentAccounts.length > 0) ?
- <label>Select Config Agent Account
+ <label>Config Agent Account
<SelectOption options={props.configAgentAccounts && props.configAgentAccounts.map(function(c) {
return {
label: c.name,
</div>
)
}
+ //"vnfd-catalog/vnfd[id=../../../constituent-vnfd[0]/vnfd-id-ref]/version";
+
inputParametersHTML = (props) => {
let inputParameters = props.inputParameters;
- return inputParameters && inputParameters.map(function(input, i) {
- return (
- <div className="configure-nsd_section" key={i}>
- <h3 className="launchpadCard_title">Input Parameters</h3>
- <div className="inputControls">
- <TextInput label={ input.label || input.xpath } type="text" onChange={props.updateInputParam.bind(self, i)} />
- </div>
- </div>
- )
- })
+ const handleChange = (i, event) => props.updateInputParam(i, event.target.value);
+ let nsInputParamsHTML = [];
+ inputParameters && inputParameters.map(function(input, i) {
+ nsInputParamsHTML.push(
+ <div className="inputControls" key={i}>
+ <TextInput label={ input.label || input.xpath } value={input.value || input['default-value']} type="text" onChange={handleChange.bind(this, i)} />
+ </div>
+ );
+ });
+ var nsinput = (
+ <div className="configure-nsd_section" >
+ <h3 className="launchpadCard_title">NS Input Parameters</h3>
+ {
+ nsInputParamsHTML
+ }
+ </div>
+ );
+ return nsinput;
+ }
+ //"vnfd-catalog/vnfd[id=../../../constituent-vnfd[0]/vnfd-id-ref]/version";
+
+ vnfInputParametersHTML = (props) => {
+ let vnfInputParams = props.vnfInputParams;
+ const handleChange = (vnfIndex, parameterIndex, event) => props.updateVnfInputParam(vnfIndex, parameterIndex, event.target.value);
+ let vnfInputParamsHTML = [];
+ vnfInputParams && vnfInputParams.map(function(input, i) {
+ vnfInputParamsHTML.push(
+ <div className="configure-nsd_section" key={i}>
+ <h3 className="launchpadCard_title">{`VNF Input Parameters: ${input['name']}:${input['member-vnf-index-ref']}`}</h3>
+ {
+ input['input-parameter'].filter(function(p){
+ let regex = /vnfd\[(?:vnfd:)?id\s*=\s*'?"?(\S+?)'?"?\s*\]/
+ // if has id, then it belongs in a vnfd section
+ if (p.xpath.match(regex)) {
+ // look for matching vnfd
+ if ((p.xpath.match(regex)[1] == input['vnfd-id-ref'])) {
+ return true
+ } else {
+ return false;
+ }
+ } else {
+ return true;
+ }
+ }).map(function(p, j){
+ let param = vnfInputParams[i]['input-parameter'][j];
+ return (<div className="inputControls" key={j}>
+ <TextInput label={(p.label || p.xpath)} value={param.value || param['default-value']} type="text" onChange={handleChange.bind(this, i, j)} />
+ </div>)
+ })
+ }
+ </div>
+ );
+ })
+
+ return <div>{vnfInputParamsHTML}</div>;
}
nsPlacementGroupsHTML = (props) => {
let nsPlacementGroups = props.nsPlacementGroups;
return (
<div className="input_group" key={j}>
- <TextInput type="text" onChange={props.nsFn.placementGroupUpdate.bind(self, i, j, 'key')} placeholder="KEY" value={key} />
- <TextInput type="text" onChange={props.nsFn.placementGroupUpdate.bind(self, i, j, 'value')} placeholder="VALUE" value={value} />
+ <TextInput type="text" onChange={props.nsFn.hostAggregateUpdate.bind(self, i, j, 'key')} placeholder="KEY" value={key} />
+ <TextInput type="text" onChange={props.nsFn.hostAggregateUpdate.bind(self, i, j, 'value')} placeholder="VALUE" value={value} />
<span onClick={props.nsFn.removeHostAggregate.bind(self, i, j)} className="removeInput"><img src={imgRemove} />Remove</span>
</div>
)
{vlds && vlds.map(function(v, i) {
let currentType = v.type;
let isVIM = (currentType == 'vim-network-name');
- let isUnknown = (currentType == 'unknown') || ((currentType != 'vim-network-name') && (currentType != 'ip-profile-ref'));
+ let isUnknown = (currentType == 'none') || ((currentType != 'vim-network-name') && (currentType != 'ip-profile-ref'));
return (
<div key={self.props.nsd.id + '-' + i} className="inputControls">
<h4 className="inputControls-title">VLD: {v['short-name'] ? v['short-name'] : v['name']}</h4>
+ <label><span>Specify VLD Parameters</span></label>
<div className="inputControls-radioGroup">
<label className="inputControls-radio" style={{display: ipProfileList ? 'flex' : 'none'}}>
<input type="radio" name={'vld-' + i } onChange={self.props.vldFn.updateType(i)} checked={!isVIM && !isUnknown} value='ip-profile-ref' />
VIM Network Name
</label>
<label className="inputControls-radio">
- <input type="radio" name={'vld-' + i } onChange={self.props.vldFn.updateType(i)} checked={isUnknown} value='unknown' />
- Unknown
+ <input type="radio" name={'vld-' + i } onChange={self.props.vldFn.updateType(i)} checked={isUnknown} value='none' />
+ None
</label>
</div>
{
isUnknown ? null : isVIM ?
- <TextInput label="Network Name" onChange={self.props.vldFn.updateValue(i, currentType)} value={v[currentType]} /> :
- <div>
+ <div>
+ <TextInput label="Network Name" onChange={self.props.vldFn.updateValue(i, currentType)} value={v[currentType]} />
+ {
+ v['mgmt-network'].toUpperCase() == "TRUE" ?
+ <TextInput label="IPV4 NAT POOL NAME" placeholder={self.props.dataCenterID} onChange={self.props.vldFn.updateValue(i, 'ipv4-nat-pool-name')} value={v['ipv4-nat-pool-name']} />
+ : null
+ }
+ </div>
+ : <div>
<SelectOption
label="IP PROFILE NAME"
options={ipProfileList && ipProfileList.map(function(ip) {
onChange={props.ipProfileFn.updateProfile(j, 'security-group')}
value={ipl['security-group']}
/>
+ <TextInput
+ label="subnet prefix pool"
+ onChange={props.ipProfileFn.updateProfile(j, 'subnet-prefix-pool')}
+ value={ipl['subnet-prefix-pool']}
+ />
<label>
<div style={{display:'flex'}}>
DNS SERVERS <span onClick={props.dnsFn.addDNS(j)} className="addInput"><img src={imgAdd} />Add</span>
return (
<div key={k} style={{display:'flex'}}>
<TextInput
- onChange={props.ipProfileFn.updateProfile(j,k)}
- value={ipl['dns-server'][k]}
+ onChange={props.dnsFn.updateDNS(j,k)}
+ value={ipl['dns-server'][k].address}
/>
<span onClick={props.dnsFn.removeDNS(j,k)} className="removeInput">
<img src={imgRemove} />Remove</span>
function dhcpHTML(props, ipl, j){
return (<div>
<TextInput
- label="DCHP Start Address"
+ label="DHCP Start Address"
onChange={props.ipProfileFn.updateDHCP(j, 'start-address')}
value={ipl['dhcp-params'] && ipl['dhcp-params']['start-address']}
/>
<TextInput
- label="DCHP Count"
+ label="DHCP Count"
onChange={props.ipProfileFn.updateDHCP(j, 'count')}
value={ipl['dhcp-params'] && ipl['dhcp-params']['count']}
/>
<div className="input_group input_group-users" key={i}>
<div className="inputControls">
<div style={{fontWeight: 'bold', display: 'flex'}}>USER <span onClick={usersFn.remove(i)} className="removeInput"><img src={imgRemove} />Remove</span></div>
+
<TextInput onChange={usersFn.update(i, 'name')} label="USERNAME" value={i.name} />
<TextInput onChange={usersFn.update(i, 'user-info')} label="REAL NAME" value={i.gecos} />
{
this.inputParametersHTML(props)
}
{
+ //VNF INPUT PARAMETERS
+ this.vnfInputParametersHTML(props)
+ }
+ {
+ true ?
+ // self.props.selectedResourceOrchestrator['ro-account-type'] == 'rift-ro' ?
//NS PLACEMENTGROUPS
- this.nsPlacementGroupsHTML(props)
+ this.nsPlacementGroupsHTML(props) : null
}
{
+ true ?
+ // self.props.selectedResourceOrchestrator['ro-account-type'] == 'rift-ro' ?
//VNF PLACEMENTGROUPS
- this.vnfPlacementGroupsHTML(props)
+ this.vnfPlacementGroupsHTML(props) : null
}
{
//VLD CONFIGURATION
}
function addDNS(){}
function removeDNS(){}
+function constructROOptions(resourceOrchestrators){
+ let ROOptions = resourceOrchestrators && resourceOrchestrators.map(function(ro, index) {
+ return {
+ label: ro.name,
+ value: ro
+ }
+ });
+ return ROOptions;
+}
function constructCloudAccountOptions(cloudAccounts){
let CloudAccountOptions = cloudAccounts && cloudAccounts.map(function(ca, index) {
return {
});
return CloudAccountOptions;
}
+function constructDataCenterOptions(dataCenters){
+ let DataCenterOptions = dataCenters && dataCenters.map(function(dc, index) {
+ return {
+ label: dc.name,
+ value: dc.name
+ }
+ });
+ return DataCenterOptions;
+}
function dataCentersHTML(dataCenters, onChange, initial) {
//Build DataCenter options
//Relook at this, why is it an object?
});
if (dataCenters && dataCenters.length > 0) {
return (
- <label>Select Data Center
+ <label>Data Center
<SelectOption initial={!!initial} options={DataCenterOptions} onChange={onChange} />
</label>
)
}
}
-function isOpenMano(account) {
- if (account) {
- let a = account;
- if (a.constructor.name == 'String') {
- a = JSON.parse(a);
- }
- return a['account-type'] == 'openmano';
- } else {
- return false;
- }
-}
function updateNewSshKeyRefSelection(e) {
this.setState({
newRefSelection: e.target.value