dklet 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 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