on_container 0.0.3 → 0.0.5
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 047f95a8b1aa08140e835430767a983ba4f70e98
|
4
|
+
data.tar.gz: 93bee7ffc095b037ebd8abf97ee87ee207643bdc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 416751bf09182242b57efad9b7c6224c137cb7e4ca065e69fd614836a1e0f90eef88f9df869484d175d120d232b7cdc332e3f32e54f9b76a16325b2a66f5d86e
|
7
|
+
data.tar.gz: e556def5df06b70d854db1317b6471af52460d7535aa678e836dcda4695ec8028cbb9e884dec104369fe260d3d3fb68179f25ab07a459d6ebd3e45cf958aeb8f
|
@@ -12,4 +12,8 @@ include OnContainer::Dev::SetupOps
|
|
12
12
|
include OnContainer::Dev::BundlerOps
|
13
13
|
include OnContainer::Dev::NodeModulesOps
|
14
14
|
include OnContainer::Dev::ActiveRecordOps
|
15
|
-
include OnContainer::Dev::ContainerCommandOps
|
15
|
+
include OnContainer::Dev::ContainerCommandOps
|
16
|
+
|
17
|
+
require 'on_container/ops/service_connection_checks'
|
18
|
+
|
19
|
+
include OnContainer::Ops::ServiceConnectionChecks
|
@@ -21,12 +21,19 @@ module OnContainer
|
|
21
21
|
puts 'Waiting for app setup to finish...'
|
22
22
|
sleep app_setup_wait
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def on_setup_lock_acquired
|
26
26
|
wait_setup while File.exist?(app_setup_lock_path)
|
27
|
-
|
27
|
+
|
28
28
|
lock_setup
|
29
|
+
|
30
|
+
%w[HUP INT QUIT TERM EXIT].each do |signal_string|
|
31
|
+
Signal.trap(signal_string) { unlock_setup }
|
32
|
+
end
|
33
|
+
|
29
34
|
yield
|
35
|
+
|
36
|
+
ensure
|
30
37
|
unlock_setup
|
31
38
|
end
|
32
39
|
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Reads the specified secret paths (i.e. Docker Secrets) into environment
|
4
|
+
# variables:
|
5
|
+
|
6
|
+
require 'active_support'
|
7
|
+
require 'active_support/core_ext/object'
|
8
|
+
|
9
|
+
# Process only a known list of env vars that can filled by reading a file (i.e.
|
10
|
+
# a docker secret):
|
11
|
+
Dir["#{ENV.fetch('SECRETS_PATH', '/run/secrets/')}*"].each do |secret_filepath|
|
12
|
+
next unless File.file?(secret_filepath)
|
13
|
+
|
14
|
+
secret_envvarname = File.basename(secret_filepath, '.*').upcase
|
15
|
+
|
16
|
+
# Skip if variable is already set - already-set variables have precedence over
|
17
|
+
# the secret files:
|
18
|
+
next if ENV.key?(secret_envvarname) && ENV[secret_envvarname].present?
|
19
|
+
|
20
|
+
ENV[secret_envvarname] = File.read(secret_filepath).strip
|
21
|
+
end
|
22
|
+
|
23
|
+
# For each *_URL environment variable where there's also a *_(USER|USERNAME) or
|
24
|
+
# *_(PASS|PASSWORD), update the URL environment variable with the given
|
25
|
+
# credentials. For example:
|
26
|
+
#
|
27
|
+
# DATABASE_URL: postgres://postgres:5432/demo_production
|
28
|
+
# DATABASE_USERNAME: lalito
|
29
|
+
# DATABASE_PASSWORD: lepass
|
30
|
+
#
|
31
|
+
# Results in the following updated DATABASE_URL:
|
32
|
+
# DATABASE_URL = postgres://lalito:lepass@postgres:5432/demo_production
|
33
|
+
require 'uri' if (url_keys = ENV.keys.select { |key| key =~ /_URL/ }).any?
|
34
|
+
|
35
|
+
url_keys.each do |url_key|
|
36
|
+
credential_pattern_string = url_key.gsub('_URL', '_(USER(NAME)?|PASS(WORD)?)')
|
37
|
+
credential_pattern = Regexp.new "\\A#{credential_pattern_string}\\z"
|
38
|
+
credential_keys = ENV.keys.select { |key| key =~ credential_pattern }
|
39
|
+
next unless credential_keys.any?
|
40
|
+
|
41
|
+
uri = URI(ENV[url_key])
|
42
|
+
username = URI.encode_www_form_component ENV[credential_keys.detect { |key| key =~ /USER/ }]
|
43
|
+
password = URI.encode_www_form_component ENV[credential_keys.detect { |key| key =~ /PASS/ }]
|
44
|
+
|
45
|
+
uri.user = username if username
|
46
|
+
uri.password = password if password
|
47
|
+
ENV[url_key] = uri.to_s
|
48
|
+
end
|
49
|
+
|
50
|
+
# STDERR.puts ENV.inspect
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'socket'
|
4
|
+
require 'timeout'
|
5
|
+
require 'uri'
|
6
|
+
|
7
|
+
module OnContainer
|
8
|
+
module Ops
|
9
|
+
module ServiceConnectionChecks
|
10
|
+
def service_accepts_connections?(service_uri, seconds_to_wait = 30)
|
11
|
+
uri = URI(service_uri)
|
12
|
+
|
13
|
+
Timeout::timeout(seconds_to_wait) do
|
14
|
+
TCPSocket.new(uri.host, uri.port).close
|
15
|
+
end
|
16
|
+
|
17
|
+
true
|
18
|
+
|
19
|
+
rescue => e
|
20
|
+
puts "Connection to #{uri.to_s} failed: '#{e.inspect}'"
|
21
|
+
end
|
22
|
+
|
23
|
+
def wait_for_service_to_accept_connections(service_uri, seconds_to_wait = 30, exit_on_fail = true)
|
24
|
+
return if service_accepts_connections?(service_uri, seconds_to_wait)
|
25
|
+
|
26
|
+
exit 1 if exit_on_fail
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/on_container/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: on_container
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roberto Quintanilla
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-11-
|
11
|
+
date: 2020-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -45,6 +45,8 @@ files:
|
|
45
45
|
- lib/on_container/dev/rails.rb
|
46
46
|
- lib/on_container/dev/rails_ops.rb
|
47
47
|
- lib/on_container/dev/setup_ops.rb
|
48
|
+
- lib/on_container/load_env_secrets.rb
|
49
|
+
- lib/on_container/ops/service_connection_checks.rb
|
48
50
|
- lib/on_container/step_down_from_root.rb
|
49
51
|
- lib/on_container/version.rb
|
50
52
|
- on_container.gemspec
|