in client/src/components/pipelines/launch/utilities/get-tool-launching-options.js [58:181]
export default function getToolLaunchingOptions (
stores,
tool,
toolVersion = 'latest'
) {
return new Promise((resolve, reject) => {
const {
awsRegions,
preferences
} = stores || {};
if (!preferences) {
reject(new Error('Error fetching preferences'));
return;
}
if (!awsRegions) {
reject(new Error('Error fetching cloud regions'));
return;
}
const request = new LoadToolVersionSettings(tool.id);
preferences
.fetchIfNeededOrWait()
.then(() => {
if (preferences.error) {
reject(new Error(preferences.error));
} else if (!preferences.loaded) {
reject(new Error('Error fetching preferences'));
} else {
return Promise.resolve();
}
})
.then(() => awsRegions.fetchIfNeededOrWait())
.then(() => {
if (awsRegions.error) {
reject(new Error(awsRegions.error));
} else if (!awsRegions.loaded) {
reject(new Error('Error fetching cloud regions'));
} else {
return Promise.resolve();
}
})
.then(() => request.fetch())
.then(() => {
if (request.error) {
reject(new Error(request.error));
} else if (!request.loaded) {
reject(new Error('Error fetching tool parameters'));
} else {
const options = (request.value || []).slice();
const extractSettings = o => {
if (!o || !o.settings || o.settings.length === 0) {
return undefined;
}
return (
o.settings.find(s => s.default) ||
o.settings[0] ||
{}
).configuration;
};
const latestVersion = extractSettings(options.find(o => o.version === 'latest'));
const currentVersion = extractSettings(options.find(o => o.version === toolVersion));
const versionSettingValue = (settingName) => {
if (currentVersion) {
return currentVersion[settingName];
}
if (latestVersion) {
return latestVersion[settingName];
}
return null;
};
const defaultRegion = (awsRegions.value || []).find(r => r.default) || {};
const cloudRegionIdValue = parameterIsNotEmpty(versionSettingValue('cloudRegionId'))
? versionSettingValue('cloudRegionId')
: defaultRegion.id;
const isSpotValue = parameterIsNotEmpty(versionSettingValue('is_spot'))
? versionSettingValue('is_spot')
: preferences.useSpot;
const allowedInstanceTypesRequest = new AllowedInstanceTypes({
toolId: tool.id,
regionId: cloudRegionIdValue,
spot: isSpotValue
});
allowedInstanceTypesRequest
.fetch()
.then(() => {
const payload = modifyPayloadForAllowedInstanceTypes({
instanceType:
chooseDefaultValue(
versionSettingValue('instance_size'),
tool.instanceType,
preferences.getPreferenceValue('cluster.instance.type')
),
hddSize: +chooseDefaultValue(
versionSettingValue('instance_disk'),
tool.disk,
preferences.getPreferenceValue('cluster.instance.hdd'),
p => +p > 0
),
timeout: +(tool.timeout || 0),
cmdTemplate: chooseDefaultValue(
versionSettingValue('cmd_template'),
tool.defaultCommand,
preferences.getPreferenceValue('launch.cmd.template')
),
dockerImage: tool.registry
? `${tool.registry}/${tool.image}${toolVersion ? `:${toolVersion}` : ''}`
: `${tool.image}${toolVersion ? `:${toolVersion}` : ''}`,
params: parameterIsNotEmpty(versionSettingValue('parameters'))
? prepareParameters(versionSettingValue('parameters'))
: {},
isSpot: isSpotValue,
nodeCount: parameterIsNotEmpty(versionSettingValue('node_count'))
? +versionSettingValue('node_count')
: undefined,
cloudRegionId: cloudRegionIdValue
}, allowedInstanceTypesRequest);
resolve(payload);
})
.catch(reject);
}
})
.catch(reject);
});
}