staypuft 0.1.7 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/assets/javascripts/staypuft/staypuft.js +1 -12
- data/app/assets/stylesheets/staypuft/bootstrap_and_overrides.css.scss +1 -2
- data/app/assets/stylesheets/staypuft/staypuft.css.scss +44 -2
- data/app/controllers/staypuft/deployments_controller.rb +21 -10
- data/app/helpers/staypuft/application_helper.rb +5 -0
- data/app/lib/staypuft/seeder.rb +47 -11
- data/app/models/staypuft/concerns/host_open_stack_affiliation.rb +4 -0
- data/app/models/staypuft/concerns/lookup_key_extensions.rb +20 -3
- data/app/models/staypuft/deployment/cinder_service.rb +7 -3
- data/app/models/staypuft/deployment/glance_service.rb +7 -1
- data/app/models/staypuft/deployment/ips.rb +4 -0
- data/app/models/staypuft/deployment/neutron_service.rb +8 -28
- data/app/models/staypuft/deployment/nova_service.rb +11 -1
- data/app/models/staypuft/deployment/passwords.rb +5 -0
- data/app/models/staypuft/deployment/vips.rb +4 -0
- data/app/models/staypuft/deployment.rb +15 -2
- data/app/views/staypuft/deployments/edit.html.erb +2 -2
- data/app/views/staypuft/deployments/show.html.erb +10 -16
- data/app/views/staypuft/deployments/summary.html.erb +14 -7
- data/app/views/staypuft/layouts/application.html.erb +44 -0
- data/app/views/staypuft/layouts/staypuft.html.erb +1 -1
- data/app/views/staypuft/steps/_neutron.html.erb +0 -12
- data/lib/staypuft/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NTQzMDU0YjdiZTZhMzFmNWMyZWQ1OWMyZjBlZjcyNDliYTRjZThmNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NTlhODNjYjdjYTY1ZDdhMDIyMGRlYWE3ZDc1NjQxMTY0YTJiZWNkMg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
N2EzOWE0ZTE0MWI4MTk4MjI3MDM2NzA1MDlhZjdhMWVkNzZmMzQzZTQyNDA3
|
10
|
+
ZTMxODUzMGI4NGRlMmM3OTdjYTBiYTgxY2NhNTM1NWU4MzM5NTE2M2IyN2Uy
|
11
|
+
YmYwYTkxYWYzMTI3MDFlMzhjN2FiMDVlZDNmZjZiMTgxODM2MTQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MmFmY2FmODIwM2VlYjgwYTQxZmVkNzk5NzNmYTJlZTU4OTFjM2EwMjgzYmNh
|
14
|
+
YWVmODRkNWVmZWJiNzI2ZjBiMzMwNmFkNTdkYmE0Yjg4YzI4OWE3ZDliOTk4
|
15
|
+
ZTdmMmNkN2RkYjBmZTQ1MDE3MjU4ODRhYjViODhhODM3NThiZDI=
|
@@ -40,7 +40,7 @@ $(function () {
|
|
40
40
|
$('.tabbed_side_nav_table').on('click', 'button.close', function() {
|
41
41
|
$(this).closest('.tab-pane.active').removeClass('active');
|
42
42
|
$(this).closest('.tabbed_side_nav_table').find('.activated').removeClass('activated');
|
43
|
-
})
|
43
|
+
});
|
44
44
|
|
45
45
|
var duration = 150;
|
46
46
|
|
@@ -88,17 +88,6 @@ $(function () {
|
|
88
88
|
}
|
89
89
|
}
|
90
90
|
|
91
|
-
showNeutronExternalVlan();
|
92
|
-
$("input[name='staypuft_deployment[neutron][use_vlan_for_external_network]']").change(showNeutronExternalVlan);
|
93
|
-
function showNeutronExternalVlan() {
|
94
|
-
if ($('#staypuft_deployment_neutron_use_vlan_for_external_network').is(":checked")) {
|
95
|
-
$('.neutron_external_vlan').fadeIn(duration);
|
96
|
-
}
|
97
|
-
else {
|
98
|
-
$('.neutron_external_vlan').fadeOut(duration)
|
99
|
-
}
|
100
|
-
}
|
101
|
-
|
102
91
|
showGlanceNfsNetworkPath();
|
103
92
|
$("input[name='staypuft_deployment[glance][driver_backend]']").change(showGlanceNfsNetworkPath);
|
104
93
|
function showGlanceNfsNetworkPath() {
|
@@ -9,10 +9,52 @@
|
|
9
9
|
* compiled file, but it's generally better to create a new file per style scope.
|
10
10
|
*
|
11
11
|
*= require_self
|
12
|
-
*= require_tree .
|
13
12
|
*/
|
14
13
|
|
15
|
-
|
14
|
+
@import "bootstrap_and_overrides";
|
15
|
+
@import "bootstrap/buttons";
|
16
|
+
@import "bootstrap/forms";
|
17
|
+
|
18
|
+
.top_actions {
|
19
|
+
//same margin as h1 (title)
|
20
|
+
margin: 20px 0 10px;
|
21
|
+
}
|
22
|
+
|
23
|
+
.title h1 {
|
24
|
+
word-wrap: break-word;
|
25
|
+
}
|
26
|
+
|
27
|
+
span.editable, span.editable:hover {
|
28
|
+
background-color: transparent;
|
29
|
+
.spinner-placeholder{
|
30
|
+
margin:0;
|
31
|
+
background-repeat: no-repeat;
|
32
|
+
background-position: center center;
|
33
|
+
float: left;
|
34
|
+
padding: 0 150px;
|
35
|
+
}
|
36
|
+
form {
|
37
|
+
float: left;
|
38
|
+
@extend .form-inline;
|
39
|
+
}
|
40
|
+
input {
|
41
|
+
@extend .form-control;
|
42
|
+
width: auto !important;
|
43
|
+
margin-right: 10px;
|
44
|
+
}
|
45
|
+
button {
|
46
|
+
@extend .btn;
|
47
|
+
@extend .btn-default;
|
48
|
+
margin-right: 10px;
|
49
|
+
&:not(:last-child) {
|
50
|
+
@extend .btn-primary;
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
// span.edit_textfield button {
|
56
|
+
// margin-left: 5px;
|
57
|
+
// }
|
16
58
|
|
17
59
|
.service-box {
|
18
60
|
width: 200px;
|
@@ -25,20 +25,31 @@ module Staypuft
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def update
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
28
|
+
respond_to do | format |
|
29
|
+
|
30
|
+
format.html do
|
31
|
+
if params[:staypuft_deployment]
|
32
|
+
param_data = params[:staypuft_deployment][:hostgroup_params]
|
33
|
+
param_data.each do |hostgroup_id, hostgroup_params|
|
34
|
+
hostgroup = Hostgroup.find(hostgroup_id)
|
35
|
+
hostgroup_params[:puppetclass_params].each do |puppetclass_id, puppetclass_params|
|
36
|
+
puppetclass = Puppetclass.find(puppetclass_id)
|
37
|
+
puppetclass_params.each do |param_name, param_value|
|
38
|
+
hostgroup.set_param_value_if_changed(puppetclass, param_name, param_value)
|
39
|
+
end
|
40
|
+
end
|
36
41
|
end
|
37
42
|
end
|
43
|
+
redirect_to summary_deployment_path(params[:id])
|
44
|
+
end
|
45
|
+
|
46
|
+
format.json do
|
47
|
+
@deployment = Deployment.find(params[:id])
|
48
|
+
@deployment.update_attributes(params[:deployment])
|
49
|
+
render :status => 200, :json => @deployment.to_json
|
38
50
|
end
|
39
|
-
end
|
40
51
|
|
41
|
-
|
52
|
+
end
|
42
53
|
end
|
43
54
|
|
44
55
|
def edit
|
data/app/lib/staypuft/seeder.rb
CHANGED
@@ -163,15 +163,16 @@ module Staypuft
|
|
163
163
|
|
164
164
|
def functional_dependencies
|
165
165
|
amqp_provider = '<%= @host.deployment.amqp_provider %>'
|
166
|
-
neutron = '<%= @host.deployment.
|
166
|
+
neutron = '<%= @host.deployment.neutron_networking? %>'
|
167
167
|
|
168
168
|
# Nova
|
169
169
|
network_manager = '<%= @host.deployment.nova.network_manager %>'
|
170
170
|
# multi_host handled inline, since it's two separate static values 'true' and 'True'
|
171
|
-
network_overrides = '<%= @host.deployment.nova.network_overrides
|
172
|
-
# TODO:
|
173
|
-
|
174
|
-
|
171
|
+
network_overrides = '<%= @host.deployment.nova.network_overrides %>'
|
172
|
+
# TODO: num_networks should be calculated based on a specified VLAN range.
|
173
|
+
# Alternatively, it could be explicitly set by the user in combination
|
174
|
+
# with a starting VLAN ID.
|
175
|
+
network_num_networks = '<%= @host.deployment.nova.num_networks %>'
|
175
176
|
network_fixed_range = '<%= @host.deployment.nova.private_fixed_range %>'
|
176
177
|
network_floating_range = '<%= @host.deployment.nova.public_floating_range %>'
|
177
178
|
network_private_iface = '<%= @host.deployment.nova.compute_tenant_interface %>'
|
@@ -201,15 +202,23 @@ module Staypuft
|
|
201
202
|
pcmk_fs_dir = '<%= @host.deployment.glance.pcmk_fs_dir %>'
|
202
203
|
pcmk_fs_manage = 'true'
|
203
204
|
pcmk_fs_options = '<%= @host.deployment.glance.pcmk_fs_options %>'
|
205
|
+
glance_rbd_store_user = 'glance'
|
206
|
+
glance_rbd_store_pool = 'images'
|
204
207
|
|
205
208
|
# Cinder
|
206
209
|
volume = true
|
210
|
+
cinder_backend_gluster = false
|
211
|
+
cinder_backend_gluster_name = 'gluster_backend'
|
207
212
|
cinder_backend_iscsi = '<%= @host.deployment.cinder.lvm_backend? %>'
|
213
|
+
cinder_backend_iscsi_name = 'iscsi_backend'
|
208
214
|
cinder_backend_nfs = '<%= @host.deployment.cinder.nfs_backend? %>'
|
215
|
+
cinder_backend_nfs_name = 'nfs_backend'
|
216
|
+
cinder_multiple_backends = false
|
209
217
|
cinder_nfs_shares = ['<%= @host.deployment.cinder.nfs_uri %>']
|
210
218
|
cinder_nfs_mount_options = ''
|
211
219
|
|
212
220
|
cinder_backend_rbd = '<%= @host.deployment.cinder.ceph_backend? %>'
|
221
|
+
cinder_backend_rbd_name = 'rbd_backend'
|
213
222
|
# TODO: confirm these params and add them to model where user input is needed
|
214
223
|
cinder_rbd_pool = 'volumes'
|
215
224
|
cinder_rbd_ceph_conf = '/etc/ceph/ceph.conf/'
|
@@ -219,6 +228,7 @@ module Staypuft
|
|
219
228
|
cinder_rbd_secret_uuid = ''
|
220
229
|
|
221
230
|
cinder_backend_eqlx = '<%= @host.deployment.cinder.equallogic_backend? %>'
|
231
|
+
cinder_backend_eqlx_name = ['eqlx_backend']
|
222
232
|
# TODO: confirm these params and add them to model where user input is needed
|
223
233
|
# below dynamic calls are commented out since the model does not yet have san/chap entries
|
224
234
|
cinder_san_ip = [''] # ['<%= #@host.deployment.cinder.san_ip %>']
|
@@ -279,18 +289,25 @@ module Staypuft
|
|
279
289
|
{
|
280
290
|
'quickstack::nova_network::controller' => {
|
281
291
|
'amqp_provider' => amqp_provider,
|
292
|
+
'cinder_backend_gluster' => cinder_backend_gluster,
|
293
|
+
'cinder_backend_gluster_name' => cinder_backend_gluster_name,
|
282
294
|
'cinder_backend_iscsi' => cinder_backend_iscsi,
|
295
|
+
'cinder_backend_iscsi_name' => cinder_backend_iscsi_name,
|
283
296
|
'cinder_backend_nfs' => cinder_backend_nfs,
|
297
|
+
'cinder_backend_nfs_name' => cinder_backend_nfs_name,
|
298
|
+
'cinder_backend_rbd' => cinder_backend_rbd,
|
299
|
+
'cinder_backend_rbd_name' => cinder_backend_rbd_name,
|
300
|
+
'cinder_backend_eqlx' => cinder_backend_eqlx,
|
301
|
+
'cinder_backend_eqlx_name' => cinder_backend_eqlx_name,
|
302
|
+
'cinder_multiple_backends' => cinder_multiple_backends,
|
284
303
|
'cinder_nfs_shares' => cinder_nfs_shares,
|
285
304
|
'cinder_nfs_mount_options' => cinder_nfs_mount_options,
|
286
|
-
'cinder_backend_rbd' => cinder_backend_rbd,
|
287
305
|
'cinder_rbd_pool' => cinder_rbd_pool,
|
288
306
|
'cinder_rbd_ceph_conf' => cinder_rbd_ceph_conf,
|
289
307
|
'cinder_rbd_flatten_volume_from_snapshot' => cinder_rbd_flatten_volume_from_snapshot,
|
290
308
|
'cinder_rbd_max_clone_depth' => cinder_rbd_max_clone_depth,
|
291
309
|
'cinder_rbd_user' => cinder_rbd_user,
|
292
310
|
'cinder_rbd_secret_uuid' => cinder_rbd_secret_uuid,
|
293
|
-
'cinder_backend_eqlx' => cinder_backend_eqlx,
|
294
311
|
'cinder_san_ip' => cinder_san_ip,
|
295
312
|
'cinder_san_login' => cinder_san_login,
|
296
313
|
'cinder_san_password' => cinder_san_password,
|
@@ -301,6 +318,8 @@ module Staypuft
|
|
301
318
|
'cinder_eqlx_chap_login' => cinder_eqlx_chap_login,
|
302
319
|
'cinder_eqlx_chap_password' => cinder_eqlx_chap_password,
|
303
320
|
'glance_backend' => backend,
|
321
|
+
'glance_rbd_store_user' => glance_rbd_store_user,
|
322
|
+
'glance_rbd_store_pool' => glance_rbd_store_pool,
|
304
323
|
'admin_password' => admin_pw,
|
305
324
|
'ceilometer_user_password' => ceilometer_user_pw,
|
306
325
|
'cinder_db_password' => cinder_db_pw,
|
@@ -338,18 +357,25 @@ module Staypuft
|
|
338
357
|
'ml2_vni_ranges' => ml2_vni_ranges,
|
339
358
|
'ovs_vlan_ranges' => ovs_vlan_ranges,
|
340
359
|
'enable_tunneling' => enable_tunneling,
|
360
|
+
'cinder_backend_gluster' => cinder_backend_gluster,
|
361
|
+
'cinder_backend_gluster_name' => cinder_backend_gluster_name,
|
341
362
|
'cinder_backend_iscsi' => cinder_backend_iscsi,
|
363
|
+
'cinder_backend_iscsi_name' => cinder_backend_iscsi_name,
|
342
364
|
'cinder_backend_nfs' => cinder_backend_nfs,
|
365
|
+
'cinder_backend_nfs_name' => cinder_backend_nfs_name,
|
366
|
+
'cinder_backend_rbd' => cinder_backend_rbd,
|
367
|
+
'cinder_backend_rbd_name' => cinder_backend_rbd_name,
|
368
|
+
'cinder_backend_eqlx' => cinder_backend_eqlx,
|
369
|
+
'cinder_backend_eqlx_name' => cinder_backend_eqlx_name,
|
370
|
+
'cinder_multiple_backends' => cinder_multiple_backends,
|
343
371
|
'cinder_nfs_shares' => cinder_nfs_shares,
|
344
372
|
'cinder_nfs_mount_options' => cinder_nfs_mount_options,
|
345
|
-
'cinder_backend_rbd' => cinder_backend_rbd,
|
346
373
|
'cinder_rbd_pool' => cinder_rbd_pool,
|
347
374
|
'cinder_rbd_ceph_conf' => cinder_rbd_ceph_conf,
|
348
375
|
'cinder_rbd_flatten_volume_from_snapshot' => cinder_rbd_flatten_volume_from_snapshot,
|
349
376
|
'cinder_rbd_max_clone_depth' => cinder_rbd_max_clone_depth,
|
350
377
|
'cinder_rbd_user' => cinder_rbd_user,
|
351
378
|
'cinder_rbd_secret_uuid' => cinder_rbd_secret_uuid,
|
352
|
-
'cinder_backend_eqlx' => cinder_backend_eqlx,
|
353
379
|
'cinder_san_ip' => cinder_san_ip,
|
354
380
|
'cinder_san_login' => cinder_san_login,
|
355
381
|
'cinder_san_password' => cinder_san_password,
|
@@ -360,6 +386,8 @@ module Staypuft
|
|
360
386
|
'cinder_eqlx_chap_login' => cinder_eqlx_chap_login,
|
361
387
|
'cinder_eqlx_chap_password' => cinder_eqlx_chap_password,
|
362
388
|
'glance_backend' => backend,
|
389
|
+
'glance_rbd_store_user' => glance_rbd_store_user,
|
390
|
+
'glance_rbd_store_pool' => glance_rbd_store_pool,
|
363
391
|
'admin_password' => admin_pw,
|
364
392
|
'ceilometer_user_password' => ceilometer_user_pw,
|
365
393
|
'cinder_db_password' => cinder_db_pw,
|
@@ -444,6 +472,7 @@ module Staypuft
|
|
444
472
|
'nova_public_vip' => vip_format % :nova,
|
445
473
|
'amqp_vip' => vip_format % :amqp,
|
446
474
|
'swift_public_vip' => vip_format % :swift,
|
475
|
+
'cluster_control_ip' => '<%= @host.deployment.ips.controller_ips.first %>',
|
447
476
|
'lb_backend_server_addrs' => '<%= @host.deployment.ips.controller_ips %>',
|
448
477
|
'lb_backend_server_names' => '<%= @host.deployment.ips.controller_fqdns %>' },
|
449
478
|
'quickstack::pacemaker::common' => {
|
@@ -469,6 +498,7 @@ module Staypuft
|
|
469
498
|
'volume' => volume,
|
470
499
|
'backend_iscsi' => cinder_backend_iscsi,
|
471
500
|
'backend_nfs' => cinder_backend_nfs,
|
501
|
+
'backend_gluster' => cinder_backend_gluster,
|
472
502
|
'nfs_shares' => cinder_nfs_shares,
|
473
503
|
'nfs_mount_options' => cinder_nfs_mount_options,
|
474
504
|
'backend_rbd' => cinder_backend_rbd,
|
@@ -527,10 +557,11 @@ module Staypuft
|
|
527
557
|
'amqp_password' => amqp_pw },
|
528
558
|
'quickstack::nova_network::compute' => {
|
529
559
|
'amqp_provider' => amqp_provider,
|
560
|
+
'cinder_backend_gluster' => cinder_backend_gluster,
|
561
|
+
'cinder_backend_nfs' => cinder_backend_nfs,
|
530
562
|
'network_manager' => network_manager,
|
531
563
|
'network_overrides' => network_overrides,
|
532
564
|
'network_num_networks' => network_num_networks,
|
533
|
-
'network_network_size' => network_network_size,
|
534
565
|
'network_fixed_range' => network_fixed_range,
|
535
566
|
'network_floating_range' => network_floating_range,
|
536
567
|
'network_private_iface' => network_private_iface,
|
@@ -550,6 +581,8 @@ module Staypuft
|
|
550
581
|
'nova_host' => nova_host },
|
551
582
|
'quickstack::neutron::compute' => {
|
552
583
|
'amqp_provider' => amqp_provider,
|
584
|
+
'cinder_backend_gluster' => cinder_backend_gluster,
|
585
|
+
'cinder_backend_nfs' => cinder_backend_nfs,
|
553
586
|
'enable_tunneling' => enable_tunneling,
|
554
587
|
'ovs_bridge_mappings' => compute_ovs_bridge_mappings,
|
555
588
|
'ovs_bridge_uplinks' => compute_ovs_bridge_uplinks,
|
@@ -652,7 +685,10 @@ module Staypuft
|
|
652
685
|
param = puppetclass.class_params.find_by_key(param_key)
|
653
686
|
unless param
|
654
687
|
Rails.logger.error "missing param #{param_key} in #{puppetclass_name} trying to set default_value: #{default_value.inspect} found in puppetclasses: " +
|
655
|
-
LookupKey.
|
688
|
+
LookupKey.
|
689
|
+
smart_class_parameters.
|
690
|
+
search_for("key = #{param_key}").
|
691
|
+
map { |lk| lk.param_class.name }.inspect
|
656
692
|
next
|
657
693
|
end
|
658
694
|
unless param.update_attributes default_value: default_value
|
@@ -30,13 +30,26 @@ module Staypuft::Concerns::LookupKeyExtensions
|
|
30
30
|
self.send(method, value) rescue raise TypeError
|
31
31
|
end
|
32
32
|
|
33
|
-
def has_erb?
|
33
|
+
def self.has_erb?(value)
|
34
34
|
value =~ /<%.*%>/
|
35
35
|
end
|
36
36
|
|
37
|
+
def has_erb?(value)
|
38
|
+
Staypuft::Concerns::LookupKeyExtensions.has_erb? value
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.evaluate_value(hostgroup, value)
|
42
|
+
host = Host::Managed.new(hostgroup: hostgroup, name: 'renderer')
|
43
|
+
SafeRender.new(:variables => { :host => host }).parse(value)
|
44
|
+
rescue => e
|
45
|
+
"ERROR: #{e.message} (#{e.class})"
|
46
|
+
end
|
47
|
+
|
37
48
|
def value_before_type_cast_with_limpet(value)
|
38
|
-
|
39
|
-
|
49
|
+
if has_erb? value
|
50
|
+
value.gsub(LIMPET_FORMAT_REGEXP, '<%=')
|
51
|
+
else
|
52
|
+
value_before_type_cast_without_limpet(value)
|
40
53
|
end
|
41
54
|
end
|
42
55
|
|
@@ -64,6 +77,10 @@ module Staypuft::Concerns::LookupKeyExtensions
|
|
64
77
|
else
|
65
78
|
value
|
66
79
|
end
|
80
|
+
rescue => exc
|
81
|
+
# TODO fix in foreman
|
82
|
+
Rails.logger.error "There was error rendering string: #{string.inspect}\n#{exc} (#{exc.class})\n#{exc.backtrace.join("\n")}"
|
83
|
+
raise exc
|
67
84
|
end
|
68
85
|
end
|
69
86
|
end
|
@@ -18,11 +18,11 @@ module Staypuft
|
|
18
18
|
TYPES = LABELS.keys
|
19
19
|
HUMAN = N_('Choose Driver Backend')
|
20
20
|
end
|
21
|
-
validates :driver_backend, presence: true, inclusion: { in: lambda {|c| c.backend_types_for_layout } }
|
21
|
+
validates :driver_backend, presence: true, inclusion: { in: lambda { |c| c.backend_types_for_layout } }
|
22
22
|
|
23
23
|
module NfsUri
|
24
|
-
HUMAN
|
25
|
-
HUMAN_AFTER =
|
24
|
+
HUMAN = N_('NFS URI:')
|
25
|
+
HUMAN_AFTER = Deployment::GlanceService::NFS_HELP
|
26
26
|
end
|
27
27
|
validates :nfs_uri,
|
28
28
|
:presence => true,
|
@@ -34,6 +34,10 @@ module Staypuft
|
|
34
34
|
# TODO: add EqualLogic UI parameters
|
35
35
|
|
36
36
|
|
37
|
+
class Jail < Safemode::Jail
|
38
|
+
allow :lvm_backend?, :nfs_backend?, :nfs_uri, :ceph_backend?, :equallogic_backend?
|
39
|
+
end
|
40
|
+
|
37
41
|
def set_defaults
|
38
42
|
self.driver_backend = DriverBackend::LVM
|
39
43
|
end
|
@@ -4,6 +4,8 @@ module Staypuft
|
|
4
4
|
'glance'
|
5
5
|
end
|
6
6
|
|
7
|
+
NFS_HELP = N_('(<server>:<local path>)')
|
8
|
+
|
7
9
|
param_attr :driver_backend, :nfs_network_path, :gluster_network_path,
|
8
10
|
:gluster_backup_volfile_servers
|
9
11
|
|
@@ -20,7 +22,7 @@ module Staypuft
|
|
20
22
|
|
21
23
|
module NfsNetworkPath
|
22
24
|
HUMAN = N_('network path')
|
23
|
-
HUMAN_AFTER =
|
25
|
+
HUMAN_AFTER = NFS_HELP
|
24
26
|
end
|
25
27
|
|
26
28
|
validates :nfs_network_path,
|
@@ -28,6 +30,10 @@ module Staypuft
|
|
28
30
|
:if => :nfs_backend?
|
29
31
|
# TODO: network_path validation
|
30
32
|
|
33
|
+
class Jail < Safemode::Jail
|
34
|
+
allow :driver_backend, :pcmk_fs_device, :pcmk_fs_dir, :pcmk_fs_options
|
35
|
+
end
|
36
|
+
|
31
37
|
def set_defaults
|
32
38
|
self.driver_backend = DriverBackend::LOCAL
|
33
39
|
end
|
@@ -10,8 +10,7 @@ module Staypuft
|
|
10
10
|
|
11
11
|
|
12
12
|
param_attr :network_segmentation, :tenant_vlan_ranges, :networker_tenant_interface,
|
13
|
-
:use_external_interface, :external_interface_name, :compute_tenant_interface
|
14
|
-
:use_vlan_for_external_network, :vlan_ranges_for_external_network
|
13
|
+
:use_external_interface, :external_interface_name, :compute_tenant_interface
|
15
14
|
|
16
15
|
module NetworkSegmentation
|
17
16
|
VXLAN = 'vxlan'
|
@@ -63,22 +62,6 @@ module Staypuft
|
|
63
62
|
:if => :use_external_interface?
|
64
63
|
# TODO: interface name format validation
|
65
64
|
|
66
|
-
module UseVlanForExternalNetwork
|
67
|
-
HUMAN = N_('Configure VLAN for external network')
|
68
|
-
end
|
69
|
-
|
70
|
-
validates :use_vlan_for_external_network, inclusion: { in: [true, false, 'true', 'false'] }
|
71
|
-
|
72
|
-
module VlanRangesForExternalNetwork
|
73
|
-
HUMAN = N_('VLAN Range for external network')
|
74
|
-
HUMAN_AFTER = N_('i.e. 1000:2999')
|
75
|
-
end
|
76
|
-
|
77
|
-
validates :vlan_ranges_for_external_network,
|
78
|
-
:presence => true,
|
79
|
-
:if => :external_network_vlan?
|
80
|
-
# TODO: vlan rangesformat validation
|
81
|
-
|
82
65
|
module ComputeTenantInterface
|
83
66
|
HUMAN = N_('Which interface to use for tenant networks:')
|
84
67
|
HUMAN_AFTER = INTERFACE_HELP
|
@@ -88,6 +71,12 @@ module Staypuft
|
|
88
71
|
:presence => true
|
89
72
|
# TODO: interface name format validation
|
90
73
|
|
74
|
+
class Jail < Safemode::Jail
|
75
|
+
allow :networker_vlan_ranges, :compute_vlan_ranges, :network_segmentation, :enable_tunneling?,
|
76
|
+
:networker_tenant_interface, :networker_ovs_bridge_mappings, :networker_ovs_bridge_uplinks,
|
77
|
+
:compute_tenant_interface, :compute_ovs_bridge_mappings, :compute_ovs_bridge_uplinks
|
78
|
+
end
|
79
|
+
|
91
80
|
def set_defaults
|
92
81
|
self.network_segmentation = NetworkSegmentation::VXLAN
|
93
82
|
self.use_external_interface = 'false'
|
@@ -102,11 +91,6 @@ module Staypuft
|
|
102
91
|
(self.use_external_interface == true) || (self.use_external_interface == 'true')
|
103
92
|
end
|
104
93
|
|
105
|
-
# TODO: make this less clumsy w/ consistent handling of true/false values
|
106
|
-
def use_vlan_for_external_network?
|
107
|
-
(self.use_vlan_for_external_network == true) || (self.use_vlan_for_external_network == 'true')
|
108
|
-
end
|
109
|
-
|
110
94
|
# return list of supported segmentation options with selected option at the
|
111
95
|
# beginning of the list
|
112
96
|
def network_segmentation_list
|
@@ -150,17 +134,13 @@ module Staypuft
|
|
150
134
|
|
151
135
|
def networker_vlan_ranges
|
152
136
|
[("physnet-tenants:#{self.tenant_vlan_ranges}" if self.vlan_segmentation?),
|
153
|
-
|
137
|
+
"physnet-external"].compact
|
154
138
|
end
|
155
139
|
|
156
140
|
def vlan_segmentation?
|
157
141
|
self.network_segmentation == NetworkSegmentation::VLAN
|
158
142
|
end
|
159
143
|
|
160
|
-
def external_network_vlan?
|
161
|
-
self.use_external_interface? && self.use_vlan_for_external_network?
|
162
|
-
end
|
163
|
-
|
164
144
|
def enable_tunneling?
|
165
145
|
[NetworkSegmentation::VXLAN, NetworkSegmentation::GRE].include?(network_segmentation)
|
166
146
|
end
|
@@ -80,7 +80,17 @@ module Staypuft
|
|
80
80
|
def network_overrides
|
81
81
|
{ 'force_dhcp_release' => false }.tap do |h|
|
82
82
|
h.update 'vlan_start' => self.vlan_range.split(':')[0] if self.vlan_manager?
|
83
|
-
end
|
83
|
+
end.to_yaml
|
84
|
+
end
|
85
|
+
|
86
|
+
# TODO: make this dynamic
|
87
|
+
def num_networks
|
88
|
+
1
|
89
|
+
end
|
90
|
+
|
91
|
+
class Jail < Safemode::Jail
|
92
|
+
allow :network_manager, :network_overrides, :private_fixed_range, :public_floating_range,
|
93
|
+
:compute_tenant_interface, :external_interface_name, :num_networks
|
84
94
|
end
|
85
95
|
|
86
96
|
end
|
@@ -40,6 +40,11 @@ module Staypuft
|
|
40
40
|
:if => :single_mode?,
|
41
41
|
:length => { minimum: 6 }
|
42
42
|
|
43
|
+
class Jail < Safemode::Jail
|
44
|
+
allow :effective_value, :ceilometer_metering_secret, :heat_auth_encrypt_key,
|
45
|
+
:horizon_secret_key, :swift_shared_secret, :neutron_metadata_proxy_secret
|
46
|
+
end
|
47
|
+
|
43
48
|
def set_defaults
|
44
49
|
self.mode = Mode::RANDOM
|
45
50
|
PASSWORD_LIST.each do |password_field|
|
@@ -71,7 +71,7 @@ module Staypuft
|
|
71
71
|
def initialize(attributes = {}, options = {})
|
72
72
|
super({ amqp_provider: AmqpProvider::RABBITMQ,
|
73
73
|
layout_name: LayoutName::NON_HA,
|
74
|
-
networking: Networking::
|
74
|
+
networking: Networking::NEUTRON,
|
75
75
|
platform: Platform::RHEL7 }.merge(attributes),
|
76
76
|
options)
|
77
77
|
|
@@ -119,7 +119,7 @@ module Staypuft
|
|
119
119
|
module Networking
|
120
120
|
NOVA = 'nova'
|
121
121
|
NEUTRON = 'neutron'
|
122
|
-
LABELS = {
|
122
|
+
LABELS = { NEUTRON => N_('Neutron Networking'), NOVA => N_('Nova Network') }
|
123
123
|
TYPES = LABELS.keys
|
124
124
|
HUMAN = N_('Networking')
|
125
125
|
end
|
@@ -148,6 +148,11 @@ module Staypuft
|
|
148
148
|
validates :layout_name, presence: true, inclusion: { in: LayoutName::TYPES }
|
149
149
|
validates :platform, presence: true, inclusion: { in: Platform::TYPES }
|
150
150
|
|
151
|
+
class Jail < Safemode::Jail
|
152
|
+
allow :amqp_provider, :networking, :layout_name, :platform, :nova_networking?, :neutron_networking?,
|
153
|
+
:nova, :neutron, :glance, :cinder, :passwords, :vips, :ips, :ha?
|
154
|
+
end
|
155
|
+
|
151
156
|
# TODO(mtaylor)
|
152
157
|
# Use conditional validations to validate the deployment multi-step form.
|
153
158
|
# deployment.form_step should be used to check the form step the user is
|
@@ -189,6 +194,14 @@ module Staypuft
|
|
189
194
|
self.layout_name == LayoutName::HA
|
190
195
|
end
|
191
196
|
|
197
|
+
def nova_networking?
|
198
|
+
networking == Networking::NOVA
|
199
|
+
end
|
200
|
+
|
201
|
+
def neutron_networking?
|
202
|
+
networking == Networking::NEUTRON
|
203
|
+
end
|
204
|
+
|
192
205
|
private
|
193
206
|
|
194
207
|
def update_layout
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<% title _("Edit - %s Configuration Parameters") % @deployment.name %>
|
2
|
-
<% content_for(:
|
3
|
-
<%= link_to _("Back to Deployment"), deployment_path(@deployment.id) %>
|
2
|
+
<% content_for(:top_actions) do %>
|
3
|
+
<%= link_to _("Back to Deployment"), deployment_path(@deployment.id), :class => "btn btn-link" %>
|
4
4
|
<%= link_to _("Apply"), '',
|
5
5
|
class: "btn btn-primary",
|
6
6
|
id: 'edit_staypuft_deployment_submit' %>
|
@@ -1,25 +1,19 @@
|
|
1
|
-
<% title
|
1
|
+
<% title(@deployment.name, edit_textfield(@deployment, :name, options={:update_url => deployment_path(@deployment)})) %>
|
2
|
+
<% subtitle edit_textfield(@deployment, :description, options={:update_url => deployment_path(@deployment)}) %>
|
2
3
|
|
3
|
-
<% content_for(:
|
4
|
-
<%= link_to(_("Advanced Configuration"), summary_deployment_path(@deployment.id), :class => '') %>
|
4
|
+
<% content_for(:top_actions) do %>
|
5
|
+
<%= link_to(_("Advanced Configuration"), summary_deployment_path(@deployment.id), :class => 'btn btn-link') %>
|
5
6
|
<%= link_to(_("Revisit Setup Wizard"), if @deployment.deployed?
|
6
7
|
deployment_step_path(deployment_id: @deployment, id: 'services_configuration')
|
7
8
|
else
|
8
9
|
deployment_steps_path(deployment_id: @deployment)
|
9
|
-
end) %>
|
10
|
+
end, :class => "btn btn-default") %>
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
<% else %>
|
17
|
-
<%= link_to(_("Deploy"),
|
18
|
-
"",
|
19
|
-
:class => %w(btn btn-primary),
|
20
|
-
:'data-toggle' => "modal",
|
21
|
-
:'data-target' => "#deploy_modal") %>
|
22
|
-
<% end %>
|
12
|
+
<%= link_to(_("Deploy"),
|
13
|
+
"",
|
14
|
+
:class => @deployment.in_progress? ? %w(btn btn-primary disabled) : %w(btn btn-primary),
|
15
|
+
:'data-toggle' => "modal",
|
16
|
+
:'data-target' => "#deploy_modal") %>
|
23
17
|
|
24
18
|
<% if Rails.env.development? %>
|
25
19
|
<div class="btn-group">
|
@@ -1,16 +1,17 @@
|
|
1
1
|
<% title _("%s Configuration Parameters") % @deployment.name %>
|
2
|
-
<% content_for(:
|
3
|
-
<%= link_to _("Back to Deployment"), deployment_path(@deployment.id) %>
|
2
|
+
<% content_for(:top_actions) do %>
|
3
|
+
<%= link_to _("Back to Deployment"), deployment_path(@deployment.id), :class => "btn btn-link" %>
|
4
4
|
<%= link_to(icon_text("cloud-upload", _("Import")),
|
5
5
|
{},
|
6
|
-
{ :
|
6
|
+
{ :class => "btn btn-default",
|
7
|
+
:remote => true,
|
7
8
|
:rel => 'popover',
|
8
9
|
:data => { 'content' => "#{render partial: 'import_form'}",
|
9
10
|
'original-title' => _('Import Config'),
|
10
11
|
'placement' => 'left' } }) %>
|
11
12
|
<%= link_to(icon_text("cloud-download", _("Export")),
|
12
|
-
export_config_deployment_path(@deployment.id)) %>
|
13
|
-
<%= link_to _("Edit"), edit_deployment_path(@deployment.id) %>
|
13
|
+
export_config_deployment_path(@deployment.id), :class => "btn btn-default") %>
|
14
|
+
<%= link_to _("Edit"), edit_deployment_path(@deployment.id), :class => "btn btn-default" %>
|
14
15
|
<% end %>
|
15
16
|
|
16
17
|
<div class="col-md-12">
|
@@ -41,10 +42,16 @@
|
|
41
42
|
param_hash[:hostgroup].id,
|
42
43
|
param_hash[:puppetclass].id,
|
43
44
|
param_hash[:param_key].key),
|
44
|
-
param_hash[:hostgroup].current_param_value_str(param_hash[:param_key]),
|
45
|
+
value = param_hash[:hostgroup].current_param_value_str(param_hash[:param_key]),
|
45
46
|
:class => "form-control",
|
46
47
|
:size => "45",
|
47
48
|
disabled: true %>
|
49
|
+
<% if Staypuft::Concerns::LookupKeyExtensions.has_erb? value %>
|
50
|
+
<span class="help-block">
|
51
|
+
<%= _('evaluates to: ') %>
|
52
|
+
<%= Staypuft::Concerns::LookupKeyExtensions.evaluate_value param_hash[:hostgroup], value %>
|
53
|
+
</span>
|
54
|
+
<% end %>
|
48
55
|
</div>
|
49
56
|
</div>
|
50
57
|
<br/>
|
@@ -52,7 +59,7 @@
|
|
52
59
|
<% else %>
|
53
60
|
<p><%= _("No configuration needed for this service.") %></p>
|
54
61
|
<% end %>
|
55
|
-
<% # render "puppetclasses/classes_parameters", { :obj => service.hostgroups.first }
|
62
|
+
<% # render "puppetclasses/classes_parameters", { :obj => service.hostgroups.first } %>
|
56
63
|
</div>
|
57
64
|
<% end %>
|
58
65
|
</div>
|
@@ -0,0 +1,44 @@
|
|
1
|
+
<%= content_for(:content) do %>
|
2
|
+
<div id="main">
|
3
|
+
<%= content_tag('div', flash[:error], :class => 'flash hide error') if flash[:error] %>
|
4
|
+
<%= content_tag('div', flash[:warning], :class => 'flash hide warning') if flash[:warning] %>
|
5
|
+
<%= content_tag('div', flash[:notice], :class => 'flash hide notice') if flash[:notice] %>
|
6
|
+
<%= render 'common/notice' unless @notices.empty? %>
|
7
|
+
<div id="content" class="container">
|
8
|
+
<div class="title row form-group">
|
9
|
+
<div class="col-sm-12">
|
10
|
+
<div class="pull-left">
|
11
|
+
<h1 class=""><%=h @page_header if @page_header.present? %></h1>
|
12
|
+
<% if content_for? :subtitle %>
|
13
|
+
<div class="subtitle">
|
14
|
+
<%= yield(:subtitle) %>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
17
|
+
</div>
|
18
|
+
<% if content_for? :top_actions %>
|
19
|
+
<div class="top_actions pull-right">
|
20
|
+
<div class="btn-toolbar pull-right">
|
21
|
+
<%= yield(:top_actions) %>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<% end %>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
<% if content_for?(:search_bar) || content_for?(:title_actions) %>
|
28
|
+
<div class="row">
|
29
|
+
<div class="title_filter <%= searchable? ? "col-md-6" : "col-md-4" %>">
|
30
|
+
<%= render "common/searchbar" if searchable? %>
|
31
|
+
<%= yield(:search_bar) %>
|
32
|
+
</div>
|
33
|
+
<div id="title_action" class="<%= searchable? ? "col-md-6" : "col-md-8" %>">
|
34
|
+
<div class="btn-toolbar pull-right"><%=h yield(:title_actions) %></div>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<% end %>
|
38
|
+
|
39
|
+
<%= yield %>
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
<% end %>
|
43
|
+
|
44
|
+
<%= render :template => 'layouts/base' %>
|
@@ -31,18 +31,6 @@
|
|
31
31
|
label: _(Staypuft::Deployment::NeutronService::ExternalInterfaceName::HUMAN),
|
32
32
|
help_inline: _(Staypuft::Deployment::NeutronService::ExternalInterfaceName::HUMAN_AFTER)) %>
|
33
33
|
|
34
|
-
<%= check_box_f_non_inline(p, :use_vlan_for_external_network,
|
35
|
-
:checked_value => 'true',
|
36
|
-
:unchecked_value => 'false',
|
37
|
-
:text => Staypuft::Deployment::NeutronService::UseVlanForExternalNetwork::HUMAN)
|
38
|
-
%>
|
39
|
-
|
40
|
-
<div class="neutron_external_vlan col-md-offset-0 hide">
|
41
|
-
<%= change_label_width 4, text_f(p, :vlan_ranges_for_external_network,
|
42
|
-
label: _(Staypuft::Deployment::NeutronService::VlanRangesForExternalNetwork::HUMAN),
|
43
|
-
help_inline: _(Staypuft::Deployment::NeutronService::VlanRangesForExternalNetwork::HUMAN_AFTER)) %>
|
44
|
-
</div>
|
45
|
-
|
46
34
|
</div>
|
47
35
|
|
48
36
|
|
data/lib/staypuft/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: staypuft
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Staypuft team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: foreman-tasks
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- app/views/staypuft/deployments/index.html.erb
|
135
135
|
- app/views/staypuft/deployments/show.html.erb
|
136
136
|
- app/views/staypuft/deployments/summary.html.erb
|
137
|
+
- app/views/staypuft/layouts/application.html.erb
|
137
138
|
- app/views/staypuft/layouts/staypuft.html.erb
|
138
139
|
- app/views/staypuft/steps/_cinder.html.erb
|
139
140
|
- app/views/staypuft/steps/_glance.html.erb
|