staypuft 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|