ui-modules/location-manager/app/components/location-utils/location-utils.js (194 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import angular from 'angular';
const MODULE_NAME = 'br.utils.location-utils';
angular.module(MODULE_NAME, [])
.provider('locationConfig', locationConfigProvider)
.provider('locationSpec', locationSpecProvider)
.filter('locationIcon', ['locationSpec', locationIconFilter])
.filter('locationName', locationNameFilter)
.filter('locationProviderUrl', ['locationSpec', locationProviderUrlFilter]);
export default MODULE_NAME;
export function locationConfigProvider() {
return {
$get: [LocationConfigFactory]
};
function LocationConfigFactory() {
return {
'minCore': {
description: 'Minimum number of cores for the generated VM',
type: 'number'
},
'minRam': {
description: 'Minimum amount of RAM for the generated VM, e.g. "16 gb"; defaults to "mb" if no units specified',
type: 'text',
},
'osFamily': {
description: 'Operating system to use for the generated VM',
type: 'select',
options: {
'ubuntu': 'Ubuntu',
'centos': 'CentOS',
'redhat': 'Red Hat',
'windows': 'Windows',
}
},
'osVersionRegex': {
description: 'Operating system\'s version to use for the generated VM',
type: 'text'
},
'os64Bit': {
description: 'Use a 64-bit operating system',
type: 'checkbox'
},
'imageId': {
description: 'Image ID to use for the generated VM',
type: 'text'
},
'imageNameRegex': {
description: 'Regular expression to choose an image for the generated VM',
type: 'text'
},
'hardwareId': {
description: 'Hardware ID to use for the generated VM',
type: 'text'
},
'inboundPorts': {
description: 'Ports to open for inbound connections, separated by a comma',
type: 'text'
},
'securityGroups': {
description: 'Security groups to use the generated VM, separated by a comma',
type: 'text'
},
'domainName': {
description: 'Domain name to use for the generated VM',
type: 'text'
},
'userMetadata': {
description: 'Metadata to set on the generated VM',
type: 'text'
},
'machineCreateAttempts': {
description: 'Maximum number of retries when attemting to create a VM',
type: 'number'
},
'destroyOnFailure': {
description: 'Whether or not to destroy the VM if provisioning fails',
type: 'checkbox'
},
'user': {
description: 'Operating user created on provisioned VM',
type: 'text'
},
'password': {
description: 'Operating user\'s password created on provisioned VM',
type: 'password'
},
'loginUser': {
description: 'Initial user to log in as',
type: 'text'
},
'privateKeyFile': {
description: 'Path to private key to use to connect to the provisioned VM',
type: 'text'
},
'privateKeyPassphrase': {
description: 'Passphrase to open the SSH key, used to connect to the provisioned VM',
type: 'text'
},
'publicKeyFile': {
description: 'Path to public key to use to connect to the provisioned VM',
type: 'text'
},
'openIptables': {
description: 'Whether or not automatically configure iptables',
type: 'checkbox'
},
'installDevUrandom': {
description: 'Whether or not install urandom',
type: 'checkbox'
},
'useJcloudsSshInit': {
description: 'Whether or not disable the native jclouds support for initial commands executed on the VM',
type: 'checkbox'
}
};
}
}
export function locationSpecProvider() {
return {
$get: [LocationSpecFactory]
};
function LocationSpecFactory() {
return {
'jclouds:aws-ec2': {
name: 'Amazon EC2',
url: 'https://aws.amazon.com/console/',
icon: require('../../img/location-icons/aws.png')
},
'jclouds:softlayer': {
name: 'Softlayer',
url: 'https://control.softlayer.com/',
icon: require('../../img/location-icons/softlayer.png')
},
'jclouds:google-compute-engine': {
name: 'Google Compute Engine',
url: 'https://console.cloud.google.com/start',
icon: require('../../img/location-icons/jclouds-google-compute-engine.png')
},
'jclouds:openstack-nova': {
name: 'Openstack Nova',
icon: require('../../img/location-icons/jclouds-openstack-nova.png')
},
'jclouds:openstack-mitaka-nova': {
name: 'Openstack Mitaka',
icon: require('../../img/location-icons/jclouds-openstack-nova.png')
},
'jclouds:azurecompute-arm': {
name: 'Microsoft Azure ARM',
url: 'https://portal.azure.com/',
icon: require('../../img/location-icons/azurecompute-arm.png')
},
'jclouds:azurecompute': {
name: 'Microsoft Azure Classic (Deprecated)',
url: 'https://portal.azure.com/',
icon: require('../../img/location-icons/azurecompute.png')
},
'localhost': {
name: 'Localhost',
url: 'https://localhost/',
icon: require('../../img/location-icons/localhost.png')
},
'byon': {
name: 'BYON',
icon: require('../../img/location-icons/byon.png')
}
}
}
}
export function locationIconFilter(locationSpecProvider) {
return function (input) {
if (input.iconUrl) {
return input.iconUrl;
}
if (locationSpecProvider.hasOwnProperty(input.spec) && locationSpecProvider[input.spec].icon) {
return locationSpecProvider[input.spec].icon;
}
return require('../../img/location-icons/cloud.png');
}
}
export function locationNameFilter() {
return function(input) {
if (!input) {
return null;
}
if (input.config && input.config.hasOwnProperty('name')) {
return input.config.name;
}
return input.name ? input.name : input.symbolicName;
}
}
export function locationProviderUrlFilter(locationSpecProvider) {
return function(input) {
return locationSpecProvider.hasOwnProperty(input.spec) ? locationSpecProvider[input.spec].url : '#';
}
}