vidar 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/vidar.rb +1 -0
- data/lib/vidar/cli.rb +36 -34
- data/lib/vidar/config.rb +7 -1
- data/lib/vidar/interpolation.rb +16 -0
- data/lib/vidar/k8s/pods.rb +1 -1
- data/lib/vidar/run.rb +3 -3
- data/lib/vidar/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb4f731d2ecb43dbab6e252579b755bc1098a307abf207016b030250fe7a521c
|
4
|
+
data.tar.gz: 0f33ac809ea03301a9fba6d6d8aada53e45c06b7c31e8a0d45e50770d39efa80
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62042e2e8463466d35ad3fe7ab0bc983802d0068b3de11f9defa8c2c9d3014d063ea62e8699f6915a7d97a0eeac7f8280d5f7c5d75d404e0b605686fcbe3a809
|
7
|
+
data.tar.gz: a4584dd019975cd299a2addbc0e01e417fa623ce1cfd7b5693cdbcb119f7883715edca4523cb774721b7c4acd7a0b8ecc735d38f185b04c394fc75cb8c403f9e
|
data/Gemfile.lock
CHANGED
data/lib/vidar.rb
CHANGED
data/lib/vidar/cli.rb
CHANGED
@@ -14,61 +14,61 @@ module Vidar
|
|
14
14
|
|
15
15
|
desc "pull", "Pulls existing docker images to leverage docker caching"
|
16
16
|
def pull
|
17
|
-
Log.info "Pulling #{Config.get(:image)} tags"
|
18
|
-
Run.docker "pull #{Config.get(:image)}:builder-#{Config.get(:current_branch)} 2> /dev/null || true"
|
19
|
-
Run.docker "pull #{Config.get(:image)}:builder 2> /dev/null || true"
|
20
|
-
Run.docker "pull #{Config.get(:image)}:release 2> /dev/null || true"
|
17
|
+
Log.info "Pulling #{Config.get!(:image)} tags"
|
18
|
+
Run.docker "pull #{Config.get!(:image)}:builder-#{Config.get!(:current_branch)} 2> /dev/null || true"
|
19
|
+
Run.docker "pull #{Config.get!(:image)}:builder 2> /dev/null || true"
|
20
|
+
Run.docker "pull #{Config.get!(:image)}:release 2> /dev/null || true"
|
21
21
|
Log.info "Docker images:"
|
22
22
|
puts Run.docker "images"
|
23
23
|
end
|
24
24
|
|
25
25
|
desc "build", "Builds docker stages"
|
26
26
|
def build
|
27
|
-
Log.info "Building #{Config.get(:image)}:builder-#{Config.get(:current_branch)}"
|
27
|
+
Log.info "Building #{Config.get!(:image)}:builder-#{Config.get!(:current_branch)}"
|
28
28
|
Run.docker_compose "build builder"
|
29
29
|
|
30
|
-
Log.info "Building #{Config.get(:image)}:runner-#{Config.get(:current_branch)}"
|
30
|
+
Log.info "Building #{Config.get!(:image)}:runner-#{Config.get!(:current_branch)}"
|
31
31
|
Run.docker_compose "build runner"
|
32
32
|
|
33
|
-
Log.info "Building #{Config.get(:image)}:release"
|
33
|
+
Log.info "Building #{Config.get!(:image)}:release"
|
34
34
|
Run.docker_compose "build release"
|
35
35
|
end
|
36
36
|
|
37
37
|
desc "cache", "Caches intermediate docker stages"
|
38
38
|
def cache
|
39
|
-
Log.info "Publish #{Config.get(:image)}:builder-#{Config.get(:current_branch)}"
|
40
|
-
Run.docker "push #{Config.get(:image)}:builder-#{Config.get(:current_branch)}"
|
39
|
+
Log.info "Publish #{Config.get!(:image)}:builder-#{Config.get!(:current_branch)}"
|
40
|
+
Run.docker "push #{Config.get!(:image)}:builder-#{Config.get!(:current_branch)}"
|
41
41
|
end
|
42
42
|
|
43
43
|
desc "publish", "Publishes docker images on docker registry"
|
44
44
|
def publish
|
45
|
-
Log.info "Publish #{Config.get(:image)}:#{Config.get(:revision)}"
|
46
|
-
Run.docker "tag #{Config.get(:image)}:release #{Config.get(:image)}:#{Config.get(:revision)}"
|
47
|
-
Run.docker "push #{Config.get(:image)}:#{Config.get(:revision)}"
|
45
|
+
Log.info "Publish #{Config.get!(:image)}:#{Config.get!(:revision)}"
|
46
|
+
Run.docker "tag #{Config.get!(:image)}:release #{Config.get!(:image)}:#{Config.get!(:revision)}"
|
47
|
+
Run.docker "push #{Config.get!(:image)}:#{Config.get!(:revision)}"
|
48
48
|
|
49
|
-
return unless Config.get(:current_branch) == Config.get(:default_branch)
|
49
|
+
return unless Config.get!(:current_branch) == Config.get!(:default_branch)
|
50
50
|
|
51
|
-
Log.info "Publish #{Config.get(:image)}:builder"
|
52
|
-
Run.docker "tag #{Config.get(:image)}:builder-#{Config.get(:current_branch)} #{Config.get(:image)}:builder"
|
53
|
-
Run.docker "push #{Config.get(:image)}:builder"
|
51
|
+
Log.info "Publish #{Config.get!(:image)}:builder"
|
52
|
+
Run.docker "tag #{Config.get!(:image)}:builder-#{Config.get!(:current_branch)} #{Config.get!(:image)}:builder"
|
53
|
+
Run.docker "push #{Config.get!(:image)}:builder"
|
54
54
|
|
55
|
-
Log.info "Publish #{Config.get(:image)}:latest"
|
56
|
-
Run.docker "tag #{Config.get(:image)}:release #{Config.get(:image)}:latest"
|
57
|
-
Run.docker "push #{Config.get(:image)}:release"
|
58
|
-
Run.docker "push #{Config.get(:image)}:latest"
|
55
|
+
Log.info "Publish #{Config.get!(:image)}:latest"
|
56
|
+
Run.docker "tag #{Config.get!(:image)}:release #{Config.get!(:image)}:latest"
|
57
|
+
Run.docker "push #{Config.get!(:image)}:release"
|
58
|
+
Run.docker "push #{Config.get!(:image)}:latest"
|
59
59
|
end
|
60
60
|
|
61
61
|
desc "deploy", "Performs k8s deployment with deploy hook"
|
62
62
|
method_option :revision, default: nil
|
63
63
|
def deploy
|
64
|
-
revision = options[:revision] || Config.get(:revision)
|
65
|
-
Log.info "Current cluster: #{Config.get(:cluster)} ###"
|
64
|
+
revision = options[:revision] || Config.get!(:revision)
|
65
|
+
Log.info "Current cluster: #{Config.get!(:cluster)} ###"
|
66
66
|
|
67
67
|
Log.info "Set kubectl image..."
|
68
|
-
Run.kubectl "set image deployments,cronjobs *=#{Config.get(:image)}:#{revision} --all"
|
68
|
+
Run.kubectl "set image deployments,cronjobs *=#{Config.get!(:image)}:#{revision} --all"
|
69
69
|
|
70
70
|
Log.info "Looking for deploy hook..."
|
71
|
-
template_name, error, status = Open3.capture3 "kubectl get cronjob deploy-hook-template -n #{Config.get(:namespace)} -o name --ignore-not-found=true"
|
71
|
+
template_name, error, status = Open3.capture3 "kubectl get cronjob deploy-hook-template -n #{Config.get!(:namespace)} -o name --ignore-not-found=true"
|
72
72
|
|
73
73
|
if status.success?
|
74
74
|
if template_name.to_s.empty?
|
@@ -86,7 +86,7 @@ module Vidar
|
|
86
86
|
|
87
87
|
desc "release", "Builds and publishes docker images"
|
88
88
|
def release
|
89
|
-
Log.info
|
89
|
+
Log.info "Release #{options[:image]}:#{options[:revision]}"
|
90
90
|
pull
|
91
91
|
build
|
92
92
|
cache
|
@@ -95,14 +95,14 @@ module Vidar
|
|
95
95
|
|
96
96
|
desc "monitor_deploy_status", "Checks is deployment has finished and sends post-deploy notification"
|
97
97
|
def monitor_deploy_status
|
98
|
-
Log.info "Current cluster: #{Config.get(:cluster)} ###"
|
99
|
-
Log.info "Checking is all containers on #{Config.get(:cluster)} in #{Config.get(:namespace)} are ready..."
|
98
|
+
Log.info "Current cluster: #{Config.get!(:cluster)} ###"
|
99
|
+
Log.info "Checking is all containers on #{Config.get!(:cluster)} in #{Config.get!(:namespace)} are ready..."
|
100
100
|
|
101
101
|
sleep(2)
|
102
102
|
error = false
|
103
103
|
tries = 0
|
104
104
|
max_tries = 30
|
105
|
-
until K8s::Pods.new(Config.get(:namespace)).all_ready?
|
105
|
+
until K8s::Pods.new(Config.get!(:namespace)).all_ready?
|
106
106
|
tries += 1
|
107
107
|
sleep(10)
|
108
108
|
if tries > max_tries
|
@@ -111,13 +111,15 @@ module Vidar
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
|
+
return unless Config.get(:slack_webhook_url)
|
115
|
+
|
114
116
|
slack_notification = SlackNotification.new(
|
115
|
-
webhook_url: Config.get(:slack_webhook_url),
|
116
|
-
github: Config.get(:github),
|
117
|
-
revision: Config.get(:revision),
|
118
|
-
revision_name: Config.get(:revision_name),
|
119
|
-
cluster: Config.get(:cluster),
|
120
|
-
cluster_url: Config.get(:cluster_url)
|
117
|
+
webhook_url: Config.get!(:slack_webhook_url),
|
118
|
+
github: Config.get!(:github),
|
119
|
+
revision: Config.get!(:revision),
|
120
|
+
revision_name: Config.get!(:revision_name),
|
121
|
+
cluster: Config.get!(:cluster),
|
122
|
+
cluster_url: Config.get!(:cluster_url)
|
121
123
|
)
|
122
124
|
|
123
125
|
if error
|
data/lib/vidar/config.rb
CHANGED
@@ -30,7 +30,13 @@ module Vidar
|
|
30
30
|
|
31
31
|
def get(key)
|
32
32
|
load unless loaded?
|
33
|
-
@data[key.to_s] || DEFAULT_OPTIONS[key.to_sym]&.call
|
33
|
+
value = @data[key.to_s] || DEFAULT_OPTIONS[key.to_sym]&.call
|
34
|
+
Vidar::Interpolation.call(value, self)
|
35
|
+
end
|
36
|
+
|
37
|
+
def get!(key)
|
38
|
+
load unless loaded?
|
39
|
+
get(key) || fail(MissingConfigError, key)
|
34
40
|
end
|
35
41
|
end
|
36
42
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Vidar
|
2
|
+
class Interpolation
|
3
|
+
INTERPOLATION_PATTERN = /\{\{(\w+)\}\}/.freeze
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def call(string, getter)
|
7
|
+
return unless string
|
8
|
+
fail ArgumentError, "getter must respond_to get." unless getter.respond_to?(:get)
|
9
|
+
|
10
|
+
string.gsub(INTERPOLATION_PATTERN) do |match|
|
11
|
+
getter.get($1) || match
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/vidar/k8s/pods.rb
CHANGED
data/lib/vidar/run.rb
CHANGED
@@ -6,12 +6,12 @@ module Vidar
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def docker_compose(command)
|
9
|
-
args = %w[revision current_branch].map { |arg| "#{arg.upcase}=#{Config.get(arg.to_sym)}" }
|
10
|
-
system("#{args.join(' ')} docker-compose -f #{Config.get(:compose_file)} #{command}") || exit(1)
|
9
|
+
args = %w[revision current_branch].map { |arg| "#{arg.upcase}=#{Config.get!(arg.to_sym)}" }
|
10
|
+
system("#{args.join(' ')} docker-compose -f #{Config.get!(:compose_file)} #{command}") || exit(1)
|
11
11
|
end
|
12
12
|
|
13
13
|
def kubectl(command)
|
14
|
-
system("kubectl --namespace=#{Config.get(:namespace)} #{command}") || exit(1)
|
14
|
+
system("kubectl --namespace=#{Config.get!(:namespace)} #{command}") || exit(1)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/vidar/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vidar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Krzysztof Knapik
|
@@ -148,6 +148,7 @@ files:
|
|
148
148
|
- lib/vidar.rb
|
149
149
|
- lib/vidar/cli.rb
|
150
150
|
- lib/vidar/config.rb
|
151
|
+
- lib/vidar/interpolation.rb
|
151
152
|
- lib/vidar/k8s/container_status.rb
|
152
153
|
- lib/vidar/k8s/pods.rb
|
153
154
|
- lib/vidar/log.rb
|