docker-sync 0.5.11.pre.beta2 → 0.6.0

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
- SHA1:
3
- metadata.gz: 8644a79fafb6932d66c52709ff86bf281b8cf543
4
- data.tar.gz: b4f27677378f73590c310a954497d0465d848489
2
+ SHA256:
3
+ metadata.gz: 1670b82d1e005cdfb4485db9241a513f962a732b29d4bd3cf6beec9227c52e65
4
+ data.tar.gz: da40497b93174d5794d9fe7271a9c8a02c86fac647ee038b6d2380500da0cd31
5
5
  SHA512:
6
- metadata.gz: 7931f368d41d7be352ac09f106c4b691a6794019ec0f1a29b4ab809b972bedc4fb68613b7d76668a371dc2292cbb17bf592f35e4095f6ae42acd9ac33be15682
7
- data.tar.gz: 2dab2954df86b18bc432ff086d880806e14dad82ca562eeacc5867e0e2b05b64a8b00abf360abd1f91ca5810af7c07316e8638e95d3a297c4793a2748c881899
6
+ metadata.gz: e0bf6820a799a2381e343d4cd9e5719a2f1adf2879f1cf82bc1a96833110963b8737a019c5870e74c6a59cb76a9951a97e1bf3226bea5e94a423c69897767dc7
7
+ data.tar.gz: 550d7628a372fab1328ff3d06452919259409ac4d4d6d01324da9eab1fb99e6dbd26f9ba033fbbf0762134d766691e07edaf6e68117baa0371671c2b21accb43
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.11-beta2
1
+ 0.6.0
@@ -11,7 +11,7 @@ module DockerSync
11
11
 
12
12
  def self.running?
13
13
  return @running if defined? @running
14
- @running = system('docker ps 2>&1 > /dev/null')
14
+ @running = system('docker ps > /dev/null 2>&1')
15
15
  end
16
16
 
17
17
  def self.ensure!
@@ -2,8 +2,7 @@ module DockerSync
2
2
  module Dependencies
3
3
  module Rsync
4
4
  def self.available?
5
- return @available if defined? @available
6
- @available = find_executable0('rsync')
5
+ find_executable0('rsync')
7
6
  end
8
7
 
9
8
  def self.ensure!
@@ -2,8 +2,7 @@ module DockerSync
2
2
  module Dependencies
3
3
  module Unison
4
4
  def self.available?
5
- return @available if defined? @available
6
- @available = find_executable0('unison')
5
+ find_executable0('unison')
7
6
  end
8
7
 
9
8
  def self.ensure!
@@ -15,10 +15,8 @@ module DockerSync
15
15
  # should never have been called anyway - fix the call that it should check for the OS
16
16
  raise 'Unox cannot be available for other platforms then MacOS' unless Environment.mac?
17
17
 
18
- return @available if defined? @available
19
- cmd = 'brew list unox 2>&1 > /dev/null'
20
- @available = Environment.system(cmd)
21
- @available
18
+ cmd = 'brew list unox > /dev/null 2>&1'
19
+ Environment.system(cmd)
22
20
  end
23
21
 
24
22
  def self.ensure!
@@ -4,11 +4,13 @@ module DockerSync
4
4
  module Environment
5
5
  def self.linux?
6
6
  return @linux if defined? @linux
7
+
7
8
  @linux = OS.linux?
8
9
  end
9
10
 
10
11
  def self.mac?
11
12
  return @mac if defined? @mac
13
+
12
14
  @mac = OS.mac?
13
15
  end
14
16
 
@@ -17,7 +19,7 @@ module DockerSync
17
19
  end
18
20
 
19
21
  def self.system(cmd)
20
- defined?(Bundler) ? Bundler.clean_system(cmd) : Kernel.system(cmd)
22
+ defined?(Bundler) ? Bundler.unbundled_system(cmd) : Kernel.system(cmd)
21
23
  end
22
24
  end
23
25
  end
@@ -48,7 +48,7 @@ module DockerSync
48
48
  end
49
49
 
50
50
  if @config_syncs[name].key?('dest')
51
- puts 'Please do no longer use "dest" in your docker-sync.yml configuration - also see https://github.com/EugenMayer/docker-sync/wiki/1.2-Upgrade-Guide#dest-has-been-removed!'
51
+ puts 'Please do no longer use "dest" in your docker-sync.yml configuration - also see https://docker-sync.readthedocs.io/en/latest/getting-started/upgrade.html#id4'
52
52
  exit 1
53
53
  else
54
54
  @config_syncs[name]['dest'] = '/app_sync'
@@ -23,7 +23,7 @@ module DockerSync
23
23
  if @options.key?('image')
24
24
  @docker_image = @options['image']
25
25
  else
26
- @docker_image = 'eugenmayer/unison:2.51.2.1'
26
+ @docker_image = 'eugenmayer/unison:2.51.3-4.12.0-AMD64'
27
27
  end
28
28
 
29
29
  begin
@@ -14,16 +14,16 @@ module DockerSync
14
14
  @sync_name
15
15
  @watch_thread
16
16
  @local_server_pid
17
- UNISON_CONTAINER_PORT = '5000'
17
+ UNISON_CONTAINER_PORT = '5000'.freeze
18
18
  def initialize(sync_name, options)
19
19
  @options = options
20
20
  @sync_name = sync_name
21
21
  # if a custom image is set, apply it
22
- if @options.key?('image')
23
- @docker_image = @options['image']
24
- else
25
- @docker_image = 'eugenmayer/unison:2.51.2.1'
26
- end
22
+ @docker_image = if @options.key?('image')
23
+ @options['image']
24
+ else
25
+ 'eugenmayer/unison:2.51.3-4.12.0-AMD64'
26
+ end
27
27
  begin
28
28
  Dependencies::Unison.ensure!
29
29
  Dependencies::Unox.ensure! if Environment.mac?
@@ -61,7 +61,7 @@ module DockerSync
61
61
 
62
62
  def watch
63
63
  args = sync_options
64
- args.push("-repeat watch")
64
+ args.push('-repeat watch')
65
65
  cmd = ''
66
66
  cmd = cmd + 'ulimit -n ' + @options['max_inotify_watches'].to_s + ' && ' if @options.key?('max_inotify_watches')
67
67
  cmd = cmd + 'unison ' + args.join(' ')
@@ -77,18 +77,18 @@ module DockerSync
77
77
  say_status 'command', cmd, :white if @options['verbose']
78
78
 
79
79
  stdout, stderr, exit_status = Open3.capture3(cmd)
80
- if not exit_status.success?
80
+ if !exit_status.success?
81
81
  say_status 'error', "Error starting sync, exit code #{$?.exitstatus}", :red
82
82
  say_status 'message', stdout
83
83
  say_status 'message', stderr
84
84
  else
85
- TerminalNotifier.notify(
86
- "Synced #{@options['src']}", :title => @sync_name
87
- ) if @options['notify_terminal']
88
- say_status 'ok', "Synced #{@options['src']}", :white
89
- if @options['verbose']
90
- say_status 'output', stdout
85
+ if @options['notify_terminal']
86
+ TerminalNotifier.notify(
87
+ "Synced #{@options['src']}", title: @sync_name
88
+ )
91
89
  end
90
+ say_status 'ok', "Synced #{@options['src']}", :white
91
+ say_status 'output', stdout if @options['verbose']
92
92
  end
93
93
  end
94
94
 
@@ -96,18 +96,16 @@ module DockerSync
96
96
  expanded_ignore_strings = []
97
97
 
98
98
  exclude_type = 'Name'
99
- unless @options['sync_excludes_type'].nil?
100
- exclude_type = @options['sync_excludes_type']
101
- end
99
+ exclude_type = @options['sync_excludes_type'] unless @options['sync_excludes_type'].nil?
102
100
 
103
101
  unless @options['sync_excludes'].nil?
104
102
  expanded_ignore_strings = @options['sync_excludes'].map do |pattern|
105
- if exclude_type == 'none'
106
- # the ignore type like Name / Path are part of the pattern
107
- ignore_string = "#{pattern}"
108
- else
109
- ignore_string = "#{exclude_type} #{pattern}"
110
- end
103
+ ignore_string = if exclude_type == 'none'
104
+ # the ignore type like Name / Path are part of the pattern
105
+ pattern.to_s
106
+ else
107
+ "#{exclude_type} #{pattern}"
108
+ end
111
109
  "-ignore='#{ignore_string}'"
112
110
  end
113
111
  end
@@ -128,32 +126,33 @@ module DockerSync
128
126
  if @options.key?('sync_group') || @options.key?('sync_groupid')
129
127
  raise('Unison does not support sync_group, sync_groupid - please use rsync if you need that')
130
128
  end
131
- return args
129
+
130
+ args
132
131
  end
133
132
 
134
133
  # cares about conflict resolution
135
134
  def sync_prefer
136
135
  case @options.fetch('sync_prefer', 'default')
137
- when 'default' then "-prefer '#{@options['src']}' -copyonconflict" # thats our default, if nothing is set
138
- when 'src' then "-prefer '#{@options['src']}'"
139
- when 'dest' then "-prefer 'socket://#{@options['sync_host_ip']}:#{sync_host_port}'"
140
- else "-prefer '#{@options['sync_prefer']}'"
136
+ when 'default' then "-prefer '#{@options['src']}' -copyonconflict" # thats our default, if nothing is set
137
+ when 'src' then "-prefer '#{@options['src']}'"
138
+ when 'dest' then "-prefer 'socket://#{@options['sync_host_ip']}:#{sync_host_port}'"
139
+ else "-prefer '#{@options['sync_prefer']}'"
141
140
  end
142
141
  end
143
142
 
144
-
145
143
  def start_container
146
144
  say_status 'ok', "Starting unison for sync #{@sync_name}", :white
147
145
 
148
146
  container_name = get_container_name
149
147
  volume_name = get_volume_name
150
148
  env = {}
151
- raise 'sync_user is no longer supported, since it ise no needed, use sync_userid only please' if @options.key?('sync_user')
149
+ if @options.key?('sync_user')
150
+ raise 'sync_user is no longer supported, since it ise no needed, use sync_userid only please'
151
+ end
152
152
 
153
153
  env['UNISON_SRC'] = '-socket 5000'
154
154
  env['UNISON_DEST'] = '/app_sync'
155
155
 
156
-
157
156
  env['MONIT_ENABLE'] = 'false'
158
157
  env['MONIT_INTERVAL'] = ''
159
158
  env['MONIT_HIGH_CPU_CYCLES'] = ''
@@ -171,17 +170,19 @@ module DockerSync
171
170
  end
172
171
 
173
172
  # start unison-image in unison socket mode mode
174
- env['HOSTSYNC_ENABLE']=0
175
- env['UNISONSOCKET_ENABLE']=1
173
+ env['HOSTSYNC_ENABLE'] = 0
174
+ env['UNISONSOCKET_ENABLE'] = 1
176
175
 
177
- additional_docker_env = env.map{ |key,value| "-e #{key}=\"#{value}\"" }.join(' ')
176
+ additional_docker_env = env.map { |key, value| "-e #{key}=\"#{value}\"" }.join(' ')
178
177
  running = `docker ps --filter 'status=running' --filter 'name=#{container_name}' --format "{{.Names}}" | grep '^#{container_name}$'`
179
178
  if running == ''
180
179
  say_status 'ok', "#{container_name} container not running", :white if @options['verbose']
181
180
  exists = `docker ps --filter "status=exited" --filter "name=#{container_name}" --format "{{.Names}}" | grep '^#{container_name}$'`
182
181
  if exists == ''
183
182
  run_privileged = ''
184
- run_privileged = '--privileged' if @options.key?('max_inotify_watches') #TODO: replace by the minimum capabilities required
183
+ if @options.key?('max_inotify_watches')
184
+ run_privileged = '--privileged'
185
+ end # TODO: replace by the minimum capabilities required
185
186
  tz_expression = '-e TZ=$(basename $(dirname `readlink /etc/localtime`))/$(basename `readlink /etc/localtime`)'
186
187
  say_status 'ok', 'Starting precopy', :white if @options['verbose']
187
188
  # we just run the precopy script and remove the container
@@ -204,7 +205,7 @@ module DockerSync
204
205
  say_status 'ok', "starting initial sync of #{container_name}", :white if @options['verbose']
205
206
  # wait until container is started, then sync:
206
207
  sync_host_port = get_host_port(get_container_name, UNISON_CONTAINER_PORT)
207
- cmd = "unison -testserver #{@options['dest']} \"socket://#{@options['sync_host_ip']}:#{sync_host_port}\""
208
+ cmd = "unison -testserver #{@options['src']} \"socket://#{@options['sync_host_ip']}:#{sync_host_port}\""
208
209
  say_status 'command', cmd, :white if @options['verbose']
209
210
  attempt = 0
210
211
  max_attempt = @options['max_attempt'] || 5
@@ -212,8 +213,12 @@ module DockerSync
212
213
  # noinspection RubyUnusedLocalVariable
213
214
  stdout, stderr, exit_status = Open3.capture3(cmd)
214
215
  break if exit_status == 0
216
+
215
217
  attempt += 1
216
- raise "Failed to start unison container in time, try to increase max_attempt (currently #{max_attempt}) in your configuration. See https://github.com/EugenMayer/docker-sync/wiki/2.-Configuration for more informations" if attempt > max_attempt
218
+ if attempt > max_attempt
219
+ raise "Failed to start unison container in time, try to increase max_attempt (currently #{max_attempt}) in your configuration. See https://github.com/EugenMayer/docker-sync/wiki/2.-Configuration for more informations"
220
+ end
221
+
217
222
  sleep 1
218
223
  end
219
224
  sync
@@ -221,7 +226,7 @@ module DockerSync
221
226
  end
222
227
 
223
228
  # noinspection RubyUnusedLocalVariable
224
- def get_host_port(container_name, container_port)
229
+ def get_host_port(container_name, _container_port)
225
230
  cmd = 'docker inspect --format=\'{{(index (index .NetworkSettings.Ports "5000/tcp") 0).HostPort}}\' ' + container_name
226
231
  say_status 'command', cmd, :white if @options['verbose']
227
232
  stdout, stderr, exit_status = Open3.capture3(cmd)
@@ -230,15 +235,15 @@ module DockerSync
230
235
  say_status 'error', "Error getting mapped port, exit code #{$?.exitstatus}", :red
231
236
  say_status 'message', stderr
232
237
  end
233
- return stdout.gsub("\n",'')
238
+ stdout.gsub("\n", '')
234
239
  end
235
240
 
236
241
  def get_container_name
237
- return "#{@sync_name}"
242
+ @sync_name.to_s
238
243
  end
239
244
 
240
245
  def get_volume_name
241
- return @sync_name
246
+ @sync_name
242
247
  end
243
248
 
244
249
  def stop_container
@@ -92,9 +92,13 @@ class UpdateChecker
92
92
  if check.update_available
93
93
  say_status 'warning',"There is an update (#{check.latest_version}) available (current version #{check.current_version}). Please update before you continue",:yellow
94
94
  if yes?("Shall I update docker-sync to #{check.latest_version} for you?")
95
- system('gem update docker-sync')
96
- say_status 'success','Successfully updated, please restart docker-sync and check the changelog at https://github.com/EugenMayer/docker-sync/wiki/5.-Changelog',:green
97
- exit 0
95
+ if system('gem update docker-sync')
96
+ say_status 'success','Successfully updated, please restart docker-sync and check the changelog at https://github.com/EugenMayer/docker-sync/releases',:green
97
+ exit 0
98
+ else
99
+ say_status 'error','Unable to update docker-sync',:red
100
+ exit 1
101
+ end
98
102
  else
99
103
  exit 1 if update_enforced
100
104
  end
@@ -54,19 +54,17 @@ class UpgradeChecker
54
54
 
55
55
  def check_and_warn
56
56
  return if ENV['DOCKER_SYNC_SKIP_UPGRADE']
57
- if Gem::Version.new(last_upgraded_version) < Gem::Version.new('0.5.5')
58
- checker = UpdateChecker.new
59
- checker.check_unison_image
60
57
 
61
- Thor::Shell::Basic.new.say_status 'warning', "There has been a major unison update. Please clean and restart all your stacks. If you are using the unison strategy, please upgrade unison by doing 'brew update && brew upgrade unison' to upgrade to 2.51.2", :red
58
+ if Gem::Version.new(last_upgraded_version) < Gem::Version.new('0.5.6')
59
+ Thor::Shell::Basic.new.say_status 'warning', "If you are upgrading from 0.5.4 or below, please run `brew update && brew upgrade unison` AND `docker-compose down && docker-sync clean` or `docker-sync-stack clean` since you need to recreate the sync container", :red
62
60
 
63
- unless Thor::Shell::Basic.new.yes?('Just wanted you to know that! (y/N)')
61
+ unless Thor::Shell::Basic.new.yes?('Sync will fail otherwise. Continue? (y/N)')
64
62
  exit 1
65
63
  end
66
64
  end
67
65
 
68
- if Gem::Version.new(last_upgraded_version) < Gem::Version.new('0.5.6')
69
- Thor::Shell::Basic.new.say_status 'warning', "If you are upgrading from 0.5.4 or below, please run `brew update && brew upgrade unison` AND `docker-compose down && docker-sync clean` or `docker-sync-stack clean` since you need to recreate the sync container", :red
66
+ if Gem::Version.new(last_upgraded_version) < Gem::Version.new('0.5.12')
67
+ Thor::Shell::Basic.new.say_status 'warning', "0.5.12 uses a newer OCALM 4.08.1 version in the Unison image. If you use the unison strategy, please upgrade your local unison to be compiled against OCALM 4.08.1", :red
70
68
 
71
69
  unless Thor::Shell::Basic.new.yes?('Sync will fail otherwise. Continue? (y/N)')
72
70
  exit 1
data/tasks/sync/sync.thor CHANGED
@@ -79,6 +79,17 @@ class Sync < Thor
79
79
 
80
80
  end
81
81
 
82
+ desc 'restart', 'Restart docker-sync daemon'
83
+ method_option :daemon, :aliases => '-d', :default => false, :type => :boolean, :desc => 'Run in the background'
84
+ method_option :foreground, :aliases => '-f', :default => false, :type => :boolean, :desc => 'Run in the foreground'
85
+ method_option :app_name, :aliases => '--name', :default => 'daemon', :type => :string, :desc => 'App name used in PID and OUTPUT file name for Daemon'
86
+ method_option :dir, :aliases => '--dir', :default => './.docker-sync', :type => :string, :desc => 'Path to PID and OUTPUT file Directory'
87
+ method_option :logd, :aliases => '--logd', :default => true, :type => :boolean, :desc => 'To log OUPUT to file on Daemon or not'
88
+ def restart
89
+ invoke :stop, options.select{|k, _| ["app_name", "dir"].include?(k) }
90
+ invoke :start
91
+ end
92
+
82
93
  desc 'sync', 'just sync - do not start a watcher though'
83
94
  def sync
84
95
  print_version if options[:version]
@@ -155,8 +166,15 @@ class Sync < Thor
155
166
 
156
167
  # Check to see if we're already running:
157
168
  if daemon_running?
158
- say_status 'ok:', 'docker-sync already started for this configuration', :white
159
- exit 0
169
+ should_exit = true
170
+ unless options[:sync_name].nil? || options[:sync_name].empty?
171
+ running = `docker ps --filter 'status=running' --filter 'name=#{options[:sync_name]}' --format "{{.Names}}" | grep '^#{options[:sync_name]}$'`
172
+ should_exit = false if running == ''
173
+ end
174
+ if should_exit
175
+ say_status 'ok:', 'docker-sync already started for this configuration', :white
176
+ exit 0
177
+ end
160
178
  end
161
179
 
162
180
  # If we're daemonizing, run a sync first to ensure the containers exist so that a docker-compose up won't fail:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker-sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.11.pre.beta2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugen Mayer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-07 00:00:00.000000000 Z
11
+ date: 2021-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.20'
19
+ version: '1.0'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.20.0
22
+ version: 1.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '0.20'
29
+ version: '1.0'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.20.0
32
+ version: 1.0.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: gem_update_checker
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -209,7 +209,7 @@ homepage: https://github.com/EugenMayer/docker_sync
209
209
  licenses:
210
210
  - GPL-3.0
211
211
  metadata: {}
212
- post_install_message:
212
+ post_install_message:
213
213
  rdoc_options: []
214
214
  require_paths:
215
215
  - lib
@@ -217,16 +217,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
217
217
  requirements:
218
218
  - - ">="
219
219
  - !ruby/object:Gem::Version
220
- version: '2.0'
220
+ version: '2.4'
221
221
  required_rubygems_version: !ruby/object:Gem::Requirement
222
222
  requirements:
223
- - - ">"
223
+ - - ">="
224
224
  - !ruby/object:Gem::Version
225
- version: 1.3.1
225
+ version: '0'
226
226
  requirements: []
227
- rubyforge_project:
228
- rubygems_version: 2.6.14.3
229
- signing_key:
227
+ rubygems_version: 3.1.4
228
+ signing_key:
230
229
  specification_version: 4
231
230
  summary: Docker Sync - Fast and efficient way to sync code to docker-containers
232
231
  test_files: []