escualo 2.0.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
-