staypuft 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 18a9a8aa4dbeac91c1b58bd703873461aa53198a
4
- data.tar.gz: 8a8311dcb6ff38ffa3fa6f3286538059b362be15
3
+ metadata.gz: fb78ba28b433c78bd8f8d9a1f0cc5a4c4cc185a6
4
+ data.tar.gz: 0eb3ff52a83c0fa63e4dee33dfc37c2e6eeffeef
5
5
  SHA512:
6
- metadata.gz: 1ccd0d9a1e917e1820912ef93553713841fd9d98cad32416ee10782f76de0fab095aa39669b2d209a26155e19a52a25a5781173484177dd6d229f41e27305754
7
- data.tar.gz: 76ec7bc0494fecbf09bd96ca9ca24648d6d17c6f47dc8aa8210697e1eddedf2ddffc789c818e5c6328b450ce4801c77103a65f85121071723fed463b26216841
6
+ metadata.gz: 959238ed73d99ddda11f7e4257a5163e12fccb6e9b42d31aeeda6d0eb746de40845305972a2003696d4838f3537a976f4b538861d7761a5b9995c195520f2b8b
7
+ data.tar.gz: 1632029a27cdc779f060aaf6f026cebcca45521620e83e3de78835fe2ddb58575e611387e3a63df8557ef4eccc9b111d5b5f13de2ed0226dda6ed3f6e8382e87
@@ -0,0 +1,114 @@
1
+ $(document).ready(function() {
2
+ update_fencing_form();
3
+ // NOTE: setTimeout is required to make sure this code runs after all event
4
+ // handlers are set, so they can be overridden.
5
+ setTimeout(function() {
6
+ override_ajax_submit();
7
+ }, 1);
8
+ });
9
+
10
+ function override_ajax_submit() {
11
+ // NOTE: method defined in app/assets/javascripts/host_edit.js but modified
12
+ // so the URL points to staypuft/hosts controller.
13
+ function submit_host(){
14
+ var url = window.location.pathname.replace(/\/edit$|\/new$/,'');
15
+ url = url.replace(/\/hosts/,'\/staypuft/hosts')
16
+ if(/\/clone$/.test(window.location.pathname)){ url = foreman_url('/staypuft/hosts'); }
17
+ $('#host_submit').attr('disabled', true);
18
+ stop_pooling = false;
19
+ $("body").css("cursor", "progress");
20
+ clear_errors();
21
+ animate_progress();
22
+
23
+ $.ajax({
24
+ type:'POST',
25
+ url: url,
26
+ data: $('form').serialize(),
27
+ success: function(response){
28
+ if(response.redirect){
29
+ window.location.replace(response.redirect);
30
+ }
31
+ else{
32
+ $("#host-progress").hide();
33
+ $('#content').replaceWith($("#content", response));
34
+ $(document.body).trigger('ContentLoad');
35
+ if($("[data-history-url]").exists()){
36
+ history.pushState({}, "Host show", $("[data-history-url]").data('history-url'));
37
+ }
38
+ }
39
+ },
40
+ error: function(response){
41
+ $('#content').html(response.responseText);
42
+ },
43
+ complete: function(){
44
+ stop_pooling = true;
45
+ $("body").css("cursor", "auto");
46
+ $('#host_submit').attr('disabled', false);
47
+ }
48
+ });
49
+ return false;
50
+ }
51
+
52
+ $(document).off('submit').on('submit',"[data-submit='progress_bar']", function() {
53
+ submit_host();
54
+ return false;
55
+ });
56
+ };
57
+
58
+ $(document).on('change', 'fieldset#interface', function() { update_fencing_form(); });
59
+ $(document).on('change', '#fencing', function() { update_bmc_interface_form(); });
60
+
61
+ function get_value_from_network_interface_form(fieldset, field, html_input_type) {
62
+ label = fieldset.find("label[for='" + field + "']");
63
+ html_input = label.parent().find(html_input_type);
64
+
65
+ return html_input;
66
+ };
67
+
68
+ function get_bmc_interface_form() {
69
+ return $('fieldset#interface').filter(function(index, fieldset){
70
+ type = get_value_from_network_interface_form($(fieldset), 'type', 'select');
71
+ return type.val() == 'Nic::BMC';
72
+ });
73
+ }
74
+
75
+ function update_fencing_form() {
76
+ bmc_fieldset = get_bmc_interface_form();
77
+ if (bmc_fieldset.length == 0) {
78
+ disable_fencing_form();
79
+ return;
80
+ } else {
81
+ enable_fencing_form();
82
+ }
83
+
84
+ selected_provider = get_value_from_network_interface_form(bmc_fieldset, 'provider', 'select');
85
+
86
+ ip = get_value_from_network_interface_form(bmc_fieldset, 'ip', 'input').val();
87
+ $('#host_fencing_attrs_fence_ipmilan_address').val(ip);
88
+ username = get_value_from_network_interface_form(bmc_fieldset, 'username', 'input').val();
89
+ $('#host_fencing_attrs_fence_ipmilan_username').val(username);
90
+ password = get_value_from_network_interface_form(bmc_fieldset, 'password', 'input').val();
91
+ $('#host_fencing_attrs_fence_ipmilan_password').val(password);
92
+ };
93
+
94
+ function update_bmc_interface_form() {
95
+ bmc_fieldset = get_bmc_interface_form();
96
+ selected_provider = get_value_from_network_interface_form(bmc_fieldset, 'provider', 'select');
97
+
98
+ ip = $('#host_fencing_attrs_fence_ipmilan_address').val();
99
+ get_value_from_network_interface_form(bmc_fieldset, 'ip', 'input').val(ip);
100
+ username = $('#host_fencing_attrs_fence_ipmilan_username').val();
101
+ get_value_from_network_interface_form(bmc_fieldset, 'username', 'input').val(username);
102
+ password = $('#host_fencing_attrs_fence_ipmilan_password').val();
103
+ get_value_from_network_interface_form(bmc_fieldset, 'password', 'input').val(password);
104
+ };
105
+
106
+ function disable_fencing_form() {
107
+ $('#fencing_form').hide();
108
+ $('#fencing_disabled_notice').show();
109
+ };
110
+
111
+ function enable_fencing_form() {
112
+ $('#fencing_disabled_notice').hide();
113
+ $('#fencing_form').show();
114
+ };
@@ -0,0 +1,17 @@
1
+ module Staypuft
2
+ class HostsController < ::HostsController
3
+
4
+ before_filter :set_fencing_params, only: 'update'
5
+
6
+ private
7
+ def set_fencing_params
8
+ fencing_params = params['host'].delete('fencing')
9
+
10
+ if fencing_params['attrs']['fencing_enabled'] == '1'
11
+ host_attrs = params['host']['interfaces_attributes'].values.find{|host_attrs| host_attrs['provider'] == 'IPMI'}
12
+ host_attrs.merge!(fencing_params)
13
+ end
14
+ end
15
+
16
+ end
17
+ end
@@ -30,7 +30,8 @@ module Staypuft
30
30
  text = options.delete(:text)
31
31
  checked_value = options.delete(:checked_value)
32
32
  unchecked_value = options.delete(:unchecked_value)
33
- content_tag(:div, :class => 'checkbox') do
33
+ group_class = options.delete(:group_class)
34
+ content_tag(:div, :class => "checkbox #{group_class}") do
34
35
  label_tag('') do
35
36
  f.check_box(attr, options, checked_value, unchecked_value) + " #{text} "
36
37
  end
@@ -49,6 +49,11 @@ module Staypuft
49
49
  interface_hash_for_host(host, subnet_type_name)[:interface]
50
50
  end
51
51
 
52
+ def network_address_for_host(host, subnet_type_name)
53
+ subnet = interface_hash_for_host(host, subnet_type_name)[:subnet]
54
+ subnet.network_address if subnet
55
+ end
56
+
52
57
  def controllers
53
58
  @controllers ||= @deployment.controller_hostgroup.hosts.order(:id)
54
59
  end
@@ -81,7 +86,8 @@ module Staypuft
81
86
  end
82
87
 
83
88
  class Jail < Safemode::Jail
84
- allow :ip_for_host, :interface_for_host, :controller_ip, :controller_ips, :controller_fqdns, :get_vip
89
+ allow :ip_for_host, :interface_for_host, :network_address_for_host,
90
+ :controller_ip, :controller_ips, :controller_fqdns, :get_vip
85
91
  end
86
92
 
87
93
  private
@@ -294,6 +294,20 @@ module Staypuft
294
294
  # Keystone
295
295
  keystonerc = 'true'
296
296
 
297
+ # Ceph
298
+ ceph_cluster_network = { :string => "<%= @host.deployment.network_query.network_address_for_host(@host, '#{Staypuft::SubnetType::STORAGE_CLUSTERING}') %>" }
299
+ # FIXME: this should actually be STORAGE instead of PXE, but only after we have a reliable way of identifying DNS names
300
+ # on the storage network
301
+ ceph_public_network = { :string => "<%= @host.deployment.network_query.network_address_for_host(@host, '#{Staypuft::SubnetType::PXE}') %>" }
302
+ ceph_fsid = { :string => '<%= @host.deployment.ceph.fsid %>' }
303
+ ceph_images_key = { :string => '<%= @host.deployment.ceph.images_key %>' }
304
+ ceph_volumes_key = { :string => '<%= @host.deployment.ceph.volumes_key %>' }
305
+ # FIXME: this should move to STORAGE from PXE like above
306
+ ceph_mon_host = { :array => "<%= @host.deployment.network_query.controller_ips('#{Staypuft::SubnetType::PXE}') %>" }
307
+ # FIXME: This is currently the hostnames (which maps to fqdns on the PXE network) -- eventually we want DNS names
308
+ # on the Storage network
309
+ ceph_mon_initial_members = { :array => "<%= @host.deployment.ceph.mon_initial_members %>" }
310
+
297
311
  # effective_value grabs shared password if deployment is in shared password mode,
298
312
  # otherwise use the service-specific one
299
313
  admin_pw = { :string => '<%= @host.deployment.passwords.effective_value(:admin) %>' }
@@ -341,9 +355,26 @@ module Staypuft
341
355
  controller_priv_host = { :string => "<%= d = @host.deployment; d.ha? ? nil : d.network_query.controller_ip('#{Staypuft::SubnetType::MANAGEMENT}') %>"}
342
356
  controller_pub_host = { :string => "<%= d = @host.deployment; d.ha? ? nil : d.network_query.controller_ip('#{Staypuft::SubnetType::PUBLIC_API}') %>"}
343
357
 
358
+ fencing_type = { :string => '<%= @host.bmc_nic.attrs["fencing_type"] if @host.bmc_nic && @host.bmc_nic.fencing_enabled? %>' }
359
+ fence_ipmilan_address = { :string => '<%= @host.bmc_nic.ip if @host.bmc_nic && @host.bmc_nic.fencing_enabled? %>' }
360
+ fence_ipmilan_username = { :string => '<%= @host.bmc_nic.username if @host.bmc_nic && @host.bmc_nic.fencing_enabled? %>' }
361
+ fence_ipmilan_password = { :string => '<%= @host.bmc_nic.password if @host.bmc_nic && @host.bmc_nic.fencing_enabled? %>' }
362
+ fence_ipmilan_interval = { :string => '<%= "60s" if @host.bmc_nic && @host.bmc_nic.fencing_enabled? %>' }
363
+ fence_ipmilan_hostlist = { :string => '<%= "" if @host.bmc_nic && @host.bmc_nic.fencing_enabled? %>' }
364
+ fence_ipmilan_host_to_address = { :array => '<%= [] if @host.bmc_nic && @host.bmc_nic.fencing_enabled? %>' }
365
+ fence_ipmilan_expose_lanplus = { :string => '<%= @host.bmc_nic.expose_lanplus? if @host.bmc_nic && @host.bmc_nic.fencing_enabled? %>' }
366
+ fence_ipmilan_lanplus_options = { :string => '<%= @host.bmc_nic.attrs["fence_ipmilan_lanplus_options"] if @host.bmc_nic && @host.bmc_nic.fencing_enabled? %>' }
367
+
344
368
  {
345
369
  'quickstack::nova_network::controller' => {
346
370
  'amqp_provider' => amqp_provider,
371
+ 'ceph_cluster_network' => ceph_cluster_network,
372
+ 'ceph_public_network' => ceph_public_network,
373
+ 'ceph_fsid' => ceph_fsid,
374
+ 'ceph_images_key' => ceph_images_key,
375
+ 'ceph_volumes_key' => ceph_volumes_key,
376
+ 'ceph_mon_host' => ceph_mon_host,
377
+ 'ceph_mon_initial_members' => ceph_mon_initial_members,
347
378
  'cinder_backend_gluster' => cinder_backend_gluster,
348
379
  'cinder_backend_gluster_name' => cinder_backend_gluster_name,
349
380
  'cinder_backend_iscsi' => cinder_backend_iscsi,
@@ -406,6 +437,13 @@ module Staypuft
406
437
  'controller_pub_host' => controller_pub_host },
407
438
  'quickstack::neutron::controller' => {
408
439
  'amqp_provider' => amqp_provider,
440
+ 'ceph_cluster_network' => ceph_cluster_network,
441
+ 'ceph_public_network' => ceph_public_network,
442
+ 'ceph_fsid' => ceph_fsid,
443
+ 'ceph_images_key' => ceph_images_key,
444
+ 'ceph_volumes_key' => ceph_volumes_key,
445
+ 'ceph_mon_host' => ceph_mon_host,
446
+ 'ceph_mon_initial_members' => ceph_mon_initial_members,
409
447
  'tenant_network_type' => tenant_network_type,
410
448
  'ml2_network_vlan_ranges' => ml2_network_vlan_ranges,
411
449
  'ml2_tenant_network_types' => ml2_tenant_network_types,
@@ -482,6 +520,13 @@ module Staypuft
482
520
  'include_neutron' => neutron,
483
521
  'neutron' => neutron,
484
522
  'ceilometer_user_password' => ceilometer_user_pw,
523
+ 'ceph_cluster_network' => ceph_cluster_network,
524
+ 'ceph_public_network' => ceph_public_network,
525
+ 'ceph_fsid' => ceph_fsid,
526
+ 'ceph_images_key' => ceph_images_key,
527
+ 'ceph_volumes_key' => ceph_volumes_key,
528
+ 'ceph_mon_host' => ceph_mon_host,
529
+ 'ceph_mon_initial_members' => ceph_mon_initial_members,
485
530
  'cinder_db_password' => cinder_db_pw,
486
531
  'cinder_user_password' => cinder_user_pw,
487
532
  'glance_db_password' => glance_db_pw,
@@ -535,7 +580,16 @@ module Staypuft
535
580
  'lb_backend_server_addrs' => { :array => "<%= @host.deployment.network_query.controller_ips('#{Staypuft::SubnetType::MANAGEMENT}') %>" },
536
581
  'lb_backend_server_names' => { :array => '<%= @host.deployment.network_query.controller_fqdns %>' } },
537
582
  'quickstack::pacemaker::common' => {
538
- 'pacemaker_cluster_members' => { :string => "<%= @host.deployment.network_query.controller_ips('#{Staypuft::SubnetType::MANAGEMENT}').join(' ') %>" } },
583
+ 'pacemaker_cluster_members' => { :string => "<%= @host.deployment.network_query.controller_ips('#{Staypuft::SubnetType::MANAGEMENT}').join(' ') %>" },
584
+ 'fencing_type' => fencing_type,
585
+ 'fence_ipmilan_address' => fence_ipmilan_address,
586
+ 'fence_ipmilan_username' => fence_ipmilan_username,
587
+ 'fence_ipmilan_password' => fence_ipmilan_password,
588
+ 'fence_ipmilan_interval' => fence_ipmilan_interval,
589
+ 'fence_ipmilan_hostlist' => fence_ipmilan_hostlist,
590
+ 'fence_ipmilan_host_to_address' => fence_ipmilan_host_to_address,
591
+ 'fence_ipmilan_expose_lanplus' => fence_ipmilan_expose_lanplus,
592
+ 'fence_ipmilan_lanplus_options' => fence_ipmilan_lanplus_options },
539
593
  'quickstack::pacemaker::neutron' => {
540
594
  'ml2_network_vlan_ranges' => ml2_network_vlan_ranges,
541
595
  'ml2_tenant_network_types' => ml2_tenant_network_types,
@@ -618,6 +672,13 @@ module Staypuft
618
672
  'quickstack::nova_network::compute' => {
619
673
  'amqp_provider' => amqp_provider,
620
674
  'ceilometer' => ceilometer,
675
+ 'ceph_cluster_network' => ceph_cluster_network,
676
+ 'ceph_public_network' => ceph_public_network,
677
+ 'ceph_fsid' => ceph_fsid,
678
+ 'ceph_images_key' => ceph_images_key,
679
+ 'ceph_volumes_key' => ceph_volumes_key,
680
+ 'ceph_mon_host' => ceph_mon_host,
681
+ 'ceph_mon_initial_members' => ceph_mon_initial_members,
621
682
  'cinder_backend_gluster' => cinder_backend_gluster,
622
683
  'cinder_backend_nfs' => cinder_backend_nfs,
623
684
  'cinder_backend_rbd' => cinder_backend_rbd,
@@ -646,6 +707,13 @@ module Staypuft
646
707
  'quickstack::neutron::compute' => {
647
708
  'amqp_provider' => amqp_provider,
648
709
  'ceilometer' => ceilometer,
710
+ 'ceph_cluster_network' => ceph_cluster_network,
711
+ 'ceph_public_network' => ceph_public_network,
712
+ 'ceph_fsid' => ceph_fsid,
713
+ 'ceph_images_key' => ceph_images_key,
714
+ 'ceph_volumes_key' => ceph_volumes_key,
715
+ 'ceph_mon_host' => ceph_mon_host,
716
+ 'ceph_mon_initial_members' => ceph_mon_initial_members,
649
717
  'cinder_backend_gluster' => cinder_backend_gluster,
650
718
  'cinder_backend_nfs' => cinder_backend_nfs,
651
719
  'cinder_backend_rbd' => cinder_backend_rbd,
@@ -0,0 +1,28 @@
1
+ module Staypuft
2
+ module Concerns
3
+ module NicFencingExtensions
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ attr_accessible :attrs
8
+ end
9
+
10
+ def fencing_enabled?
11
+ attrs['fencing_enabled'] == '1'
12
+ end
13
+
14
+ def expose_lanplus?
15
+ attrs['fence_ipmilan_expose_lanplus'] == '1'
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+
22
+ class ::Host::Managed::Jail < Safemode::Jail
23
+ allow :bmc_nic
24
+ end
25
+
26
+ class ::Nic::Base::Jail < Safemode::Jail
27
+ allow :fencing_enabled?, :attrs, :username, :password, :expose_lanplus?
28
+ end
@@ -0,0 +1,33 @@
1
+ module Staypuft
2
+ class Deployment::CephService < Deployment::AbstractParamScope
3
+ def self.param_scope
4
+ 'ceph'
5
+ end
6
+
7
+ param_attr :fsid, :volumes_key, :images_key
8
+
9
+
10
+ class Jail < Safemode::Jail
11
+ allow :fsid, :volumes_key, :images_key, :mon_initial_members
12
+ end
13
+
14
+ def set_defaults
15
+ self.fsid = SecureRandom.uuid
16
+ key = ` ceph-authtool --gen-print-key`
17
+ key.chomp! if key
18
+ self.volumes_key = key
19
+ key = ` ceph-authtool --gen-print-key`
20
+ key.chomp! if key
21
+ self.images_key = key
22
+ end
23
+
24
+ def mon_initial_members
25
+ fqdns = deployment.network_query.controller_fqdns.map {|fqdn| fqdn.split(".").first}
26
+ end
27
+
28
+ def param_hash
29
+ { "fsid" => fsid, "volumes_key" => volumes_key, "images_key" => images_key }
30
+ end
31
+
32
+ end
33
+ end
@@ -145,9 +145,7 @@ module Staypuft
145
145
 
146
146
  def at_least_one_backend_selected
147
147
  params = BACKEND_TYPE_PARAMS.clone
148
- if self.deployment.ha?
149
- params.delete :backend_lvm
150
- end
148
+ params.delete :backend_lvm if self.deployment.ha?
151
149
  unless params.detect(lambda { false }) { |field| self.send(field) == "true" }
152
150
  errors.add :base, _("At least one storage backend must be selected")
153
151
  end
@@ -13,7 +13,7 @@ module Staypuft
13
13
 
14
14
  # supporting import/export
15
15
  EXPORT_PARAMS = [:amqp_provider, :networking, :layout_name, :platform]
16
- EXPORT_SERVICES = [:nova, :neutron, :glance, :cinder, :passwords]
16
+ EXPORT_SERVICES = [:nova, :neutron, :glance, :cinder, :passwords, :ceph]
17
17
 
18
18
  attr_accessible :description, :name, :layout_id, :layout,
19
19
  :amqp_provider, :layout_name, :networking, :platform
@@ -60,7 +60,8 @@ module Staypuft
60
60
  [:neutron, :@neutron_service, NeutronService],
61
61
  [:glance, :@glance_service, GlanceService],
62
62
  [:cinder, :@cinder_service, CinderService],
63
- [:passwords, :@passwords, Passwords]]
63
+ [:passwords, :@passwords, Passwords],
64
+ [:ceph, :@ceph, CephService]]
64
65
 
65
66
  SCOPES.each do |name, ivar, scope_class|
66
67
  define_method name do
@@ -90,6 +91,7 @@ module Staypuft
90
91
  self.glance.set_defaults
91
92
  self.cinder.set_defaults
92
93
  self.passwords.set_defaults
94
+ self.ceph.set_defaults
93
95
  self.layout = Layout.where(:name => self.layout_name,
94
96
  :networking => self.networking).first
95
97
  end
@@ -195,7 +197,7 @@ module Staypuft
195
197
 
196
198
  class Jail < Safemode::Jail
197
199
  allow :amqp_provider, :networking, :layout_name, :platform, :nova_networking?, :neutron_networking?,
198
- :nova, :neutron, :glance, :cinder, :passwords, :ha?, :non_ha?,
200
+ :nova, :neutron, :glance, :cinder, :passwords, :ceph, :ha?, :non_ha?,
199
201
  :hide_ceph_notification?, :network_query
200
202
  end
201
203
 
@@ -0,0 +1,24 @@
1
+ # older deface requires code prefix for erb tags
2
+ if Gem.loaded_specs['deface'].version >= Gem::Version.new('1.0.0')
3
+ erb_tag = 'erb[loud]'
4
+ else
5
+ erb_tag = 'code[erb-loud]'
6
+ end
7
+
8
+ Deface::Override.new(:virtual_path => "hosts/_form",
9
+ :name => "include_custom_js_for_hosts_edit",
10
+ :insert_after => "erb[loud]:contains('form_for')",
11
+ :text => "<%= javascript 'staypuft/host_edit'%>"
12
+ )
13
+
14
+ Deface::Override.new(:virtual_path => "hosts/_form",
15
+ :name => "add_fencing_tab_to_hosts_edit",
16
+ :insert_after => "li > a[href='#network']",
17
+ :text => "<li><a href='#fencing' data-toggle='tab'><%= _('Fencing') %></a></li>"
18
+ )
19
+
20
+ Deface::Override.new(:virtual_path => "hosts/_unattended",
21
+ :name => "add_fencing_form_to_hosts_edit",
22
+ :insert_after => "#network",
23
+ :text => "<div class='tab-pane' id='fencing'><%= render 'hosts/fencing', :host => @host, :f => f %></div>"
24
+ )
@@ -0,0 +1,25 @@
1
+ <div id="fencing_form">
2
+ <%= f.fields_for :fencing do |fencing_fields| %>
3
+ <%= fencing_fields.fields_for :attrs do |attrs_fields| %>
4
+ <%= checkbox_f attrs_fields, :fencing_enabled,
5
+ label: _("Enable Fencing") %>
6
+ <%= select_f attrs_fields, :fencing_type, [_("IPMI")], :to_s, :to_s,
7
+ { include_blank: true },
8
+ { label: _("Type") } %>
9
+ <%= text_f attrs_fields, :fence_ipmilan_address,
10
+ label: _("IP Address") %>
11
+ <%= text_f attrs_fields, :fence_ipmilan_username,
12
+ label: _("Username")%>
13
+ <%= password_f attrs_fields, :fence_ipmilan_password,
14
+ label: _("Password"),
15
+ placeholder: '********' %>
16
+ <%= checkbox_f attrs_fields, :fence_ipmilan_expose_lanplus,
17
+ label: _("Expose Lanplus") %>
18
+ <%= text_f attrs_fields, :fence_ipmilan_lanplus_options,
19
+ label: _("Lanplus Options") %>
20
+ <% end %>
21
+ <% end %>
22
+ </div>
23
+ <div id="fencing_disabled_notice" style="display: none;">
24
+ <%= _("Fencing is disabled. To enable, first you need to add a BMC interface to the Host.") %>
25
+ </div>
@@ -7,7 +7,7 @@
7
7
  <%= check_box_f_non_inline(p, :backend_nfs,
8
8
  :checked_value => 'true',
9
9
  :unchecked_value => 'false',
10
- :text => "NFS")
10
+ :text => _(Staypuft::Deployment::CinderService::DriverBackend::LABELS['nfs']))
11
11
  %>
12
12
  <div class="cinder_nfs_uri col-md-offset-1 hide">
13
13
 
@@ -20,19 +20,21 @@
20
20
  <%= check_box_f_non_inline(p, :backend_lvm,
21
21
  :checked_value => 'true',
22
22
  :unchecked_value => 'false',
23
- :text => "LVM")
23
+ :checked => @deployment.cinder.lvm_backend?,
24
+ :group_class => @deployment.ha? ? "hide" : "",
25
+ :text => _(Staypuft::Deployment::CinderService::DriverBackend::LABELS['lvm']))
24
26
  %>
25
27
 
26
28
  <%= check_box_f_non_inline(p, :backend_ceph,
27
29
  :checked_value => 'true',
28
30
  :unchecked_value => 'false',
29
- :text => "Ceph")
31
+ :text => _(Staypuft::Deployment::CinderService::DriverBackend::LABELS['ceph']))
30
32
  %>
31
33
 
32
34
  <%= check_box_f_non_inline(p, :backend_eqlx,
33
35
  :checked_value => 'true',
34
36
  :unchecked_value => 'false',
35
- :text => "EqualLogic")
37
+ :text => _(Staypuft::Deployment::CinderService::DriverBackend::LABELS['equallogic']))
36
38
  %>
37
39
  <div class="cinder_equallogic col-md-offset-1 hide">
38
40
  <div id="eqlxs" class="cinder_equallogic_picker">
data/config/routes.rb CHANGED
@@ -22,4 +22,10 @@ Rails.application.routes.draw do
22
22
 
23
23
  resources :subnet_typings, :only => [:create, :destroy, :update]
24
24
  end
25
+
26
+ constraints(:id => /[^\/]+/) do
27
+ scope 'staypuft', module: 'staypuft' do
28
+ resources :hosts, as: 'staypuft_hosts'
29
+ end
30
+ end
25
31
  end
@@ -38,6 +38,7 @@ module Staypuft
38
38
  ::Hostgroup.send :include, Staypuft::Concerns::HostgroupExtensions
39
39
  ::Environment.send :include, Staypuft::Concerns::EnvironmentExtensions
40
40
  ::LookupKey.send :include, Staypuft::Concerns::LookupKeyExtensions
41
+ ::Nic::Base.send :include, Staypuft::Concerns::NicFencingExtensions
41
42
 
42
43
  # preload all the Foreman's lib files but only in production
43
44
  if Rails.env.production?
@@ -1,3 +1,3 @@
1
1
  module Staypuft
2
- VERSION = '0.3.3'
2
+ VERSION = '0.3.4'
3
3
  end
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.3.3
4
+ version: 0.3.4
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-09-09 00:00:00.000000000 Z
11
+ date: 2014-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: foreman-tasks
@@ -88,6 +88,7 @@ extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
90
  - app/assets/javascripts/staypuft/nics_assignment.js
91
+ - app/assets/javascripts/staypuft/host_edit.js
91
92
  - app/assets/javascripts/staypuft/staypuft.js
92
93
  - app/assets/javascripts/staypuft/subnets_assignment.js
93
94
  - app/assets/stylesheets/staypuft/bootstrap_and_overrides.css.scss
@@ -95,6 +96,7 @@ files:
95
96
  - app/assets/stylesheets/staypuft/staypuft.css.scss
96
97
  - app/controllers/staypuft/application_controller.rb
97
98
  - app/controllers/staypuft/subnet_typings_controller.rb
99
+ - app/controllers/staypuft/hosts_controller.rb
98
100
  - app/controllers/staypuft/interface_assignments_controller.rb
99
101
  - app/controllers/staypuft/steps_controller.rb
100
102
  - app/controllers/staypuft/deployments_controller.rb
@@ -103,6 +105,7 @@ files:
103
105
  - app/models/staypuft/interface_assigner.rb
104
106
  - app/models/staypuft/role.rb
105
107
  - app/models/staypuft/deployment/vlan_range_values_validator.rb
108
+ - app/models/staypuft/deployment/ceph_service.rb
106
109
  - app/models/staypuft/deployment/nova_service.rb
107
110
  - app/models/staypuft/deployment/cinder_service.rb
108
111
  - app/models/staypuft/deployment/abstract_param_scope.rb
@@ -117,6 +120,7 @@ files:
117
120
  - app/models/staypuft/concerns/vip_nic_scopes.rb
118
121
  - app/models/staypuft/concerns/hostgroup_extensions.rb
119
122
  - app/models/staypuft/concerns/puppetclass_extensions.rb
123
+ - app/models/staypuft/concerns/nic_fencing_extensions.rb
120
124
  - app/models/staypuft/concerns/host_details_helper.rb
121
125
  - app/models/staypuft/concerns/subnet_ip_management.rb
122
126
  - app/models/staypuft/concerns/environment_extensions.rb
@@ -133,6 +137,7 @@ files:
133
137
  - app/models/staypuft/deployment_role_hostgroup.rb
134
138
  - app/models/setting/staypuft_provisioning.rb
135
139
  - app/overrides/customize_foreman_tasks_show_page.rb
140
+ - app/overrides/foreman_hosts_edit.rb
136
141
  - app/overrides/hide_subscription_manager_passwords.rb
137
142
  - app/lib/actions/staypuft/hostgroup/ordered_deploy.rb
138
143
  - app/lib/actions/staypuft/hostgroup/deploy.rb
@@ -150,6 +155,7 @@ files:
150
155
  - app/lib/staypuft/seeder.rb
151
156
  - app/lib/staypuft/exception.rb
152
157
  - app/lib/staypuft/deployment_param_exporter.rb
158
+ - app/views/hosts/_fencing.html.erb
153
159
  - app/views/staypuft/steps/_nova.html.erb
154
160
  - app/views/staypuft/steps/_neutron_non_ha.html.erb
155
161
  - app/views/staypuft/steps/services_overview.html.erb