escualo 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ OWY3ZjE5YWNiNGZhZWFiZGJkZWExNzdiOTZkZWNlYzI0NWFkMzMyOA==
5
+ data.tar.gz: !binary |-
6
+ MzJiM2MxMjcxMmY0Mzk5M2Y5ZjMyMTU4MTMwYWUxMjQ2M2U1YTYxYQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZGM5Yjg4NDNlYWRmZDQwOGVlYjA5OTJhYjk1YjIwNjVhY2ExNTFiY2I1OWYw
10
+ YmVmOTE1MTFmODgxZGFjYTJkMjY2YzhjM2U5YTU5NzI0YzU2ZTA3M2YxMjQz
11
+ ZDNmOWY3MjViNDU5ZDY1ZDMwMWQ2OGZjZTFjY2ZlODhiNDY2Yzk=
12
+ data.tar.gz: !binary |-
13
+ NGQxNTY2MmFhNzRkYmRlZTYzODhiZWIyNDM2MDhjNmYzZTBjYmYyZWJjOTc5
14
+ Y2ZmZTIyMDAyMWJkMzJkMWZkN2Q0MmM4ZjRhNjYwYzNmNjRkYTlmNjE4Y2Ey
15
+ MzBmM2ZlYThjMzc2NWEyMjczMDUwMjNkMjM4ZGQ0MDFlNjdhODU=
data/bin/escualo ADDED
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'bundler/setup'
5
+ require 'commander/import'
6
+
7
+ require_relative '../lib/escualo'
8
+
9
+ program :name, 'escualo'
10
+ program :version, Escualo::VERSION
11
+ program :description, 'escualo provisioning tool implementation for ruby'
12
+
13
+ require_relative '../lib/command'
14
+
15
+ def step(name, &block)
16
+ say name
17
+ block.call
18
+ end
19
+
20
+ def do_unless(done, done_message, options)
21
+ if !options.force && done
22
+ say "Nothing to do. #{done_message}"
23
+ say 'Use --force to proceed it anyway'
24
+ else
25
+ yield
26
+ end
27
+ end
28
+
29
+ require_relative '../lib/commands/globals'
30
+
31
+ require_relative '../lib/commands/bootstrap'
32
+ require_relative '../lib/commands/deploy'
33
+ require_relative '../lib/commands/script'
34
+ require_relative '../lib/commands/upload'
35
+ require_relative '../lib/commands/rake'
36
+
37
+ require_relative '../lib/commands/plugin'
38
+ require_relative '../lib/commands/artifact'
39
+ require_relative '../lib/commands/remote'
40
+ require_relative '../lib/commands/env'
41
+
data/lib/command.rb ADDED
@@ -0,0 +1,9 @@
1
+ class Commander::Command
2
+ def ssh_action(&block)
3
+ action do |args, options|
4
+ Net::SSH.start($hostname, $username, $ssh_options.compact) do |ssh|
5
+ block.call(args, options, ssh)
6
+ end
7
+ end
8
+ end
9
+ end
data/lib/escualo.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'net/ssh'
2
+ require 'net/scp'
3
+ require 'securerandom'
4
+ require 'yaml'
5
+ require 'mumukit/core'
6
+
7
+ module Escualo
8
+ end
9
+
10
+ require_relative './session'
11
+ require_relative './template'
12
+
13
+ require_relative './escualo/version'
14
+ require_relative './escualo/env'
15
+ require_relative './escualo/bootstrap'
16
+ require_relative './escualo/plugin'
17
+ require_relative './escualo/remote'
18
+ require_relative './escualo/artifact'
data/lib/session.rb ADDED
@@ -0,0 +1,64 @@
1
+ class Net::SSH::Connection::Session
2
+ def upload_template!(destination, name, bindings)
3
+ Mumukit::Core::Template
4
+ .new(File.join(__dir__, 'templates', "#{name}.erb"), bindings)
5
+ .with_tempfile!('template') do |file|
6
+ scp.upload! file, destination
7
+ end
8
+ end
9
+
10
+ def tell!(command)
11
+ channel = self.open_channel do |ch|
12
+ ch.exec command do |ch, success|
13
+ raise 'could not execute command' unless success
14
+ ch.on_data do |c, data|
15
+ $stdout.print data
16
+ end
17
+ ch.on_extended_data do |c, type, data|
18
+ $stderr.print data
19
+ end
20
+ end
21
+ end
22
+ channel.wait
23
+ end
24
+
25
+ def shell
26
+ Shell.new self
27
+ end
28
+
29
+ def perform!(command, options)
30
+ if options.verbose
31
+ tell! command
32
+ else
33
+ exec! command
34
+ end
35
+ end
36
+
37
+ class Shell
38
+ attr_reader :ssh
39
+
40
+ def initialize(ssh)
41
+ @ssh = ssh
42
+ end
43
+
44
+ def perform!(command, options)
45
+ ssh.perform! wrap(command), options
46
+ end
47
+
48
+ def exec!(command)
49
+ ssh.exec! wrap(command)
50
+ end
51
+
52
+ def tell!(command)
53
+ ssh.tell! wrap(command)
54
+ end
55
+
56
+ private
57
+
58
+ def wrap(command)
59
+ "bash -i -s <<EOBASH
60
+ #{command}
61
+ EOBASH"
62
+ end
63
+ end
64
+ end
data/lib/template.rb ADDED
@@ -0,0 +1,34 @@
1
+ class Mumukit::Core::Template
2
+ attr_accessor :path
3
+
4
+ def initialize(path, variables)
5
+ @path = path
6
+ variables.each do |key, value|
7
+ instance_variable_set "@#{key}", value
8
+ self.singleton_class.class_eval { attr_reader key }
9
+ end
10
+ end
11
+
12
+ def render
13
+ template_file.result binding
14
+ end
15
+
16
+ def write!(file)
17
+ File.write file, render
18
+ end
19
+
20
+ def with_tempfile!(prefix)
21
+ file = Tempfile.new(prefix)
22
+ write! file
23
+ yield file
24
+ ensure
25
+ file.unlink
26
+ file.close
27
+ end
28
+
29
+ private
30
+
31
+ def template_file
32
+ ERB.new File.read(path)
33
+ end
34
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: escualo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Franco Leonardo Bulgarelli
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: commander
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: net-ssh
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: net-scp
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mumukit-core
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.11'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.11'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '3.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '3.0'
111
+ description: ! "escualo.rb is command-line tools that implements of the escualo provisioning
112
+ format used by Mumuki Platform.\n It allows to deploy mumuki
113
+ artifacts to any host"
114
+ email:
115
+ - flbulgarelli@yahoo.com.ar
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - bin/escualo
121
+ - lib/command.rb
122
+ - lib/escualo.rb
123
+ - lib/session.rb
124
+ - lib/template.rb
125
+ homepage: http://github.com/mumuki/escualo.rb
126
+ licenses:
127
+ - MIT
128
+ metadata:
129
+ allowed_push_host: ! 'TODO: Set to ''http://mygemserver.com'''
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ requirements: []
145
+ rubyforge_project:
146
+ rubygems_version: 2.4.5
147
+ signing_key:
148
+ specification_version: 4
149
+ summary: Mumuki Platform provisioning tool
150
+ test_files: []