604 lines
27 KiB
JavaScript
604 lines
27 KiB
JavaScript
(function(angular) {
|
|
'use strict';
|
|
|
|
|
|
// OS::Nova::Server
|
|
|
|
|
|
angular.module('horizon.dashboard.project.heat_dashboard.template_generator').value('osNovaServerSettings',
|
|
{
|
|
resource_key: "OS__Nova__Server",
|
|
admin: false,
|
|
icon: {
|
|
class: 'fa-desktop ',
|
|
name: 'OS::Nova::Server',
|
|
code: '\uf108',
|
|
color: '#483dff'
|
|
},
|
|
label: 'name',
|
|
modal_component: '<os-nova-server instance="resource" dependson="dependson" connectedoptions="connectedoptions" form-reference="resourceForm"></os-nova-server>',
|
|
edge_settings: {
|
|
'OS__Cinder__Volume': {
|
|
'type': 'property',
|
|
'property': 'block_device_mapping_v2.volume_id',
|
|
'limit': 99,
|
|
'occupied': true,
|
|
'lonely': true,
|
|
},
|
|
'OS__Nova__KeyPair': {
|
|
'type': 'property',
|
|
'property': 'key_name',
|
|
'limit': 1,
|
|
},
|
|
'OS__Neutron__Net': {
|
|
'type': 'property',
|
|
'property': 'networks.network',
|
|
'limit': 99,
|
|
},
|
|
'OS__Neutron__FloatingIP': {
|
|
'type': 'property',
|
|
'property': 'networks.floating_ip',
|
|
'limit': 99,
|
|
},
|
|
'OS__Neutron__Subnet': {
|
|
'type': 'property',
|
|
'property': 'networks.subnet',
|
|
'limit': 99,
|
|
},
|
|
'OS__Neutron__Port': {
|
|
'type': 'property',
|
|
'property': 'networks.port',
|
|
'limit': 99,
|
|
},
|
|
'OS__Neutron__SecurityGroup': {
|
|
'type': 'property',
|
|
'property': 'security_groups',
|
|
'limit': 99,
|
|
},
|
|
},
|
|
necessary_properties: {
|
|
'flavor': null
|
|
}
|
|
}
|
|
);
|
|
|
|
angular.module('horizon.dashboard.project.heat_dashboard.template_generator')
|
|
.run(['osNovaServerSettings', 'hotgenGlobals', function(osNovaServerSettings, hotgenGlobals){
|
|
hotgenGlobals.update_resource_icons(
|
|
osNovaServerSettings.resource_key,
|
|
osNovaServerSettings.icon);
|
|
|
|
hotgenGlobals.update_node_labels(
|
|
osNovaServerSettings.resource_key,
|
|
osNovaServerSettings.label);
|
|
|
|
hotgenGlobals.update_resource_components(
|
|
osNovaServerSettings.resource_key,
|
|
osNovaServerSettings.modal_component);
|
|
|
|
// for (var i in osNovaServerSettings.edge_settings){
|
|
// if (osNovaServerSettings.edge_settings[i].modal){
|
|
// hotgenGlobals.update_resource_components(
|
|
// osNovaServerSettings.resource_key+'_'+i,
|
|
// osNovaServerSettings.edge_settings[i].modal);
|
|
// }
|
|
// }
|
|
|
|
hotgenGlobals.update_edge_directions(
|
|
osNovaServerSettings.resource_key,
|
|
osNovaServerSettings.edge_settings);
|
|
|
|
}]);
|
|
|
|
function osNovaServerController($scope, hotgenGlobals, hotgenNotify, hotgenUtils, validationRules) {
|
|
this.$onInit = function(){
|
|
if (typeof this.connectedoptions === 'undefined'){
|
|
$scope.connected_options = []
|
|
} else{
|
|
$scope.connected_options = this.connectedoptions;
|
|
}
|
|
if (typeof this.instance.metadata === 'undefined'){
|
|
this.instance.metadata = [{}];
|
|
}
|
|
if (typeof this.instance.tags === 'undefined'){
|
|
this.instance.tags = [];
|
|
}
|
|
if (typeof this.instance.scheduler_hints === 'undefined'){
|
|
this.instance.scheduler_hints = [{}];
|
|
}
|
|
if (typeof this.instance.personality === 'undefined'){
|
|
this.instance.personality = [{}];
|
|
}
|
|
if (typeof this.instance.block_device_mapping === 'undefined'){
|
|
this.instance.block_device_mapping = [];
|
|
}
|
|
if (typeof this.instance.security_groups === 'undefined'){
|
|
this.instance.security_groups = [];
|
|
}
|
|
if (typeof this.instance.block_device_mapping_v2 === 'undefined'){
|
|
this.instance.block_device_mapping_v2 = [];
|
|
}
|
|
if (typeof this.instance.networks === 'undefined'){
|
|
this.instance.networks = [];
|
|
}
|
|
|
|
this.disable = {
|
|
'key_name': false,
|
|
'security_groups': [],
|
|
'block_device_mapping_v2.volume_id': [],
|
|
'networks': {},
|
|
}
|
|
|
|
if (this.instance.image){
|
|
$scope.boot_source = 'image';
|
|
} else if (this.instance.image_snapshot){
|
|
$scope.boot_source = 'image_snapshot';
|
|
} else if (this.instance.volume){
|
|
$scope.boot_source = 'volume';
|
|
} else if (this.instance.volume_snapshot){
|
|
$scope.boot_source = 'volume_snapshot';
|
|
}
|
|
|
|
if ( $scope.connected_options.key_name && $scope.connected_options.key_name.length > 0){
|
|
this.instance['key_name'] = $scope.connected_options.key_name[0].value;
|
|
this.disable.key_name = true;
|
|
}
|
|
|
|
var old_array = hotgenUtils.filter_and_return_get_resource_element(this.instance['security_groups']);
|
|
if ( $scope.connected_options.security_groups && $scope.connected_options.security_groups.length > 0){
|
|
for (var idx in $scope.connected_options.security_groups){
|
|
this.instance['security_groups'].push($scope.connected_options.security_groups[idx].value);
|
|
this.disable.security_groups.push($scope.connected_options.security_groups[idx].value);
|
|
}
|
|
}
|
|
|
|
var old_array = hotgenUtils.filter_and_return_get_resource_element(this.instance['block_device_mapping_v2'], 'volume_id');
|
|
var exist_volume_map = {}
|
|
for (var idx in old_array){
|
|
if (old_array[idx].volume_id && old_array[idx].volume_id.length > 0 ){
|
|
exist_volume_map[old_array[idx].volume_id] = old_array[idx];
|
|
}
|
|
}
|
|
this.disable.length = 0;
|
|
$scope.bdpv2_source = {};
|
|
if ( $scope.connected_options['block_device_mapping_v2.volume_id'] && $scope.connected_options['block_device_mapping_v2.volume_id'].length > 0){
|
|
for (var idx in $scope.connected_options['block_device_mapping_v2.volume_id']){
|
|
var connected_vol_id = $scope.connected_options['block_device_mapping_v2.volume_id'][idx].value;
|
|
var item = exist_volume_map[connected_vol_id];
|
|
if (item == null){
|
|
item = {volume_id: connected_vol_id}
|
|
}
|
|
this.instance.block_device_mapping_v2.push(item);
|
|
this.disable['block_device_mapping_v2.volume_id'].push(connected_vol_id);
|
|
}
|
|
}
|
|
for (var idx in this.instance.block_device_mapping_v2){
|
|
var disk = this.instance.block_device_mapping_v2[idx];
|
|
var source = '';
|
|
if (disk.volume_id && disk.volume_id != '') {
|
|
source = 'volume';
|
|
} else if (disk.image && disk.image != '') {
|
|
source = 'image';
|
|
} else if (disk.snapshot_id && disk.snapshot_id != '') {
|
|
source = 'volume_snapshot';
|
|
}
|
|
$scope.bdpv2_source[idx.toString()] = source;
|
|
}
|
|
|
|
var old_net_array = hotgenUtils.filter_and_return_get_resource_element(this.instance['networks'], 'network');
|
|
var exist_network_map = {}
|
|
for (var idx in old_net_array){
|
|
if (old_net_array[idx].network && old_net_array[idx].network.length > 0 ){
|
|
exist_network_map[old_net_array[idx].network] = old_net_array[idx];
|
|
}
|
|
}
|
|
|
|
var old_subnet_array = hotgenUtils.filter_and_return_get_resource_element(this.instance['networks'], 'subnet');
|
|
var exist_subnet_map = {}
|
|
for (var idx in old_subnet_array){
|
|
if (old_subnet_array[idx].subnet && old_subnet_array[idx].subnet.length > 0 ){
|
|
exist_subnet_map[old_subnet_array[idx].subnet] = old_subnet_array[idx];
|
|
}
|
|
}
|
|
|
|
var old_port_array = hotgenUtils.filter_and_return_get_resource_element(this.instance['networks'], 'port');
|
|
var exist_port_map = {}
|
|
for (var idx in old_port_array){
|
|
if (old_port_array[idx].port && old_port_array[idx].port.length > 0 ){
|
|
exist_port_map[old_port_array[idx].port] = old_port_array[idx];
|
|
}
|
|
}
|
|
|
|
var old_fip_array = hotgenUtils.filter_and_return_get_resource_element(this.instance['networks'], 'floating_ip');
|
|
var exist_fip_map = {}
|
|
for (var idx in old_fip_array){
|
|
if (old_fip_array[idx].floating_ip && old_fip_array[idx].floating_ip.length > 0 ){
|
|
exist_fip_map[old_fip_array[idx].floating_ip] = old_fip_array[idx];
|
|
}
|
|
}
|
|
|
|
if ( $scope.connected_options['networks.network'] && $scope.connected_options['networks.network'].length > 0){
|
|
for (var idx in $scope.connected_options['networks.network']){
|
|
var connected_nw_id = $scope.connected_options['networks.network'][idx].value;
|
|
var item = exist_network_map[connected_nw_id];
|
|
if (item == null){
|
|
item = {network: connected_nw_id}
|
|
}
|
|
this.disable.networks[this.instance.networks.length.toString()] = true;
|
|
$scope.how2config_networks[this.instance.networks.length.toString()] = 'network';
|
|
this.instance.networks.push(item);
|
|
}
|
|
}
|
|
|
|
if ( $scope.connected_options['networks.subnet'] && $scope.connected_options['networks.subnet'].length > 0){
|
|
for (var idx in $scope.connected_options['networks.subnet']){
|
|
var connected_subnet_id = $scope.connected_options['networks.subnet'][idx].value;
|
|
var item = exist_subnet_map[connected_subnet_id];
|
|
if (item == null){
|
|
item = {subnet: connected_subnet_id}
|
|
}
|
|
this.disable.networks[this.instance.networks.length] = true;
|
|
$scope.how2config_networks[this.instance.networks.length.toString()] = 'subnet';
|
|
this.instance.networks.push(item);
|
|
}
|
|
}
|
|
|
|
if ( $scope.connected_options['networks.port'] && $scope.connected_options['networks.port'].length > 0){
|
|
for (var idx in $scope.connected_options['networks.port']){
|
|
var connected_port_id = $scope.connected_options['networks.port'][idx].value;
|
|
var item = exist_port_map[connected_port_id];
|
|
if (item == null){
|
|
item = {port: connected_port_id}
|
|
}
|
|
this.disable.networks[this.instance.networks.length] = true;
|
|
$scope.how2config_networks[this.instance.networks.length.toString()] = 'port';
|
|
this.instance.networks.push(item);
|
|
}
|
|
}
|
|
|
|
|
|
if ( $scope.connected_options['networks.floating_ip'] && $scope.connected_options['networks.floating_ip'].length > 0){
|
|
for (var idx in $scope.connected_options['networks.floating_ip']){
|
|
var connected_fip_id = $scope.connected_options['networks.floating_ip'][idx].value;
|
|
var item = exist_fip_map[connected_fip_id];
|
|
if (item == null){
|
|
item = {floating_ip: connected_fip_id}
|
|
}
|
|
this.disable.networks[this.instance.networks.length] = true;
|
|
$scope.how2config_networks[this.instance.networks.length.toString()] = 'floating_ip';
|
|
this.instance.networks.push(item);
|
|
}
|
|
}
|
|
for (var idx in this.instance.networks){
|
|
var netconfig = this.instance.networks[idx];
|
|
var source = '';
|
|
if (netconfig.network && netconfig.network != '') {
|
|
source = 'network';
|
|
} else if (netconfig.subnet && netconfig.subnet != '') {
|
|
source = 'subnet';
|
|
} else if (netconfig.port && netconfig.port != '') {
|
|
source = 'port';
|
|
} else if (netconfig.floating_ip && netconfig.floating_ip != '') {
|
|
source = 'floating_ip';
|
|
}
|
|
$scope.how2config_networks[idx.toString()] = source;
|
|
}
|
|
|
|
$scope.update = {
|
|
keypairs: $scope.get_keypairs_options(),
|
|
networks: $scope.get_networks_options(),
|
|
subnets: $scope.get_subnets_options(),
|
|
floatingips: $scope.get_floatingips_options(),
|
|
ports: $scope.get_ports_options(),
|
|
security_groups: $scope.get_security_groups_options(),
|
|
volumes: $scope.get_volumes_options(),
|
|
}
|
|
|
|
$scope.dependson = this.dependson;
|
|
}
|
|
$scope.show_passwd = false;
|
|
$scope.show_passwd_type = "password";
|
|
$scope.bdpv2_source = {}; // Mark the source selected of every block_device_mapping_v2 item.
|
|
$scope.how2config_networks = {}
|
|
$scope.update_boot_source = function(){
|
|
if ($scope.boot_source == 'image'){
|
|
this.$ctrl.instance.image_snapshot = null;
|
|
this.$ctrl.instance.volume = null;
|
|
this.$ctrl.instance.volume_snapshot = null;
|
|
} else if ($scope.boot_source == 'image_snapshot'){
|
|
this.$ctrl.instance.image = null;
|
|
this.$ctrl.instance.volume = null;
|
|
this.$ctrl.instance.volume_snapshot = null;
|
|
} else if ($scope.boot_source == 'volume'){
|
|
this.$ctrl.instance.image = null;
|
|
this.$ctrl.instance.image_snapshot = null;
|
|
this.$ctrl.instance.volume_snapshot = null;
|
|
} else if ($scope.boot_source == 'volume_snapshot'){
|
|
this.$ctrl.instance.image = null;
|
|
this.$ctrl.instance.image_snapshot = null;
|
|
this.$ctrl.instance.volume = null;
|
|
}
|
|
}
|
|
$scope.update_source = function (index) {
|
|
if ($scope.bdpv2_source[index] == 'volume'){
|
|
this.$ctrl.instance.block_device_mapping_v2[index].image = null;
|
|
this.$ctrl.instance.block_device_mapping_v2[index].snapshot_id = null;
|
|
} else if ($scope.bdpv2_source[index] == 'volume_snapshot'){
|
|
this.$ctrl.instance.block_device_mapping_v2[index].volume_id = null;
|
|
this.$ctrl.instance.block_device_mapping_v2[index].image = null;
|
|
} else if ($scope.bdpv2_source[index] == 'image'){
|
|
this.$ctrl.instance.block_device_mapping_v2[index].volume_id = null;
|
|
this.$ctrl.instance.block_device_mapping_v2[index].snapshot_id = null;
|
|
}
|
|
}
|
|
$scope.update_nwconfig = function (index) {
|
|
if ($scope.how2config_networks[index] == 'network'){
|
|
this.$ctrl.instance.networks[index].subnet = null;
|
|
this.$ctrl.instance.networks[index].port = null;
|
|
this.$ctrl.instance.networks[index].floating_ip = null;
|
|
} else if ($scope.how2config_networks[index] == 'subnet'){
|
|
this.$ctrl.instance.networks[index].network = null;
|
|
this.$ctrl.instance.networks[index].port = null;
|
|
this.$ctrl.instance.networks[index].floating_ip = null;
|
|
} else if ($scope.how2config_networks[index] == 'port'){
|
|
this.$ctrl.instance.networks[index].subnet = null;
|
|
this.$ctrl.instance.networks[index].network = null;
|
|
this.$ctrl.instance.networks[index].floating_ip = null;
|
|
} else if ($scope.how2config_networks[index] == 'floating_ip'){
|
|
this.$ctrl.instance.networks[index].subnet = null;
|
|
this.$ctrl.instance.networks[index].port = null;
|
|
this.$ctrl.instance.networks[index].network = null;
|
|
}
|
|
}
|
|
$scope.$watch("show_passwd", function(newValue, oldValue) {
|
|
$scope.show_passwd_type = $scope.show_passwd ? "text" : "password";
|
|
});
|
|
|
|
|
|
$scope.options = hotgenGlobals.get_resource_options();
|
|
|
|
$scope.get_security_groups_options = function(){
|
|
if ('security_groups' in $scope.connected_options){
|
|
var resource_secgroups = [];
|
|
for (var idx in $scope.connected_options.security_groups){
|
|
var item = $scope.connected_options.security_groups[idx];
|
|
resource_secgroups.push({
|
|
id: item.value,
|
|
name: item.value
|
|
})
|
|
}
|
|
return $scope.options.security_groups.concat(resource_secgroups);
|
|
}
|
|
return $scope.options.security_groups;
|
|
}
|
|
|
|
$scope.get_volumes_options = function(){
|
|
if ('block_device_mapping_v2.volume_id' in $scope.connected_options){
|
|
var resource_volumes = [];
|
|
for (var idx in $scope.connected_options['block_device_mapping_v2.volume_id']){
|
|
var item = $scope.connected_options['block_device_mapping_v2.volume_id'][idx];
|
|
resource_volumes.push({
|
|
id: item.value,
|
|
name: item.value
|
|
})
|
|
}
|
|
return $scope.options.volumes.concat(resource_volumes);
|
|
}
|
|
return $scope.options.volumes;
|
|
}
|
|
|
|
$scope.get_keypairs_options = function(){
|
|
if ('key_name' in $scope.connected_options){
|
|
var resource_keypair = [];
|
|
for (var idx in $scope.connected_options.key_name){
|
|
var item = $scope.connected_options.key_name[idx];
|
|
resource_keypair.push({
|
|
name: item.value
|
|
})
|
|
}
|
|
return $scope.options.keypairs.concat(resource_keypair);
|
|
}
|
|
return $scope.options.keypairs;
|
|
}
|
|
|
|
$scope.get_networks_options = function(){
|
|
if ('networks.network' in $scope.connected_options){
|
|
var resource_nw = [];
|
|
for (var idx in $scope.connected_options['networks.network']){
|
|
var item = $scope.connected_options['networks.network'][idx];
|
|
resource_nw.push({
|
|
id: item.value,
|
|
name: item.value
|
|
})
|
|
}
|
|
return $scope.options.networks.concat(resource_nw);
|
|
}
|
|
return $scope.options.networks;
|
|
}
|
|
$scope.get_subnets_options = function(){
|
|
if ('networks.subnet' in $scope.connected_options){
|
|
var resource_subnet = [];
|
|
for (var idx in $scope.connected_options['networks.subnet']){
|
|
var item = $scope.connected_options['networks.subnet'][idx];
|
|
resource_subnet.push({
|
|
id: item.value,
|
|
name: item.value
|
|
})
|
|
}
|
|
return $scope.options.subnets.concat(resource_subnet);
|
|
}
|
|
return $scope.options.subnets;
|
|
}
|
|
$scope.get_floatingips_options = function(){
|
|
if ('networks.floating_ip' in $scope.connected_options){
|
|
var resource_fip = [];
|
|
for (var idx in $scope.connected_options['networks.floating_ip']){
|
|
var item = $scope.connected_options['networks.floating_ip'][idx];
|
|
resource_fip.push({
|
|
id: item.value,
|
|
})
|
|
}
|
|
return $scope.options.floatingips.concat(resource_fip);
|
|
}
|
|
return $scope.options.floatingips;
|
|
}
|
|
$scope.get_ports_options = function(){
|
|
if ('networks.port' in $scope.connected_options){
|
|
var resource_port = [];
|
|
for (var idx in $scope.connected_options['networks.port']){
|
|
var item = $scope.connected_options['networks.port'][idx];
|
|
resource_port.push({
|
|
id: item.value,
|
|
name: item.value
|
|
})
|
|
}
|
|
return $scope.options.ports.concat(resource_port);
|
|
}
|
|
return $scope.options.ports;
|
|
}
|
|
|
|
$scope.block_device_mapping_v2 = true;
|
|
$scope.deployment_swift_data = {};
|
|
$scope.show_more = false;
|
|
|
|
$scope.options.boot_sources = [
|
|
{'id': 'image', 'name': 'image'},
|
|
{'id': 'image_snapshot', 'name': 'image snapshot'},
|
|
{'id': 'volume', 'name': 'volume'},
|
|
{'id': 'volume_snapshot', 'name': 'volume snapshot'}
|
|
];
|
|
$scope.options.volume_sources = [
|
|
{'id': 'volume', 'name': 'volume'},
|
|
{'id': 'volume_snapshot', 'name': 'volume snapshot'}
|
|
];
|
|
$scope.options.volume_sources_v2 = [
|
|
{'id': 'image', 'name': 'image'},
|
|
{'id': 'volume', 'name': 'volume'},
|
|
{'id': 'volume_snapshot', 'name': 'volume snapshot'}
|
|
];
|
|
|
|
$scope.options.flavor_update_policies = [
|
|
{'name': 'RESIZE', 'default': true},
|
|
{'name': 'REPLACE'},
|
|
];
|
|
$scope.options.image_update_policies = [
|
|
{'name': 'REBUILD', 'default': true},
|
|
{'name': 'REPLACE'},
|
|
{'name': 'REBUILD_PRESERVE_EPHEMERAL'},
|
|
];
|
|
$scope.options.disk_configs = [
|
|
{'name': 'AUTO', 'default': true},
|
|
{'name': 'MANUAL'},
|
|
];
|
|
$scope.options.software_config_transports = [
|
|
{'name': 'POLL_SERVER_CFN', 'default': true},
|
|
{'name': 'POLL_SERVER_HEAT'},
|
|
{'name': 'POLL_TEMP_URL'},
|
|
{'name': 'ZAQAR_MESSAGE'},
|
|
];
|
|
$scope.options.user_data_update_policies = [
|
|
{'name': 'REPLACE', 'default': true},
|
|
{'name': 'IGNORE'},
|
|
];
|
|
$scope.options.user_data_formats = [
|
|
{'name': 'HEAT_CFNTOOLS', 'default': true},
|
|
{'name': 'RAW'},
|
|
{'name': 'SOFTWARE_CONFIG'}
|
|
];
|
|
$scope.options.disk_types = [
|
|
{'name': 'disk'},
|
|
{'name': 'cdrom'},
|
|
]
|
|
$scope.options.disk_buses = [
|
|
{'name': 'ide'},
|
|
{'name': 'lame_bus'},
|
|
{'name': 'scsi'},
|
|
{'name': 'usb'},
|
|
{'name': 'virtio'},
|
|
];
|
|
$scope.options.ephemeral_formats = [
|
|
{'name': 'ext2'},
|
|
{'name': 'ext3'},
|
|
{'name': 'ext4'},
|
|
{'name': 'xfs'},
|
|
{'name': 'ntfs'},
|
|
];
|
|
$scope.options.allocate_networks = [{'name': 'none'}, {'name': 'auto'}];
|
|
|
|
$scope.validate_name = validationRules['name'];
|
|
$scope.validate_ip_address = validationRules['ip_address'];
|
|
$scope.validate_uuid4 = validationRules['uuid4'];
|
|
|
|
|
|
this.delete_metadata = function(index){
|
|
this.instance.metadata.splice(index, 1)
|
|
}
|
|
this.add_metadata = function(){
|
|
this.instance.metadata.push({})
|
|
}
|
|
this.delete_personality = function(index){
|
|
this.instance.personality.splice(index, 1)
|
|
}
|
|
this.add_personality = function(){
|
|
this.instance.personality.push({})
|
|
}
|
|
this.delete_block_device_mapping = function(index){
|
|
this.instance.block_device_mapping.splice(index, 1)
|
|
}
|
|
this.add_block_device_mapping = function(){
|
|
this.instance.block_device_mapping.push({})
|
|
}
|
|
this.delete_block_device_mapping_v2 = function(index){
|
|
for (var i = index; i <= this.instance.block_device_mapping_v2.length; i=i+1){
|
|
$scope.bdpv2_source[i] = $scope.bdpv2_source[i+1];
|
|
}
|
|
this.instance.block_device_mapping_v2.splice(index, 1)
|
|
}
|
|
this.add_block_device_mapping_v2 = function(){
|
|
this.instance.block_device_mapping_v2.push({})
|
|
}
|
|
this.delete_networks = function(index){
|
|
for (var i = index; i < this.instance.networks.length; i=i+1){
|
|
$scope.how2config_networks[i] = $scope.how2config_networks[i+1];
|
|
}
|
|
delete $scope.how2config_networks[this.instance.networks.length];
|
|
this.instance.networks.splice(index, 1);
|
|
for (var i = index; i < this.instance.networks.length; i=i+1){
|
|
this.disable.networks[i] = this.disable.networks[i+1];
|
|
}
|
|
delete this.disable.networks[this.instance.networks.length];
|
|
}
|
|
this.add_networks = function(){
|
|
this.instance.networks.push({})
|
|
}
|
|
this.delete_scheduler_hints = function(index){
|
|
this.instance.scheduler_hints.splice(index, 1)
|
|
}
|
|
this.add_scheduler_hints= function(){
|
|
this.instance.scheduler_hints.push({})
|
|
}
|
|
}
|
|
|
|
osNovaServerController.$inject = ['$scope', 'hotgenGlobals', 'hotgenNotify', 'hotgenUtils',
|
|
'horizon.dashboard.project.heat_dashboard.template_generator.validationRules',
|
|
];
|
|
osNovaServerPath.$inject = ['horizon.dashboard.project.heat_dashboard.template_generator.basePath'];
|
|
|
|
|
|
function osNovaServerPath(basePath){
|
|
return basePath + 'js/resources/os__nova__server/os__nova__server.html';
|
|
}
|
|
|
|
angular.module('horizon.dashboard.project.heat_dashboard.template_generator').component('osNovaServer', {
|
|
templateUrl: osNovaServerPath,
|
|
controller: osNovaServerController,
|
|
bindings:{
|
|
'instance': '=',
|
|
'dependson': '=',
|
|
'connectedoptions': '<',
|
|
'formReference': '<',
|
|
}
|
|
});
|
|
|
|
})(window.angular);
|