escualo 2.0.2 → 3.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e0fa6f10980a230f653c33126b1e2138b4e84c6f
4
- data.tar.gz: 31b1b195aad36531165036df541bab7a5fad4d58
3
+ metadata.gz: f760bc96fc3d1d909c168493dc696bbe728430e1
4
+ data.tar.gz: 573ffed5fa0763389d1b23f0b548cd95d2265647
5
5
  SHA512:
6
- metadata.gz: 5a346874dd6aa23c9b40ff200340f1ffd851c1f059039475b4bd88a9b67c1ea2c2845e6009d1a2d05e2b76c7dc051544fce86486e22dd8b82d8ab3558fe07ba8
7
- data.tar.gz: ffc4bfc7cbcf0c2700cae65ff67dad6ea83dbc4d0e8165e02bf52bb96c0f7cf3c1fd8b1e1ad2c5986ec5b680cf92ae7f82b8d5403204d37b0a7740e809abfff5
6
+ metadata.gz: f8020df47e8a153df05b1e4326d693ea2720355cbe2d1c2458f6d898b5bf2fa7e2565f14c70c89627bacb11be047a10c078af2b32d972de9bc13e8bb5aaab157
7
+ data.tar.gz: 5f2dfa0644bff836637bac440b68e0805ff734e41832f976acc4e020cc27d8032e48f9d6d802b217b05333e59f1d774b2c3e049e5653807b4e64b418c1e14f37
@@ -27,7 +27,6 @@ require_relative '../lib/commands/globals'
27
27
 
28
28
  require_relative '../lib/commands/bootstrap'
29
29
  require_relative '../lib/commands/deploy'
30
- require_relative '../lib/commands/script'
31
30
  require_relative '../lib/commands/upload'
32
31
  require_relative '../lib/commands/rake'
33
32
 
@@ -24,6 +24,9 @@ command 'artifact create service' do |c|
24
24
  name = args.first
25
25
  port = args.second
26
26
 
27
+ raise 'missing service name!' unless name
28
+ raise 'missing port!' unless port
29
+
27
30
  exit_if("Service #{name} already created", options) { Escualo::Artifact.present?(session, name) }
28
31
 
29
32
  launch_command = "exec bundle exec rackup -o 0.0.0.0 -p #{port} > rack.log"
@@ -58,6 +61,8 @@ command 'artifact create site' do |c|
58
61
 
59
62
  c.session_action do |args, options, session|
60
63
  name = args.first
64
+ raise 'missing site name!' unless name
65
+
61
66
  exit_if("Site #{name} already created", options) { Escualo::Artifact.present?(session, name) }
62
67
 
63
68
  step 'Creating init scripts...', options do
@@ -77,6 +82,7 @@ command 'artifact create executable' do |c|
77
82
 
78
83
  c.session_action do |args, options, session|
79
84
  name = args.first
85
+ raise 'missing executable name!' unless name
80
86
 
81
87
  exit_if("Executable #{name} already created", options) { Escualo::Artifact.present?(session, name) }
82
88
  step 'Creating init scripts...', options do
@@ -6,6 +6,7 @@ global_option '--ssh-port PORT', String, 'The ssh port to connect. Defaults to 2
6
6
  global_option '--ssh-password PASSWORD', String, 'An optional remote password'
7
7
 
8
8
  global_option '--dockerized', TrueClass, 'Generate a docker script instead of running the commands'
9
+ global_option '--unoptimized-dockerfile', TrueClass, 'Do not optimize commands when run dockerized'
9
10
 
10
11
  global_option '--verbose', TrueClass, 'Dumps extra output'
11
12
 
@@ -5,7 +5,8 @@ command 'plugin install' do |c|
5
5
 
6
6
  c.option '--rabbit-admin-password PASSWORD', String, 'rabbitmq admin password, only for rabbit plugin'
7
7
 
8
- c.option '--pg-version VERSION', String, 'PostgreSQL major and minor version. Default is 9.3, only for postgre plugin'
8
+ c.option '--pg-libs-only', TrueClass, 'Do not install server, only for postgres'
9
+ c.option '--pg-version VERSION', String, 'PostgreSQL major and minor version. Default is 9.3, only for postgres plugin'
9
10
  c.option '--pg-username USERNAME', String, 'PostgreSQL username'
10
11
  c.option '--pg-password PASSWORD', String, 'PostgreSQL password'
11
12
 
@@ -34,7 +34,6 @@ require_relative './escualo/apt_get'
34
34
  require_relative './escualo/gems'
35
35
  require_relative './escualo/base'
36
36
  require_relative './escualo/ruby'
37
- require_relative './escualo/script'
38
37
  require_relative './escualo/plugin'
39
38
  require_relative './escualo/remote'
40
39
  require_relative './escualo/artifact'
@@ -1,11 +1,7 @@
1
1
  module Escualo
2
2
  module Env
3
3
  def self.setup(session)
4
- source_escualorc = "'source ~/.escualorc'"
5
- session.tell_all! 'mkdir -p ~/.escualo/vars',
6
- %q{echo 'for var in ~/.escualo/vars/*; do source $var; done' > ~/.escualorc},
7
- %q{chmod u+x ~/.escualorc},
8
- "grep -q #{source_escualorc} ~/.bashrc || echo #{source_escualorc} >> ~/.bashrc"
4
+ session.setup_environment_variables!
9
5
  end
10
6
 
11
7
  def self.set_builtins(session, options)
@@ -19,7 +15,8 @@ module Escualo
19
15
  end
20
16
 
21
17
  def self.clean(session, options)
22
- session.tell! 'rm ~/.escualo/vars/*'
18
+ session.clean_environment_variables!
19
+
23
20
  set_builtins session, options
24
21
  end
25
22
 
@@ -34,17 +31,23 @@ module Escualo
34
31
  end
35
32
 
36
33
  def self.set(session, variables)
37
- session.tell_all! *variables.map { |key, value| set_command key, value }
34
+ session.set_environment_variables! variables
38
35
  end
39
36
 
40
- def self.set_command(key, value)
41
- "echo export #{key}=#{value} > ~/.escualo/vars/#{key}"
37
+ def self.unset(session, variable_names)
38
+ session.unset_environment_variables! variable_names
42
39
  end
43
40
 
44
- def self.unset(session, variable_names)
45
- variable_names.each do |name|
46
- session.tell!("rm ~/.escualo/vars/#{name}")
47
- end
41
+ def self.unset_command(name)
42
+ "rm ~/.escualo/vars/#{name}"
43
+ end
44
+
45
+ def self.clean_command
46
+ 'rm ~/.escualo/vars/*'
47
+ end
48
+
49
+ def self.set_command(key, value)
50
+ "echo export #{key}=#{value} > ~/.escualo/vars/#{key}"
48
51
  end
49
52
 
50
53
  def self.locale_variables
@@ -1,23 +1,35 @@
1
1
  module Escualo::Plugin
2
2
  class Postgres
3
3
  def run(session, options)
4
- raise 'missing pg-username' unless options.pg_username
5
- raise 'missing pg-password' unless options.pg_password
4
+ if_server options do
5
+ raise 'missing pg-username' unless options.pg_username
6
+ raise 'missing pg-password' unless options.pg_password
7
+ end
6
8
 
7
9
  pg_hba_conf = "/etc/postgresql/#{options.pg_version}/main/pg_hba.conf"
10
+ dependencies = options.pg_libs_only ?
11
+ "postgresql-client-#{options.pg_version} libpq-dev" :
12
+ "postgresql-#{options.pg_version} libpq-dev"
8
13
 
9
- Escualo::AptGet.install session, "postgresql-#{options.pg_version} libpq-dev"
14
+ Escualo::AptGet.install session, dependencies
10
15
 
11
- session.tell_all! "echo 'local all postgres peer' > #{pg_hba_conf}",
12
- "echo 'local all postgres peer' >> #{pg_hba_conf}",
13
- "echo 'local all all password' >> #{pg_hba_conf}",
14
- "echo 'host all all 127.0.0.1/32 md5' >> #{pg_hba_conf}"
16
+ if_server options do
17
+ session.tell_all! "echo 'local all postgres peer' > #{pg_hba_conf}",
18
+ "echo 'local all postgres peer' >> #{pg_hba_conf}",
19
+ "echo 'local all all password' >> #{pg_hba_conf}",
20
+ "echo 'host all all 127.0.0.1/32 md5' >> #{pg_hba_conf}"
15
21
 
16
- session.tell_all! '/etc/init.d/postgresql restart',
17
- 'cd /',
18
- "echo \"create role #{options.pg_username} with createdb login password '#{options.pg_password}';\" | sudo -u postgres PGDATABASE='' psql"
22
+ session.tell_all! '/etc/init.d/postgresql restart',
23
+ 'cd /',
24
+ "echo \"create role #{options.pg_username} with createdb login password '#{options.pg_password}';\" | sudo -u postgres PGDATABASE='' psql"
25
+ end
19
26
  end
20
27
 
28
+ def if_server(options)
29
+ unless options.pg_libs_only
30
+ yield
31
+ end
32
+ end
21
33
 
22
34
  def installed?(session, options)
23
35
  session.check? 'psql --version', "psql (PostgreSQL) #{options.pg_version}"
@@ -11,10 +11,6 @@ class Escualo::Session
11
11
  ask(command).include? include rescue false
12
12
  end
13
13
 
14
- def embed!(command)
15
- tell! command
16
- end
17
-
18
14
  def tell_all!(*commands)
19
15
  tell! commands.compact.join(' && ')
20
16
  end
@@ -33,51 +29,17 @@ class Escualo::Session
33
29
  end
34
30
  end
35
31
 
36
- def write_template!(name, template, &block)
37
- template.with_tempfile!('template', &block)
38
- end
39
-
40
- def self.parse_session_options(options)
41
- struct username: options.username || 'root',
42
- hostname: options.hostname || 'localhost',
43
- ssh_options: {
44
- keys: [options.ssh_key].compact,
45
- port: options.ssh_port || 22
46
- },
47
- verbose: options.verbose,
48
- local: options.hostname.blank? && options.username.blank? && options.ssh_key.blank? && options.ssh_port.blank?,
49
- dockerized: options.dockerized
50
- end
51
-
52
- def self.within(options, force_local=false, &block)
53
- session_options = parse_session_options options
54
-
55
- if session_options.dockerized
56
- within_dockerized_session session_options, options, &block
57
- elsif session_options.local || force_local
58
- block.call(Escualo::Session::Local.new session_options)
59
- else
60
- within_ssh_session(session_options, &block)
61
- end
62
- end
63
-
64
- def self.within_dockerized_session(session_options, options, &block)
65
- session = Escualo::Session::Docker.new session_options
66
- session.start! options
67
- block.call(session)
68
- session.finish! options
32
+ def self.set_command(key, value)
33
+ "echo export #{key}=#{value} > ~/.escualo/vars/#{key}"
69
34
  end
70
35
 
71
- def self.within_ssh_session(session_options, &block)
72
- Net::SSH.start(
73
- session_options.hostname,
74
- session_options.username,
75
- session_options.ssh_options) do |ssh|
76
- block.call(Escualo::Session::Remote.new ssh, session_options)
77
- end
36
+ def write_template!(name, template, &block)
37
+ template.with_tempfile!('template', &block)
78
38
  end
79
39
  end
80
40
 
81
41
  require_relative './session/docker_session'
82
42
  require_relative './session/remote_session'
83
43
  require_relative './session/local_session'
44
+ require_relative './session/within'
45
+ require_relative './session/environment'
@@ -1,8 +1,25 @@
1
1
  class Escualo::Session::Docker < Escualo::Session
2
2
  attr_accessor :dockerfile
3
3
 
4
- def embed!(command)
5
- dockerfile << Open3.exec!("#{command} --dockerized")
4
+ def unset_environment_variables!(*)
5
+ raise 'can not unset variables on dockerfile optimized mode' unless options.unoptimized_dockerfile
6
+ super
7
+ end
8
+
9
+ def clean_environment_variables!(*)
10
+ raise 'can not clean variables on dockerfile optimized mode' unless options.unoptimized_dockerfile
11
+ super
12
+ end
13
+
14
+ def setup_environment_variables!
15
+ super if options.unoptimized_dockerfile
16
+ end
17
+
18
+ def set_environment_variables!(variables)
19
+ return super if options.unoptimized_dockerfile
20
+ variables.each do |key, value|
21
+ dockerfile << "ENV #{key} #{value}\n"
22
+ end
6
23
  end
7
24
 
8
25
  def tell!(command)
@@ -22,30 +39,12 @@ class Escualo::Session::Docker < Escualo::Session
22
39
  raise 'can not ask on a docker session'
23
40
  end
24
41
 
25
- def start!(options)
26
- if options.write_dockerfile
27
- @dockerfile = "FROM #{base_image options}\nMAINTAINER #{ENV['USER']}\n"
28
- else
29
- @dockerfile = ''
30
- end
31
- end
32
-
33
- def base_image(options)
34
- if options.base_image == 'ubuntu'
35
- 'ubuntu:xenial'
36
- elsif options.base_image == 'debian'
37
- 'debian:jessie'
38
- else
39
- raise "Unsupported base image #{options.base_image}. Only debian and ubuntu are supported"
40
- end
42
+ def start!(_options)
43
+ @dockerfile = ''
41
44
  end
42
45
 
43
- def finish!(options)
44
- if options.write_dockerfile
45
- File.write('Dockerfile', dockerfile)
46
- else
47
- puts dockerfile
48
- end
46
+ def finish!(_options)
47
+ puts dockerfile
49
48
  end
50
49
 
51
50
  def self.started(options = struct)
@@ -0,0 +1,22 @@
1
+ class Escualo::Session
2
+
3
+ def clean_environment_variables!
4
+ tell! Escualo::Env.clean_command
5
+ end
6
+
7
+ def setup_environment_variables!
8
+ source_escualorc = "'source ~/.escualorc'"
9
+ tell_all! 'mkdir -p ~/.escualo/vars',
10
+ %q{echo 'for var in ~/.escualo/vars/*; do source $var; done' > ~/.escualorc},
11
+ %q{chmod u+x ~/.escualorc},
12
+ "grep -q #{source_escualorc} ~/.bashrc || echo #{source_escualorc} >> ~/.bashrc"
13
+ end
14
+
15
+ def set_environment_variables!(variables)
16
+ tell_all! *variables.map { |key, value| Escualo::Env.set_command key, value }
17
+ end
18
+
19
+ def unset_environment_variables!(variable_names)
20
+ tell_all! *variable_names.map { |name| Escualo::Env.unset_command name }
21
+ end
22
+ end
@@ -0,0 +1,43 @@
1
+ class Escualo::Session
2
+ def self.parse_session_options(options)
3
+ struct username: options.username || 'root',
4
+ hostname: options.hostname || 'localhost',
5
+ ssh_options: {
6
+ keys: [options.ssh_key].compact,
7
+ port: options.ssh_port || 22
8
+ },
9
+ verbose: options.verbose,
10
+ local: options.hostname.blank? && options.username.blank? && options.ssh_key.blank? && options.ssh_port.blank?,
11
+ dockerized: options.dockerized,
12
+ unoptimized_dockerfile: options.unoptimized_dockerfile
13
+
14
+ end
15
+
16
+ def self.within(options, force_local=false, &block)
17
+ session_options = parse_session_options options
18
+
19
+ if session_options.dockerized
20
+ within_dockerized_session session_options, options, &block
21
+ elsif session_options.local || force_local
22
+ block.call(Escualo::Session::Local.new session_options)
23
+ else
24
+ within_ssh_session(session_options, &block)
25
+ end
26
+ end
27
+
28
+ def self.within_dockerized_session(session_options, options, &block)
29
+ session = Escualo::Session::Docker.new session_options
30
+ session.start! options
31
+ block.call(session)
32
+ session.finish! options
33
+ end
34
+
35
+ def self.within_ssh_session(session_options, &block)
36
+ Net::SSH.start(
37
+ session_options.hostname,
38
+ session_options.username,
39
+ session_options.ssh_options) do |ssh|
40
+ block.call(Escualo::Session::Remote.new ssh, session_options)
41
+ end
42
+ end
43
+ end
@@ -1,4 +1,4 @@
1
1
  module Escualo
2
- VERSION = '2.0.2'
2
+ VERSION = '3.0.0'
3
3
  BASE_VERSION = '3.3'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: escualo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Leonardo Bulgarelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-15 00:00:00.000000000 Z
11
+ date: 2016-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -142,7 +142,6 @@ files:
142
142
  - lib/commands/plugin.rb
143
143
  - lib/commands/rake.rb
144
144
  - lib/commands/remote.rb
145
- - lib/commands/script.rb
146
145
  - lib/commands/upload.rb
147
146
  - lib/escualo.rb
148
147
  - lib/escualo/apt_get.rb
@@ -162,11 +161,12 @@ files:
162
161
  - lib/escualo/ppa.rb
163
162
  - lib/escualo/remote.rb
164
163
  - lib/escualo/ruby.rb
165
- - lib/escualo/script.rb
166
164
  - lib/escualo/session.rb
167
165
  - lib/escualo/session/docker_session.rb
166
+ - lib/escualo/session/environment.rb
168
167
  - lib/escualo/session/local_session.rb
169
168
  - lib/escualo/session/remote_session.rb
169
+ - lib/escualo/session/within.rb
170
170
  - lib/escualo/version.rb
171
171
  - lib/ssh.rb
172
172
  - lib/template.rb
@@ -1,20 +0,0 @@
1
- command 'script' do |c|
2
- c.syntax = 'escualo script <FILE>'
3
- c.description = 'Runs a escualo configuration'
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`'
7
- c.option '--development', TrueClass, 'Use local escualo gemspec instead of fetching from internet'
8
- c.option '--base-image BASE_IMAGE', String, 'Default base image. Only for dockerized runs'
9
-
10
- c.action do |args, options|
11
- options.default base_image: 'ubuntu',
12
- dockerfile: 'Dockerfile'
13
- file = YAML.load_file args.first
14
- delegated_options = Escualo::Script.delegated_options options
15
-
16
- Escualo::Session.within(options, true) do |session|
17
- Escualo::Script.run!(session, $PROGRAM_NAME, file, delegated_options)
18
- end
19
- end
20
- end
@@ -1,25 +0,0 @@
1
- module Escualo
2
- module Script
3
- def self.commands(escualo, script, extra)
4
- (script||[]).map { |it| "#{escualo} #{it} #{extra}" }
5
- end
6
-
7
- def self.delegated_options(options)
8
- [options.hostname.try { |it| "--hostname #{it}" },
9
- options.username.try { |it| "--username #{it}" },
10
- options.password.try { |it| "--ssh-password #{it}" },
11
- options.ssh_key.try { |it| "--ssh-key #{it}" },
12
- options.ssh_port.try { |it| "--ssh-port #{it}" },
13
- options.trace && '--trace',
14
- options.verbose && '--verbose',
15
- ].compact.join(' ')
16
- end
17
-
18
- def self.run!(session, escualo, script, extra='')
19
- Escualo::Script.commands(escualo, script, extra).each do |command|
20
- session.embed! command
21
- end
22
- end
23
- end
24
- end
25
-