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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +3 -18
  3. data/bebox.gemspec +1 -1
  4. data/lib/bebox.rb +1 -0
  5. data/lib/bebox/cli.rb +7 -1
  6. data/lib/bebox/commands/commands_helper.rb +2 -2
  7. data/lib/bebox/commands/environment_commands.rb +6 -6
  8. data/lib/bebox/commands/general_commands.rb +2 -2
  9. data/lib/bebox/commands/node_commands.rb +18 -14
  10. data/lib/bebox/commands/prepare_commands.rb +17 -14
  11. data/lib/bebox/commands/profile_commands.rb +8 -8
  12. data/lib/bebox/commands/provision_commands.rb +7 -7
  13. data/lib/bebox/commands/role_commands.rb +14 -14
  14. data/lib/bebox/logger.rb +2 -0
  15. data/lib/bebox/node.rb +0 -1
  16. data/lib/bebox/profile.rb +1 -1
  17. data/lib/bebox/project.rb +1 -1
  18. data/lib/bebox/vagrant_helper.rb +5 -3
  19. data/lib/bebox/version.rb +1 -1
  20. data/lib/bebox/wizards/environment_wizard.rb +5 -5
  21. data/lib/bebox/wizards/node_wizard.rb +23 -22
  22. data/lib/bebox/wizards/profile_wizard.rb +24 -25
  23. data/lib/bebox/wizards/project_wizard.rb +34 -28
  24. data/lib/bebox/wizards/provision_wizard.rb +13 -12
  25. data/lib/bebox/wizards/role_wizard.rb +15 -21
  26. data/lib/i18n/en.yml +198 -0
  27. data/spec/cli_spec.rb +66 -26
  28. data/spec/fixtures/commands/environment_help.erb.test +1 -0
  29. data/spec/fixtures/commands/general_help.erb.test +1 -0
  30. data/spec/fixtures/commands/in_project_help.erb.test +1 -0
  31. data/spec/fixtures/commands/node_help.erb.test +1 -0
  32. data/spec/fixtures/commands/profile_help.erb.test +1 -0
  33. data/spec/fixtures/commands/role_help.erb.test +1 -0
  34. data/spec/spec_helper.rb +7 -1
  35. data/spec/wizards/profile_wizard_spec.rb +12 -0
  36. metadata +23 -22
  37. data/spec/fixtures/commands/environment_help.test +0 -1
  38. data/spec/fixtures/commands/general_help.test +0 -1
  39. data/spec/fixtures/commands/in_project_help.test +0 -1
  40. data/spec/fixtures/commands/node_help.test +0 -1
  41. data/spec/fixtures/commands/profile_help.test +0 -1
  42. data/spec/fixtures/commands/role_help.test +0 -1
data/lib/bebox/logger.rb CHANGED
@@ -3,6 +3,8 @@
3
3
  module Bebox
4
4
  module Logger
5
5
 
6
+ include FastGettext::Translation
7
+
6
8
  def self.included(base)
7
9
  base.extend(self)
8
10
  end
data/lib/bebox/node.rb CHANGED
@@ -2,7 +2,6 @@
2
2
  module Bebox
3
3
  class Node
4
4
 
5
- include Bebox::Logger
6
5
  include Bebox::FilesHelper
7
6
  include Bebox::VagrantHelper
8
7
 
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 && !Bebox::RESERVED_WORDS.include?(path_child)
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
 
@@ -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 "\nPlease provide your local password, if asked, to configure the local hosts file."
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 "Adding server to vagrant: #{node.hostname}"
68
- info "Please enter the network interface number if asked, and wait until the machine is up."
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
@@ -1,3 +1,3 @@
1
1
  module Bebox
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  end
@@ -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("The '#{environment_name}' environment already exist!.") if Bebox::Environment.environment_exists?(project_root, environment_name)
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 'Environment created!.'
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("The '#{environment_name}' environment do not exist!.") unless Bebox::Environment.environment_exists?(project_root, environment_name)
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('No changes were made.') unless confirm_action?('Are you sure that you want to delete the environment?')
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 'Environment removed!.'
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 'Node created!.'
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, 'Choose the node to remove:')
26
+ hostname = choose_option(nodes, _('wizard.node.choose_node'))
27
27
  else
28
- error "There are no nodes in the '#{environment}' environment to remove. No changes were made."
28
+ error _('wizard.node.no_nodes')%{environment: environment}
29
29
  return true
30
30
  end
31
31
  # Ask for deletion confirmation
32
- return warn('No changes were made.') unless confirm_action?('Are you sure that you want to delete the node?')
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 'Node removed!.'
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, 'Choose an existing node:')
45
- role = choose_option(roles, 'Choose an existing role:')
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 'Role associated to node!.'
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 'Preparing nodes:'
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 'Node prepared!.'
67
+ ok _('wizard.node.preparation_success')
72
68
  end
73
69
  else
74
- warn 'There are no nodes to prepare. No changes were made.'
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
- checkpoint_status = "(start: #{node.checkpoint_parameter_from_file('prepared_nodes', 'started_at')} - end: #{node.checkpoint_parameter_from_file('prepared_nodes', 'finished_at')})"
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 'A hostname with that name already exist. Try a new one.'
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('Write the hostname for the node:', nil, /\.(.*)/, 'Enter valid hostname. Ex. host.server1.com')
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('Write the IP address for the node:', nil, /\.(.*)/, 'Enter a valid IP address. Ex. 192.168.0.50')
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 'The IP address is not free. Try a new one.'
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 error "The profile name can only contain:\n
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("The profile '#{profile_path}' already exist. No changes were made.") if profile_exists?(project_root, profile_path)
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 "Profile '#{profile_path}' created!."
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, 'Choose the profile to remove:')
44
+ profile = choose_option(profiles, _('wizard.choose_remove_profile'))
46
45
  else
47
- return error "There are no profiles to remove. No changes were made."
46
+ return error _('wizard.profile.no_deletion_profiles')
48
47
  end
49
48
  # Ask for deletion confirmation
50
- return warn('No changes were made.') unless confirm_action?('Are you sure that you want to delete the profile?')
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 'Profile removed!.'
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('Project not created. There is already a project with that name in the current directory.'); return false) if project_exists?(Dir.pwd, project_name)
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}, 'Choose the vagrant box provider')
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 "Project '#{project_name}' created!.\nMake: cd #{project_name}\nNow you can add new environments or new nodes to your project.\nSee bebox help."
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?('There is already a box with that name, do you want to overwrite it?') : true
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('Write the URI (http, local_path) for the vagrant box to be used in the project:', 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210-nocm.box')
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 'Downloading box ...'
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('Redirections not supported.') if response.code.to_i == 302
88
- ( response.code.to_i == 200) ? (return true) : error('Download link not valid!.')
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('File path not exist!.')
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 = 'Download/Select a new box'
114
+ other_box_message = _('wizard.project.download_select_box')
115
115
  boxes << other_box_message
116
- current_box = choose_option(boxes, 'Choose an existing box or download/select a new box')
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
- ProgressBar
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 "Please add a ssh key pair (id_rsa, id_rsa.pub) in config/keys/environments/#{environment} to do this step.") unless Bebox::Environment.check_environment_access(project_root, environment)
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 "There are no nodes for provision in #{step}. No changes were made.") unless nodes_to_step.count > 0
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 "Provisioning #{step} in node #{node.hostname}:"
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
- message = "The node '#{node.hostname}' was already provisioned in #{step}"
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 "Nodes for provisioning #{step}:"
48
+ title _('wizard.provision.nodes_title')%{step: step}
48
49
  nodes.each{|node| msg(node.hostname)}
49
50
  linebreak
50
51
  end