staypuft 0.2.5 → 0.2.6
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 +4 -4
- data/app/assets/javascripts/staypuft/staypuft.js +9 -0
- data/app/lib/actions/staypuft/hostgroup/deploy.rb +38 -1
- data/app/lib/staypuft/seeder.rb +47 -37
- data/app/models/staypuft/role.rb +13 -0
- data/app/views/staypuft/deployments/_assigned_hosts.html.erb +7 -5
- data/app/views/staypuft/deployments/_deployed_hosts.html.erb +12 -10
- data/app/views/staypuft/deployments/_free_hosts.html.erb +9 -7
- data/app/views/staypuft/deployments/_hosts_filter.html.erb +3 -0
- data/db/migrate/20140825164900_add_orchestration_to_staypuft_role.rb +5 -0
- data/lib/staypuft/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f616a792efe16f83b8c83d62da0008a7fbe6afed
|
4
|
+
data.tar.gz: 186093722a498f08ea2143d61c6a0aa048268d04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8555b75382a71b0f8aa772f8cb40b7c6541c9e57af20774866456e07f960b45d886532895f727cf737480d1209082d2cc3faea0e7a62533206b8b27eebeffb6b
|
7
|
+
data.tar.gz: 77fdbd263442637f2902a7f7d34f998b8b3bb32db6c07234c1f4349a29804a8ac2d5e7f95a91ce50aa32e8c07deca192800576781c0d3f629f27b3e794ca8f91
|
@@ -201,5 +201,14 @@ $(function () {
|
|
201
201
|
$("#undeploy_hosts_modal").attr("disabled", !deployed_host_checkboxes.is(":checked"));
|
202
202
|
});
|
203
203
|
|
204
|
+
var hosts_filter = $('.hosts_filter');
|
205
|
+
hosts_filter.keyup(function () {
|
206
|
+
var rex = new RegExp($(this).val(), 'i');
|
207
|
+
$('.searchable tr').hide();
|
208
|
+
$('.searchable tr').filter(function () {
|
209
|
+
return rex.test($(this).text());
|
210
|
+
}).show();
|
211
|
+
});
|
204
212
|
|
213
|
+
$('.inner-nav').click(function(){ hosts_filter.val("").keyup(); });
|
205
214
|
});
|
@@ -26,12 +26,49 @@ module Actions
|
|
26
26
|
# hostgroup.hosts returns already converted hosts from Host::Discovered with build flag
|
27
27
|
# set to false so they are not built when assigned to the hostgroup in wizard
|
28
28
|
# run Hostgroup's Hosts filtered by hosts
|
29
|
-
|
29
|
+
host_list = hostgroup.hosts & hosts
|
30
|
+
orchestration_mode = hostgroup.role.orchestration unless hostgroup.role.nil?
|
31
|
+
|
32
|
+
case orchestration_mode
|
33
|
+
when ::Staypuft::Role::ORCHESTRATION_CONCURRENT
|
34
|
+
deploy_concurrently(host_list)
|
35
|
+
when ::Staypuft::Role::ORCHESTRATION_SERIAL
|
36
|
+
deploy_serially(host_list)
|
37
|
+
when ::Staypuft::Role::ORCHESTRATION_LEADER
|
38
|
+
deploy_leader_first(host_list)
|
39
|
+
else
|
40
|
+
deploy_concurrently(host_list)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def deploy_concurrently(hosts)
|
45
|
+
hosts.each do |host|
|
30
46
|
# planned in concurrence
|
31
47
|
plan_action Host::Deploy, host
|
32
48
|
end
|
33
49
|
end
|
34
50
|
|
51
|
+
def deploy_serially(hosts)
|
52
|
+
sequence do
|
53
|
+
hosts.each do |host|
|
54
|
+
plan_action Host::Deploy, host
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def deploy_leader_first(hosts)
|
60
|
+
first_host = hosts.shift
|
61
|
+
sequence do
|
62
|
+
#deploy first host, then deploy remainder in parallel
|
63
|
+
plan_action Host::Deploy, first_host unless first_host.nil?
|
64
|
+
concurrence do
|
65
|
+
hosts.each do |host|
|
66
|
+
plan_action Host::Deploy, host
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
35
72
|
def humanized_input
|
36
73
|
input[:name]
|
37
74
|
end
|
data/app/lib/staypuft/seeder.rb
CHANGED
@@ -112,42 +112,50 @@ module Staypuft
|
|
112
112
|
# until we get the real list of roles per layout
|
113
113
|
# layout refs below specify layout keys from layouts hash
|
114
114
|
ROLES = [
|
115
|
-
{ :name
|
116
|
-
:class
|
117
|
-
:layouts
|
118
|
-
:services
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
:
|
123
|
-
:
|
124
|
-
|
125
|
-
:
|
126
|
-
|
127
|
-
:
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
:
|
132
|
-
|
133
|
-
|
134
|
-
:
|
135
|
-
:
|
136
|
-
:
|
137
|
-
{ :name
|
138
|
-
:class
|
139
|
-
:layouts
|
140
|
-
:services
|
141
|
-
|
142
|
-
|
143
|
-
:
|
144
|
-
:
|
145
|
-
|
146
|
-
:
|
147
|
-
|
148
|
-
:
|
149
|
-
|
150
|
-
|
115
|
+
{ :name => 'Controller (Nova)',
|
116
|
+
:class => 'quickstack::nova_network::controller',
|
117
|
+
:layouts => [[:non_ha_nova, 1]],
|
118
|
+
:services => [:non_ha_amqp, :mysql, :non_ha_keystone, :nova_controller, :non_ha_glance,
|
119
|
+
:cinder_controller, :heat, :ceilometer],
|
120
|
+
:orchestration => 'concurrent' },
|
121
|
+
{ :name => 'Compute (Nova)',
|
122
|
+
:class => [],
|
123
|
+
:layouts => [[:ha_nova, 10], [:non_ha_nova, 10]],
|
124
|
+
:services => [:nova_compute],
|
125
|
+
:orchestration => 'leader' },
|
126
|
+
{ :name => 'Controller (Neutron)',
|
127
|
+
:class => 'quickstack::neutron::controller',
|
128
|
+
:layouts => [[:non_ha_neutron, 1]],
|
129
|
+
:services => [:non_ha_amqp, :mysql, :non_ha_keystone, :neutron_controller, :non_ha_glance,
|
130
|
+
:cinder_controller, :heat, :ceilometer],
|
131
|
+
:orchestration => 'concurrent' },
|
132
|
+
{ :name => 'Compute (Neutron)',
|
133
|
+
:class => [],
|
134
|
+
:layouts => [[:ha_neutron, 10], [:non_ha_neutron, 10]],
|
135
|
+
:services => [:neutron_compute],
|
136
|
+
:orchestration => 'concurrent' },
|
137
|
+
{ :name => 'Neutron Networker',
|
138
|
+
:class => [],
|
139
|
+
:layouts => [[:non_ha_neutron, 3]],
|
140
|
+
:services => [:neutron_networker],
|
141
|
+
:orchestration => 'concurrent' },
|
142
|
+
{ :name => 'Cinder Block Storage',
|
143
|
+
:class => [],
|
144
|
+
:layouts => [],
|
145
|
+
:services => [:cinder_node],
|
146
|
+
:orchestration => 'concurrent' },
|
147
|
+
{ :name => 'Swift Storage Node',
|
148
|
+
:class => [],
|
149
|
+
:layouts => [],
|
150
|
+
:services => [:swift],
|
151
|
+
:orchestration => 'concurrent' },
|
152
|
+
{ :name => 'HA Controller',
|
153
|
+
:class => [],
|
154
|
+
:layouts => [[:ha_nova, 1], [:ha_neutron, 1]],
|
155
|
+
:services => [:ha_controller, :keystone_ha, :load_balancer_ha, :memcached_ha, :qpid_ha,
|
156
|
+
:glance_ha, :nova_ha, :heat_ha, :cinder_ha, :swift_ha, :horizon_ha, :mysql_ha,
|
157
|
+
:neutron_ha, :galera_ha],
|
158
|
+
:orchestration => 'concurrent' }]
|
151
159
|
|
152
160
|
CONTROLLER_ROLES = ROLES.select { |h| h.fetch(:name) =~ /Controller/ }
|
153
161
|
|
@@ -662,13 +670,15 @@ module Staypuft
|
|
662
670
|
|
663
671
|
def seed_roles
|
664
672
|
ROLES.each do |role_hash|
|
665
|
-
role = Staypuft::Role.where(:name => role_hash[:name]).
|
673
|
+
role = Staypuft::Role.where(:name => role_hash[:name]).first_or_initialize
|
666
674
|
|
667
675
|
puppet_classes = collect_puppet_classes(Array(role_hash[:class]))
|
668
676
|
puppet_classes.each { |pc| apply_astapor_defaults pc }
|
669
677
|
role.puppetclasses = puppet_classes
|
670
678
|
|
671
679
|
role.description = role_hash[:description]
|
680
|
+
role.orchestration = role_hash[:orchestration]
|
681
|
+
role.save!
|
672
682
|
old_role_services_arr = role.role_services.to_a
|
673
683
|
role_hash[:services].each do |key|
|
674
684
|
role_service = role.role_services.where(:service_id => SERVICES[key][:obj].id).first_or_create!
|
data/app/models/staypuft/role.rb
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
module Staypuft
|
2
2
|
class Role < ActiveRecord::Base
|
3
|
+
# until we have puppetssh, "run puppet" below means "provision and run puppet"
|
4
|
+
|
5
|
+
# run puppet on all nodes concurrently
|
6
|
+
ORCHESTRATION_CONCURRENT = "concurrent"
|
7
|
+
# run puppet on one node at a time
|
8
|
+
ORCHESTRATION_SERIAL = "serial"
|
9
|
+
# run puppet on the first mode, then the rest concurrently
|
10
|
+
ORCHESTRATION_LEADER = "leader"
|
11
|
+
|
12
|
+
ORCHESTRATION_MODES = [ORCHESTRATION_CONCURRENT, ORCHESTRATION_SERIAL, ORCHESTRATION_LEADER]
|
13
|
+
|
3
14
|
has_many :layout_roles, :dependent => :destroy
|
4
15
|
has_many :layouts, :through => :layout_roles
|
5
16
|
|
@@ -17,6 +28,8 @@ module Staypuft
|
|
17
28
|
|
18
29
|
validates :name, :presence => true, :uniqueness => true
|
19
30
|
|
31
|
+
validates :orchestration, :inclusion => {:in => ORCHESTRATION_MODES }
|
32
|
+
|
20
33
|
scope(:in_deployment, lambda do |deployment|
|
21
34
|
joins(:deployment_role_hostgroups).
|
22
35
|
where(DeploymentRoleHostgroup.table_name => { deployment_id: deployment })
|
@@ -1,12 +1,14 @@
|
|
1
1
|
<% if hosts.any? %>
|
2
|
+
<h4 class="pull-left"><%= _("Assigned Hosts") %></h4>
|
2
3
|
<div class="" id="table_assigned_hosts">
|
3
4
|
<%= form_tag(unassign_host_deployment_path(id: @deployment), class: 'form-horizontal association', method: 'post') do |f| %>
|
4
5
|
<div class="pull-right top_actions">
|
5
|
-
<%=
|
6
|
-
|
6
|
+
<%= render partial: "hosts_filter" %>
|
7
|
+
<div class="pull-right">
|
8
|
+
<%= submit_tag _("Configure Networks"), :class => "btn btn-default btn-sm", :style => "visibility: hidden" %>
|
9
|
+
<%= submit_tag _("Unassign Hosts"), :class => "btn btn-primary btn-sm", :disabled => true, :id => "unassign_hosts_button" %>
|
10
|
+
</div>
|
7
11
|
</div>
|
8
|
-
<h4 class="pull-left"><%= _("Assigned Hosts") %></h4>
|
9
|
-
<p class="clearfix"></p>
|
10
12
|
<table class="table table-bordered table-striped table-condensed">
|
11
13
|
<thead>
|
12
14
|
<tr>
|
@@ -21,7 +23,7 @@
|
|
21
23
|
<th class="hidden-s hidden-xs"><%= sort :ip, :as => _('IP Address') %></th>
|
22
24
|
</tr>
|
23
25
|
</thead>
|
24
|
-
<tbody>
|
26
|
+
<tbody class="searchable">
|
25
27
|
<% hosts.each do |host| %>
|
26
28
|
<tr class="checkbox_highlight">
|
27
29
|
<td class="ca">
|
@@ -1,17 +1,19 @@
|
|
1
1
|
<% if hosts.any? %>
|
2
|
+
<h4 class="pull-left"><%= _("Deployed Hosts") %></h4>
|
2
3
|
<div class="" id="table_deployed_hosts">
|
3
4
|
<%= form_tag(associate_host_deployment_path(id: @deployment), class: 'form-horizontal association') do |f| %>
|
4
5
|
<div class="pull-right top_actions">
|
5
|
-
<%=
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
<%= render partial: "hosts_filter" %>
|
7
|
+
<div class="pull-right">
|
8
|
+
<%= submit_tag _("Unassign Hosts"),
|
9
|
+
:class => "btn btn-danger btn-sm",
|
10
|
+
:'data-toggle' => "tooltip",
|
11
|
+
:'data-placement' => "left",
|
12
|
+
:id => "undeploy_hosts_modal",
|
13
|
+
:disabled => true,
|
14
|
+
:title => _("Unassigning deployed hosts may lead to unexpected problems.") %>
|
15
|
+
</div>
|
12
16
|
</div>
|
13
|
-
<h4 class="pull-left"><%= _("Deployed Hosts") %></h4>
|
14
|
-
<p class="clearfix"></p>
|
15
17
|
<table class="table table-bordered table-striped table-condensed">
|
16
18
|
<thead>
|
17
19
|
<tr>
|
@@ -25,7 +27,7 @@
|
|
25
27
|
<th><%= _("Last Report") %></th>
|
26
28
|
</tr>
|
27
29
|
</thead>
|
28
|
-
<tbody>
|
30
|
+
<tbody class="searchable">
|
29
31
|
<% hosts.each do |host| %>
|
30
32
|
<tr class="checkbox_highlight">
|
31
33
|
<td class="ca">
|
@@ -1,14 +1,16 @@
|
|
1
1
|
<% if hosts.exists? %>
|
2
|
+
<h4 class="pull-left"><%= _("Free Hosts") %></h4>
|
2
3
|
<div class="" id="table_free_hosts">
|
3
4
|
<%= form_tag(associate_host_deployment_path(id: @deployment), class: 'form-horizontal association') do |f| %>
|
4
5
|
<div class="pull-right top_actions">
|
5
|
-
<%=
|
6
|
-
<
|
7
|
-
|
8
|
-
|
6
|
+
<%= render partial: "hosts_filter" %>
|
7
|
+
<div class="pull-right">
|
8
|
+
<%= submit_tag _("Configure Networks"), :class => "btn btn-default btn-sm", :style => "visibility: hidden" %>
|
9
|
+
<button type="button" class= "btn btn-primary btn-sm"
|
10
|
+
id="assign_hosts_modal" data-toggle = "modal"
|
11
|
+
data-target = "#role_modal" disabled="true"><%= _("Assign Hosts") %></button>
|
12
|
+
</div>
|
9
13
|
</div>
|
10
|
-
<h4 class="pull-left"><%= _("Free Hosts") %></h4>
|
11
|
-
<p class="clearfix"></p>
|
12
14
|
<table class="table table-bordered table-striped table-condensed">
|
13
15
|
<thead>
|
14
16
|
<tr>
|
@@ -23,7 +25,7 @@
|
|
23
25
|
<th class="hidden-s hidden-xs"><%= sort :ip, :as => _('IP Address') %></th>
|
24
26
|
</tr>
|
25
27
|
</thead>
|
26
|
-
<tbody>
|
28
|
+
<tbody class="searchable">
|
27
29
|
<% hosts.each do |host| %>
|
28
30
|
<tr class="checkbox_highlight">
|
29
31
|
<td class="ca">
|
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.2.
|
4
|
+
version: 0.2.6
|
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-08-
|
11
|
+
date: 2014-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: foreman-tasks
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- app/views/staypuft/deployments/_deployment_overview.html.erb
|
148
148
|
- app/views/staypuft/deployments/_deployment_progress_page_header.html.erb
|
149
149
|
- app/views/staypuft/deployments/_free_hosts_table.html.erb
|
150
|
+
- app/views/staypuft/deployments/_hosts_filter.html.erb
|
150
151
|
- app/views/staypuft/deployments/_assigned_hosts.html.erb
|
151
152
|
- app/views/staypuft/deployments/_deployment_hosts.html.erb
|
152
153
|
- app/views/staypuft/deployments/show.html.erb
|
@@ -170,6 +171,7 @@ files:
|
|
170
171
|
- db/migrate/20140309021811_create_staypuft_layouts.rb
|
171
172
|
- db/migrate/20140310174152_create_staypuft_layout_roles.rb
|
172
173
|
- db/migrate/20140318163222_add_deploy_order_to_staypuft_layout_role.rb
|
174
|
+
- db/migrate/20140825164900_add_orchestration_to_staypuft_role.rb
|
173
175
|
- db/migrate/20140326032027_drop_staypuft_hostgroup_roles.rb
|
174
176
|
- db/migrate/20140623142500_remove_amqp_provider_from_staypuft_deployment.rb
|
175
177
|
- db/migrate/20140513124807_change_column_default_form_step_on_staypuft_deployment.rb
|