percheron 0.7.11 → 0.7.12
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 +4 -4
- data/lib/percheron/actions/build.rb +35 -2
- data/lib/percheron/actions/exec.rb +0 -1
- data/lib/percheron/commands/abstract.rb +3 -7
- data/lib/percheron/commands/console.rb +1 -1
- data/lib/percheron/config.rb +70 -17
- data/lib/percheron/connection.rb +3 -4
- data/lib/percheron/validators/config.rb +1 -6
- data/lib/percheron/version.rb +1 -1
- data/lib/percheron.rb +1 -0
- 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: c3d3fe11591f768bc7d5867837dc546b679bbf85
|
4
|
+
data.tar.gz: ab113fd870d359c2ba383340feab044e42861b26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0b7b65daffc775d0606a6d11a5b55a26387c0d4362f4a75fcded15f4c9246ec35a732b992dc14f944a12d1521ce017665b5f762c81aba8b1cd99eab72c8f377
|
7
|
+
data.tar.gz: 3426521b489b6b91d5bbfad9b9fae2bae6c9e89bfaa3d3dfa2b75552571bbcbf5943c5d02d4cd992d0975be21c10ac071e6282c326c4bfe482c85d80e038b069
|
@@ -12,7 +12,10 @@ module Percheron
|
|
12
12
|
|
13
13
|
def execute!
|
14
14
|
results = []
|
15
|
-
|
15
|
+
if unit.buildable?
|
16
|
+
results << write_out_temp_dockerfile!
|
17
|
+
results << build!
|
18
|
+
end
|
16
19
|
results.compact.empty? ? nil : unit
|
17
20
|
end
|
18
21
|
|
@@ -23,13 +26,41 @@ module Percheron
|
|
23
26
|
|
24
27
|
def options
|
25
28
|
{
|
26
|
-
'dockerfile' =>
|
29
|
+
'dockerfile' => dockerfile,
|
27
30
|
't' => unit.image_name,
|
28
31
|
'forcerm' => true,
|
29
32
|
'nocache' => nocache
|
30
33
|
}
|
31
34
|
end
|
32
35
|
|
36
|
+
def dockerfile
|
37
|
+
temp_dockerfile.basename.to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
def temp_dockerfile
|
41
|
+
@temp_dockerfile ||= Pathname.new(temp_dockerfile_name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def temp_dockerfile_name
|
45
|
+
@temp_dockerfile_name ||= begin
|
46
|
+
'%s/%s.%s' % [
|
47
|
+
unit.dockerfile.expand_path.dirname.to_s,
|
48
|
+
unit.dockerfile.basename.to_s,
|
49
|
+
SecureRandom.urlsafe_base64
|
50
|
+
]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def write_out_temp_dockerfile!
|
55
|
+
options = { 'secrets' => Config.secrets }
|
56
|
+
content = Liquid::Template.parse(unit.dockerfile.read).render(options)
|
57
|
+
File.open(temp_dockerfile, 'w') { |f| f.write(content) }
|
58
|
+
end
|
59
|
+
|
60
|
+
def remove_temp_dockerfile!
|
61
|
+
temp_dockerfile.delete
|
62
|
+
end
|
63
|
+
|
33
64
|
def build!
|
34
65
|
in_working_directory(base_dir) do
|
35
66
|
execute_pre_build_scripts!
|
@@ -38,6 +69,8 @@ module Percheron
|
|
38
69
|
$logger.debug '%s' % [ out.strip ]
|
39
70
|
end
|
40
71
|
end
|
72
|
+
ensure
|
73
|
+
remove_temp_dockerfile!
|
41
74
|
end
|
42
75
|
|
43
76
|
def execute_pre_build_scripts!
|
@@ -2,8 +2,8 @@ module Percheron
|
|
2
2
|
module Commands
|
3
3
|
class Abstract < Clamp::Command
|
4
4
|
|
5
|
-
option([ '-c', '--config_file' ], 'CONFIG', 'Config file',
|
6
|
-
|
5
|
+
option([ '-c', '--config_file' ], 'CONFIG', 'Config file', default:
|
6
|
+
ENV.fetch('PERCHERON_CONFIG', Config::DEFAULT_CONFIG_FILE))
|
7
7
|
|
8
8
|
option('--version', :flag, 'show version') do
|
9
9
|
puts Percheron::VERSION
|
@@ -22,10 +22,6 @@ module Percheron
|
|
22
22
|
option('--start', :flag, 'Start unit', default: false)
|
23
23
|
end
|
24
24
|
|
25
|
-
def default_config_file
|
26
|
-
ENV.fetch('PERCHERON_CONFIG', Config::DEFAULT_CONFIG_FILE)
|
27
|
-
end
|
28
|
-
|
29
25
|
def execute
|
30
26
|
stack.valid?
|
31
27
|
rescue => e
|
@@ -40,7 +36,7 @@ module Percheron
|
|
40
36
|
|
41
37
|
def config
|
42
38
|
@config ||= begin
|
43
|
-
Percheron::Config.
|
39
|
+
Percheron::Config.load!(config_file).tap do |c|
|
44
40
|
Percheron::Connection.load!(c)
|
45
41
|
end
|
46
42
|
end
|
data/lib/percheron/config.rb
CHANGED
@@ -3,32 +3,72 @@ require 'yaml'
|
|
3
3
|
module Percheron
|
4
4
|
class Config
|
5
5
|
|
6
|
-
|
6
|
+
include Singleton
|
7
7
|
|
8
8
|
DEFAULT_CONFIG_FILE = '.percheron.yml'
|
9
9
|
|
10
|
-
|
10
|
+
# rubocop:disable Style/ClassVars
|
11
|
+
@@file = Pathname.new(DEFAULT_CONFIG_FILE).expand_path
|
12
|
+
# rubocop:enable Style/ClassVars
|
11
13
|
|
12
|
-
def
|
13
|
-
|
14
|
+
def self.load!(file)
|
15
|
+
instance.load!(file)
|
16
|
+
end
|
17
|
+
|
18
|
+
# rubocop:disable Style/ClassVars
|
19
|
+
def load!(file)
|
20
|
+
@@file = Pathname.new(file).expand_path
|
21
|
+
invalidate_memoised_values!
|
14
22
|
self
|
15
23
|
end
|
24
|
+
# rubocop:enable Style/ClassVars
|
25
|
+
|
26
|
+
def self.stacks
|
27
|
+
instance.stacks
|
28
|
+
end
|
16
29
|
|
17
30
|
def stacks
|
18
31
|
@stacks ||= process_stacks!
|
19
32
|
end
|
20
33
|
|
34
|
+
def self.file_base_path
|
35
|
+
instance.file_base_path
|
36
|
+
end
|
37
|
+
|
21
38
|
def file_base_path
|
22
39
|
file.dirname
|
23
40
|
end
|
24
41
|
|
25
|
-
def
|
26
|
-
|
42
|
+
def self.secrets
|
43
|
+
instance.secrets
|
44
|
+
end
|
45
|
+
|
46
|
+
def secrets
|
47
|
+
secrets_file ? Hashie::Mash.new(YAML.load_file(secrets_file)) : {}
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.docker
|
51
|
+
instance.docker
|
52
|
+
end
|
53
|
+
|
54
|
+
def docker
|
55
|
+
contents.docker
|
27
56
|
end
|
28
57
|
|
29
58
|
private
|
30
59
|
|
31
|
-
|
60
|
+
def file
|
61
|
+
@@file
|
62
|
+
end
|
63
|
+
|
64
|
+
def secrets_file
|
65
|
+
return unless yaml_contents.secrets_file
|
66
|
+
File.expand_path(yaml_contents.secrets_file, file_base_path)
|
67
|
+
end
|
68
|
+
|
69
|
+
def invalidate_memoised_values!
|
70
|
+
@stacks = @yaml_contents = @raw_contents = @contents = nil
|
71
|
+
end
|
32
72
|
|
33
73
|
def process_stacks! # FIXME: bugs here :(
|
34
74
|
stacks_by_name = contents.stacks.to_hash_by_key(:name)
|
@@ -91,29 +131,42 @@ module Percheron
|
|
91
131
|
end
|
92
132
|
|
93
133
|
def raw_contents
|
94
|
-
@
|
134
|
+
@raw_contents ||= file.read
|
135
|
+
end
|
136
|
+
|
137
|
+
def yaml_contents
|
138
|
+
@yaml_contents ||= Hashie::Mash.new(YAML.load(raw_contents))
|
139
|
+
end
|
140
|
+
|
141
|
+
def templated_contents
|
142
|
+
Liquid::Template.parse(raw_contents).render('secrets' => secrets)
|
143
|
+
end
|
144
|
+
|
145
|
+
def parsed_contents
|
146
|
+
Hashie::Mash.new(YAML.load(templated_contents))
|
95
147
|
end
|
96
148
|
|
97
149
|
def contents
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
150
|
+
@contents ||= begin
|
151
|
+
parsed_contents.tap do |c|
|
152
|
+
c.docker ||= {}
|
153
|
+
c.docker.host ||= env_docker_host
|
154
|
+
c.docker.cert_path ||= env_cert_path
|
155
|
+
c.docker.ssl_verify_peer ||= env_ssl_verify_peer
|
156
|
+
end
|
103
157
|
end
|
104
158
|
end
|
105
159
|
|
106
160
|
def env_docker_host
|
107
|
-
|
108
|
-
fail("Docker host not defined in '#{file}' or ENV['DOCKER_HOST']")
|
161
|
+
ENV['DOCKER_HOST'] || fail("Docker host not defined in '#{file}' or ENV['DOCKER_HOST']")
|
109
162
|
end
|
110
163
|
|
111
164
|
def env_cert_path
|
112
|
-
|
165
|
+
ENV['DOCKER_CERT_PATH'] ? File.expand_path(ENV['DOCKER_CERT_PATH']) : nil
|
113
166
|
end
|
114
167
|
|
115
168
|
def env_ssl_verify_peer
|
116
|
-
|
169
|
+
(ENV['DOCKER_TLS_VERIFY'] == 1) || true
|
117
170
|
end
|
118
171
|
end
|
119
172
|
end
|
data/lib/percheron/connection.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'singleton'
|
2
1
|
require 'docker'
|
3
2
|
|
4
3
|
module Percheron
|
@@ -14,12 +13,12 @@ module Percheron
|
|
14
13
|
end
|
15
14
|
# rubocop:enable Style/ClassVars
|
16
15
|
|
17
|
-
def self.perform(klass, method, *args)
|
18
|
-
instance.perform(klass, method, *args)
|
16
|
+
def self.perform(klass, method, *args, &blk)
|
17
|
+
instance.perform(klass, method, *args, &blk)
|
19
18
|
end
|
20
19
|
|
21
20
|
def perform(klass, method, *args)
|
22
|
-
klass.public_send(method, *args)
|
21
|
+
klass.public_send(method, *args) { |out| yield(out) if block_given? }
|
23
22
|
rescue => e
|
24
23
|
$logger.debug '%s.%s(%s) - %s' % [ klass, method, args, e.inspect ]
|
25
24
|
raise
|
@@ -23,8 +23,7 @@ module Percheron
|
|
23
23
|
[
|
24
24
|
:validate_config_file_defined,
|
25
25
|
:validate_config_file_existence,
|
26
|
-
:validate_config_file_not_empty
|
27
|
-
:validate_config_file_contents
|
26
|
+
:validate_config_file_not_empty
|
28
27
|
]
|
29
28
|
end
|
30
29
|
|
@@ -44,10 +43,6 @@ module Percheron
|
|
44
43
|
'Is empty' if config_file_contents.empty?
|
45
44
|
end
|
46
45
|
|
47
|
-
def validate_config_file_contents
|
48
|
-
'Is invalid' unless config_file_contents.docker
|
49
|
-
end
|
50
|
-
|
51
46
|
end
|
52
47
|
end
|
53
48
|
end
|
data/lib/percheron/version.rb
CHANGED
data/lib/percheron.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: percheron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ash McKenzie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clamp
|