dply 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1f29d96cf7879f2fdeae544b8786fc31f791d6426c45d37d3c096adce397f2af
4
- data.tar.gz: 3ea7b2f1e64fcef2f81a81eecc9eda6f6709866d5818869b16c7c3447bec9215
3
+ metadata.gz: 2a742b7e51a3fa6f6c3dde85c7e865ce808f06f4daadfdac8b9e484c0fa537dd
4
+ data.tar.gz: a10e414804b13354bd1e47a78edb498aa219e43bddfdc488f4a1efdbe12e47c8
5
5
  SHA512:
6
- metadata.gz: 99b236593f11eefae1d1ed9c0ad0d3c1a733662a6c2c2c4d3fe2e111fb3b8383bb21a5ea1b2ae926baa20a61ebe4459a446a938b7ad6f6b76823cc7b37fe20fa
7
- data.tar.gz: 8327e1f35451fb78ec59a2d1acb8482eddf25cc75b5345af99df3e563bb9bd6299d33330158c8d258634e826e976ec58bdef75fe402c8e0c84a17069d17e0ac7
6
+ metadata.gz: 630810896801f78190c74fa7988e13308c71d388870ffcb500a9adf9d197fd1f4fe377fa5aa6339ff76274b23a3121b039c877a1664eb7167c5be00b0d1196a6
7
+ data.tar.gz: 96a09128c85ba165e1f77077c402a1680a9d189116878bf7d5137500c4236d63602f633f973bf1357932bd0b3fc6ab396bd3d6d8040c9b4b49f4646f0e502035
@@ -37,13 +37,9 @@ module Dply
37
37
  end
38
38
  end
39
39
 
40
- def render_config(override_file: nil)
41
- config_data = load_yml "application.yml", optional: true
42
- if override_file
43
- data = load_yml override_file, optional: true
44
- config_data.deep_merge! data
45
- end
46
-
40
+ def render_config
41
+ load_config
42
+ config_data = load_yml "meta.yml", optional: true
47
43
  tmp_file = "tmp/config_render.tmp"
48
44
  @config_map.each do |dest, src|
49
45
  raise Error, %(error dest "#{dest}" is a directory) if File.directory? dest
@@ -12,8 +12,7 @@ module Dply
12
12
  extend Forwardable
13
13
  include Helper
14
14
 
15
- def_delegators :config, :branch, :config_download_url,
16
- :config_map, :dir_map, :config_skip_download
15
+ def_delegators :config, :branch, :config_map, :dir_map, :meta_conf
17
16
 
18
17
  attr_reader :config
19
18
 
@@ -23,7 +22,7 @@ module Dply
23
22
 
24
23
  def run
25
24
  setup
26
- download_configs if config_download_url
25
+ meta_conf.generate if meta_conf
27
26
  Dir.chdir repo_dir do
28
27
  git_step
29
28
  git.clean
@@ -33,7 +32,7 @@ module Dply
33
32
  link_build_dir
34
33
  bundle.install
35
34
  bundle.clean
36
- util.run config.task
35
+ util.run config.task, render_config: false
37
36
  generate_checksum
38
37
  end
39
38
  end
@@ -45,13 +44,6 @@ module Dply
45
44
  setup.build
46
45
  end
47
46
 
48
- def download_configs
49
- files = config_map.values.uniq
50
- downloader = ConfigDownloader.new(files, config_download_url)
51
- downloader.skip_download = config_skip_download
52
- downloader.download_all
53
- end
54
-
55
47
  def git_step
56
48
  return unless config.git
57
49
  if config.no_pull
@@ -1,4 +1,5 @@
1
1
  require 'dply/base_config'
2
+ require_relative 'meta_config'
2
3
 
3
4
  module Dply
4
5
  class BuildConfig < BaseConfig
@@ -14,8 +15,16 @@ module Dply
14
15
  opt :config_map, type: Hash
15
16
  opt :dir_map, type: Hash
16
17
  opt :shared_dirs, type: Array
17
- opt :config_download_url
18
- opt :config_skip_download, type: Array
18
+ opt :meta_conf, type: MetaConfig
19
+ end
20
+
21
+ def meta_conf(&block)
22
+ conf = MetaConfig.new("config")
23
+ conf.instance_eval &block
24
+ config_map({
25
+ "meta.yml" => "meta_generated.yml"
26
+ })
27
+ set(:meta_conf, conf)
19
28
  end
20
29
 
21
30
  def default_config
@@ -1,4 +1,5 @@
1
1
  require 'dply/base_config'
2
+ require_relative 'meta_config'
2
3
 
3
4
  module Dply
4
5
  class DeployConfig < BaseConfig
@@ -13,11 +14,19 @@ module Dply
13
14
  opt :shared_dirs, type: Array
14
15
  opt :config_map, type: Hash
15
16
  opt :dir_map, type: Hash
16
- opt :config_download_url
17
- opt :config_skip_download, type: Array
18
17
  opt :verify_checksum
19
18
  opt :revision
20
19
  opt :dir
20
+ opt :meta_conf, type: MetaConfig
21
+ end
22
+
23
+ def meta_conf(&block)
24
+ conf = MetaConfig.new("config")
25
+ conf.instance_eval &block
26
+ config_map({
27
+ "meta.yml" => "meta_generated.yml"
28
+ })
29
+ set(:meta_conf, conf)
21
30
  end
22
31
 
23
32
  def default_config
@@ -0,0 +1,78 @@
1
+ require_relative 'helper'
2
+ require_relative 'ext/hash'
3
+ module Dply
4
+ class MetaConfig
5
+
6
+ using HashExt
7
+
8
+ include Helper
9
+
10
+ def initialize(dir)
11
+ @sources = []
12
+ @dir = dir
13
+ @output_path = "#{dir}/meta_generated.yml"
14
+ @tmpfile = "#{dir}/meta.tmp"
15
+ end
16
+
17
+ def define(&block)
18
+ instance_eval &block
19
+ end
20
+
21
+ def generate
22
+ config = {}
23
+ @sources.each do |i|
24
+ path = i.fetch(:path)
25
+ url = i.fetch(:url)
26
+ auth = i.fetch(:auth)
27
+ optional = i.fetch(:optional)
28
+ deep_merge = i.fetch(:deep_merge)
29
+ block = i.fetch(:block)
30
+
31
+ if url
32
+ download(url, path, optional: optional)
33
+ end
34
+
35
+ if block
36
+ instance_exec path, optional, &block
37
+ end
38
+
39
+ h = load_yml(path, optional: optional)
40
+ deep_merge ? config.deep_merge!(h) : config.merge!(h)
41
+ end
42
+ File.write @tmpfile, YAML.dump(config)
43
+ FileUtils.mv @tmpfile, @output_path
44
+ end
45
+
46
+ private
47
+
48
+ def config(path, url = nil, auth: nil, deep_merge: true, optional: false, &block)
49
+ path = "#{@dir}/#{path}"
50
+ @sources << { path: path, url: url, auth: auth, deep_merge: deep_merge,
51
+ optional: optional, block: block }
52
+ end
53
+
54
+ def load_yml(path, optional:)
55
+ if not File.readable? path
56
+ return {} if optional
57
+ raise Error, "error reading file #{path}"
58
+ end
59
+ YAML.safe_load(File.read(path)) || {}
60
+ end
61
+
62
+ def download(url, path, optional:)
63
+ logger.bullet "downloading #{url}"
64
+ http_status = IO.popen(["curl", "-w", '%{http_code}', "-f", "-s", "-o", @tmpfile, url]) { |f| f.read }
65
+ exit_status = $?.exitstatus
66
+ if (http_status != "200" || exit_status != 0)
67
+ message = "failed to download #{path}, http status #{http_status}, exit_status #{exit_status}"
68
+ if optional
69
+ logger.warn message
70
+ return
71
+ end
72
+ error(message)
73
+ end
74
+ FileUtils.mv @tmpfile, path
75
+ end
76
+
77
+ end
78
+ end
@@ -1,7 +1,6 @@
1
1
  require 'dply/helper'
2
2
  require 'dply/util'
3
3
  require 'dply/setup'
4
- require 'dply/config_downloader'
5
4
  require 'dply/yum'
6
5
  require 'dply/release'
7
6
  require 'dply/release_helper'
@@ -16,8 +15,7 @@ module Dply
16
15
 
17
16
  attr_reader :config, :options
18
17
  def_delegators :config, :target, :branch, :revision, :name,
19
- :config_map, :dir_map, :config_skip_download,
20
- :config_download_url, :build_url
18
+ :config_map, :dir_map, :build_url, :meta_conf
21
19
 
22
20
  def initialize(config, options)
23
21
  @config = config
@@ -34,12 +32,12 @@ module Dply
34
32
  util.report_changes(current_version, previous_version)
35
33
  return
36
34
  end
37
- download_configs if config_download_url
35
+ generate_meta_config
38
36
  install_release
39
37
  previous_version = get_release
40
38
  release.make_current
41
39
  Dir.chdir current_dir do
42
- util.run "deploy:#{deploy_target}"
40
+ util.run "deploy:#{deploy_target}", render_config: true
43
41
  end
44
42
  release.record_deployment
45
43
  current_version = get_release
@@ -48,15 +46,19 @@ module Dply
48
46
  end
49
47
 
50
48
  def reload
51
- download_configs if config_download_url
49
+ generate_meta_config
52
50
  Dir.chdir current_dir do
53
51
  link_all
54
- util.run :reload
52
+ util.run :reload, render_config: true
55
53
  end
56
54
  end
57
55
 
58
56
  private
59
57
 
58
+ def generate_meta_config
59
+ meta_conf.generate if meta_conf
60
+ end
61
+
60
62
  def deploy_target
61
63
  @deploy_target ||= (target || :archive)
62
64
  end
@@ -70,13 +72,6 @@ module Dply
70
72
  File.basename (File.readlink current_dir)
71
73
  end
72
74
 
73
- def download_configs
74
- files = config_map.values.uniq
75
- downloader = ConfigDownloader.new(files, config_download_url)
76
- downloader.skip_download = config_skip_download if config_skip_download
77
- downloader.download_all
78
- end
79
-
80
75
  def release
81
76
  @release ||= Release.find_or_create(
82
77
  revision: revision,
@@ -1,6 +1,5 @@
1
1
  require 'dply/helper'
2
2
  require 'dply/setup'
3
- require 'dply/config_downloader'
4
3
  require 'dply/yum'
5
4
  require 'dply/util'
6
5
  require 'forwardable'
@@ -14,8 +13,7 @@ module Dply
14
13
 
15
14
  attr_reader :config, :options
16
15
  def_delegators :config, :target, :branch,
17
- :config_map, :dir_map, :config_skip_download,
18
- :config_download_url
16
+ :config_map, :dir_map, :meta_conf
19
17
 
20
18
  def initialize(config, options)
21
19
  @config = config
@@ -25,7 +23,7 @@ module Dply
25
23
  def deploy
26
24
  deploy_target = (target || :git)
27
25
  setup.git
28
- download_configs if config_download_url
26
+ generate_meta_config
29
27
  Dir.chdir current_dir do
30
28
  previous_version = git.commit_id
31
29
  git_step
@@ -34,30 +32,27 @@ module Dply
34
32
  install_pkgs
35
33
  bundle.install
36
34
  bundle.clean
37
- util.run "deploy:#{deploy_target}"
35
+ util.run "deploy:#{deploy_target}", render_config: true
38
36
  util.report_changes(previous_version, current_version)
39
37
  end
40
38
  end
41
39
 
42
40
  def reload
43
- download_configs if config_download_url
41
+ generate_meta_config
44
42
  Dir.chdir current_dir do
45
43
  link_all
46
- util.run :reload
44
+ util.run :reload, render_config: true
47
45
  end
48
46
  end
49
47
 
50
48
  private
51
49
 
52
- def current_dir
53
- @current_dir ||= "#{config.dir}/current"
50
+ def generate_meta_config
51
+ meta_conf.generate if meta_conf
54
52
  end
55
53
 
56
- def download_configs
57
- files = config_map.values.uniq
58
- downloader = ConfigDownloader.new(files, config_download_url)
59
- downloader.skip_download = config_skip_download if config_skip_download
60
- downloader.download_all
54
+ def current_dir
55
+ @current_dir ||= "#{config.dir}/current"
61
56
  end
62
57
 
63
58
  def git_step
@@ -18,8 +18,8 @@ module Dply
18
18
  super(command, env: extra_env, bundled_env: bundled_env, display: :arrow)
19
19
  end
20
20
 
21
- def render_config(override_file: nil)
22
- @app_config.render_config(override_file: override_file)
21
+ def render_config
22
+ @app_config.render_config
23
23
  end
24
24
 
25
25
  def set_env(key, value)
@@ -38,9 +38,10 @@ module Dply
38
38
  linker.create_symlinks
39
39
  end
40
40
 
41
- def run(task, optional: false)
41
+ def run(task, render_config: false, optional: false)
42
42
  app_config = AppConfig.new
43
43
  logger.arrow task
44
+ app_config.render_config if render_config
44
45
  app_config.run_task task, optional: optional
45
46
  end
46
47
 
@@ -1,3 +1,3 @@
1
1
  module Dply
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
@@ -29,6 +29,11 @@ describe "archive flow" do
29
29
  "tmp" => "tmp",
30
30
  "log" => "log"
31
31
  })
32
+
33
+ meta_conf do
34
+ url = lambda { |name| "http://127.0.0.1:8000/config_repo/" + name }
35
+ config "app.yml", url["app.yml"]
36
+ end
32
37
  CONFIG
33
38
  end
34
39
 
@@ -43,6 +48,11 @@ describe "archive flow" do
43
48
  "\#{repo}/\#{name}-\#{revision}-\#{branch}.tar.gz"
44
49
  end
45
50
 
51
+ meta_conf do
52
+ url = lambda { |name| "http://127.0.0.1:8000/config_repo/" + name }
53
+ config "app.yml", url["app.yml"]
54
+ end
55
+
46
56
  dir_map ({
47
57
  "log" => "log",
48
58
  "tmp" => "tmp",
@@ -31,6 +31,13 @@ describe "git flow" do
31
31
  "log" => "log",
32
32
  "tmp" => "tmp"
33
33
  })
34
+
35
+ meta_conf do
36
+ url = lambda { |name| "http://127.0.0.1:8000/config_repo/" + name }
37
+ config "app.yml", url["app.yml"]
38
+ config "custom.yml", url["custom.yml"]
39
+ config "host.yml", url["host.yml"], deep_merge: false
40
+ end
34
41
  CONFIG
35
42
  end
36
43
 
@@ -65,7 +72,7 @@ describe "git flow" do
65
72
  Dir.chdir @deploy_dir do
66
73
  expect(File).to exist("current/test.txt")
67
74
  data = File.read "current/test.txt"
68
- expect(data).to eq("asdf-override\n5432\n")
75
+ expect(data).to eq("custom-host\napp-port\n")
69
76
  end
70
77
  end
71
78
  end
@@ -0,0 +1,7 @@
1
+ secret: app-value
2
+ db:
3
+ host: app-host
4
+ port: app-port
5
+ sv:
6
+ a: 1
7
+ b: 2
@@ -0,0 +1,2 @@
1
+ db:
2
+ host: custom-host
@@ -0,0 +1,2 @@
1
+ sv:
2
+ b: 1
@@ -8,6 +8,7 @@ test do
8
8
  end
9
9
 
10
10
  build do
11
+ render_config
11
12
  rake :a
12
13
  sh "ls"
13
14
  FileUtils.mkdir_p "vendor"
@@ -19,7 +20,6 @@ build do
19
20
  end
20
21
 
21
22
  deploy :git do
22
- render_config override_file: "application-override.yml"
23
23
  set_env "MIX_ENV", "prod"
24
24
  sh "ls"
25
25
  puts " git deployed"
@@ -7,7 +7,7 @@ port = 8000
7
7
  webserver = Thread.new do
8
8
  server = WEBrick::HTTPServer.new(
9
9
  :Port => port,
10
- :DocumentRoot => "#{Dir.pwd}/test/sample_data",
10
+ :DocumentRoot => "#{Dir.pwd}/spec/test_data",
11
11
  Logger: WEBrick::Log.new("/dev/null"),
12
12
  AccessLog: []
13
13
  )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dply
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neeraj
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-09 00:00:00.000000000 Z
11
+ date: 2018-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-elf
@@ -96,7 +96,6 @@ files:
96
96
  - lib/dply/cli/task.rb
97
97
  - lib/dply/code_archive.rb
98
98
  - lib/dply/command.rb
99
- - lib/dply/config_downloader.rb
100
99
  - lib/dply/curl.rb
101
100
  - lib/dply/custom_logger.rb
102
101
  - lib/dply/deplist.rb
@@ -112,6 +111,7 @@ files:
112
111
  - lib/dply/linker.rb
113
112
  - lib/dply/lock.rb
114
113
  - lib/dply/logger.rb
114
+ - lib/dply/meta_config.rb
115
115
  - lib/dply/pkgs.rb
116
116
  - lib/dply/release.rb
117
117
  - lib/dply/release_helper.rb
@@ -167,6 +167,9 @@ files:
167
167
  - spec/test_data/bundle/gems_not_installed/Gemfile
168
168
  - spec/test_data/bundle/no_gemfile/.gitkeep
169
169
  - spec/test_data/command/test.rb
170
+ - spec/test_data/config_repo/app.yml
171
+ - spec/test_data/config_repo/custom.yml
172
+ - spec/test_data/config_repo/host.yml
170
173
  - spec/test_data/elf/elf
171
174
  - spec/test_data/elf/libecpg.so
172
175
  - spec/test_data/elf/libpgtypes.so.3
@@ -239,6 +242,9 @@ test_files:
239
242
  - spec/test_data/bundle/gems_not_installed/Gemfile
240
243
  - spec/test_data/bundle/no_gemfile/.gitkeep
241
244
  - spec/test_data/command/test.rb
245
+ - spec/test_data/config_repo/app.yml
246
+ - spec/test_data/config_repo/custom.yml
247
+ - spec/test_data/config_repo/host.yml
242
248
  - spec/test_data/elf/elf
243
249
  - spec/test_data/elf/libecpg.so
244
250
  - spec/test_data/elf/libpgtypes.so.3
@@ -1,35 +0,0 @@
1
- require 'dply/helper'
2
- require 'fileutils'
3
- require 'dply/curl'
4
-
5
- module Dply
6
- class ConfigDownloader
7
-
8
- include Helper
9
- attr_writer :skip_download
10
-
11
- def initialize(config_files , base_url, dir: "config")
12
- @config_files = config_files
13
- @base_url = base_url
14
- @dir = dir
15
- @skip_download = []
16
- end
17
-
18
- def download_all
19
- @config_files.each do |f|
20
- if @skip_download.include? f
21
- logger.debug "skipping to download file #{f}"
22
- next
23
- end
24
- curl.download "#{@base_url}/#{f}", "#{@dir}/#{f}"
25
- end
26
- end
27
-
28
- private
29
-
30
- def curl
31
- @curl ||= Curl.new
32
- end
33
-
34
- end
35
- end