staypuft 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/app/assets/javascripts/staypuft/new_subnet.js +9 -0
- data/app/assets/javascripts/staypuft/staypuft.js +39 -0
- data/app/assets/javascripts/staypuft/subnets_assignment.js +5 -1
- data/app/controllers/staypuft/concerns/hosts_api_extensions.rb +18 -0
- data/app/controllers/staypuft/concerns/hosts_controller_extensions.rb +38 -0
- data/app/controllers/staypuft/subnets_controller.rb +25 -0
- data/app/lib/staypuft/seeder.rb +71 -19
- data/app/models/staypuft/deployment.rb +11 -2
- data/app/models/staypuft/deployment/cinder_service.rb +1 -1
- data/app/models/staypuft/deployment/cinder_service/equallogic.rb +1 -23
- data/app/models/staypuft/deployment/ip_address_validator.rb +30 -0
- data/app/models/staypuft/deployment/neutron_service.rb +55 -9
- data/app/models/staypuft/deployment/neutron_service/cisconexus.rb +1 -12
- data/app/models/staypuft/simple_subnet.rb +115 -0
- data/app/overrides/foreman_hosts_edit.rb +13 -0
- data/app/overrides/select_multiple_systems_hostgroup.rb +15 -0
- data/app/views/staypuft/steps/_neutron.html.erb +35 -22
- data/app/views/staypuft/steps/deployment_settings.html.erb +2 -0
- data/app/views/staypuft/steps/network_configuration.html.erb +28 -1
- data/app/views/staypuft/subnets/_form.html.erb +24 -0
- data/app/views/staypuft/subnets/create.js.erb +14 -0
- data/app/views/staypuft/subnets/new.html.erb +3 -0
- data/config/routes.rb +4 -0
- data/db/migrate/20141009064907_add_custom_repos_to_deployment.rb +5 -0
- data/lib/staypuft/engine.rb +5 -2
- data/lib/staypuft/version.rb +1 -1
- metadata +151 -140
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NDI4ZGUzMDk5ZjA2ZDgyODNkYTFjMzgxNGI3MzhmNDhkOGZmM2ZhMA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OWYwYTdhNDhkYmZjMGVjNmUzMmM5YjM5NWViNDkxNDNkMDA1OWM1Mw==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OWYyNmY4NThhYzU4NmNiNmY4MTcyOGY3NGE1ZmYzNmE0MTIzYzFjZjU3ZDE3
|
10
|
+
OTM5NTU0Nzk2Yjk1Y2JlMGRkZDkwN2YwNDM4NDJhMjQ4NWI4ZjBlNmU2YzBj
|
11
|
+
MzMwNjVjMDllZGUxMzgwNTIzODdiN2Q1ZDUyYzNlNDRhZGQ5ZGI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MjY0ZjVkZjVhNjBhYjVhMjkwMzU3NDdlMWJlMWUyNDFjODE0M2VjNWFhMDE4
|
14
|
+
NTU3NGU3YjdkYzRlMDM5YWVhYzEzMjg3ZWU1M2Q3OTdjNmFkYmMwYTQ5OGRm
|
15
|
+
ZjZhN2I1NjNkODRlMTMwNGQ1OWFmMmJjMjg3ZDBmMzljZGRiYjk=
|
@@ -0,0 +1,9 @@
|
|
1
|
+
var new_subnet = (function() {
|
2
|
+
$('#staypuft_simple_subnet_dhcp_server').on('change', function(event) {
|
3
|
+
if($(event.target).find(":selected").val() == 'none') {
|
4
|
+
$('#no_existing_dhcp_fields').show();
|
5
|
+
} else {
|
6
|
+
$('#no_existing_dhcp_fields').hide();
|
7
|
+
}
|
8
|
+
});
|
9
|
+
});
|
@@ -103,6 +103,30 @@ $(function () {
|
|
103
103
|
}
|
104
104
|
}
|
105
105
|
|
106
|
+
showNeutronMl2Mechanisms();
|
107
|
+
$("input[name='staypuft_deployment[neutron][core_plugin]']").change(showNeutronMl2Mechanisms);
|
108
|
+
function showNeutronMl2Mechanisms() {
|
109
|
+
$('#staypuft_deployment_neutron_core_plugin_ml2').parent().parent().parent().removeClass('col-md-4').addClass('col-md-6')
|
110
|
+
if ($('#staypuft_deployment_neutron_core_plugin_ml2').is(":checked")) {
|
111
|
+
$('#staypuft_deployment_neutron_core_plugin_ml2').parent().after($('.neutron_ml2_mechanisms'));
|
112
|
+
$('.neutron_ml2_mechanisms').fadeIn(duration);
|
113
|
+
} else {
|
114
|
+
$('.neutron_ml2_mechanisms').fadeOut(duration);
|
115
|
+
}
|
116
|
+
}
|
117
|
+
|
118
|
+
showNeutronN1kvParameters();
|
119
|
+
$("input[name='staypuft_deployment[neutron][core_plugin]']").change(showNeutronN1kvParameters);
|
120
|
+
function showNeutronN1kvParameters() {
|
121
|
+
$('#staypuft_deployment_neutron_core_plugin_n1kv').parent().parent().parent().removeClass('col-md-4').addClass('col-md-6')
|
122
|
+
if ($('#staypuft_deployment_neutron_core_plugin_n1kv').is(":checked")) {
|
123
|
+
$('#staypuft_deployment_neutron_core_plugin_n1kv').parent().after($('.neutron_n1kv_parameters'));
|
124
|
+
$('.neutron_n1kv_parameters').fadeIn(duration);
|
125
|
+
} else {
|
126
|
+
$('.neutron_n1kv_parameters').fadeOut(duration);
|
127
|
+
}
|
128
|
+
}
|
129
|
+
|
106
130
|
showNeutronExternalInterface();
|
107
131
|
$("input[name='staypuft_deployment[neutron][use_external_interface]']").change(showNeutronExternalInterface);
|
108
132
|
function showNeutronExternalInterface() {
|
@@ -260,6 +284,21 @@ $(function () {
|
|
260
284
|
})
|
261
285
|
});
|
262
286
|
|
287
|
+
$('#new_subnet_modal').on('shown.bs.modal', function(e) {
|
288
|
+
var height = $(window).height() - 200;
|
289
|
+
$(this).find(".modal-body").css("max-height", height);
|
290
|
+
var to_path = $('#new_subnet_modal').data('path');
|
291
|
+
$.ajax({
|
292
|
+
url: to_path,
|
293
|
+
type: "GET",
|
294
|
+
success: function(data){
|
295
|
+
$('#new_subnet_ajax_content').html(data).promise().done(function(){
|
296
|
+
new_subnet();
|
297
|
+
});
|
298
|
+
}
|
299
|
+
});
|
300
|
+
});
|
301
|
+
|
263
302
|
var scrolled = false;
|
264
303
|
|
265
304
|
$(window).scroll(function(){
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Staypuft::Concerns::HostsApiExtensions
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
prepend_before_filter :check_openstack_hostgroup, only: [:create, :update]
|
6
|
+
end
|
7
|
+
|
8
|
+
def check_openstack_hostgroup
|
9
|
+
if params[:host] and params[:host][:hostgroup_id]
|
10
|
+
hostgroup_id = params[:host][:hostgroup_id]
|
11
|
+
hg = Hostgroup.find(hostgroup_id)
|
12
|
+
if hg.ancestors.include? Hostgroup.get_base_hostgroup
|
13
|
+
Rails.logger.error "Cannot set a deployment hostgroup directly."
|
14
|
+
render :json => {:error => {:message => _('Cannot set a deployment hostgroup directly.') } }, :status => :forbidden
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Staypuft::Concerns::HostsControllerExtensions
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
before_filter :check_openstack_hostgroup, only: [:create, :update]
|
6
|
+
before_filter :check_openstack_hostgroup_multiple, only: [:update_multiple_hostgroup]
|
7
|
+
end
|
8
|
+
|
9
|
+
def check_openstack_hostgroup
|
10
|
+
if params[:host] and params[:host][:hostgroup_id]
|
11
|
+
hostgroup_id = params[:host][:hostgroup_id]
|
12
|
+
if openstack_hostgroup? hostgroup_id
|
13
|
+
Rails.logger.error "Cannot set a deployment hostgroup directly."
|
14
|
+
error _('Invalid host group selected! Cannot select OpenStack deployment host group.')
|
15
|
+
render :action => :edit and return
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def check_openstack_hostgroup_multiple
|
21
|
+
if params["hostgroup"] and params["hostgroup"]["id"]
|
22
|
+
check_hostgroup params["hostgroup"]["id"] do
|
23
|
+
if openstack_hostgroup? hostgroup_id
|
24
|
+
error _('Invalid host group selected! Cannot select OpenStack deployment host group.')
|
25
|
+
redirect_to(select_multiple_hostgroup_hosts_path) and return
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def openstack_hostgroup?(id)
|
33
|
+
hg = Hostgroup.find(id)
|
34
|
+
hg.ancestors.include? Hostgroup.get_base_hostgroup
|
35
|
+
rescue
|
36
|
+
false
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Staypuft
|
2
|
+
class SubnetsController < Staypuft::ApplicationController
|
3
|
+
|
4
|
+
layout false
|
5
|
+
|
6
|
+
before_filter :get_deployment
|
7
|
+
|
8
|
+
def new
|
9
|
+
@simple_subnet = SimpleSubnet.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def create
|
13
|
+
@simple_subnet = SimpleSubnet.new(params[:staypuft_simple_subnet])
|
14
|
+
@simple_subnet.deployment = @deployment
|
15
|
+
@result = @simple_subnet.save
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def get_deployment
|
21
|
+
@deployment = Deployment.find(params[:deployment_id])
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
data/app/lib/staypuft/seeder.rb
CHANGED
@@ -256,6 +256,13 @@ module Staypuft
|
|
256
256
|
network_private_iface = { :string => "<%= @host.network_query.interface_for_host('#{Staypuft::SubnetType::TENANT}') %>" }
|
257
257
|
network_public_iface = { :string => "<%= @host.network_query.interface_for_host('#{Staypuft::SubnetType::EXTERNAL}') %>" }
|
258
258
|
network_create_networks = true
|
259
|
+
nova_conf_additional_params = { :hash => { 'quota_instances' => 'default',
|
260
|
+
'quota_cores' => 'default',
|
261
|
+
'quota_ram' => 'default',
|
262
|
+
'quota_floating_ips' => 'default',
|
263
|
+
'quota_fixed_ips' => 'default',
|
264
|
+
'quota_driver' => 'default' }
|
265
|
+
}
|
259
266
|
|
260
267
|
# Neutron
|
261
268
|
ovs_vlan_ranges = { :array => '<%= @host.deployment.neutron.networker_vlan_ranges %>' }
|
@@ -274,6 +281,17 @@ module Staypuft
|
|
274
281
|
compute_ovs_bridge_mappings = { :array => '<%= @host.deployment.neutron.compute_ovs_bridge_mappings(@host) %>' }
|
275
282
|
compute_ovs_bridge_uplinks = { :array => '<%= @host.deployment.neutron.compute_ovs_bridge_uplinks(@host) %>' }
|
276
283
|
enable_tunneling = { :string => '<%= @host.deployment.neutron.enable_tunneling?.to_s %>' }
|
284
|
+
neutron_core_plugin_module = { :string => '<%= @host.deployment.neutron.core_plugin_module %>' }
|
285
|
+
neutron_agent_type = 'ovs'
|
286
|
+
neutron_security_group_api = 'neutron'
|
287
|
+
neutron_conf_additional_params = { :hash => { 'default_quota' => 'default',
|
288
|
+
'quota_network' => 'default',
|
289
|
+
'quota_subnet' => 'default',
|
290
|
+
'quota_port' => 'default',
|
291
|
+
'quota_security_group' => 'default',
|
292
|
+
'quota_security_group_rule' => 'default',
|
293
|
+
'network_auto_schedule' => 'default' }
|
294
|
+
}
|
277
295
|
|
278
296
|
# Glance
|
279
297
|
backend = { :string => '<%= @host.deployment.glance.backend %>' }
|
@@ -288,17 +306,18 @@ module Staypuft
|
|
288
306
|
# Cinder
|
289
307
|
volume = true
|
290
308
|
cinder_backend_gluster = false
|
291
|
-
cinder_backend_gluster_name = '
|
309
|
+
cinder_backend_gluster_name = 'gluster'
|
292
310
|
cinder_backend_iscsi = { :string => '<%= @host.deployment.cinder.lvm_backend? %>' }
|
293
|
-
cinder_backend_iscsi_name = '
|
311
|
+
cinder_backend_iscsi_name = 'iscsi'
|
294
312
|
cinder_backend_nfs = { :string => '<%= @host.deployment.cinder.nfs_backend? %>' }
|
295
|
-
cinder_backend_nfs_name = '
|
313
|
+
cinder_backend_nfs_name = 'nfs'
|
296
314
|
cinder_multiple_backends = { :string => '<%= @host.deployment.cinder.multiple_backends? %>' }
|
315
|
+
cinder_create_volume_types = true
|
297
316
|
cinder_nfs_shares = ['<%= @host.deployment.cinder.nfs_uri %>']
|
298
317
|
cinder_nfs_mount_options = 'nosharecache'
|
299
318
|
|
300
319
|
cinder_backend_rbd = { :string => '<%= @host.deployment.cinder.ceph_backend? %>' }
|
301
|
-
cinder_backend_rbd_name = '
|
320
|
+
cinder_backend_rbd_name = 'rbd'
|
302
321
|
cinder_rbd_pool = 'volumes'
|
303
322
|
cinder_rbd_ceph_conf = '/etc/ceph/ceph.conf'
|
304
323
|
cinder_rbd_flatten_volume_from_snapshot = 'false'
|
@@ -401,6 +420,18 @@ module Staypuft
|
|
401
420
|
# Cisco Nexus
|
402
421
|
cisco_nexus_config = { :hash => '<%= n = @host.deployment.neutron; (n.active? && n.cisco_nexus_mechanism?) ? n.compute_cisco_nexus_config : {} %>' }
|
403
422
|
|
423
|
+
# Cisco N1KV params
|
424
|
+
n1kv_vsm_ip = { :string => '<%= n = @host.deployment.neutron; (n.active? && n.n1kv_plugin?) ? n.n1kv_vsm_ip : "" %>' }
|
425
|
+
n1kv_vsm_password = { :string => '<%= n = @host.deployment.neutron; (n.active? && n.n1kv_plugin?) ? n.n1kv_vsm_password : "" %>' }
|
426
|
+
n1kv_plugin_additional_params = { :hash => { 'default_policy_profile' => 'default-pp',
|
427
|
+
'network_node_policy_profile' => 'default-pp',
|
428
|
+
'poll_duration' => '10',
|
429
|
+
'http_pool_size' => '4',
|
430
|
+
'http_timeout' => '120',
|
431
|
+
'firewall_driver' => 'neutron.agent.firewall.NoopFirewallDriver',
|
432
|
+
'enable_sync_on_start' => 'True' }
|
433
|
+
}
|
434
|
+
|
404
435
|
{
|
405
436
|
'quickstack::nova_network::controller' => {
|
406
437
|
'amqp_provider' => amqp_provider,
|
@@ -422,6 +453,7 @@ module Staypuft
|
|
422
453
|
'cinder_backend_eqlx' => cinder_backend_eqlx,
|
423
454
|
'cinder_backend_eqlx_name' => cinder_backend_eqlx_name,
|
424
455
|
'cinder_multiple_backends' => cinder_multiple_backends,
|
456
|
+
'cinder_create_volume_types' => cinder_create_volume_types,
|
425
457
|
'cinder_nfs_shares' => cinder_nfs_shares,
|
426
458
|
'cinder_nfs_mount_options' => cinder_nfs_mount_options,
|
427
459
|
'cinder_rbd_pool' => cinder_rbd_pool,
|
@@ -499,6 +531,7 @@ module Staypuft
|
|
499
531
|
'cinder_backend_eqlx' => cinder_backend_eqlx,
|
500
532
|
'cinder_backend_eqlx_name' => cinder_backend_eqlx_name,
|
501
533
|
'cinder_multiple_backends' => cinder_multiple_backends,
|
534
|
+
'cinder_create_volume_types' => cinder_create_volume_types,
|
502
535
|
'cinder_nfs_shares' => cinder_nfs_shares,
|
503
536
|
'cinder_nfs_mount_options' => cinder_nfs_mount_options,
|
504
537
|
'cinder_rbd_pool' => cinder_rbd_pool,
|
@@ -552,7 +585,14 @@ module Staypuft
|
|
552
585
|
'controller_admin_host' => controller_admin_host,
|
553
586
|
'controller_priv_host' => controller_priv_host,
|
554
587
|
'controller_pub_host' => controller_pub_host,
|
555
|
-
'nexus_config' => cisco_nexus_config
|
588
|
+
'nexus_config' => cisco_nexus_config,
|
589
|
+
'neutron_conf_additional_params' => neutron_conf_additional_params,
|
590
|
+
'nova_conf_additional_params' => nova_conf_additional_params,
|
591
|
+
'n1kv_plugin_additional_params' => n1kv_plugin_additional_params,
|
592
|
+
'n1kv_vsm_ip' => n1kv_vsm_ip,
|
593
|
+
'n1kv_vsm_password' => n1kv_vsm_password,
|
594
|
+
'security_group_api' => neutron_security_group_api,
|
595
|
+
'neutron_core_plugin' => neutron_core_plugin_module },
|
556
596
|
'quickstack::pacemaker::params' => {
|
557
597
|
'include_swift' => 'false',
|
558
598
|
'include_neutron' => neutron,
|
@@ -618,7 +658,9 @@ module Staypuft
|
|
618
658
|
'private_ip' => private_ip,
|
619
659
|
'cluster_control_ip' => { :string => "<%= @host.deployment.network_query.controller_ips('#{Staypuft::SubnetType::MANAGEMENT}').first %>" },
|
620
660
|
'lb_backend_server_addrs' => { :array => "<%= @host.deployment.network_query.controller_ips('#{Staypuft::SubnetType::MANAGEMENT}') %>" },
|
621
|
-
'lb_backend_server_names' => { :array => '<%= @host.deployment.network_query.controller_fqdns %>' }
|
661
|
+
'lb_backend_server_names' => { :array => '<%= @host.deployment.network_query.controller_fqdns %>' },
|
662
|
+
'agent_type' => neutron_agent_type,
|
663
|
+
'n1kv_plugin_additional_params' => n1kv_plugin_additional_params },
|
622
664
|
'quickstack::pacemaker::common' => {
|
623
665
|
'pacemaker_cluster_members' => { :string => "<%= @host.deployment.network_query.controller_ips('#{Staypuft::SubnetType::CLUSTER_MGMT}').join(' ') %>" },
|
624
666
|
'fencing_type' => fencing_type,
|
@@ -631,17 +673,24 @@ module Staypuft
|
|
631
673
|
'fence_ipmilan_expose_lanplus' => fence_ipmilan_expose_lanplus,
|
632
674
|
'fence_ipmilan_lanplus_options' => fence_ipmilan_lanplus_options },
|
633
675
|
'quickstack::pacemaker::neutron' => {
|
634
|
-
'ml2_network_vlan_ranges'
|
635
|
-
'ml2_tenant_network_types'
|
636
|
-
'ml2_tunnel_id_ranges'
|
637
|
-
'ml2_mechanism_drivers'
|
638
|
-
'enable_tunneling'
|
639
|
-
'ovs_bridge_mappings'
|
640
|
-
'ovs_bridge_uplinks'
|
641
|
-
'ovs_tunnel_iface'
|
642
|
-
'ovs_tunnel_types'
|
643
|
-
'ovs_vlan_ranges'
|
644
|
-
'nexus_config'
|
676
|
+
'ml2_network_vlan_ranges' => ml2_network_vlan_ranges,
|
677
|
+
'ml2_tenant_network_types' => ml2_tenant_network_types,
|
678
|
+
'ml2_tunnel_id_ranges' => ml2_tunnel_id_ranges,
|
679
|
+
'ml2_mechanism_drivers' => ml2_mechanism_drivers,
|
680
|
+
'enable_tunneling' => enable_tunneling,
|
681
|
+
'ovs_bridge_mappings' => ovs_bridge_mappings,
|
682
|
+
'ovs_bridge_uplinks' => ovs_bridge_uplinks,
|
683
|
+
'ovs_tunnel_iface' => ovs_tunnel_iface,
|
684
|
+
'ovs_tunnel_types' => ovs_tunnel_types,
|
685
|
+
'ovs_vlan_ranges' => ovs_vlan_ranges,
|
686
|
+
'nexus_config' => cisco_nexus_config,
|
687
|
+
'core_plugin' => neutron_core_plugin_module,
|
688
|
+
'neutron_conf_additional_params' => neutron_conf_additional_params,
|
689
|
+
'nova_conf_additional_params' => nova_conf_additional_params,
|
690
|
+
'n1kv_plugin_additional_params' => n1kv_plugin_additional_params,
|
691
|
+
'n1kv_vsm_ip' => n1kv_vsm_ip,
|
692
|
+
'n1kv_vsm_password' => n1kv_vsm_password,
|
693
|
+
'security_group_api' => neutron_security_group_api },
|
645
694
|
'quickstack::pacemaker::glance' => {
|
646
695
|
'backend' => backend,
|
647
696
|
'pcmk_fs_type' => pcmk_fs_type,
|
@@ -705,7 +754,8 @@ module Staypuft
|
|
705
754
|
'neutron_metadata_proxy_secret' => neutron_metadata_proxy_secret,
|
706
755
|
'amqp_host' => amqp_host,
|
707
756
|
'mysql_host' => mysql_host,
|
708
|
-
'controller_priv_host' => controller_priv_host
|
757
|
+
'controller_priv_host' => controller_priv_host,
|
758
|
+
'agent_type' => neutron_agent_type },
|
709
759
|
'quickstack::storage_backend::cinder' => {
|
710
760
|
'amqp_provider' => amqp_provider,
|
711
761
|
'cinder_db_password' => cinder_db_pw,
|
@@ -782,7 +832,9 @@ module Staypuft
|
|
782
832
|
'auth_host' => auth_host,
|
783
833
|
'neutron_host' => neutron_host,
|
784
834
|
'nova_host' => nova_host,
|
785
|
-
'private_ip' => private_ip
|
835
|
+
'private_ip' => private_ip,
|
836
|
+
'agent_type' => neutron_agent_type,
|
837
|
+
'security_group_api' => neutron_security_group_api },
|
786
838
|
'quickstack::pacemaker::rsync::keystone' => {
|
787
839
|
'keystone_private_vip' => vip_format(:keystone) },
|
788
840
|
'quickstack::ceph::config' => {
|
@@ -16,7 +16,8 @@ module Staypuft
|
|
16
16
|
EXPORT_SERVICES = [:nova, :neutron, :glance, :cinder, :passwords, :ceph]
|
17
17
|
|
18
18
|
attr_accessible :description, :name, :layout_id, :layout,
|
19
|
-
:amqp_provider, :layout_name, :networking, :platform
|
19
|
+
:amqp_provider, :layout_name, :networking, :platform,
|
20
|
+
:custom_repos
|
20
21
|
after_save :update_hostgroup_name
|
21
22
|
after_validation :check_form_complete
|
22
23
|
|
@@ -198,7 +199,7 @@ module Staypuft
|
|
198
199
|
class Jail < Safemode::Jail
|
199
200
|
allow :amqp_provider, :networking, :layout_name, :platform, :nova_networking?, :neutron_networking?,
|
200
201
|
:nova, :neutron, :glance, :cinder, :passwords, :ceph, :ha?, :non_ha?,
|
201
|
-
:hide_ceph_notification?, :network_query
|
202
|
+
:hide_ceph_notification?, :network_query, :has_custom_repos?, :custom_repos_paths
|
202
203
|
end
|
203
204
|
|
204
205
|
# TODO(mtaylor)
|
@@ -288,6 +289,14 @@ module Staypuft
|
|
288
289
|
@network_query || NetworkQuery.new(self)
|
289
290
|
end
|
290
291
|
|
292
|
+
def has_custom_repos?
|
293
|
+
self.custom_repos.present?
|
294
|
+
end
|
295
|
+
|
296
|
+
def custom_repos_paths
|
297
|
+
self.custom_repos.split("\n")
|
298
|
+
end
|
299
|
+
|
291
300
|
private
|
292
301
|
|
293
302
|
def update_layout
|
@@ -37,29 +37,7 @@ module Staypuft
|
|
37
37
|
end
|
38
38
|
|
39
39
|
class SanIpValueValidator < ActiveModel::EachValidator
|
40
|
-
|
41
|
-
return if value.empty?
|
42
|
-
|
43
|
-
begin
|
44
|
-
ip_addr = IPAddr.new(value)
|
45
|
-
ip_range = ip_addr.to_range
|
46
|
-
if ip_range.begin == ip_range.end
|
47
|
-
true
|
48
|
-
else
|
49
|
-
record.errors.add attribute, "Specify single IP address, not range"
|
50
|
-
false
|
51
|
-
end
|
52
|
-
rescue
|
53
|
-
# not IP addr
|
54
|
-
# validating as fqdn
|
55
|
-
if /(?=^.{1,254}$)(^(((?!-)[a-zA-Z0-9-]{1,63}(?<!-))|((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63})$)/ =~ value
|
56
|
-
true
|
57
|
-
else
|
58
|
-
record.errors.add attribute, "Invalid IP address or FQDN supplied"
|
59
|
-
false
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
40
|
+
include Staypuft::Deployment::IpAddressValidator
|
63
41
|
end
|
64
42
|
|
65
43
|
validates :san_ip,
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Staypuft
|
2
|
+
module Deployment::IpAddressValidator
|
3
|
+
NOT_RANGE_MSG = N_("Specify single IP address, not range")
|
4
|
+
INVALID_IP_OR_FQDN_MSG = N_("Invalid IP address or FQDN supplied")
|
5
|
+
|
6
|
+
def validate_each(record, attribute, value)
|
7
|
+
return if value.empty?
|
8
|
+
|
9
|
+
begin
|
10
|
+
ip_addr = IPAddr.new(value)
|
11
|
+
ip_range = ip_addr.to_range
|
12
|
+
if ip_range.begin == ip_range.end
|
13
|
+
true
|
14
|
+
else
|
15
|
+
record.errors.add attribute, NOT_RANGE_MSG
|
16
|
+
false
|
17
|
+
end
|
18
|
+
rescue
|
19
|
+
# not IP addr
|
20
|
+
# validating as fqdn
|
21
|
+
if /(?=^.{1,254}$)(^(((?!-)[a-zA-Z0-9-]{1,63}(?<!-))|((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63})$)/ =~ value
|
22
|
+
true
|
23
|
+
else
|
24
|
+
record.errors.add attribute, INVALID_IP_OR_FQDN_MSG
|
25
|
+
false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|