dklet 0.1.5 → 0.1.6

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
  SHA256:
3
- metadata.gz: fc26a08b87b0a21b92d09c1b8d13b645b70ce6aad5363b5806fd5eab78f42519
4
- data.tar.gz: 3a8a3992d33903a639429882e425cc50f68f2d1775aa30c75f80d8f35b4393b0
3
+ metadata.gz: 80c8bea6a6beb21fb1d624b3ce1c1d06e948d2f80d03bd20357307b1a4cd9de9
4
+ data.tar.gz: 145108f1c7a6c1bdb376cb54d0d738a68321c7666920e999cf65f0401e35fed5
5
5
  SHA512:
6
- metadata.gz: 79e9cdf2077d7797dbfae77fc5950da8c6b70e539f989dbb0f885bd6a08c23d2310803f6fd8192a0a3bf7dc948092d45d1f6e7f7e599b99092fd520eb85c25ee
7
- data.tar.gz: '048429c1495c95995b960121929844411ac7ee9e0fea8eef410044101a329295362e0af7398fdd6eb9897406ca6ea7d86f48be47da6c0b82ecd0f2603c48bcaf'
6
+ metadata.gz: 2ba973d1e510eefba8a9763f3d0dd8728267392d3222dd9905f013a460f118b305e5feb6dbb25d7fdeb0295706f5de368f04df0e1d81501d20f0fa5c914da032
7
+ data.tar.gz: d722b0c4652dba445846d7fa5b77b81cab8afd429eb403005d5d731b1e0c97c04280eda93196f17df0c30faa25015c3a85c10406e72381a98d085d61f4dcb32d
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dklet (0.1.5)
4
+ dklet (0.1.6)
5
+ os
5
6
  thor
6
7
 
7
8
  GEM
@@ -9,6 +10,7 @@ GEM
9
10
  specs:
10
11
  byebug (10.0.2)
11
12
  diff-lcs (1.3)
13
+ os (1.0.0)
12
14
  rake (10.5.0)
13
15
  rspec (3.7.0)
14
16
  rspec-core (~> 3.7.0)
@@ -23,7 +25,7 @@ GEM
23
25
  diff-lcs (>= 1.2.0, < 2.0)
24
26
  rspec-support (~> 3.7.0)
25
27
  rspec-support (3.7.1)
26
- thor (0.20.0)
28
+ thor (0.20.3)
27
29
 
28
30
  PLATFORMS
29
31
  ruby
data/dklet.gemspec CHANGED
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "rspec", "~> 3.0"
28
28
 
29
29
  spec.add_dependency "thor" #, "~> 0.20.0"
30
+ spec.add_dependency "os"
30
31
  end
data/dklet.rc CHANGED
@@ -2,6 +2,7 @@
2
2
  if [ -z $BOOTER_DKLET_RC ];then
3
3
  BOOTER_DKLET_RC=$( ruby -e "puts File.realpath('${BASH_SOURCE[0]}')")
4
4
  BOOTER_DKLET_HOME=$(dirname $BOOTER_DKLET_RC)
5
+ # put exe/ into path, how to fix gem version
5
6
  export PATH=$PATH:$BOOTER_DKLET_HOME/exe
6
7
  else
7
8
  if [ -z $FORCE_RC ]; then
@@ -54,6 +55,14 @@ function dklet(){
54
55
  status|st)
55
56
  type -a rundklet
56
57
  ;;
58
+ cli|irb)
59
+ (cd $BOOTER_DKLET_HOME && bundle install)
60
+ demo=/tmp/dklet-demo
61
+ mkdir -p $(dirname $demo)
62
+ rm -f $demo
63
+ mkdklet $demo
64
+ $demo console
65
+ ;;
57
66
  test|try)
58
67
  demo=/tmp/dklet-demo
59
68
  mkdir -p $(dirname $demo)
data/lib/dklet/cli.rb CHANGED
@@ -3,12 +3,15 @@ class DockletCLI < Thor
3
3
  #include Thor::Actions
4
4
  default_command :main
5
5
 
6
- class_option :debug, type: :boolean, default: false, banner: 'in debug mode, more log'
7
- class_option :dry, type: :boolean, default: false, banner: 'dry run'
8
- class_option :quiet, type: :boolean, default: false, banner: 'keep quiet'
9
- class_option :force, type: :boolean, default: false, banner: 'force do'
10
- class_option :env, banner: 'app env', aliases: ['-e']
11
- class_option :release, banner: 'what app release for', aliases: ['-r']
6
+ # main dimension parameters
7
+ class_option :env, banner: 'app env', aliases: [:e]
8
+ class_option :release, banner: 'what app release for', aliases: [:r]
9
+ # common options
10
+ class_option :force, type: :boolean, banner: 'force do', aliases: [:f]
11
+ class_option :dry, type: :boolean, banner: 'dry run'
12
+ class_option :debug, type: :boolean, banner: 'in debug mode, more log', aliases: [:d]
13
+ class_option :verbose, type: :boolean, banner: 'show verbose info', aliases: [:V]
14
+ class_option :quiet, type: :boolean, banner: 'keep quiet', aliases: [:q]
12
15
 
13
16
  desc 'version', 'show dklet version'
14
17
  def version
@@ -48,12 +51,19 @@ class DockletCLI < Thor
48
51
 
49
52
  desc 'runsh [CONTAINER]', 'run into container'
50
53
  option :cid, banner: 'target container id or name'
51
- option :tmp, type: :boolean, default: false, banner: 'allow run tmp container'
54
+ option :tmp, type: :boolean, aliases: [:t], banner: 'allow run tmp container'
52
55
  option :opts, banner: 'docker run options'
53
- def runsh(cmds = 'sh')
56
+ option :oneline, type: :boolean, default: true, banner: 'docker run options'
57
+ def runsh(*cmds)
58
+ if cmds.empty?
59
+ cmds = 'sh'
60
+ else
61
+ cmds = cmds.join(' ') if options[:oneline]
62
+ end
54
63
  container_run(cmds)
55
64
  end
56
65
  map "sh" => :runsh
66
+ map "run" => :runsh
57
67
 
58
68
  desc 'daemon', 'docker run in daemon'
59
69
  option :opts, banner: 'run extra options'
@@ -94,7 +104,7 @@ class DockletCLI < Thor
94
104
 
95
105
  desc 'clean', 'clean container artifacts'
96
106
  # keep cache reused
97
- option :image, type: :boolean, default: false, banner: 'clean user-derived images'
107
+ option :image, type: :boolean, banner: 'clean user-derived images'
98
108
  def clean
99
109
  invoke_hooks_for(:clean, type: :before)
100
110
 
@@ -144,7 +154,7 @@ class DockletCLI < Thor
144
154
  end
145
155
 
146
156
  desc 'ps', 'ps related containers'
147
- option :imaged, type: :boolean, default: false, banner: 'same image digest'
157
+ option :imaged, type: :boolean, banner: 'same image digest'
148
158
  def ps
149
159
  cmd = if options[:imaged]
150
160
  "docker ps -f ancestor=#{docker_image} -a"
@@ -218,15 +228,27 @@ class DockletCLI < Thor
218
228
  desc 'clear_app_volumes', 'clear app volumes'
219
229
  def clear_app_volumes
220
230
  if app_volumes.directory?
221
- if options[:force] || yes?("Remove app volumes dir data?")
231
+ if options[:force] || yes?("Remove app volumes dir: #{app_volumes} (y/n)?")
222
232
  app_volumes.rmtree
223
233
  end
224
234
  end
225
235
  end
226
236
 
237
+ desc '', 'reset if need'
238
+ def reset
239
+ if env =~ /^prod/
240
+ return unless (options[:force] || yes?("RESET #{full_release_name}?"))
241
+ end
242
+ system <<~Desc
243
+ #{dklet_script} clean
244
+ #{dklet_script} clear_app_volumes
245
+ #{dklet_script}
246
+ Desc
247
+ end
248
+
227
249
  desc 'inspect_info', 'inspect info'
228
- option :image, type: :boolean, default: false, aliases: ['-i'], banner: 'inspect image'
229
- option :container, type: :boolean, default: false, aliases: ['-c'], banner: 'inspect container'
250
+ option :image, type: :boolean, aliases: ['-i'], banner: 'inspect image'
251
+ option :container, type: :boolean, aliases: ['-c'], banner: 'inspect container'
230
252
  def inspect_info
231
253
  cmd = nil
232
254
  if options[:image]
@@ -252,7 +274,7 @@ class DockletCLI < Thor
252
274
  network: netname,
253
275
  voluemes_root: volumes_root,
254
276
  app_volumes: app_volumes,
255
- domain: proxy_domain,
277
+ domains: proxy_domains,
256
278
  dsl_methods: dsl_methods,
257
279
  registry: registry
258
280
  }
@@ -324,8 +346,8 @@ class DockletCLI < Thor
324
346
  dkcmd = "docker run -t -d"
325
347
  dkcmd += " --network #{netname}" if netname
326
348
  dkcmd += " #{opts[:opts]}" if opts[:opts]
327
- cid = `#{dkcmd} #{docker_image} sleep 3d`.chomp
328
- puts "==run tmp container: #{cid}" unless opts[:quiet]
349
+ img = opts[:image] || docker_image
350
+ cid = `#{dkcmd} #{img} sleep 3d`.chomp
329
351
  end
330
352
  abort "No container found!" unless cid
331
353
 
@@ -345,7 +367,7 @@ class DockletCLI < Thor
345
367
  Desc
346
368
  end
347
369
  unless opts[:quiet]
348
- puts "==commands to run on #{cid}"
370
+ puts "==commands to run on #{'tmp' if tmprun} container #{cid.size == 64 ? cid[0..11] : cid}"
349
371
  puts cmds
350
372
  if opts[:debug]
351
373
  puts "====by run on host"
@@ -357,7 +379,7 @@ class DockletCLI < Thor
357
379
 
358
380
  if tmprun
359
381
  system <<~Desc
360
- docker rm -f #{cid}
382
+ docker rm -f #{cid} >/dev/null
361
383
  Desc
362
384
  end
363
385
  end
data/lib/dklet/dsl.rb CHANGED
@@ -361,6 +361,14 @@ module Dklet::DSL
361
361
  ENV['APP_ENV'] || fetch(:default_env) || 'dev'
362
362
  end
363
363
 
364
+ def in_dev?
365
+ env =~ /^dev/
366
+ end
367
+
368
+ def in_prod?
369
+ env =~ /^prod/
370
+ end
371
+
364
372
  # 标识一次运行发布的用途, 如redis for hirails-only
365
373
  def app_release
366
374
  ENV['APP_RELEASE'] || 'default'
@@ -383,19 +391,49 @@ module Dklet::DSL
383
391
  volumes_root.join(release_path_name)
384
392
  end
385
393
 
386
- ## top proxy domain part
387
- def proxy_domain
388
- ENV['LOCAL_DKLET_DOMAIN'] || 'lh'
394
+ ## domain
395
+ def register_domain(*doms)
396
+ register :domains, doms
389
397
  end
390
398
 
391
- def domain_for(*doms)
392
- doms.map{|d| "#{d}.#{proxy_domain}" }.join(',')
399
+ # top proxy domain part
400
+ def proxy_domain_base
401
+ ENV['PROXY_DOMAIN_BASE'] || 'lh'
402
+ end
403
+
404
+ def proxy_domains(*doms)
405
+ if doms.empty?
406
+ doms = fetch(:domains)
407
+ doms = [appname] if doms.nil? or doms.empty?
408
+ end
409
+
410
+ denv = env
411
+ denv = nil if denv =~ /^prod/
412
+
413
+ doms.map do |d|
414
+ [d, denv, proxy_domain_base].compact.join('.')
415
+ end.join(',')
393
416
  end
394
417
 
395
- # ref dklet/mac/
418
+ # ref dklet/mac/hostnet
396
419
  def host_domain_in_container
397
420
  ENV['HOST_DOMAIN_IN_CONTAINER'] || 'host.dokcer.internal'
398
421
  end
422
+
423
+ # 0.0.0.0:32879
424
+ def host_with_port_for(cport, host_ip: true, only_port: false )
425
+ str = `docker port #{ops_container} #{cport}`.chomp
426
+ return if str.empty?
427
+ if only_port
428
+ return str.split(':').last
429
+ end
430
+ return str unless host_ip
431
+ str.sub('0.0.0.0', Dklet::Util.host_ip)
432
+ end
433
+
434
+ def host_port_for(cport)
435
+ host_with_port_for(cport, only_port: true)
436
+ end
399
437
  end
400
438
 
401
439
  %i(
data/lib/dklet/util.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'tempfile'
2
2
  require 'socket'
3
+ require 'securerandom'
4
+ require 'os'
3
5
 
4
6
  module Dklet::Util
5
7
  module_function
@@ -20,12 +22,25 @@ module Dklet::Util
20
22
  Socket.ip_address_list.find { |ai| ai.ipv4? && !ai.ipv4_loopback? }.ip_address
21
23
  end
22
24
 
25
+ def host_os
26
+ ::OS
27
+ end
28
+
29
+ def on_mac?
30
+ host_os.mac?
31
+ end
32
+
23
33
  def single_line?(cmds)
24
- cmds = cmds.chomp
25
34
  return false if cmds.is_a? Array
35
+ cmds = cmds.chomp
26
36
  return false if cmds =~ /\n/
27
37
  return true if cmds =~ /^\s*(bash|sh)/
28
38
  return false if cmds =~ /.+;/
29
39
  true
30
40
  end
41
+
42
+ ## secure
43
+ def gen_password(len = 10)
44
+ SecureRandom.alphanumeric(len)
45
+ end
31
46
  end
data/lib/dklet/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Dklet
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
 
4
4
  def self.version
5
5
  VERSION
@@ -25,3 +25,5 @@ custom_commands do
25
25
  end
26
26
 
27
27
  # Generated with dklet version: <%=Dklet.version%>
28
+
29
+ __END__
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dklet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruijian Cao
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-26 00:00:00.000000000 Z
11
+ date: 2018-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: os
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: practical DSL for daily container life
70
84
  email:
71
85
  - cao7113@hotmail.com