escualo 1.0.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/bin/escualo +5 -7
  3. data/lib/command.rb +6 -7
  4. data/lib/commands/artifact.rb +47 -79
  5. data/lib/commands/bootstrap.rb +30 -25
  6. data/lib/commands/deploy.rb +8 -6
  7. data/lib/commands/env.rb +12 -9
  8. data/lib/commands/globals.rb +7 -36
  9. data/lib/commands/plugin.rb +9 -19
  10. data/lib/commands/rake.rb +3 -5
  11. data/lib/commands/remote.rb +6 -5
  12. data/lib/commands/script.rb +6 -25
  13. data/lib/commands/upload.rb +2 -2
  14. data/lib/escualo/apt_get.rb +10 -0
  15. data/lib/escualo/artifact.rb +40 -43
  16. data/lib/escualo/base.rb +36 -15
  17. data/lib/escualo/env.rb +22 -32
  18. data/lib/escualo/gems.rb +4 -4
  19. data/lib/escualo/plugin/docker.rb +4 -4
  20. data/lib/escualo/plugin/haskell.rb +4 -4
  21. data/lib/escualo/plugin/mongo.rb +6 -10
  22. data/lib/escualo/plugin/monit.rb +16 -17
  23. data/lib/escualo/plugin/nginx.rb +7 -10
  24. data/lib/escualo/plugin/node.rb +6 -8
  25. data/lib/escualo/plugin/postgres.rb +26 -0
  26. data/lib/escualo/plugin/rabbit.rb +9 -14
  27. data/lib/escualo/plugin.rb +1 -6
  28. data/lib/escualo/remote.rb +18 -20
  29. data/lib/escualo/ruby.rb +17 -0
  30. data/lib/escualo/script.rb +7 -61
  31. data/lib/escualo/session/docker_session.rb +56 -0
  32. data/lib/escualo/session/local_session.rb +23 -0
  33. data/lib/escualo/session/remote_session.rb +42 -0
  34. data/lib/escualo/session.rb +83 -0
  35. data/lib/escualo/version.rb +2 -2
  36. data/lib/escualo.rb +13 -1
  37. data/lib/ssh.rb +26 -4
  38. data/lib/templates/codechange.sh.erb +1 -1
  39. data/lib/templates/init.sh.erb +7 -0
  40. data/lib/templates/post-receive.sh.erb +8 -2
  41. metadata +9 -9
  42. data/lib/commands/base.rb +0 -8
  43. data/lib/escualo/bootstrap.rb +0 -37
  44. data/lib/escualo/plugin/postgre.rb +0 -23
  45. data/lib/ssh/local_session.rb +0 -44
  46. data/lib/ssh/perform.rb +0 -9
  47. data/lib/ssh/session.rb +0 -61
  48. data/lib/ssh/upload.rb +0 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c809f160a9a7a6ada7701ad6ff2caa6aebe94738
4
- data.tar.gz: 2782155da8b03c01acf3f79291b406f62cfcb92c
3
+ metadata.gz: 4a1b1332770052855fe4cf7dd3fc315d59c7013d
4
+ data.tar.gz: c1ed05104e4191224af4cba5ebd1471d8be6f188
5
5
  SHA512:
6
- metadata.gz: 9b613bec310b5a1e7f723a17c861b845f98ee18e8b2ca721df7cb214a5972f642559656fb6102cfcc2eb867e5627082919a5140e1109f5f82f6bb4491c78053e
7
- data.tar.gz: 5303602c1b75568956a8883607118d23596cbe2192c39e2e0d876d0fb6828cc87a5a231bad5bc8850ac4e0e1376b3ab77f084df0d7d832e633666dc57e8d6854
6
+ metadata.gz: 99fb17f7ccea1a403c6f4622db1ff626bb5edb416ddd2a99691323c15440df7957f616c303a1d46ef78621595bccdf119a8a4af6d8a97f63d0002139cd87633c
7
+ data.tar.gz: a65eee75b9d738447f68c06decf20c465c4fc7480a1830a731262d1d90356364b1ce98fffbfe2cfb2a61c7819a59261c3f244f7c033a2beba8960e4f54558582
data/bin/escualo CHANGED
@@ -10,23 +10,21 @@ program :description, 'escualo provisioning tool implementation for ruby'
10
10
 
11
11
  require_relative '../lib/command'
12
12
 
13
- def step(name, &block)
14
- say name
13
+ def step(name, options=struct, &block)
14
+ say name unless options.dockerized
15
15
  block.call
16
16
  end
17
17
 
18
- def do_unless(done, done_message, options)
19
- if !options.force && done
18
+ def exit_if(done_message, options)
19
+ if !options.force && !options.dockerized && yield
20
20
  say "Nothing to do. #{done_message}"
21
21
  say 'Use --force to proceed it anyway'
22
- else
23
- yield
22
+ exit
24
23
  end
25
24
  end
26
25
 
27
26
  require_relative '../lib/commands/globals'
28
27
 
29
- require_relative '../lib/commands/base'
30
28
  require_relative '../lib/commands/bootstrap'
31
29
  require_relative '../lib/commands/deploy'
32
30
  require_relative '../lib/commands/script'
data/lib/command.rb CHANGED
@@ -1,12 +1,11 @@
1
1
  class Commander::Command
2
- def ssh_action(&block)
2
+ def session_action(force_local=false, &block)
3
3
  action do |args, options|
4
- if $ssh_remote
5
- say "Connecting to remote host #{$hostname}... " if options.verbose
6
- else
7
- say 'Running commands locally... ' if options.verbose
8
- end
9
- Net::SSH.with_session(ssh_session_options) { |ssh| block.call(args, options, ssh) }
4
+ Escualo::Session.within(options, force_local) { |session| block.call(args, options, session) }
10
5
  end
11
6
  end
7
+
8
+ def local_session_action(&block)
9
+ session_action true, &block
10
+ end
12
11
  end
@@ -1,8 +1,8 @@
1
1
  command 'artifact list' do |c|
2
2
  c.syntax = 'escualo artifact list'
3
3
  c.description = 'Lists artifacts on host'
4
- c.ssh_action do |args, options, ssh|
5
- Escualo::Artifact.list(ssh).each do |artifact|
4
+ c.session_action do |args, options, session|
5
+ Escualo::Artifact.list(session).each do |artifact|
6
6
  say artifact
7
7
  end
8
8
  end
@@ -11,65 +11,43 @@ end
11
11
  command 'artifact destroy' do |c|
12
12
  c.syntax = 'escualo artifact destroy <NAME>'
13
13
  c.description = 'Destroys an artifact on host'
14
- c.ssh_action do |args, options, ssh|
15
- name = args.first
16
-
17
- Escualo::Artifact.destroy(ssh, name)
18
-
19
- if !Escualo::Artifact.present? ssh, name
20
- say "#{name} destroyed successfully"
21
- else
22
- abort "Could not destroy artifact #{name}"
23
- end
24
- end
25
- end
26
-
27
- def check_created(kind, name)
28
- if Escualo::Artifact.present?(ssh, name)
29
- say "#{kind.titleize} #{name} created successfully"
30
- say "Now you can deploy this #{kind}"
31
- else
32
- abort "Failed to create artifact #{name}"
14
+ c.session_action do |args, options, session|
15
+ Escualo::Artifact.destroy(session, args.first)
33
16
  end
34
17
  end
35
18
 
36
19
  command 'artifact create service' do |c|
37
20
  c.syntax = 'escualo artifact create service <NAME> <PORT>'
38
21
  c.description = 'Setup a micro-service deployment'
39
- c.option '-f', '--force', TrueClass, 'Force creation even if already done'
40
22
 
41
- c.ssh_action do |args, options, ssh|
23
+ c.session_action do |args, options, session|
42
24
  name = args.first
43
25
  port = args.second
44
26
 
45
- do_unless Escualo::Artifact.present?(ssh, name),
46
- "Service #{name} already created",
47
- options do
48
- launch_command = "exec bundle exec rackup -o 0.0.0.0 -p #{port} > rack.log"
49
- install_command='bundle install --without development test'
50
-
51
- step 'Creating init scripts...' do
52
- Escualo::Artifact.create_scripts_dir ssh, name
53
- Escualo::Artifact.create_init_script ssh,
54
- name: name,
55
- service: true,
56
- install_command: install_command
57
- Escualo::Artifact.create_codechange_script ssh, name
58
- end
59
-
60
- step 'Configuring upstart...' do
61
- Escualo::Artifact.configure_upstart ssh, name: name, launch_command: launch_command
62
- end
63
-
64
- step 'Configuring monit...' do
65
- Escualo::Artifact.configure_monit ssh, name: name, port: port
66
- end
67
-
68
- step 'Creating push infrastructure' do
69
- Escualo::Artifact.create_push_infra ssh, name: name, service: true
70
- end
71
-
72
- check_created 'service', name
27
+ exit_if("Service #{name} already created", options) { Escualo::Artifact.present?(session, name) }
28
+
29
+ launch_command = "exec bundle exec rackup -o 0.0.0.0 -p #{port} > rack.log"
30
+ install_command='bundle install --without development test'
31
+
32
+ step 'Creating init scripts...', options do
33
+ Escualo::Artifact.create_scripts_dir session, name
34
+ Escualo::Artifact.create_init_script session,
35
+ name: name,
36
+ service: true,
37
+ install_command: install_command
38
+ Escualo::Artifact.create_codechange_script session, name
39
+ end
40
+
41
+ step 'Configuring upstart...', options do
42
+ Escualo::Artifact.configure_upstart session, name: name, launch_command: launch_command
43
+ end
44
+
45
+ step 'Configuring monit...', options do
46
+ Escualo::Artifact.configure_monit session, name: name, port: port
47
+ end
48
+
49
+ step 'Creating push infrastructure', options do
50
+ Escualo::Artifact.create_push_infra session, name: name, service: true
73
51
  end
74
52
  end
75
53
  end
@@ -77,23 +55,18 @@ end
77
55
  command 'artifact create site' do |c|
78
56
  c.syntax = 'escualo artifact create site <NAME>'
79
57
  c.description = 'Setup an static site deployment'
80
- c.option '-f', '--force', TrueClass, 'Force creation even if already done'
81
58
 
82
- c.ssh_action do |args, options, ssh|
59
+ c.session_action do |args, options, session|
83
60
  name = args.first
61
+ exit_if("Site #{name} already created", options) { Escualo::Artifact.present?(session, name) }
84
62
 
85
- do_unless Escualo::Artifact.present?(ssh, name),
86
- "Site #{name} already created",
87
- options do
88
- step 'Creating init scripts...' do
89
- Escualo::Artifact.create_scripts_dir ssh, name
90
- Escualo::Artifact.create_init_script ssh, name: name, static: true
91
- end
92
-
93
- step 'Creating push infrastructure' do
94
- Escualo::Artifact.create_push_infra ssh, name: name, static: true
95
- end
96
- check_created 'site', name
63
+ step 'Creating init scripts...', options do
64
+ Escualo::Artifact.create_scripts_dir session, name
65
+ Escualo::Artifact.create_init_script session, name: name, static: true
66
+ end
67
+
68
+ step 'Creating push infrastructure', options do
69
+ Escualo::Artifact.create_push_infra session, name: name, static: true
97
70
  end
98
71
  end
99
72
  end
@@ -101,23 +74,18 @@ end
101
74
  command 'artifact create executable' do |c|
102
75
  c.syntax = 'escualo artifact create executable <NAME>'
103
76
  c.description = 'Setup an executable command deployment'
104
- c.option '-f', '--force', TrueClass, 'Force creation even if already done'
105
77
 
106
- c.ssh_action do |args, options, ssh|
78
+ c.session_action do |args, options, session|
107
79
  name = args.first
108
80
 
109
- do_unless Escualo::Artifact.present?(ssh, name),
110
- "Executable #{name} already created",
111
- options do
112
- step 'Creating init scripts...' do
113
- Escualo::Artifact.create_scripts_dir ssh, name
114
- Escualo::Artifact.create_init_script ssh, name: name, executable: true
115
- end
116
-
117
- step 'Creating push infrastructure' do
118
- Escualo::Artifact.create_push_infra ssh, name: name, executable: true
119
- end
120
- check_created 'executable', name
81
+ exit_if("Executable #{name} already created", options) { Escualo::Artifact.present?(session, name) }
82
+ step 'Creating init scripts...', options do
83
+ Escualo::Artifact.create_scripts_dir session, name
84
+ Escualo::Artifact.create_init_script session, name: name, executable: true
85
+ end
86
+
87
+ step 'Creating push infrastructure', options do
88
+ Escualo::Artifact.create_push_infra session, name: name, executable: true
121
89
  end
122
90
  end
123
91
  end
@@ -4,40 +4,45 @@ command 'bootstrap' do |c|
4
4
  c.option '--swap', TrueClass, 'Setup swap?'
5
5
  c.option '--env ENVIRONMENT', String, 'Environment. Valid options are development and production. default is production'
6
6
  c.option '--with-rbenv', TrueClass, 'Use rbenv instead of native ruby installation'
7
- c.option '-f', '--force', TrueClass, 'Force bootstrap even if already done?'
8
7
 
9
- c.ssh_action do |_args, options, ssh|
8
+ c.session_action do |_args, options, session|
10
9
  options.default env: 'production'
11
10
 
12
- do_unless Escualo::Bootstrap.check(ssh), 'This host has already been bootstrapped', options do
11
+ exit_if('This host has already been bootstrapped', options) do
12
+ Escualo::Env.present?(session, :ESCUALO_BASE_VERSION) && Escualo::Gems.installed?(session)
13
+ end
13
14
 
14
- step 'Enabling swap...' do
15
- Escualo::Bootstrap.enable_swap ssh
16
- end if options.swap
15
+ step 'Configuring variables...', options do
16
+ Escualo::Env.setup session
17
+ Escualo::Env.set_builtins session, options
18
+ end
17
19
 
18
- step 'Configuring variables...' do
19
- Escualo::Env.setup ssh
20
- Escualo::Env.set_locale ssh, options
21
- Escualo::Env.set_builtins ssh, options
22
- end
20
+ step 'Configuring locales...', options do
21
+ Escualo::Base.configure_locales session
22
+ end
23
23
 
24
- step 'Installing Ruby...' do
25
- Escualo::Bootstrap.install_ruby ssh, options
26
- end
24
+ step 'Installing base software', options do
25
+ Escualo::Base.install session
26
+ end
27
27
 
28
- step 'Installing gems...' do
29
- Escualo::Gems.install ssh, options
30
- end
28
+ step 'Adding package repositories', options do
29
+ Escualo::Base.add_repositories session
30
+ end
31
31
 
32
- step 'Setup artifact directories...' do
33
- Escualo::Artifact.setup ssh
34
- end
32
+ step 'Enabling swap...', options do
33
+ Escualo::Base.enable_swap session
34
+ end if options.swap
35
+
36
+ step 'Installing Ruby...', options do
37
+ Escualo::Ruby.install session, options
38
+ end
39
+
40
+ step 'Installing gems...', options do
41
+ Escualo::Gems.install session
42
+ end
35
43
 
36
- if Escualo::Bootstrap.check ssh
37
- say 'Host bootstrapped successfully '
38
- else
39
- abort 'bootstrapping failed'
40
- end
44
+ step 'Setup artifact directories...', options do
45
+ Escualo::Artifact.setup session
41
46
  end
42
47
  end
43
48
  end
@@ -2,15 +2,17 @@ command 'deploy' do |c|
2
2
  c.syntax = 'escualo deploy <name> <repo>'
3
3
  c.description = 'Deploys repository to the given executable, service or site'
4
4
  c.option '--tag GIT_TAG', String, 'Github tag to deploy'
5
- c.action do |args, options|
5
+ c.local_session_action do |args, options, session|
6
+ session_options = Escualo::Session.parse_session_options(options)
7
+
6
8
  Dir.mktmpdir do |dir|
7
- step 'Cloning repository...' do
8
- Escualo::Remote.clone dir, args.second, options
9
- Escualo::Remote.attach dir, args.first
9
+ step 'Cloning repository...', options do
10
+ Escualo::Remote.clone session, dir, args.second, options
11
+ Escualo::Remote.attach session, dir, args.first, session_options
10
12
  end
11
13
 
12
- step 'Pushing to remote...' do
13
- Escualo::Remote.push dir
14
+ step 'Pushing to remote...', options do
15
+ Escualo::Remote.push session, dir
14
16
  end
15
17
  end
16
18
  end
data/lib/commands/env.rb CHANGED
@@ -1,12 +1,11 @@
1
1
  command 'env list' do |c|
2
2
  c.syntax = 'escualo env list'
3
3
  c.description = 'List escualo variables on host'
4
- c.ssh_action do |args, options, ssh|
5
- say Escualo::Env.list ssh
4
+ c.session_action do |_args, _options, session|
5
+ say Escualo::Env.list session
6
6
  end
7
7
  end
8
8
 
9
-
10
9
  def parse_args_variables(args)
11
10
  args.map { |it| it.split('=') }.to_h
12
11
  end
@@ -14,23 +13,27 @@ end
14
13
  command 'env set' do |c|
15
14
  c.syntax = 'escualo env set <NAME>=<VALUE> [<NAME>=<VALUE>,...<NAME>=<VALUE>]'
16
15
  c.description = 'Sets one or more escualo variables on host'
17
- c.ssh_action do |args, options, ssh|
18
- Escualo::Env.set ssh, parse_args_variables(args)
16
+ c.session_action do |args, _options, session|
17
+ Escualo::Env.set session, parse_args_variables(args)
19
18
  end
20
19
  end
21
20
 
22
21
  command 'env unset' do |c|
23
22
  c.syntax = 'escualo env unset <NAME> [<NAME>,...<NAME>]'
24
23
  c.description = 'Unset escualo variables on host'
25
- c.ssh_action do |args, options, ssh|
26
- Escualo::Env.unset ssh, args
24
+ c.session_action do |args, _options, session|
25
+ Escualo::Env.unset session, args
27
26
  end
28
27
  end
29
28
 
30
29
  command 'env clean' do |c|
31
30
  c.syntax = 'escualo env clean'
31
+ c.option '--env ENVIRONMENT', String, 'Environment. Valid options are development and production. default is production'
32
+
32
33
  c.description = 'Unset all escualo variables on host'
33
- c.ssh_action do |args, options, ssh|
34
- Escualo::Env.clean ssh, options
34
+ c.session_action do |_args, options, session|
35
+ options.default env: 'production'
36
+
37
+ Escualo::Env.clean session, options
35
38
  end
36
39
  end
@@ -1,41 +1,12 @@
1
- $hostname = 'localhost'
2
- $username = 'root'
3
- $ssh_options = {}
4
- $ssh_remote = false
1
+ global_option '-h', '--hostname HOSTNAME', String, 'The host to connect. Defaults to "localhost"'
2
+ global_option '-u', '--username USERNAME', String, 'The username to connect. Defaults to "root"'
5
3
 
6
- global_option '-h', '--hostname HOSTNAME', String, 'The host to connect. Defaults to "localhost"' do |hostname|
7
- $hostname = hostname
8
- $ssh_remote = true
9
- end
4
+ global_option '-i', '--ssh-key PRIVATE_KEY', String, 'An optional private key'
5
+ global_option '--ssh-port PORT', String, 'The ssh port to connect. Defaults to 22'
6
+ global_option '--ssh-password PASSWORD', String, 'An optional remote password'
10
7
 
11
- global_option '-u', '--username USERNAME', String, 'The username to connect. Defaults to "root"' do |username|
12
- $username = username
13
- $ssh_remote = true
14
- end
15
-
16
- global_option '--password PASSWORD', String, 'An optional remote password' do |password|
17
- $password = password
18
- $ssh_options[:password] = password
19
- $ssh_remote = true
20
- end
21
-
22
- global_option '-i', '--ssh-key PRIVATE_KEY', String, 'An optional private key' do |private_key|
23
- $ssh_key = private_key
24
- $ssh_options[:keys] = [private_key]
25
- $ssh_remote = true
26
- end
27
-
28
- global_option '--ssh-port PORT', String, 'The ssh port to connect. Defaults to 22' do |port|
29
- $ssh_port = port
30
- $ssh_options[:port] = port
31
- $ssh_remote = true
32
- end
8
+ global_option '--dockerized', TrueClass, 'Generate a docker script instead of running the commands'
33
9
 
34
10
  global_option '--verbose', TrueClass, 'Dumps extra output'
35
11
 
36
- def ssh_session_options
37
- $ssh_options.merge(
38
- username: $username,
39
- hostname: $hostname,
40
- local: !$ssh_remote).compact
41
- end
12
+ global_option '-f', '--force', TrueClass, 'Force command run'
@@ -6,31 +6,23 @@ command 'plugin install' do |c|
6
6
  c.option '--rabbit-admin-password PASSWORD', String, 'rabbitmq admin password, only for rabbit plugin'
7
7
 
8
8
  c.option '--pg-version VERSION', String, 'PostgreSQL major and minor version. Default is 9.3, only for postgre plugin'
9
+ c.option '--pg-username USERNAME', String, 'PostgreSQL username'
10
+ c.option '--pg-password PASSWORD', String, 'PostgreSQL password'
9
11
 
10
12
  c.option '--monit-version VERSION', String, 'Monit version. Default is 5.16'
11
13
  c.option '--monit-password PASSWORD', String, 'Monit password. Required with monit plugin'
12
14
 
13
- c.option '-f', '--force', TrueClass, 'Force reinstalling even if already done'
14
- c.ssh_action do |args, options, ssh|
15
+ c.session_action do |args, options, session|
15
16
  options.default pg_version: '9.3',
16
17
  monit_version: '5.16'
17
18
 
18
19
  plugin = args.first
19
- say "Installing #{plugin}"
20
-
21
20
  installer = Escualo::Plugin.load plugin
22
21
 
23
- do_unless installer.check(ssh, options),
24
- "Plugin #{plugin} is already installed",
25
- options do
26
-
27
- step "Installing plugin #{plugin}" do
28
- if Escualo::Plugin.run_and_check installer, ssh, options
29
- say 'Installed successfully!'
30
- else
31
- abort 'Installation of plugin failed'
32
- end
33
- end
22
+ exit_if("Plugin #{plugin} is already installed", options) { installer.installed?(session, options) }
23
+
24
+ step "Installing plugin #{plugin}", options do
25
+ installer.run session, options
34
26
  end
35
27
  end
36
28
  end
@@ -39,11 +31,9 @@ command 'plugin list' do |c|
39
31
  c.syntax = 'escualo plugin list'
40
32
  c.description = 'List installed plugins on host'
41
33
 
42
- c.ssh_action do |_args, _options, ssh|
34
+ c.session_action do |_args, _options, session|
43
35
  Escualo::Plugin::PLUGINS.each do |plugin|
44
- if Escualo::Plugin.load(plugin).check ssh
45
- say plugin
46
- end
36
+ say plugin if Escualo::Plugin.load(plugin).installed? session
47
37
  end
48
38
  end
49
39
  end
data/lib/commands/rake.rb CHANGED
@@ -1,13 +1,11 @@
1
1
  command 'rake' do |c|
2
2
  c.syntax = 'escualo rake <SERVICE_NAME> <TASK>'
3
3
  c.description = 'Run rake task on host'
4
- c.ssh_action do |args, options, ssh|
4
+ c.session_action do |args, _options, session|
5
5
  name = args.first
6
6
  task = args.second
7
- ssh.shell.perform! %Q{
8
- cd /var/www/#{name}
9
- rake #{task}
10
- }, options
7
+
8
+ session.tell! "cd /var/www/#{name} && rake #{task}"
11
9
  end
12
10
  end
13
11
 
@@ -3,10 +3,11 @@ command 'remote attach' do |c|
3
3
  c.description = "Adds the given artifact to current's repository"
4
4
  c.option '--repo-path PATH', String, 'Sets the git dir'
5
5
 
6
- c.action do |args, options|
6
+ c.local_session_action do |args, options, session|
7
7
  options.default repo_path: Dir.pwd
8
+ session_options = Escualo::Session.parse_session_options options
8
9
 
9
- Escualo::Remote.attach options.repo_path, args.first
10
+ Escualo::Remote.attach session, options.repo_path, args.first, session_options
10
11
  end
11
12
  end
12
13
 
@@ -15,10 +16,10 @@ command 'remote show' do |c|
15
16
  c.description = "Show attached artifacts to current's repository"
16
17
  c.option '--repo-path PATH', String, 'Sets the git dir'
17
18
 
18
- c.action do |_args, options|
19
+ c.local_session_action do |_args, options, session|
19
20
  options.default repo_path: Dir.pwd
20
21
 
21
- Escualo::Remote.remotes(options.repo_path).each { |it| say it }
22
+ Escualo::Remote.remotes(session, options.repo_path).each { |it| say it }
22
23
  end
23
24
  end
24
25
 
@@ -26,7 +27,7 @@ command 'remote push' do |c|
26
27
  c.syntax = 'escualo remote push'
27
28
  c.description = 'Pushes artifact at current repository'
28
29
  c.action do |_args, _options|
29
- Escualo::Remote.push Dir.pwd
30
+ Escualo::Remote.push session, Dir.pwd
30
31
  end
31
32
  end
32
33
 
@@ -2,38 +2,19 @@ command 'script' do |c|
2
2
  c.syntax = 'escualo script <FILE>'
3
3
  c.description = 'Runs a escualo configuration'
4
4
  c.option '--dockerized', TrueClass, 'Create a Dockerfile instead of running commands'
5
+ c.option '--write-dockerfile', TrueClass, 'Write a complete Dockerfile instead of writing to stdout. Default is false'
6
+ c.option '--dockerfile PATH', String, 'Destination Dockerfile. Default is `Dockerfile`'
5
7
  c.option '--development', TrueClass, 'Use local escualo gemspec instead of fetching from internet'
6
8
  c.option '--base-image BASE_IMAGE', String, 'Default base image. Only for dockerized runs'
7
9
 
8
10
  c.action do |args, options|
9
- options.default base_image: 'ubuntu'
10
-
11
- if options.dockerized
12
- mode = Escualo::Script::Dockerized.new
13
- else
14
- mode = Escualo::Script::Standard.new
15
- end
16
-
17
- mode.start! options
18
-
11
+ options.default base_image: 'ubuntu',
12
+ dockerfile: 'Dockerfile'
19
13
  file = YAML.load_file args.first
20
-
21
- local_ssh = Net::SSH::Connection::LocalSession.new
22
14
  delegated_options = Escualo::Script.delegated_options options
23
15
 
24
- step 'Running local commands...' do
25
- mode.run_commands_for! file['local'], delegated_options, local_ssh, options
16
+ Escualo::Session.within(options, true) do |session|
17
+ Escualo::Script.run!(session, $PROGRAM_NAME, file, delegated_options)
26
18
  end
27
- step 'Running remote commands...' do
28
- Net::SSH.with_session(ssh_session_options) do |ssh|
29
- mode.run_commands_for! file['remote'], ssh, options
30
- end
31
- end
32
-
33
- step 'Running deploy commands...' do
34
- mode.run_commands_for! file['deploy'], delegated_options, local_ssh, options
35
- end
36
-
37
- mode.finish!
38
19
  end
39
20
  end
@@ -1,7 +1,7 @@
1
1
  command 'upload' do |c|
2
2
  c.syntax = 'escualo upload <FILE> <DESTINATION>'
3
3
  c.description = 'Upload file to host'
4
- c.ssh_action do |args, options, ssh|
5
- ssh.scp.upload! args.first, args.second
4
+ c.session_action do |args, _options, session|
5
+ session.upload! args.first, args.second
6
6
  end
7
7
  end
@@ -0,0 +1,10 @@
1
+ module Escualo::AptGet
2
+ def self.install(session, packages_string, options={})
3
+ session.tell_all! update_command(options),
4
+ "apt-get install -y --force-yes #{packages_string}"
5
+ end
6
+
7
+ def self.update_command(options)
8
+ 'apt-get update' if options[:update]
9
+ end
10
+ end