bebox 0.1.3 → 0.1.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 +4 -4
- data/Gemfile.lock +3 -18
- data/bebox.gemspec +1 -1
- data/lib/bebox.rb +1 -0
- data/lib/bebox/cli.rb +7 -1
- data/lib/bebox/commands/commands_helper.rb +2 -2
- data/lib/bebox/commands/environment_commands.rb +6 -6
- data/lib/bebox/commands/general_commands.rb +2 -2
- data/lib/bebox/commands/node_commands.rb +18 -14
- data/lib/bebox/commands/prepare_commands.rb +17 -14
- data/lib/bebox/commands/profile_commands.rb +8 -8
- data/lib/bebox/commands/provision_commands.rb +7 -7
- data/lib/bebox/commands/role_commands.rb +14 -14
- data/lib/bebox/logger.rb +2 -0
- data/lib/bebox/node.rb +0 -1
- data/lib/bebox/profile.rb +1 -1
- data/lib/bebox/project.rb +1 -1
- data/lib/bebox/vagrant_helper.rb +5 -3
- data/lib/bebox/version.rb +1 -1
- data/lib/bebox/wizards/environment_wizard.rb +5 -5
- data/lib/bebox/wizards/node_wizard.rb +23 -22
- data/lib/bebox/wizards/profile_wizard.rb +24 -25
- data/lib/bebox/wizards/project_wizard.rb +34 -28
- data/lib/bebox/wizards/provision_wizard.rb +13 -12
- data/lib/bebox/wizards/role_wizard.rb +15 -21
- data/lib/i18n/en.yml +198 -0
- data/spec/cli_spec.rb +66 -26
- data/spec/fixtures/commands/environment_help.erb.test +1 -0
- data/spec/fixtures/commands/general_help.erb.test +1 -0
- data/spec/fixtures/commands/in_project_help.erb.test +1 -0
- data/spec/fixtures/commands/node_help.erb.test +1 -0
- data/spec/fixtures/commands/profile_help.erb.test +1 -0
- data/spec/fixtures/commands/role_help.erb.test +1 -0
- data/spec/spec_helper.rb +7 -1
- data/spec/wizards/profile_wizard_spec.rb +12 -0
- metadata +23 -22
- data/spec/fixtures/commands/environment_help.test +0 -1
- data/spec/fixtures/commands/general_help.test +0 -1
- data/spec/fixtures/commands/in_project_help.test +0 -1
- data/spec/fixtures/commands/node_help.test +0 -1
- data/spec/fixtures/commands/profile_help.test +0 -1
- data/spec/fixtures/commands/role_help.test +0 -1
data/lib/bebox/logger.rb
CHANGED
data/lib/bebox/node.rb
CHANGED
data/lib/bebox/profile.rb
CHANGED
@@ -65,7 +65,7 @@ module Bebox
|
|
65
65
|
#Split the name and validate each path part
|
66
66
|
pathname.split('/').each do |path_child|
|
67
67
|
valid_name = (path_child =~ /\A[a-z][a-z0-9_]*\Z/).nil? ? false : true
|
68
|
-
valid_name
|
68
|
+
valid_name &&= !Bebox::RESERVED_WORDS.include?(path_child)
|
69
69
|
return false unless valid_name
|
70
70
|
end
|
71
71
|
# Return true if all parts are valid
|
data/lib/bebox/project.rb
CHANGED
@@ -25,7 +25,6 @@ module Bebox
|
|
25
25
|
create_puppet_base
|
26
26
|
create_project_config
|
27
27
|
create_checkpoints
|
28
|
-
info "Bundle project ..."
|
29
28
|
bundle_project
|
30
29
|
end
|
31
30
|
|
@@ -200,6 +199,7 @@ module Bebox
|
|
200
199
|
|
201
200
|
# Bundle install packages for project
|
202
201
|
def bundle_project
|
202
|
+
info _('model.project.bundle')
|
203
203
|
system("cd #{self.path} && BUNDLE_GEMFILE=Gemfile bundle install")
|
204
204
|
end
|
205
205
|
|
data/lib/bebox/vagrant_helper.rb
CHANGED
@@ -30,7 +30,7 @@ module Bebox
|
|
30
30
|
|
31
31
|
# Backup and add the vagrant hosts to local hosts file
|
32
32
|
def configure_local_hosts(project_name, node)
|
33
|
-
info
|
33
|
+
info _('model.vagrant_helper.local_password_advice')
|
34
34
|
backup_local_hosts(project_name)
|
35
35
|
add_to_local_hosts(node)
|
36
36
|
end
|
@@ -64,8 +64,8 @@ module Bebox
|
|
64
64
|
def add_vagrant_node(project_name, vagrant_box_base, node)
|
65
65
|
already_installed_boxes = installed_vagrant_box_names(node)
|
66
66
|
box_name = "#{project_name}-#{node.hostname}"
|
67
|
-
info
|
68
|
-
info
|
67
|
+
info _('model.vagrant_helper.add_to_vagrant')%{node: node.hostname}
|
68
|
+
info _('model.vagrant_helper.network_interface_advice')
|
69
69
|
`cd #{node.project_root} && vagrant box add #{box_name} #{vagrant_box_base}` unless already_installed_boxes.include? box_name
|
70
70
|
end
|
71
71
|
|
@@ -73,11 +73,13 @@ module Bebox
|
|
73
73
|
def self.up_vagrant_nodes(project_root)
|
74
74
|
pid = fork {exec("cd #{project_root} && vagrant up --provision")}
|
75
75
|
Process.wait(pid)
|
76
|
+
ok _('model.vagrant_helper.nodes_running')
|
76
77
|
end
|
77
78
|
|
78
79
|
# Halt the vagrant boxes running
|
79
80
|
def self.halt_vagrant_nodes(project_root)
|
80
81
|
`cd #{project_root} && vagrant halt`
|
82
|
+
ok _('model.vagrant_helper.nodes_halted')
|
81
83
|
end
|
82
84
|
|
83
85
|
# Generate the Vagrantfile
|
data/lib/bebox/version.rb
CHANGED
@@ -7,24 +7,24 @@ module Bebox
|
|
7
7
|
# Create a new environment
|
8
8
|
def create_new_environment(project_root, environment_name)
|
9
9
|
# Check if the environment exist
|
10
|
-
return error(
|
10
|
+
return error(_('wizard.environment.name_exist')%{environment: environment_name}) if Bebox::Environment.environment_exists?(project_root, environment_name)
|
11
11
|
# Environment creation
|
12
12
|
environment = Bebox::Environment.new(environment_name, project_root)
|
13
13
|
output = environment.create
|
14
|
-
ok '
|
14
|
+
ok _('wizard.environment.creation_success')
|
15
15
|
return output
|
16
16
|
end
|
17
17
|
|
18
18
|
# Removes an existing environment
|
19
19
|
def remove_environment(project_root, environment_name)
|
20
20
|
# Check if the environment exist
|
21
|
-
return error(
|
21
|
+
return error(_('wizard.environment.name_not_exist')%{environment: environment_name}) unless Bebox::Environment.environment_exists?(project_root, environment_name)
|
22
22
|
# Confirm deletion
|
23
|
-
return warn('
|
23
|
+
return warn(_('wizard.no_changes')) unless confirm_action?(_('wizard.environment.confirm_deletion'))
|
24
24
|
# Environment deletion
|
25
25
|
environment = Bebox::Environment.new(environment_name, project_root)
|
26
26
|
output = environment.remove
|
27
|
-
ok '
|
27
|
+
ok _('wizard.environment.deletion_success')
|
28
28
|
return output
|
29
29
|
end
|
30
30
|
end
|
@@ -14,7 +14,7 @@ module Bebox
|
|
14
14
|
# Node creation
|
15
15
|
node = Bebox::Node.new(environment, project_root, hostname, ip)
|
16
16
|
output = node.create
|
17
|
-
ok '
|
17
|
+
ok _('wizard.node.creation_success')
|
18
18
|
return output
|
19
19
|
end
|
20
20
|
|
@@ -23,17 +23,17 @@ module Bebox
|
|
23
23
|
# Ask for a node to remove
|
24
24
|
nodes = Bebox::Node.list(project_root, environment, 'nodes')
|
25
25
|
if nodes.count > 0
|
26
|
-
hostname = choose_option(nodes, '
|
26
|
+
hostname = choose_option(nodes, _('wizard.node.choose_node'))
|
27
27
|
else
|
28
|
-
error
|
28
|
+
error _('wizard.node.no_nodes')%{environment: environment}
|
29
29
|
return true
|
30
30
|
end
|
31
31
|
# Ask for deletion confirmation
|
32
|
-
return warn('
|
32
|
+
return warn(_('wizard.no_changes')) unless confirm_action?(_('wizard.node.confirm_deletion'))
|
33
33
|
# Node deletion
|
34
34
|
node = Bebox::Node.new(environment, project_root, hostname, nil)
|
35
35
|
output = node.remove
|
36
|
-
ok '
|
36
|
+
ok _('wizard.node.deletion_success')
|
37
37
|
return output
|
38
38
|
end
|
39
39
|
|
@@ -41,10 +41,10 @@ module Bebox
|
|
41
41
|
def set_role(project_root, environment)
|
42
42
|
roles = Bebox::Role.list(project_root)
|
43
43
|
nodes = Bebox::Node.list(project_root, environment, 'nodes')
|
44
|
-
node = choose_option(nodes, '
|
45
|
-
role = choose_option(roles, '
|
44
|
+
node = choose_option(nodes, _('wizard.choose_node'))
|
45
|
+
role = choose_option(roles, _('wizard.choose_role'))
|
46
46
|
output = Bebox::Provision.associate_node_role(project_root, environment, node, role)
|
47
|
-
ok '
|
47
|
+
ok _('wizard.node.role_set_success')
|
48
48
|
return output
|
49
49
|
end
|
50
50
|
|
@@ -54,28 +54,30 @@ module Bebox
|
|
54
54
|
nodes_to_prepare = check_nodes_to_prepare(project_root, environment)
|
55
55
|
# Output the nodes to be prepared
|
56
56
|
if nodes_to_prepare.count > 0
|
57
|
-
title '
|
57
|
+
title _('wizard.node.prepare_title')
|
58
58
|
nodes_to_prepare.each{|node| msg(node.hostname)}
|
59
59
|
linebreak
|
60
60
|
# For all environments regenerate the deploy file
|
61
61
|
Bebox::Node.regenerate_deploy_file(project_root, environment, nodes_to_prepare)
|
62
62
|
# If environment is 'vagrant' Prepare and Up the machines
|
63
|
-
if environment == 'vagrant'
|
64
|
-
Bebox::VagrantHelper.generate_vagrantfile(nodes_to_prepare)
|
65
|
-
nodes_to_prepare.each{|node| prepare_vagrant(node)}
|
66
|
-
Bebox::VagrantHelper.up_vagrant_nodes(project_root)
|
67
|
-
end
|
63
|
+
up_vagrant_machines(project_root, nodes_to_prepare) if environment == 'vagrant'
|
68
64
|
# For all the environments do the preparation
|
69
65
|
nodes_to_prepare.each do |node|
|
70
66
|
node.prepare
|
71
|
-
ok '
|
67
|
+
ok _('wizard.node.preparation_success')
|
72
68
|
end
|
73
69
|
else
|
74
|
-
warn '
|
70
|
+
warn _('wizard.node.no_prepare_nodes')
|
75
71
|
end
|
76
72
|
return true
|
77
73
|
end
|
78
74
|
|
75
|
+
def up_vagrant_machines(project_root, nodes_to_prepare)
|
76
|
+
Bebox::VagrantHelper.generate_vagrantfile(nodes_to_prepare)
|
77
|
+
nodes_to_prepare.each{|node| prepare_vagrant(node)}
|
78
|
+
Bebox::VagrantHelper.up_vagrant_nodes(project_root)
|
79
|
+
end
|
80
|
+
|
79
81
|
# Check the nodes already prepared and ask confirmation to re-do-it
|
80
82
|
def check_nodes_to_prepare(project_root, environment)
|
81
83
|
nodes_to_prepare = []
|
@@ -83,8 +85,7 @@ module Bebox
|
|
83
85
|
prepared_nodes = Bebox::Node.list(project_root, environment, 'prepared_nodes')
|
84
86
|
nodes.each do |node|
|
85
87
|
if prepared_nodes.include?(node.hostname)
|
86
|
-
|
87
|
-
message = "The node '#{node.hostname}' was already prepared #{checkpoint_status}.\nDo you want to re-prepare it?"
|
88
|
+
message = _('wizard.node.confirm_preparation')%{hostname: node.hostname, start: node.checkpoint_parameter_from_file('prepared_nodes', 'started_at'), end: node.checkpoint_parameter_from_file('prepared_nodes', 'finished_at')}
|
88
89
|
nodes_to_prepare << node if confirm_action?(message)
|
89
90
|
else
|
90
91
|
nodes_to_prepare << node
|
@@ -103,7 +104,7 @@ module Bebox
|
|
103
104
|
hostname = ask_hostname(project_root, environment)
|
104
105
|
# Check if the node not exist
|
105
106
|
if node_exists?(project_root, environment, hostname)
|
106
|
-
error '
|
107
|
+
error _('wizard.node.hostname_exist')
|
107
108
|
ask_hostname(project_root, environment)
|
108
109
|
else
|
109
110
|
return hostname
|
@@ -112,19 +113,19 @@ module Bebox
|
|
112
113
|
|
113
114
|
# Ask for the hostname
|
114
115
|
def ask_hostname(project_root, environment)
|
115
|
-
write_input('
|
116
|
+
write_input(_('wizard.node.ask_hostname'), nil, /\.(.*)/, _('wizard.node.valid_hostname'))
|
116
117
|
end
|
117
118
|
|
118
119
|
# Ask for the ip until is valid
|
119
120
|
def ask_ip(environment)
|
120
|
-
ip = write_input('
|
121
|
+
ip = write_input(_('wizard.node.ask_ip'), nil, /\.(.*)/, _('wizard.node.valid_ip'))
|
121
122
|
# If the environment is not vagrant don't check ip free
|
122
123
|
return ip if environment != 'vagrant'
|
123
124
|
# Check if the ip address is free
|
124
125
|
if free_ip?(ip)
|
125
126
|
return ip
|
126
127
|
else
|
127
|
-
error '
|
128
|
+
error _('wizard.node.non_free_ip')
|
128
129
|
ask_ip(environment)
|
129
130
|
end
|
130
131
|
end
|
@@ -6,54 +6,53 @@ module Bebox
|
|
6
6
|
|
7
7
|
# Create a new profile
|
8
8
|
def create_new_profile(project_root, profile_name, profile_base_path)
|
9
|
+
# Clean the profile_path to make it a valid path
|
10
|
+
profile_base_path = Bebox::Profile.cleanpath(profile_base_path)
|
9
11
|
# Check if the profile name is valid
|
10
|
-
return
|
11
|
-
\n* Lowercase letters
|
12
|
-
\n* Numbers
|
13
|
-
\n* Underscores
|
14
|
-
\n* Must begin with an Lowercase letter
|
15
|
-
\n* Can not be any of: #{Bebox::RESERVED_WORDS.join(', ')}
|
16
|
-
\n\nNo changes were made." unless valid_puppet_class_name?(profile_name)
|
17
|
-
unless profile_base_path.empty?
|
18
|
-
# Clean the profile_path to make it a valid path
|
19
|
-
profile_base_path = Bebox::Profile.cleanpath(profile_base_path)
|
20
|
-
# Check if the path name is valid
|
21
|
-
return error "Each part of the path can only contain:\n
|
22
|
-
\n* Lowercase letters
|
23
|
-
\n* Numbers
|
24
|
-
\n* Underscores
|
25
|
-
\n* Must begin with an Lowercase letter
|
26
|
-
\n* Can not be any of: #{Bebox::RESERVED_WORDS.join(', ')}
|
27
|
-
\n\nNo changes were made." unless Bebox::Profile.valid_pathname?(profile_base_path)
|
28
|
-
end
|
12
|
+
return unless name_valid?(profile_name, profile_base_path)
|
29
13
|
# Check if the profile exist
|
30
14
|
profile_path = profile_base_path.empty? ? profile_name : profile_complete_path(profile_base_path, profile_name)
|
31
|
-
return error(
|
15
|
+
return error(_('wizard.profile.name_exist')%{profile: profile_path}) if profile_exists?(project_root, profile_path)
|
32
16
|
# Profile creation
|
33
17
|
profile = Bebox::Profile.new(profile_name, project_root, profile_base_path)
|
34
18
|
output = profile.create
|
35
|
-
ok
|
19
|
+
ok _('wizard.profile.creation_success')%{profile: profile_path}
|
36
20
|
return output
|
37
21
|
end
|
38
22
|
|
23
|
+
# Check if the profile name is valid
|
24
|
+
def name_valid?(profile_name, profile_base_path)
|
25
|
+
unless valid_puppet_class_name?(profile_name)
|
26
|
+
error _('wizard.profile.invalid_name')%{words: Bebox::RESERVED_WORDS.join(', ')}
|
27
|
+
return false
|
28
|
+
end
|
29
|
+
return true if profile_base_path.empty?
|
30
|
+
# Check if the path name is valid
|
31
|
+
unless Bebox::Profile.valid_pathname?(profile_base_path)
|
32
|
+
error _('wizard.profile.invalid_path')%{words: Bebox::RESERVED_WORDS.join(', ')}
|
33
|
+
return false
|
34
|
+
end
|
35
|
+
true
|
36
|
+
end
|
37
|
+
|
39
38
|
# Removes an existing profile
|
40
39
|
def remove_profile(project_root)
|
41
40
|
# Choose a profile from the availables
|
42
41
|
profiles = Bebox::Profile.list(project_root)
|
43
42
|
# Get a profile if exist
|
44
43
|
if profiles.count > 0
|
45
|
-
profile = choose_option(profiles, '
|
44
|
+
profile = choose_option(profiles, _('wizard.choose_remove_profile'))
|
46
45
|
else
|
47
|
-
return error
|
46
|
+
return error _('wizard.profile.no_deletion_profiles')
|
48
47
|
end
|
49
48
|
# Ask for deletion confirmation
|
50
|
-
return warn('
|
49
|
+
return warn(_('wizard.no_changes')) unless confirm_action?(_('wizard.profile.confirm_deletion'))
|
51
50
|
# Profile deletion
|
52
51
|
profile_name = profile.split('/').last
|
53
52
|
profile_base_path = profile.split('/')[0...-1].join('/')
|
54
53
|
profile = Bebox::Profile.new(profile_name, project_root, profile_base_path)
|
55
54
|
output = profile.remove
|
56
|
-
ok '
|
55
|
+
ok _('wizard.profile.deletion_success')
|
57
56
|
return output
|
58
57
|
end
|
59
58
|
|
@@ -9,20 +9,20 @@ module Bebox
|
|
9
9
|
# Asks for the project parameters and create the project skeleton
|
10
10
|
def create_new_project(project_name)
|
11
11
|
# Check project existence
|
12
|
-
(error('
|
12
|
+
(error(_('wizard.project.name_exist')); return false) if project_exists?(Dir.pwd, project_name)
|
13
13
|
# Setup the bebox boxes directory
|
14
14
|
bebox_boxes_setup
|
15
15
|
# Asks to choose an existing box
|
16
16
|
current_box = choose_box(get_existing_boxes)
|
17
17
|
vagrant_box_base = "#{BEBOX_BOXES_PATH}/#{get_valid_box_uri(current_box)}"
|
18
18
|
# Asks user to choose vagrant box provider
|
19
|
-
vagrant_box_provider = choose_option(%w{virtualbox vmware}, '
|
19
|
+
vagrant_box_provider = choose_option(%w{virtualbox vmware}, _('wizard.project.choose_box_provider'))
|
20
20
|
# Set default environments
|
21
21
|
default_environments = %w{vagrant staging production}
|
22
22
|
# Project creation
|
23
23
|
project = Bebox::Project.new(project_name, vagrant_box_base, Dir.pwd, vagrant_box_provider, default_environments)
|
24
24
|
output = project.create
|
25
|
-
ok
|
25
|
+
ok _('wizard.project.creation_success')%{project_name: project_name}
|
26
26
|
return output
|
27
27
|
end
|
28
28
|
|
@@ -35,7 +35,7 @@ module Bebox
|
|
35
35
|
# Asks vagrant box location to user if not choose an existing box
|
36
36
|
valid_box_uri = ask_uri
|
37
37
|
# Confirm if the box already exist
|
38
|
-
confirm = box_exists?(valid_box_uri) ? confirm_action?('
|
38
|
+
confirm = box_exists?(valid_box_uri) ? confirm_action?(_('wizard.project.box_exist')) : true
|
39
39
|
end while !confirm
|
40
40
|
# Setup the box with the valid uri
|
41
41
|
set_box(valid_box_uri)
|
@@ -56,7 +56,7 @@ module Bebox
|
|
56
56
|
|
57
57
|
# Asks vagrant box location to user until is valid
|
58
58
|
def ask_uri
|
59
|
-
vbox_uri = write_input('
|
59
|
+
vbox_uri = write_input(_('wizard.project.ask_box_uri'), 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210-nocm.box')
|
60
60
|
# If valid return uri if not keep asking for uri
|
61
61
|
uri_valid?(vbox_uri) ? (return vbox_uri) : ask_uri
|
62
62
|
end
|
@@ -66,7 +66,7 @@ module Bebox
|
|
66
66
|
require 'uri'
|
67
67
|
uri = URI.parse(box_uri)
|
68
68
|
if %w{http https}.include?(uri.scheme)
|
69
|
-
info '
|
69
|
+
info _('wizard.project.downloading_box')
|
70
70
|
download_box(uri)
|
71
71
|
else
|
72
72
|
`ln -fs #{uri.path} #{BEBOX_BOXES_PATH}/#{uri.path.split('/').last}`
|
@@ -84,12 +84,12 @@ module Bebox
|
|
84
84
|
require 'net/http'
|
85
85
|
request = Net::HTTP.new uri.host
|
86
86
|
response = request.request_head uri.path
|
87
|
-
error('
|
88
|
-
( response.code.to_i == 200) ? (return true) : error('
|
87
|
+
error(_('wizard.project.no_redirections')) if response.code.to_i == 302
|
88
|
+
( response.code.to_i == 200) ? (return true) : error(_('wizard.project.not_valid_link'))
|
89
89
|
end
|
90
90
|
|
91
91
|
def file_uri_valid?(uri)
|
92
|
-
File.file?(uri.path) ? (return true) : error('
|
92
|
+
File.file?(uri.path) ? (return true) : error(_('wizard.project.not_exist_file'))
|
93
93
|
end
|
94
94
|
|
95
95
|
# Check if a box with the same name already exist
|
@@ -111,36 +111,42 @@ module Bebox
|
|
111
111
|
# Asks to choose an existing box in the bebox boxes directory
|
112
112
|
def choose_box(boxes)
|
113
113
|
# Menu to choose vagrant box provider
|
114
|
-
other_box_message = '
|
114
|
+
other_box_message = _('wizard.project.download_select_box')
|
115
115
|
boxes << other_box_message
|
116
|
-
current_box = choose_option(boxes, '
|
116
|
+
current_box = choose_option(boxes, _('wizard.project.choose_box'))
|
117
117
|
current_box = (current_box == other_box_message) ? nil : current_box
|
118
118
|
end
|
119
119
|
|
120
120
|
# Download a box by the specified uri
|
121
121
|
def download_box(uri)
|
122
|
-
@counter = 0
|
123
|
-
url = uri.path
|
124
|
-
file_name = uri.path.split('/').last
|
125
|
-
expanded_directory = File.expand_path(BEBOX_BOXES_PATH)
|
126
|
-
# Download file to bebox boxes tmp
|
127
122
|
require 'net/http'
|
128
123
|
require 'uri'
|
124
|
+
url = uri.path
|
125
|
+
# Download file to bebox boxes tmp
|
129
126
|
Net::HTTP.start(uri.host) do |http|
|
130
127
|
response = http.request_head(URI.escape(url))
|
131
|
-
|
132
|
-
pbar = ProgressBar.new('file name:', response['content-length'].to_i)
|
133
|
-
File.open("#{expanded_directory}/tmp/#{file_name}", 'w') {|f|
|
134
|
-
http.get(URI.escape(url)) do |str|
|
135
|
-
f.write str
|
136
|
-
@counter += str.length
|
137
|
-
pbar.set(@counter)
|
138
|
-
end
|
139
|
-
}
|
140
|
-
# In download completion move from tmp to bebox boxes dir
|
141
|
-
pbar.finish
|
142
|
-
`mv #{BEBOX_BOXES_PATH}/tmp/#{file_name} #{BEBOX_BOXES_PATH}/`
|
128
|
+
write_remote_file(uri, http, response)
|
143
129
|
end
|
144
130
|
end
|
131
|
+
|
132
|
+
def write_remote_file(uri, http, response)
|
133
|
+
@counter = 0
|
134
|
+
url = uri.path
|
135
|
+
file_name = uri.path.split('/').last
|
136
|
+
expanded_directory = File.expand_path(BEBOX_BOXES_PATH)
|
137
|
+
|
138
|
+
ProgressBar
|
139
|
+
pbar = ProgressBar.new('file name:', response['content-length'].to_i)
|
140
|
+
File.open("#{expanded_directory}/tmp/#{file_name}", 'w') {|f|
|
141
|
+
http.get(URI.escape(url)) do |str|
|
142
|
+
f.write str
|
143
|
+
@counter += str.length
|
144
|
+
pbar.set(@counter)
|
145
|
+
end
|
146
|
+
}
|
147
|
+
# In download completion move from tmp to bebox boxes dir
|
148
|
+
pbar.finish
|
149
|
+
`mv #{BEBOX_BOXES_PATH}/tmp/#{file_name} #{BEBOX_BOXES_PATH}/`
|
150
|
+
end
|
145
151
|
end
|
146
152
|
end
|
@@ -6,10 +6,10 @@ module Bebox
|
|
6
6
|
# Apply a step for the nodes in a environment
|
7
7
|
def apply_step(project_root, environment, step)
|
8
8
|
# Check if environment has configured the ssh keys
|
9
|
-
(return warn
|
9
|
+
(return warn _('wizard.provision.ssh_key_advice')%{environment: environment}) unless Bebox::Environment.check_environment_access(project_root, environment)
|
10
10
|
nodes_to_step = Bebox::Node.nodes_in_environment(project_root, environment, previous_checkpoint(step))
|
11
11
|
# Check if there are nodes for provisioning step-N
|
12
|
-
(return warn
|
12
|
+
(return warn _('wizard.provision.no_provision_nodes')%{step: step}) unless nodes_to_step.count > 0
|
13
13
|
nodes_for_provisioning(nodes_to_step, step)
|
14
14
|
# Apply the nodes provisioning for step-N
|
15
15
|
in_step_nodes = Bebox::Node.list(project_root, environment, "steps/#{step}")
|
@@ -22,29 +22,30 @@ module Bebox
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def provision_step_in_node(project_root, environment, step, in_step_nodes, node)
|
25
|
-
title
|
25
|
+
title _('wizard.provision.title')%{step: step, hostname: node.hostname}
|
26
|
+
generate_pre_provision_files(project_root, step, node)
|
27
|
+
provision = Bebox::Provision.new(project_root, environment, node, step)
|
28
|
+
output = provision.apply.success?
|
29
|
+
output ? (ok _('wizard.provision.apply_success')%{hostname: node.hostname, step: step}) : (error _('wizard.provision.apply_failure')%{step: step, hostname: node.hostname})
|
30
|
+
return output
|
31
|
+
end
|
32
|
+
|
33
|
+
def generate_pre_provision_files(project_root, step, node)
|
26
34
|
role = Bebox::Provision.role_from_node(project_root, step, node.hostname)
|
27
35
|
profiles = Bebox::Provision.profiles_from_role(project_root, role) unless role.nil?
|
28
36
|
# Before apply generate the Puppetfile with modules from all associated profiles
|
29
37
|
Bebox::Provision.generate_puppetfile(project_root, step, profiles) unless profiles.nil?
|
30
38
|
# Before apply generate the roles and profiles modules structure for puppet step
|
31
39
|
Bebox::Provision.generate_roles_and_profiles(project_root, step, role, profiles)
|
32
|
-
provision = Bebox::Provision.new(project_root, environment, node, step)
|
33
|
-
output = provision.apply.success?
|
34
|
-
output ? (ok "Node '#{node.hostname}' provisioned to #{step}.") : (error "An error ocurred in the provision of #{step} for node '#{node.hostname}'")
|
35
|
-
return output
|
36
40
|
end
|
37
41
|
|
38
42
|
def check_node_to_step(node, in_step_nodes, step)
|
39
43
|
return true unless in_step_nodes.include?(node.hostname)
|
40
|
-
|
41
|
-
message += " (start: #{node.checkpoint_parameter_from_file('steps/' + step, 'started_at')} - end: #{node.checkpoint_parameter_from_file('steps/' + step, 'finished_at')})."
|
42
|
-
message += "\nDo you want to re-provision it?"
|
43
|
-
confirm_action?(message)
|
44
|
+
confirm_action?(_('wizard.provision.confirm_reprovision')%{hostname: node.hostname, step: step, start: node.checkpoint_parameter_from_file('steps/' + step, 'started_at'), end: node.checkpoint_parameter_from_file('steps/' + step, 'finished_at')})
|
44
45
|
end
|
45
46
|
|
46
47
|
def nodes_for_provisioning(nodes, step)
|
47
|
-
title
|
48
|
+
title _('wizard.provision.nodes_title')%{step: step}
|
48
49
|
nodes.each{|node| msg(node.hostname)}
|
49
50
|
linebreak
|
50
51
|
end
|