staypuft 0.3.3 → 0.3.4

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 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