staypuft 0.0.16 → 0.1.0
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 +7 -0
- data/app/assets/javascripts/staypuft/staypuft.js +8 -4
- data/app/controllers/staypuft/deployments_controller.rb +33 -5
- data/app/controllers/staypuft/steps_controller.rb +1 -1
- data/app/lib/staypuft/deployment_param_exporter.rb +37 -0
- data/app/lib/staypuft/deployment_param_importer.rb +46 -0
- data/app/models/staypuft/concerns/hostgroup_extensions.rb +1 -1
- data/app/models/staypuft/deployment.rb +19 -2
- data/app/models/staypuft/service/ui_params.rb +10 -35
- data/app/models/staypuft/service.rb +6 -1
- data/app/views/staypuft/deployments/_import_form.html.erb +11 -0
- data/app/views/staypuft/deployments/show.html.erb +43 -7
- data/app/views/staypuft/steps/deployment_settings.html.erb +8 -0
- data/config/routes.rb +2 -0
- data/db/migrate/20140602121501_add_amqp_provider_to_staypuft_deployment.rb +13 -0
- data/db/seeds.rb +17 -15
- data/lib/staypuft/version.rb +1 -1
- metadata +63 -69
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3838e8c00d0d5bb0470cfb8ec3ead91142f0dec7
|
4
|
+
data.tar.gz: ea81452c4bd0eb33f7d3e80483130b203b865683
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 68f8d5ba659d5126bb79d7545b50a05c3f4e63403b3454524c03b0bd2bde8bcfa8d0477c791ffbdc1eba53472a33536cb5d051eee8013e9f42320236cf5347c9
|
7
|
+
data.tar.gz: 3735abe4f8ab42404e9e1e05fea550bc1f9b20687702c38024d5af5c6c77f3c0db95b7cf9611e7b3ffae7a92b65ce0cd651177bc643f8c18dc3c5e2efa0d039a
|
@@ -12,15 +12,19 @@
|
|
12
12
|
//
|
13
13
|
//= require_tree .
|
14
14
|
|
15
|
-
$(function() {
|
15
|
+
$(function () {
|
16
16
|
// Check all checkboxes in table
|
17
|
-
$('#check_all').on('change', function(e) {
|
17
|
+
$('#check_all').on('change', function (e) {
|
18
18
|
var table = $(e.target).closest('table');
|
19
19
|
$('td input:checkbox', table).attr('checked', e.target.checked);
|
20
20
|
$('td input:checkbox', table).closest("tr").toggleClass("info", this.checked);
|
21
21
|
});
|
22
22
|
|
23
|
-
$("tr.checkbox_highlight input:checkbox").on('change', function(e) {
|
24
|
-
$(this).closest("tr")
|
23
|
+
$("tr.checkbox_highlight input:checkbox").on('change', function (e) {
|
24
|
+
var tr = $(this).closest("tr");
|
25
|
+
tr.toggleClass("info", this.checked);
|
26
|
+
if (tr.hasClass("deployed")) {
|
27
|
+
tr.toggleClass("danger", !this.checked);
|
28
|
+
}
|
25
29
|
});
|
26
30
|
});
|
@@ -9,7 +9,8 @@ module Staypuft
|
|
9
9
|
def new
|
10
10
|
base_hostgroup = Hostgroup.get_base_hostgroup
|
11
11
|
|
12
|
-
deployment = Deployment.new(:name => Deployment::NEW_NAME_PREFIX+SecureRandom.hex
|
12
|
+
deployment = Deployment.new(:name => Deployment::NEW_NAME_PREFIX+SecureRandom.hex,
|
13
|
+
:amqp_provider => Deployment::AMQP_RABBITMQ)
|
13
14
|
deployment.layout = Layout.where(:name => "Distributed",
|
14
15
|
:networking => "neutron").first
|
15
16
|
deployment_hostgroup = ::Hostgroup.new name: deployment.name, parent: base_hostgroup
|
@@ -53,8 +54,9 @@ module Staypuft
|
|
53
54
|
end
|
54
55
|
|
55
56
|
def associate_host
|
56
|
-
deployment
|
57
|
-
hostgroup
|
57
|
+
deployment = Deployment.find(params[:id])
|
58
|
+
hostgroup = ::Hostgroup.find params[:hostgroup_id]
|
59
|
+
deployment_in_progress = ForemanTasks::Lock.locked?(deployment, nil)
|
58
60
|
|
59
61
|
targeted_hosts = ::Host::Base.find Array(params[:host_ids])
|
60
62
|
assigned_hosts = hostgroup.hosts
|
@@ -76,14 +78,40 @@ module Staypuft
|
|
76
78
|
end
|
77
79
|
|
78
80
|
hosts_to_remove.each do |host|
|
79
|
-
host.
|
80
|
-
|
81
|
+
if host.open_stack_deployed? && deployment_in_progress
|
82
|
+
# do not remove
|
83
|
+
else
|
84
|
+
host.hostgroup = nil
|
85
|
+
host.environment = Environment.get_discovery
|
86
|
+
host.save!
|
87
|
+
host.setBuild
|
88
|
+
end
|
81
89
|
end
|
82
90
|
|
83
91
|
redirect_to show_with_hostgroup_selected_deployment_path(
|
84
92
|
id: deployment, hostgroup_id: hostgroup)
|
85
93
|
end
|
86
94
|
|
95
|
+
def export_config
|
96
|
+
@deployment = Deployment.find(params[:id])
|
97
|
+
send_data DeploymentParamExporter.new(@deployment).to_hash.to_yaml,
|
98
|
+
:type => "application/x-yaml", :disposition => 'attachment',
|
99
|
+
:filename => @deployment.name + '.yml'
|
100
|
+
end
|
101
|
+
|
102
|
+
def import_config
|
103
|
+
@deployment = Deployment.find(params[:id])
|
104
|
+
unless params[:deployment_config_file].nil?
|
105
|
+
new_config = YAML.load_file(params[:deployment_config_file].path)
|
106
|
+
DeploymentParamImporter.new(@deployment).import(new_config)
|
107
|
+
|
108
|
+
flash[:notice] = "Updated parameter values"
|
109
|
+
else
|
110
|
+
flash[:error] = "No import file specified"
|
111
|
+
end
|
112
|
+
redirect_to deployment_path(@deployment)
|
113
|
+
end
|
114
|
+
|
87
115
|
private
|
88
116
|
|
89
117
|
def assign_host_to_hostgroup(discovered_host, hostgroup)
|
@@ -25,7 +25,7 @@ module Staypuft
|
|
25
25
|
@deployment.form_step = Deployment::STEP_SETTINGS unless @deployment.form_complete?
|
26
26
|
@deployment.update_attributes(params[:staypuft_deployment])
|
27
27
|
@deployment.update_hostgroup_list
|
28
|
-
@deployment.
|
28
|
+
@deployment.set_custom_params
|
29
29
|
end
|
30
30
|
when :services_selection
|
31
31
|
@deployment.form_step = Deployment::STEP_SELECTION unless @deployment.form_complete?
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Staypuft
|
2
|
+
class DeploymentParamExporter
|
3
|
+
def initialize(deployment)
|
4
|
+
@deployment = deployment
|
5
|
+
end
|
6
|
+
|
7
|
+
def to_hash
|
8
|
+
{"deployment" => {"name" => @deployment.name, "services" => services}}
|
9
|
+
end
|
10
|
+
|
11
|
+
def services
|
12
|
+
@deployment.services_hostgroup_map.map { |one_service, hostgroup| service(one_service, hostgroup) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def service(one_service, hostgroup)
|
16
|
+
{ 'name' => one_service.name, 'params' => params(one_service, hostgroup) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def params(one_service, hostgroup)
|
20
|
+
one_service.ui_params_for_form(hostgroup).map do |param_hash|
|
21
|
+
param param_hash
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def param(param_hash)
|
26
|
+
value = param_hash[:hostgroup].current_param_value_str(param_hash[:param_key])
|
27
|
+
# force encoding needed to prevent to_yaml from outputting some strings as binary
|
28
|
+
value.force_encoding("UTF-8") if value.is_a? String
|
29
|
+
|
30
|
+
{ 'key' => param_hash[:param_key].key,
|
31
|
+
'role' => param_hash[:role].name,
|
32
|
+
'puppetclass' => param_hash[:puppetclass].name,
|
33
|
+
'value' => value }
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Staypuft
|
2
|
+
class DeploymentParamImporter
|
3
|
+
def initialize(deployment)
|
4
|
+
@deployment = deployment
|
5
|
+
end
|
6
|
+
|
7
|
+
def import(in_hash)
|
8
|
+
hostgroups = {}
|
9
|
+
puppetclasses = {}
|
10
|
+
deployment_node = in_hash['deployment']
|
11
|
+
unless deployment_node.nil? || (services = deployment_node['services']).nil?
|
12
|
+
services.each do |service_hash|
|
13
|
+
handle_service(service_hash, hostgroups, puppetclasses)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def handle_service(service_hash, hostgroups, puppetclasses)
|
19
|
+
unless (service_params = service_hash['params']).nil?
|
20
|
+
service_params.each do |param_hash|
|
21
|
+
handle_param(param_hash, hostgroups, puppetclasses)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def handle_param(param_hash, hostgroups, puppetclasses)
|
27
|
+
hostgroup = hostgroups[param_hash['role']]
|
28
|
+
if hostgroup.nil?
|
29
|
+
drh = DeploymentRoleHostgroup.includes(:hostgroup, :role).
|
30
|
+
where(:deployment_id => @deployment.id,
|
31
|
+
"staypuft_roles.name" => param_hash['role']).first
|
32
|
+
hostgroup = drh.hostgroup unless drh.nil?
|
33
|
+
end
|
34
|
+
puppetclass = (puppetclasses[param_hash['puppetclass']] ||=
|
35
|
+
Puppetclass.where(:name => param_hash['puppetclass']).first)
|
36
|
+
key = param_hash['key']
|
37
|
+
value = param_hash['value']
|
38
|
+
# skip if either hostgroup or puppetclass are nil
|
39
|
+
unless hostgroup.nil? || puppetclass.nil? || key.nil? || value.nil?
|
40
|
+
hostgroup.set_param_value_if_changed(puppetclass,
|
41
|
+
key,
|
42
|
+
value)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -3,7 +3,7 @@ module Staypuft::Concerns::HostgroupExtensions
|
|
3
3
|
|
4
4
|
included do
|
5
5
|
has_one :deployment_role_hostgroup, :dependent => :destroy, :class_name => 'Staypuft::DeploymentRoleHostgroup'
|
6
|
-
has_one :parent_deployment, :through => :deployment_role_hostgroup, :class_name => 'Staypuft::Deployment'
|
6
|
+
has_one :parent_deployment, :through => :deployment_role_hostgroup, :class_name => 'Staypuft::Deployment', :source => :deployment
|
7
7
|
has_one :role, :through => :deployment_role_hostgroup, :class_name => 'Staypuft::Role'
|
8
8
|
|
9
9
|
has_one :deployment, :class_name => 'Staypuft::Deployment', through: :deployment_role_hostgroup
|
@@ -10,7 +10,14 @@ module Staypuft
|
|
10
10
|
|
11
11
|
NEW_NAME_PREFIX="uninitialized_"
|
12
12
|
|
13
|
-
|
13
|
+
# amqp providers
|
14
|
+
AMQP_RABBITMQ = "rabbitmq"
|
15
|
+
AMQP_QPID = "qpid"
|
16
|
+
AMQP_PROVIDERS = [AMQP_RABBITMQ, AMQP_QPID]
|
17
|
+
AMQP_PROVIDER_LABELS = {AMQP_RABBITMQ => "RabbitMQ",
|
18
|
+
AMQP_QPID => "Qpid" }
|
19
|
+
|
20
|
+
attr_accessible :description, :name, :layout_id, :layout, :amqp_provider
|
14
21
|
after_save :update_hostgroup_name
|
15
22
|
after_validation :check_form_complete
|
16
23
|
|
@@ -38,6 +45,8 @@ module Staypuft
|
|
38
45
|
validates :layout, :presence => true
|
39
46
|
validates :hostgroup, :presence => true
|
40
47
|
|
48
|
+
validates :amqp_provider, :presence => true, :inclusion => {:in => AMQP_PROVIDERS }
|
49
|
+
|
41
50
|
# TODO(mtaylor)
|
42
51
|
# Use conditional validations to validate the deployment multi-step form.
|
43
52
|
# deployment.form_step should be used to check the form step the user is
|
@@ -89,9 +98,11 @@ module Staypuft
|
|
89
98
|
# If layout networking is set to 'neutron', then set include_neutron and
|
90
99
|
# neutron on the hostgroup if it includes the "quickstack::pacemaker::params"
|
91
100
|
# puppetclass
|
92
|
-
def
|
101
|
+
def set_custom_params
|
93
102
|
child_hostgroups.each do |the_hostgroup|
|
94
103
|
the_hostgroup.puppetclasses.each do |pclass|
|
104
|
+
|
105
|
+
# set params relating to neutron/nova networking choice
|
95
106
|
if pclass.class_params.where(:key => "include_neutron").first
|
96
107
|
the_hostgroup.set_param_value_if_changed(pclass, "include_neutron",
|
97
108
|
layout.networking == 'neutron')
|
@@ -100,6 +111,12 @@ module Staypuft
|
|
100
111
|
the_hostgroup.set_param_value_if_changed(pclass, "neutron",
|
101
112
|
layout.networking == 'neutron')
|
102
113
|
end
|
114
|
+
|
115
|
+
# set params relating to rabbitmq/qpid amqp choice
|
116
|
+
if pclass.class_params.where(:key => "amqp_server").first
|
117
|
+
the_hostgroup.set_param_value_if_changed(pclass, "amqp_server",
|
118
|
+
amqp_provider)
|
119
|
+
end
|
103
120
|
end
|
104
121
|
end
|
105
122
|
end
|
@@ -4,13 +4,14 @@
|
|
4
4
|
# just grab the first puppetclass from the matching hostgroup
|
5
5
|
|
6
6
|
Staypuft::Service::UI_PARAMS = {
|
7
|
-
'
|
8
|
-
'
|
9
|
-
'
|
10
|
-
'
|
11
|
-
'
|
12
|
-
'
|
13
|
-
'
|
7
|
+
'AMQP (non-HA)' => ['amqp_server',
|
8
|
+
'amqp_host',
|
9
|
+
'amqp_username',
|
10
|
+
'amqp_password',
|
11
|
+
'amqp_ca',
|
12
|
+
'amqp_cert',
|
13
|
+
'amqp_key',
|
14
|
+
'amqp_nssdb_password'],
|
14
15
|
'MySQL' => ['mysql_ca',
|
15
16
|
'mysql_cert',
|
16
17
|
'mysql_host',
|
@@ -87,7 +88,7 @@ Staypuft::Service::UI_PARAMS = {
|
|
87
88
|
'Cinder (controller)' => ['cinder_backend_gluster',
|
88
89
|
'cinder_backend_iscsi',
|
89
90
|
'cinder_db_password',
|
90
|
-
'
|
91
|
+
'cinder_gluster_peers',
|
91
92
|
'cinder_gluster_volume',
|
92
93
|
'cinder_user_password'],
|
93
94
|
'Heat' => ['heat_cfn',
|
@@ -96,31 +97,5 @@ Staypuft::Service::UI_PARAMS = {
|
|
96
97
|
'heat_user_password',
|
97
98
|
'heat_auth_encrypt_key'],
|
98
99
|
'Ceilometer' => ['ceilometer_metering_secret',
|
99
|
-
'ceilometer_user_password'
|
100
|
-
],
|
101
|
-
'Neutron - L3' => ['controller_priv_host',
|
102
|
-
'enable_tunneling',
|
103
|
-
'external_network_bridge',
|
104
|
-
'fixed_network_range',
|
105
|
-
'mysql_ca',
|
106
|
-
'mysql_host',
|
107
|
-
'neutron_db_password',
|
108
|
-
'neutron_metadata_proxy_secret',
|
109
|
-
'neutron_user_password',
|
110
|
-
'nova_db_password',
|
111
|
-
'nova_user_password',
|
112
|
-
'qpid_host',
|
113
|
-
'qpid_username',
|
114
|
-
'qpid_password',
|
115
|
-
'ssl',
|
116
|
-
'tenant_network_type',
|
117
|
-
'tunnel_id_ranges',
|
118
|
-
'verbose'],
|
119
|
-
'OVS' => ['ovs_bridge_mappings',
|
120
|
-
'ovs_bridge_uplinks',
|
121
|
-
'ovs_tunnel_iface',
|
122
|
-
'ovs_tunnel_network',
|
123
|
-
'ovs_tunnel_types',
|
124
|
-
'ovs_vlan_ranges',
|
125
|
-
'ovs_vxlan_udp_port'] }
|
100
|
+
'ceilometer_user_password'] }
|
126
101
|
|
@@ -13,6 +13,7 @@ module Staypuft
|
|
13
13
|
|
14
14
|
def ui_params_for_form(hostgroup)
|
15
15
|
return [] if (hostgroup.nil?)
|
16
|
+
role = hostgroup.role
|
16
17
|
if hostgroup.puppetclasses.blank?
|
17
18
|
params_from_hash = []
|
18
19
|
else
|
@@ -27,13 +28,17 @@ module Staypuft
|
|
27
28
|
end
|
28
29
|
param_lookup_key = param_puppetclass.class_params.where(:key => param_key).first
|
29
30
|
param_lookup_key.nil? ? nil : { :hostgroup => hostgroup,
|
31
|
+
:role => role,
|
30
32
|
:puppetclass => param_puppetclass,
|
31
33
|
:param_key => param_lookup_key }
|
32
34
|
end.compact
|
33
35
|
end
|
34
36
|
params_from_service = self.puppetclasses.collect do |pclass|
|
35
37
|
pclass.class_params.collect do |class_param|
|
36
|
-
{ :hostgroup => hostgroup,
|
38
|
+
{ :hostgroup => hostgroup,
|
39
|
+
:role => role,
|
40
|
+
:puppetclass => pclass,
|
41
|
+
:param_key => class_param }
|
37
42
|
end
|
38
43
|
end.flatten
|
39
44
|
params_from_hash + params_from_service
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<%= form_tag(import_config_deployment_path(@deployment.id),
|
2
|
+
multipart: true,
|
3
|
+
class: 'col-md-12',
|
4
|
+
id: 'import_config_form') do |f| %>
|
5
|
+
<%= file_field_tag :deployment_config_file,
|
6
|
+
class: 'btn btn-default deployment_config_file' %>
|
7
|
+
<br/>
|
8
|
+
<%= submit_tag _("Import Config"), :class => "btn btn-primary btn-sm pull-right" %>
|
9
|
+
<br/>
|
10
|
+
<br/>
|
11
|
+
<% end %>
|
@@ -7,7 +7,29 @@
|
|
7
7
|
else
|
8
8
|
deployment_steps_path(deployment_id: @deployment)
|
9
9
|
end) %>
|
10
|
-
|
10
|
+
<div class="btn-group dropdown keep-open">
|
11
|
+
<button type="button" class="btn btn-default dropdown-toggle" role="button" href="#"
|
12
|
+
data-toggle="dropdown" data-target="#">
|
13
|
+
<%= _('Configuration') %>
|
14
|
+
<span class="caret"></span>
|
15
|
+
</button>
|
16
|
+
<ul class="dropdown-menu dropdown keep-open" role="menu">
|
17
|
+
<li><%= link_to(_("Summary"), summary_deployment_path(@deployment.id), :class => '') %></li>
|
18
|
+
<li>
|
19
|
+
<%= link_to(icon_text("cloud-upload", _("Import")),
|
20
|
+
{},
|
21
|
+
{ :remote => true,
|
22
|
+
:rel => 'popover',
|
23
|
+
:data => { 'content' => "#{render partial: 'import_form'}",
|
24
|
+
'original-title' => _('Import Config'),
|
25
|
+
'placement' => 'left', } }) %>
|
26
|
+
</li>
|
27
|
+
<li>
|
28
|
+
<%= link_to(icon_text("cloud-download", _("Export")),
|
29
|
+
export_config_deployment_path(@deployment.id)) %>
|
30
|
+
</li>
|
31
|
+
</ul>
|
32
|
+
</div>
|
11
33
|
|
12
34
|
<% if Rails.env.development? %>
|
13
35
|
<div class="btn-group">
|
@@ -41,6 +63,8 @@
|
|
41
63
|
:'data-toggle' => "modal",
|
42
64
|
:'data-target' => "#deploy_modal") %>
|
43
65
|
<% end %>
|
66
|
+
|
67
|
+
|
44
68
|
<%= help_path %>
|
45
69
|
<% end %>
|
46
70
|
|
@@ -86,20 +110,25 @@
|
|
86
110
|
<%= check_box_tag :check_all %>
|
87
111
|
</th>
|
88
112
|
<th><%= sort :name, :as => _('Name') %></th>
|
113
|
+
<th class="hidden-s hidden-xs"><%= _('Deployed?') %></th>
|
89
114
|
<th class="hidden-s hidden-xs"><%= sort :mac, :as => _('MAC Address') %></th>
|
90
115
|
<th class="hidden-s hidden-xs"><%= sort :type, :as => _('Type') %></th>
|
91
116
|
</tr>
|
92
117
|
</thead>
|
93
118
|
<tbody>
|
94
119
|
<% child_hostgroup.own_and_free_hosts.each do |host| %>
|
95
|
-
<tr class="
|
120
|
+
<tr class="<%= ['checkbox_highlight',
|
121
|
+
('success' if child_hostgroup.host_ids.include?(host.id)),
|
122
|
+
('deployed' if host.open_stack_deployed?)
|
123
|
+
].compact.join(' ') %>">
|
96
124
|
<td class="ca">
|
125
|
+
<% disabled = ForemanTasks::Lock.locked?(@deployment, nil) && host.open_stack_deployed? %>
|
97
126
|
<%= check_box_tag 'host_ids[]',
|
98
127
|
host.id,
|
99
128
|
child_hostgroup.host_ids.include?(host.id),
|
100
|
-
:
|
101
|
-
:disabled
|
102
|
-
<%= hidden_field_tag 'host_ids[]', host.id if
|
129
|
+
id: "host_ids_#{host.id}",
|
130
|
+
disabled: disabled %>
|
131
|
+
<%= hidden_field_tag 'host_ids[]', host.id if disabled %>
|
103
132
|
</td>
|
104
133
|
<td class="ellipsis">
|
105
134
|
<% case host %>
|
@@ -111,6 +140,13 @@
|
|
111
140
|
<%= host.name %>
|
112
141
|
<% end %>
|
113
142
|
</td>
|
143
|
+
<td class="hidden-s hidden-xs">
|
144
|
+
<% if host.open_stack_deployed? %>
|
145
|
+
<span class="glyphicon glyphicon-cloud"></span>
|
146
|
+
<% else %>
|
147
|
+
<span class="glyphicon glyphicon-minus"></span>
|
148
|
+
<% end %>
|
149
|
+
</td>
|
114
150
|
<td class="hidden-s hidden-xs"><%= host.mac %></td>
|
115
151
|
<td class="hidden-s hidden-xs"><%= host.type %></td>
|
116
152
|
</tr>
|
@@ -148,9 +184,9 @@
|
|
148
184
|
<button type="button" class="btn btn-default" data-dismiss="modal"><%= _("Cancel") %></button>
|
149
185
|
<%= display_link_if_authorized(_("Deploy"),
|
150
186
|
hash_for_deploy_deployment_path,
|
151
|
-
:class
|
187
|
+
:class => 'btn btn-primary',
|
152
188
|
:method => :post,
|
153
|
-
:data
|
189
|
+
:data => { :disable_with => _("Deploying...") }) %>
|
154
190
|
</div>
|
155
191
|
</div>
|
156
192
|
</div>
|
@@ -21,6 +21,14 @@
|
|
21
21
|
<% end %>
|
22
22
|
</div>
|
23
23
|
</div>
|
24
|
+
<div class="form-group">
|
25
|
+
<label class="col-md-2 control-label" for="layout_id"><%= _("AMQP Provider") %></label>
|
26
|
+
<div class="col-md-6">
|
27
|
+
<% Staypuft::Deployment::AMQP_PROVIDER_LABELS.each do |provider_value, provider_label| %>
|
28
|
+
<%= radio_button_f_non_inline(f, :amqp_provider, :checked => provider_value == @deployment.amqp_provider,:value=>provider_value, :text=> provider_label) %>
|
29
|
+
<% end %>
|
30
|
+
</div>
|
31
|
+
</div>
|
24
32
|
</div>
|
25
33
|
</div>
|
26
34
|
|
data/config/routes.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
class AddAmqpProviderToStaypuftDeployment < ActiveRecord::Migration
|
2
|
+
Deployment = Class.new(ActiveRecord::Base) do
|
3
|
+
self.table_name = 'staypuft_deployments'
|
4
|
+
end
|
5
|
+
|
6
|
+
def change
|
7
|
+
add_column :staypuft_deployments, :amqp_provider, :string
|
8
|
+
|
9
|
+
Deployment.update_all :amqp_provider => 'rabbitmq'
|
10
|
+
|
11
|
+
change_column :staypuft_deployments, :amqp_provider, :string, :null => false
|
12
|
+
end
|
13
|
+
end
|
data/db/seeds.rb
CHANGED
@@ -67,9 +67,10 @@ params = {
|
|
67
67
|
'mysql_shared_storage_type' => 'nfs',
|
68
68
|
'mysql_resource_group_name' => 'mysqlgrp',
|
69
69
|
'mysql_clu_member_addrs' => '192.168.203.11 192.168.203.12 192.168.203.13',
|
70
|
-
|
71
|
-
'
|
72
|
-
'
|
70
|
+
"amqp_server" => 'rabbitmq',
|
71
|
+
'amqp_host' => '172.16.0.1',
|
72
|
+
'amqp_username' => 'openstack',
|
73
|
+
'amqp_password' => SecureRandom.hex,
|
73
74
|
'admin_email' => "admin@#{Facter.value(:domain)}",
|
74
75
|
'neutron_metadata_proxy_secret' => SecureRandom.hex,
|
75
76
|
'enable_ovs_agent' => 'true',
|
@@ -100,15 +101,17 @@ params = {
|
|
100
101
|
'mysql_ca' => '/etc/ipa/ca.crt',
|
101
102
|
'mysql_cert' => '/etc/pki/tls/certs/PRIV_HOST-mysql.crt',
|
102
103
|
'mysql_key' => '/etc/pki/tls/private/PRIV_HOST-mysql.key',
|
103
|
-
'
|
104
|
-
'
|
105
|
-
'
|
104
|
+
'amqp_ca' => '/etc/ipa/ca.crt',
|
105
|
+
'amqp_cert' => '/etc/pki/tls/certs/PRIV_HOST-amqp.crt',
|
106
|
+
'amqp_key' => '/etc/pki/tls/private/PRIV_HOST-amqp.key',
|
106
107
|
'horizon_ca' => '/etc/ipa/ca.crt',
|
107
108
|
'horizon_cert' => '/etc/pki/tls/certs/PUB_HOST-horizon.crt',
|
108
109
|
'horizon_key' => '/etc/pki/tls/private/PUB_HOST-horizon.key',
|
109
|
-
'
|
110
|
+
'amqp_nssdb_password' => SecureRandom.hex,
|
110
111
|
'fence_xvm_key_file_password' => SecureRandom.hex,
|
111
112
|
'use_qemu_for_poc' => 'false',
|
113
|
+
'secret_key' => SecureRandom.hex,
|
114
|
+
'admin_token' => SecureRandom.hex,
|
112
115
|
}
|
113
116
|
|
114
117
|
get_key_type = lambda do |value|
|
@@ -137,7 +140,7 @@ layouts = {
|
|
137
140
|
|
138
141
|
# services don't have puppetclasses yet, since they aren't broken out on the back end
|
139
142
|
services = {
|
140
|
-
:
|
143
|
+
:non_ha_amqp => { :name => 'AMQP (non-HA)', :class => [] },
|
141
144
|
:mysql => { :name => 'MySQL', :class => [] },
|
142
145
|
:non_ha_keystone => { :name => 'Keystone (non-HA)', :class => [] },
|
143
146
|
:nova_controller => { :name => 'Nova (Controller)', :class => [] },
|
@@ -147,8 +150,7 @@ services = {
|
|
147
150
|
:cinder_node => { :name => 'Cinder (node)', :class => ['quickstack::storage_backend::lvm_cinder'] },
|
148
151
|
:heat => { :name => 'Heat', :class => [] },
|
149
152
|
:ceilometer => { :name => 'Ceilometer', :class => [] },
|
150
|
-
:
|
151
|
-
:ovs => { :name => 'OVS', :class => [] },
|
153
|
+
:neutron_networker => { :name => 'Neutron Networker', :class => ['quickstack::neutron::networker'] },
|
152
154
|
:nova_compute => { :name => 'Nova-compute', :class => ['quickstack::nova_network::compute'] },
|
153
155
|
:neutron_compute => { :name => 'Neutron-compute', :class => ['quickstack::neutron::compute'] },
|
154
156
|
:swift => { :name => 'Swift (node)', :class => ['quickstack::swift::storage'] },
|
@@ -207,7 +209,7 @@ roles = [
|
|
207
209
|
{ :name => 'Controller (Nova)',
|
208
210
|
:class => 'quickstack::nova_network::controller',
|
209
211
|
:layouts => [[:non_ha_nova, 1]],
|
210
|
-
:services => [:
|
212
|
+
:services => [:non_ha_amqp, :mysql, :non_ha_keystone, :nova_controller, :non_ha_glance,
|
211
213
|
:cinder_controller, :heat, :ceilometer] },
|
212
214
|
{ :name => 'Compute (Nova)',
|
213
215
|
:class => [],
|
@@ -216,17 +218,17 @@ roles = [
|
|
216
218
|
{ :name => 'Controller (Neutron)',
|
217
219
|
:class => 'quickstack::neutron::controller',
|
218
220
|
:layouts => [[:non_ha_neutron, 1]],
|
219
|
-
:services => [:
|
221
|
+
:services => [:non_ha_amqp, :mysql, :non_ha_keystone, :neutron_controller, :non_ha_glance,
|
220
222
|
:cinder_controller, :heat, :ceilometer] },
|
221
223
|
{ :name => 'Compute (Neutron)',
|
222
224
|
:class => [],
|
223
225
|
:layouts => [[:ha_neutron, 10], [:non_ha_neutron, 10]],
|
224
226
|
:services => [:neutron_compute] },
|
225
227
|
{ :name => 'Neutron Networker',
|
226
|
-
:class =>
|
228
|
+
:class => [],
|
227
229
|
:layouts => [[:non_ha_neutron, 3]],
|
228
|
-
:services => [:
|
229
|
-
{ :name => '
|
230
|
+
:services => [:neutron_networker] },
|
231
|
+
{ :name => 'Cinder Block Storage',
|
230
232
|
:class => [],
|
231
233
|
:layouts => [[:ha_nova, 2], [:ha_neutron, 2], [:non_ha_nova, 2], [:non_ha_neutron, 2]],
|
232
234
|
:services => [:cinder_node] },
|
data/lib/staypuft/version.rb
CHANGED
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: staypuft
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Staypuft team
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-
|
11
|
+
date: 2014-06-04 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: foreman-tasks
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: dynflow
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,23 +41,20 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: wicked
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: foreman_discovery
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -82,69 +73,73 @@ executables: []
|
|
82
73
|
extensions: []
|
83
74
|
extra_rdoc_files: []
|
84
75
|
files:
|
85
|
-
- app/
|
86
|
-
- app/assets/stylesheets/staypuft/bootstrap_and_overrides.css.scss
|
87
|
-
- app/assets/stylesheets/staypuft/staypuft.css.scss
|
88
|
-
- app/controllers/staypuft/application_controller.rb
|
89
|
-
- app/controllers/staypuft/deployments_controller.rb
|
90
|
-
- app/controllers/staypuft/steps_controller.rb
|
76
|
+
- app/overrides/hide_subscription_manager_passwords.rb
|
91
77
|
- app/helpers/staypuft/application_helper.rb
|
92
78
|
- app/helpers/staypuft/deployments_helper.rb
|
93
|
-
- app/
|
94
|
-
- app/
|
95
|
-
- app/
|
96
|
-
- app/
|
97
|
-
- app/
|
98
|
-
- app/lib/actions/staypuft/host/puppet_run.rb
|
99
|
-
- app/lib/actions/staypuft/host/wait_until_host_ready.rb
|
100
|
-
- app/lib/actions/staypuft/host/wait_until_installed.rb
|
101
|
-
- app/lib/actions/staypuft/hostgroup/deploy.rb
|
102
|
-
- app/lib/actions/staypuft/hostgroup/ordered_deploy.rb
|
103
|
-
- app/lib/actions/staypuft/middleware/as_current_user.rb
|
104
|
-
- app/lib/staypuft/exception.rb
|
105
|
-
- app/models/setting/staypuft_provisioning.rb
|
106
|
-
- app/models/staypuft/concerns/environment_extensions.rb
|
107
|
-
- app/models/staypuft/concerns/host_open_stack_affiliation.rb
|
108
|
-
- app/models/staypuft/concerns/host_orchestration_build_hook.rb
|
109
|
-
- app/models/staypuft/concerns/hostgroup_extensions.rb
|
110
|
-
- app/models/staypuft/concerns/puppetclass_extensions.rb
|
79
|
+
- app/assets/javascripts/staypuft/staypuft.js
|
80
|
+
- app/assets/stylesheets/staypuft/staypuft.css.scss
|
81
|
+
- app/assets/stylesheets/staypuft/bootstrap_and_overrides.css.scss
|
82
|
+
- app/models/staypuft/service.rb
|
83
|
+
- app/models/staypuft/role_class.rb
|
111
84
|
- app/models/staypuft/deployment.rb
|
85
|
+
- app/models/staypuft/role_service.rb
|
112
86
|
- app/models/staypuft/deployment_role_hostgroup.rb
|
113
87
|
- app/models/staypuft/layout.rb
|
88
|
+
- app/models/staypuft/service_class.rb
|
89
|
+
- app/models/staypuft/concerns/host_orchestration_build_hook.rb
|
90
|
+
- app/models/staypuft/concerns/hostgroup_extensions.rb
|
91
|
+
- app/models/staypuft/concerns/host_open_stack_affiliation.rb
|
92
|
+
- app/models/staypuft/concerns/puppetclass_extensions.rb
|
93
|
+
- app/models/staypuft/concerns/environment_extensions.rb
|
114
94
|
- app/models/staypuft/layout_role.rb
|
115
|
-
- app/models/staypuft/role.rb
|
116
|
-
- app/models/staypuft/role_class.rb
|
117
|
-
- app/models/staypuft/role_service.rb
|
118
95
|
- app/models/staypuft/service/ui_params.rb
|
119
|
-
- app/models/staypuft/
|
120
|
-
- app/models/
|
121
|
-
- app/
|
96
|
+
- app/models/staypuft/role.rb
|
97
|
+
- app/models/setting/staypuft_provisioning.rb
|
98
|
+
- app/lib/staypuft/deployment_param_importer.rb
|
99
|
+
- app/lib/staypuft/exception.rb
|
100
|
+
- app/lib/staypuft/deployment_param_exporter.rb
|
101
|
+
- app/lib/actions/staypuft/middleware/as_current_user.rb
|
102
|
+
- app/lib/actions/staypuft/hostgroup/deploy.rb
|
103
|
+
- app/lib/actions/staypuft/hostgroup/ordered_deploy.rb
|
104
|
+
- app/lib/actions/staypuft/host/deploy.rb
|
105
|
+
- app/lib/actions/staypuft/host/build.rb
|
106
|
+
- app/lib/actions/staypuft/host/wait_until_host_ready.rb
|
107
|
+
- app/lib/actions/staypuft/host/puppet_run.rb
|
108
|
+
- app/lib/actions/staypuft/host/create.rb
|
109
|
+
- app/lib/actions/staypuft/host/wait_until_installed.rb
|
110
|
+
- app/lib/actions/staypuft/deployment/deploy.rb
|
111
|
+
- app/lib/actions/staypuft/deployment/populate.rb
|
112
|
+
- app/controllers/staypuft/steps_controller.rb
|
113
|
+
- app/controllers/staypuft/deployments_controller.rb
|
114
|
+
- app/controllers/staypuft/application_controller.rb
|
122
115
|
- app/views/staypuft/deployments/index.html.erb
|
123
116
|
- app/views/staypuft/deployments/show.html.erb
|
117
|
+
- app/views/staypuft/deployments/_import_form.html.erb
|
124
118
|
- app/views/staypuft/deployments/summary.html.erb
|
125
119
|
- app/views/staypuft/layouts/staypuft.html.erb
|
126
|
-
- app/views/staypuft/steps/_title.html.erb
|
127
120
|
- app/views/staypuft/steps/deployment_settings.html.erb
|
128
|
-
- app/views/staypuft/steps/services_configuration.html.erb
|
129
121
|
- app/views/staypuft/steps/services_selection.html.erb
|
130
|
-
-
|
122
|
+
- app/views/staypuft/steps/_title.html.erb
|
123
|
+
- app/views/staypuft/steps/services_configuration.html.erb
|
131
124
|
- config/staypuft.local.rb
|
125
|
+
- config/routes.rb
|
126
|
+
- db/migrate/20140312050615_create_staypuft_role_classes.rb
|
132
127
|
- db/migrate/20140309021811_create_staypuft_layouts.rb
|
133
|
-
- db/migrate/
|
128
|
+
- db/migrate/20140310203855_create_staypuft_role_services.rb
|
134
129
|
- db/migrate/20140310023613_create_staypuft_roles.rb
|
135
|
-
- db/migrate/
|
130
|
+
- db/migrate/20140325211410_add_role_to_staypuft_deployment_role_hostgroup.rb
|
131
|
+
- db/migrate/20140326032027_drop_staypuft_hostgroup_roles.rb
|
132
|
+
- db/migrate/20140602121501_add_amqp_provider_to_staypuft_deployment.rb
|
136
133
|
- db/migrate/20140310194221_create_staypuft_services.rb
|
137
|
-
- db/migrate/20140310203855_create_staypuft_role_services.rb
|
138
|
-
- db/migrate/20140312044533_create_staypuft_deployment_role_hostgroups.rb
|
139
134
|
- db/migrate/20140312050001_create_staypuft_hostgroup_roles.rb
|
140
|
-
- db/migrate/
|
141
|
-
- db/migrate/20140312051144_create_staypuft_service_classes.rb
|
142
|
-
- db/migrate/20140315031754_add_networking_to_staypuft_layout.rb
|
135
|
+
- db/migrate/20140310174152_create_staypuft_layout_roles.rb
|
143
136
|
- db/migrate/20140318163222_add_deploy_order_to_staypuft_layout_role.rb
|
144
|
-
- db/migrate/20140325211410_add_role_to_staypuft_deployment_role_hostgroup.rb
|
145
|
-
- db/migrate/20140326032027_drop_staypuft_hostgroup_roles.rb
|
146
137
|
- db/migrate/20140507103716_add_form_step_to_staypuft_deployment.rb
|
147
138
|
- db/migrate/20140513124807_change_column_default_form_step_on_staypuft_deployment.rb
|
139
|
+
- db/migrate/20140315031754_add_networking_to_staypuft_layout.rb
|
140
|
+
- db/migrate/20140312051144_create_staypuft_service_classes.rb
|
141
|
+
- db/migrate/20140312044533_create_staypuft_deployment_role_hostgroups.rb
|
142
|
+
- db/migrate/20140310004533_create_staypuft_deployments.rb
|
148
143
|
- db/seeds.rb
|
149
144
|
- lib/staypuft/engine.rb
|
150
145
|
- lib/staypuft/version.rb
|
@@ -153,40 +148,39 @@ files:
|
|
153
148
|
- LICENSE
|
154
149
|
- Rakefile
|
155
150
|
- README.md
|
156
|
-
- test/factories/staypuft_factories.rb
|
157
|
-
- test/integration/navigation_test.rb
|
158
|
-
- test/staypuft_test.rb
|
159
151
|
- test/test_helper.rb
|
160
|
-
- test/
|
152
|
+
- test/staypuft_test.rb
|
161
153
|
- test/unit/staypuft_test.rb
|
154
|
+
- test/integration/navigation_test.rb
|
155
|
+
- test/factories/staypuft_factories.rb
|
156
|
+
- test/test_plugin_helper.rb
|
162
157
|
homepage: https://github.com/theforeman/staypuft
|
163
158
|
licenses: []
|
159
|
+
metadata: {}
|
164
160
|
post_install_message:
|
165
161
|
rdoc_options: []
|
166
162
|
require_paths:
|
167
163
|
- lib
|
168
164
|
required_ruby_version: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
165
|
requirements:
|
171
|
-
- -
|
166
|
+
- - '>='
|
172
167
|
- !ruby/object:Gem::Version
|
173
168
|
version: '0'
|
174
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
|
-
none: false
|
176
170
|
requirements:
|
177
|
-
- -
|
171
|
+
- - '>='
|
178
172
|
- !ruby/object:Gem::Version
|
179
173
|
version: '0'
|
180
174
|
requirements: []
|
181
175
|
rubyforge_project:
|
182
|
-
rubygems_version:
|
176
|
+
rubygems_version: 2.0.3
|
183
177
|
signing_key:
|
184
|
-
specification_version:
|
178
|
+
specification_version: 4
|
185
179
|
summary: OpenStack Foreman Installer
|
186
180
|
test_files:
|
187
|
-
- test/factories/staypuft_factories.rb
|
188
|
-
- test/integration/navigation_test.rb
|
189
|
-
- test/staypuft_test.rb
|
190
181
|
- test/test_helper.rb
|
191
|
-
- test/
|
182
|
+
- test/staypuft_test.rb
|
192
183
|
- test/unit/staypuft_test.rb
|
184
|
+
- test/integration/navigation_test.rb
|
185
|
+
- test/factories/staypuft_factories.rb
|
186
|
+
- test/test_plugin_helper.rb
|