app-rb 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/app-rb/cli.rb +86 -10
- data/lib/app-rb/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e711d636dadff50ef85e9a5d2d064966b3effc49
|
4
|
+
data.tar.gz: b73199db204a95a85669ed40c690449f152923c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 691263ddcd9e2bebdb6076bc2dfda71a7aab9cd9dbf978da5cb5b16808fa345b6b08ef5d99573ea4503c90f55388283c4c1997cfe6d7dda36edf7d13e6cc48ac
|
7
|
+
data.tar.gz: 4c0b4ca076d63fca41eec03907b13f26a1ad0475ffbe62a69ea153c8cd37a56e4cf3ec37b983e2e8a9ba44c37d994a2b8d13aa06ef767fffeba5e6bfd6708bde
|
data/CHANGELOG.md
CHANGED
data/lib/app-rb/cli.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'yaml'
|
2
|
+
require 'openssl'
|
2
3
|
|
3
4
|
module AppRb
|
4
5
|
class Cli
|
@@ -12,17 +13,30 @@ module AppRb
|
|
12
13
|
usage
|
13
14
|
exit
|
14
15
|
end
|
15
|
-
|
16
|
-
|
16
|
+
if File.exists?(@args[0])
|
17
|
+
config_path = @args.shift
|
18
|
+
end
|
19
|
+
|
20
|
+
if @args[0] == "--vault" && File.exists?(@args[1])
|
21
|
+
@args.shift
|
22
|
+
@vault_file = @args.shift
|
23
|
+
elsif File.exists?(File.join(Dir.pwd, "vault.key"))
|
24
|
+
@vault_file = File.join(Dir.pwd, "vault.key")
|
25
|
+
else
|
26
|
+
@vault_file = nil
|
27
|
+
end
|
28
|
+
|
29
|
+
command = @args.shift
|
30
|
+
config = Config.new(read_yaml(config_path)) if config_path
|
17
31
|
|
18
|
-
if AppRb::Util.compare_versions(config.tool_version, AppRb::VERSION) > 0
|
32
|
+
if config && AppRb::Util.compare_versions(config.tool_version, AppRb::VERSION) > 0
|
19
33
|
puts "FATAL: need at least '#{config.tool_version}' tool version but current version is '#{AppRb::VERSION}'"
|
20
34
|
exit -1
|
21
35
|
end
|
22
36
|
|
23
|
-
if
|
37
|
+
if %w[deploy d].index(command)
|
24
38
|
Command.new(config).deploy(@args[2])
|
25
|
-
elsif
|
39
|
+
elsif %w[status s].index(command)
|
26
40
|
Command.new(config).status
|
27
41
|
elsif command == "redeploy"
|
28
42
|
Command.new(config).redeploy
|
@@ -30,10 +44,14 @@ module AppRb
|
|
30
44
|
Command.new(config).clean
|
31
45
|
elsif command == "stop"
|
32
46
|
Command.new(config).stop
|
33
|
-
elsif
|
47
|
+
elsif %w[run r].index(command)
|
34
48
|
Command.new(config).run(@args[2..-1].join(" "))
|
35
49
|
elsif command == "cd"
|
36
50
|
Command.new(config).cd
|
51
|
+
elsif %w[encrypt en e].index(command)
|
52
|
+
puts encrypt(@args.shift)
|
53
|
+
elsif %w[decrypt de].index(command)
|
54
|
+
puts decrypt(@args.shift)
|
37
55
|
else
|
38
56
|
puts "FATAL: unknown command '#{command}'"
|
39
57
|
exit -1
|
@@ -41,21 +59,79 @@ module AppRb
|
|
41
59
|
end
|
42
60
|
|
43
61
|
private
|
62
|
+
MARKER = "__VAULT:"
|
63
|
+
|
64
|
+
def read_yaml(file)
|
65
|
+
unvault = proc { |o|
|
66
|
+
if o.is_a?(Array)
|
67
|
+
o.map { |i| unvault.call(i) }
|
68
|
+
elsif o.is_a?(Hash)
|
69
|
+
o.map { |k, v| [k, unvault.call(v)] }.to_h
|
70
|
+
elsif o.is_a?(String) && o.index(MARKER) == 0
|
71
|
+
decrypt(o)
|
72
|
+
else
|
73
|
+
o
|
74
|
+
end
|
75
|
+
}
|
76
|
+
unvault.call(YAML.load(File.read(file)))
|
77
|
+
end
|
78
|
+
|
79
|
+
def die(msg = nil)
|
80
|
+
if msg
|
81
|
+
puts "FATAL: #{msg}"
|
82
|
+
else
|
83
|
+
puts "exit with status code -1"
|
84
|
+
end
|
85
|
+
exit -1
|
86
|
+
end
|
87
|
+
|
88
|
+
def bin_to_hex(s)
|
89
|
+
s.unpack('H*').first
|
90
|
+
end
|
91
|
+
|
92
|
+
def hex_to_bin(s)
|
93
|
+
s.scan(/../).map { |x| x.hex }.pack('c*')
|
94
|
+
end
|
95
|
+
|
96
|
+
def encrypt(string)
|
97
|
+
die "missed vault file" unless @vault_file
|
98
|
+
die "string encrypted yet" if string.index(MARKER) == 0
|
99
|
+
cipher = OpenSSL::Cipher::AES256.new :CBC
|
100
|
+
cipher.encrypt
|
101
|
+
iv = cipher.random_iv
|
102
|
+
cipher.key = Digest::SHA256.digest(File.read(@vault_file).strip)
|
103
|
+
MARKER + bin_to_hex(cipher.update(string) + cipher.final) + ":" + bin_to_hex(iv)
|
104
|
+
end
|
105
|
+
|
106
|
+
def decrypt(string)
|
107
|
+
die "missed vault file" unless @vault_file
|
108
|
+
die "string not encrypted" unless string.index(MARKER) == 0
|
109
|
+
cipher = OpenSSL::Cipher::AES256.new :CBC
|
110
|
+
cipher.decrypt
|
111
|
+
cipher.iv = hex_to_bin(string.sub(MARKER, "").split(":")[1])
|
112
|
+
cipher.key = Digest::SHA256.digest(File.read(@vault_file).strip)
|
113
|
+
cipher.update(hex_to_bin(string.sub(MARKER, "").split(":")[0])) + cipher.final
|
114
|
+
end
|
44
115
|
|
45
116
|
def usage
|
46
117
|
puts "Just deploy your apps with docker and consul. Nothing else."
|
47
118
|
puts "Version: #{AppRb::VERSION}"
|
48
119
|
puts ""
|
49
|
-
puts " app-rb <yml> <command>"
|
120
|
+
puts " app-rb <yml> [options] <command>"
|
121
|
+
puts ""
|
122
|
+
puts "Options:"
|
123
|
+
puts " --vault <vault-file> - vault file (<pwd>/vault.key by default)"
|
50
124
|
puts ""
|
51
|
-
puts "
|
125
|
+
puts "Commands:"
|
52
126
|
puts " deploy [hash] - deploy new version of app"
|
53
127
|
puts " status - status of app"
|
54
|
-
puts " stop - stop app"
|
128
|
+
puts " stop - stop app completely"
|
55
129
|
puts " run <cmd> [args] - one time command"
|
56
130
|
puts " cd - go to run node"
|
131
|
+
puts " encrypt <string> - encrypt script using vault-file"
|
132
|
+
puts " decrypt <string> - decrypt script using vault-file"
|
57
133
|
puts ""
|
58
|
-
puts "Advanced:"
|
134
|
+
puts "Advanced commands:"
|
59
135
|
puts " redeploy - redeploy app"
|
60
136
|
puts " clean - stop and remove not current containers"
|
61
137
|
end
|
data/lib/app-rb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: app-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Vakhov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|