docker-sync 0.0.11 → 0.0.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/bin/docker-sync +1 -1
- data/bin/docker-sync-stack +10 -10
- data/lib/docker-sync/compose.rb +33 -0
- data/lib/{config.rb → docker-sync/config.rb} +11 -10
- data/lib/{execution.rb → docker-sync/execution.rb} +7 -5
- data/lib/{preconditions.rb → docker-sync/preconditions.rb} +7 -7
- data/lib/{docker_sync → docker-sync}/sync_manager.rb +19 -5
- data/lib/{docker_sync → docker-sync}/sync_process.rb +8 -3
- data/lib/{docker_sync → docker-sync}/sync_strategy/rsync.rb +9 -4
- data/lib/{docker_sync → docker-sync}/sync_strategy/unison.rb +9 -8
- data/lib/{update_check.rb → docker-sync/update_check.rb} +5 -6
- data/lib/docker-sync/watch_strategy/dummy.rb +42 -0
- data/lib/{docker_sync → docker-sync}/watch_strategy/fswatch.rb +4 -5
- data/tasks/stack/stack.thor +17 -17
- data/tasks/sync/sync.thor +12 -14
- metadata +27 -12
- data/lib/compose.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22787f972ef84ff342df17b05894ec25b79ec521
|
4
|
+
data.tar.gz: 5d7a83c05ec3194d7292b9f2ab2798bfc9909c76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a5141387dd95c343f467c9d72bc32038b953e2ec56d5d71ff8e378b667a230333bb8345c5bc049c31c7e6e5d2fa8a9a2c54ea8eef7b1d7eef427adcf1603f12
|
7
|
+
data.tar.gz: 8ddf36c4068404754d969de94d00a70ea56a528f4d127fc600b7d01d656f39b2430e6bc63f30c55a4cba4df85a7555875e6474bb0747e1277f93d7d6009c7f68
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.12
|
data/bin/docker-sync
CHANGED
data/bin/docker-sync-stack
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
3
3
|
|
4
4
|
require 'thor'
|
5
|
-
require 'update_check'
|
5
|
+
require 'docker-sync/update_check'
|
6
6
|
|
7
|
-
#
|
8
|
-
begin
|
9
|
-
gem 'docker-compose'
|
10
|
-
rescue Gem::LoadError
|
11
|
-
puts "docker-compose gem is missing, installing 'gem install docker-compose'"
|
12
|
-
system('gem install docker-compose')
|
13
|
-
puts 'docker-compose ruby gem installed, please start docker-sync-stack again'
|
14
|
-
exit 0
|
15
|
-
end
|
7
|
+
# TODO: remove this later, not longer needed
|
8
|
+
#begin
|
9
|
+
# gem 'docker-compose'
|
10
|
+
#rescue Gem::LoadError
|
11
|
+
# puts "docker-compose gem is missing, installing 'gem install docker-compose'"
|
12
|
+
# system('gem install docker-compose')
|
13
|
+
# puts 'docker-compose ruby gem installed, please start docker-sync-stack again'
|
14
|
+
# exit 0
|
15
|
+
#end
|
16
16
|
|
17
17
|
thor = File.expand_path('../../tasks/stack', __FILE__)
|
18
18
|
Dir.glob(File.join(thor, '/**/*.thor')).each { |taskfile|
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'docker/compose'
|
2
|
+
|
3
|
+
class ComposeManager
|
4
|
+
include Thor::Shell
|
5
|
+
@compose_session
|
6
|
+
@global_options
|
7
|
+
def initialize(global_options)
|
8
|
+
@global_options = global_options
|
9
|
+
compose_file_path = 'docker-compose.yml'
|
10
|
+
if @global_options.key?('compose-file-path')
|
11
|
+
path = File.expand_path(@global_options['compose-file-path'])
|
12
|
+
unless File.exist?(path)
|
13
|
+
raise("Your referenced docker-compose file in docker-sync.yml was not found at #{@global_options['compose-file-path']}")
|
14
|
+
end
|
15
|
+
compose_file_path = @global_options['compose-file-path']
|
16
|
+
end
|
17
|
+
@compose_session = Docker::Compose::Session.new(dir:'./', :file => compose_file_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
def run
|
21
|
+
say_status 'ok','starting compose',:white
|
22
|
+
@compose_session.up
|
23
|
+
say_status 'success','started compose',:green
|
24
|
+
end
|
25
|
+
|
26
|
+
def stop
|
27
|
+
@compose_session.stop
|
28
|
+
end
|
29
|
+
|
30
|
+
def clean
|
31
|
+
@compose_session.down
|
32
|
+
end
|
33
|
+
end
|
@@ -4,18 +4,19 @@ require 'yaml'
|
|
4
4
|
# this has basically completely reused from Thor::runner.rb - thank you!
|
5
5
|
|
6
6
|
module DockerSyncConfig
|
7
|
-
def global_config_location
|
7
|
+
def self.global_config_location
|
8
8
|
return File.expand_path('~/.docker-sync-global.yml')
|
9
9
|
end
|
10
10
|
|
11
|
-
def is_first_run
|
11
|
+
def self.is_first_run
|
12
12
|
global_config_path = global_config_location
|
13
13
|
return !File.exist?(global_config_path)
|
14
14
|
end
|
15
15
|
|
16
|
-
def global_config
|
16
|
+
def self.global_config
|
17
17
|
global_config_path = global_config_location
|
18
18
|
date = DateTime.new(2001, 1, 1) #paste
|
19
|
+
# noinspection RubyStringKeysInHashInspection
|
19
20
|
defaults = {'update_check'=>true, 'update_last_check' => date.iso8601(9), 'update_enforce' => true}
|
20
21
|
if File.exist?(global_config_path)
|
21
22
|
config = YAML.load_file(global_config_path)
|
@@ -26,13 +27,13 @@ module DockerSyncConfig
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
|
-
def global_config_save(config)
|
30
|
+
def self.global_config_save(config)
|
30
31
|
global_config_path = global_config_location
|
31
32
|
File.open(global_config_path, 'w') {|f| f.write config.to_yaml }
|
32
33
|
end
|
33
34
|
|
34
|
-
def
|
35
|
-
files =
|
35
|
+
def self.project_config_path
|
36
|
+
files = project_config_find
|
36
37
|
if files.length > 0
|
37
38
|
return files.pop
|
38
39
|
else
|
@@ -41,7 +42,7 @@ module DockerSyncConfig
|
|
41
42
|
end
|
42
43
|
|
43
44
|
# this has been ruthlessly stolen from Thor/runner.rb - please do not hunt me for that :)
|
44
|
-
def
|
45
|
+
def self.project_config_find(skip_lookup = false)
|
45
46
|
# Finds docker-sync.yml by traversing from your current directory down to the root
|
46
47
|
# directory of your system. If at any time we find a docker-sync.yml file, we stop.
|
47
48
|
#
|
@@ -66,7 +67,7 @@ module DockerSyncConfig
|
|
66
67
|
|
67
68
|
unless skip_lookup
|
68
69
|
Pathname.pwd.ascend do |path|
|
69
|
-
docker_sync_files =
|
70
|
+
docker_sync_files = globs_for_project_config(path).map { |g| Dir[g] }.flatten
|
70
71
|
break unless docker_sync_files.empty?
|
71
72
|
end
|
72
73
|
end
|
@@ -77,12 +78,12 @@ module DockerSyncConfig
|
|
77
78
|
|
78
79
|
# Where to look for docker-sync.yml files.
|
79
80
|
#
|
80
|
-
def
|
81
|
+
def self.globs_for_project_config(path)
|
81
82
|
path = escape_globs(path)
|
82
83
|
["#{path}/docker-sync.yml"]
|
83
84
|
end
|
84
85
|
|
85
|
-
def escape_globs(path)
|
86
|
+
def self.escape_globs(path)
|
86
87
|
path.to_s.gsub(/[*?{}\[\]]/, '\\\\\\&')
|
87
88
|
end
|
88
89
|
end
|
@@ -17,14 +17,16 @@ module Execution
|
|
17
17
|
end
|
18
18
|
|
19
19
|
Thread.new {
|
20
|
-
Open3.popen3(command) do |
|
20
|
+
Open3.popen3(command) do |_, stdout, stderr, _|
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
# noinspection RubyAssignmentExpressionInConditionalInspection
|
23
|
+
while line_out = stdout.gets
|
24
|
+
say_status prefix, line_out, color
|
24
25
|
end
|
25
26
|
|
26
|
-
|
27
|
-
|
27
|
+
# noinspection RubyAssignmentExpressionInConditionalInspection
|
28
|
+
while line_err = stderr.gets
|
29
|
+
say_status prefix, line_err, :red
|
28
30
|
end
|
29
31
|
|
30
32
|
end
|
@@ -1,44 +1,44 @@
|
|
1
1
|
require 'mkmf'
|
2
2
|
|
3
3
|
module Preconditions
|
4
|
-
def check_all_preconditions
|
4
|
+
def self.check_all_preconditions
|
5
5
|
docker_available
|
6
6
|
docker_running
|
7
7
|
fswatch_available
|
8
8
|
end
|
9
9
|
|
10
|
-
def docker_available
|
10
|
+
def self.docker_available
|
11
11
|
if (find_executable0 'docker').nil?
|
12
12
|
raise('Could not find docker binary in path. Please install it, e.g. using "brew install docker" or install docker-for-mac')
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
def docker_running
|
16
|
+
def self.docker_running
|
17
17
|
`docker ps`
|
18
18
|
if $?.exitstatus > 0
|
19
19
|
raise('No docker daemon seems to be running. Did you start your docker-for-mac / docker-machine?')
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
def fswatch_available
|
23
|
+
def self.fswatch_available
|
24
24
|
if (find_executable0 'fswatch').nil?
|
25
25
|
raise('No fswatch available. Install it by "brew install fswatch"')
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
def docker_sync_available
|
29
|
+
def self.docker_sync_available
|
30
30
|
if (find_executable0 'docker-sync').nil?
|
31
31
|
raise('No docker-sync available. Install it by "gem install docker-sync"')
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
def rsync_available
|
35
|
+
def self.rsync_available
|
36
36
|
if (find_executable0 'rsync').nil?
|
37
37
|
raise('Could not find rsync binary in path. Please install it, e.g. using "brew install rsync"')
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
def unison_available
|
41
|
+
def self.unison_available
|
42
42
|
if (find_executable0 'unison').nil?
|
43
43
|
raise('Could not find unison binary in path. Please install it, e.g. using "brew install unison"')
|
44
44
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'thor/shell'
|
2
2
|
# noinspection RubyResolve
|
3
|
-
require '
|
3
|
+
require 'docker-sync/sync_process'
|
4
4
|
# noinspection RubyResolve
|
5
|
-
require 'execution'
|
5
|
+
require 'docker-sync/execution'
|
6
6
|
require 'yaml'
|
7
7
|
|
8
8
|
module Docker_Rsync
|
@@ -17,7 +17,6 @@ module Docker_Rsync
|
|
17
17
|
@sync_processes = []
|
18
18
|
@config_syncs = []
|
19
19
|
@config_options = []
|
20
|
-
@config_syncs = []
|
21
20
|
@config_path = options[:config_path]
|
22
21
|
load_configuration
|
23
22
|
end
|
@@ -34,6 +33,10 @@ module Docker_Rsync
|
|
34
33
|
upgrade_syncs_config
|
35
34
|
end
|
36
35
|
|
36
|
+
def global_options
|
37
|
+
return @config_options
|
38
|
+
end
|
39
|
+
|
37
40
|
def get_sync_points
|
38
41
|
return @config_syncs
|
39
42
|
end
|
@@ -41,13 +44,24 @@ module Docker_Rsync
|
|
41
44
|
def upgrade_syncs_config
|
42
45
|
@config_syncs.each do |name, config|
|
43
46
|
@config_syncs[name]['config_path'] = @config_path
|
47
|
+
# expand the sync source to remove ~ and similar expressions in the path
|
44
48
|
@config_syncs[name]['src'] = File.expand_path(@config_syncs[name]['src'])
|
49
|
+
|
50
|
+
# set the global verbose setting, if the sync-endpoint does not define a own one
|
45
51
|
unless config.key?('verbose')
|
46
52
|
@config_syncs[name]['verbose'] = false
|
47
53
|
if @config_options.key?('verbose')
|
48
54
|
@config_syncs[name]['verbose'] = @config_options['verbose']
|
49
55
|
end
|
50
56
|
end
|
57
|
+
|
58
|
+
# for each strategy check if a custom image has been defined and inject that into the sync-endpoints
|
59
|
+
# which do fit for this strategy
|
60
|
+
%w(rsync unison).each do |strategy|
|
61
|
+
if config.key?("#{strategy}_image") && @config_syncs[name]['sync_strategy'] == strategy
|
62
|
+
@config_syncs[name]['image'] = config["#{strategy}_image"]
|
63
|
+
end
|
64
|
+
end
|
51
65
|
end
|
52
66
|
end
|
53
67
|
|
@@ -108,7 +122,7 @@ module Docker_Rsync
|
|
108
122
|
def join_threads
|
109
123
|
begin
|
110
124
|
@sync_processes.each do |sync_process|
|
111
|
-
sync_process.watch_thread.join
|
125
|
+
sync_process.watch_thread.join unless sync_process.watch_thread.nil?
|
112
126
|
end
|
113
127
|
|
114
128
|
rescue SystemExit, Interrupt
|
@@ -132,7 +146,7 @@ module Docker_Rsync
|
|
132
146
|
@sync_processes.each { |sync_process|
|
133
147
|
sync_process.stop
|
134
148
|
unless sync_process.watch_thread.nil?
|
135
|
-
sync_process.watch_thread.kill
|
149
|
+
sync_process.watch_thread.kill unless sync_process.watch_thread.nil?
|
136
150
|
end
|
137
151
|
}
|
138
152
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'thor/shell'
|
2
2
|
# noinspection RubyResolve
|
3
|
-
require '
|
4
|
-
require '
|
3
|
+
require 'docker-sync/sync_strategy/rsync'
|
4
|
+
require 'docker-sync/sync_strategy/unison'
|
5
5
|
# noinspection RubyResolve
|
6
|
-
require '
|
6
|
+
require 'docker-sync/watch_strategy/fswatch'
|
7
|
+
require 'docker-sync/watch_strategy/dummy'
|
7
8
|
|
8
9
|
module Docker_Sync
|
9
10
|
class SyncProcess
|
@@ -48,6 +49,10 @@ module Docker_Sync
|
|
48
49
|
case @options['watch_strategy']
|
49
50
|
when 'fswatch'
|
50
51
|
@watch_strategy = Docker_Sync::WatchStrategy::Fswatch.new(@sync_name, @options)
|
52
|
+
when 'disable'
|
53
|
+
@watch_strategy = Docker_Sync::WatchStrategy::Dummy.new(@sync_name, @options)
|
54
|
+
when 'dummy'
|
55
|
+
@watch_strategy = Docker_Sync::WatchStrategy::Dummy.new(@sync_name, @options)
|
51
56
|
else
|
52
57
|
@watch_strategy = Docker_Sync::WatchStrategy::Fswatch.new(@sync_name, @options)
|
53
58
|
end
|
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'thor/shell'
|
2
|
-
require 'preconditions'
|
2
|
+
require 'docker-sync/preconditions'
|
3
3
|
|
4
4
|
module Docker_Sync
|
5
5
|
module SyncStrategy
|
6
6
|
class Rsync
|
7
7
|
include Thor::Shell
|
8
|
-
include Preconditions
|
9
8
|
|
10
9
|
@options
|
11
10
|
@sync_name
|
@@ -14,9 +13,15 @@ module Docker_Sync
|
|
14
13
|
def initialize(sync_name, options)
|
15
14
|
@sync_name = sync_name
|
16
15
|
@options = options
|
16
|
+
# if a custom image is set, apply it
|
17
|
+
if @options.key?('image')
|
18
|
+
@docker_image = @options['image']
|
19
|
+
else
|
20
|
+
@docker_image = 'eugenmayer/rsync'
|
21
|
+
end
|
17
22
|
|
18
23
|
begin
|
19
|
-
rsync_available
|
24
|
+
Preconditions::rsync_available
|
20
25
|
rescue Exception => e
|
21
26
|
say_status 'error', "#{@sync_name} has been configured to sync with rsync, but no rsync binary available", :red
|
22
27
|
say_status 'error', e.message, :red
|
@@ -88,7 +93,7 @@ module Docker_Sync
|
|
88
93
|
user_mapping = get_user_mapping
|
89
94
|
group_mapping = get_group_mapping
|
90
95
|
|
91
|
-
cmd = "docker run -p '#{@options['sync_host_port']}:873' -v #{volume_name}:#{@options['dest']} #{user_mapping} #{group_mapping} -e VOLUME=#{@options['dest']} --name #{container_name} -d
|
96
|
+
cmd = "docker run -p '#{@options['sync_host_port']}:873' -v #{volume_name}:#{@options['dest']} #{user_mapping} #{group_mapping} -e VOLUME=#{@options['dest']} --name #{container_name} -d #{@docker_image}"
|
92
97
|
else # container already created, just start / reuse it
|
93
98
|
say_status 'ok', "starting #{container_name} container", :white if @options['verbose']
|
94
99
|
cmd = "docker start #{container_name}"
|
@@ -1,26 +1,27 @@
|
|
1
1
|
require 'thor/shell'
|
2
|
-
require 'preconditions'
|
2
|
+
require 'docker-sync/preconditions'
|
3
3
|
require 'open3'
|
4
4
|
|
5
5
|
module Docker_Sync
|
6
6
|
module SyncStrategy
|
7
7
|
class Unison
|
8
8
|
include Thor::Shell
|
9
|
-
include Preconditions
|
10
|
-
|
11
9
|
|
12
10
|
@options
|
13
11
|
@sync_name
|
14
12
|
@watch_thread
|
15
|
-
UNISON_IMAGE = 'leighmcculloch/unison'
|
16
|
-
UNISON_VERSION = '2.48.3'
|
17
13
|
UNISON_CONTAINER_PORT = '5000'
|
18
14
|
def initialize(sync_name, options)
|
19
15
|
@sync_name = sync_name
|
20
16
|
@options = options
|
21
|
-
|
17
|
+
# if a custom image is set, apply it
|
18
|
+
if @options.key?('image')
|
19
|
+
@docker_image = @options['image']
|
20
|
+
else
|
21
|
+
@docker_image = 'eugenmayer/unison'
|
22
|
+
end
|
22
23
|
begin
|
23
|
-
unison_available
|
24
|
+
Preconditions::unison_available
|
24
25
|
rescue Exception => e
|
25
26
|
say_status 'error', "#{@sync_name} has been configured to sync with unison, but no unison available", :red
|
26
27
|
say_status 'error', e.message, :red
|
@@ -80,7 +81,7 @@ module Docker_Sync
|
|
80
81
|
exists = `docker ps --filter "status=exited" --filter "name=#{container_name}" | grep #{container_name}`
|
81
82
|
if exists == ''
|
82
83
|
say_status 'ok', "creating #{container_name} container", :white if @options['verbose']
|
83
|
-
cmd = "docker run -p '#{@options['sync_host_port']}:#{UNISON_CONTAINER_PORT}' -v #{volume_name}:#{@options['dest']} -e
|
84
|
+
cmd = "docker run -p '#{@options['sync_host_port']}:#{UNISON_CONTAINER_PORT}' -v #{volume_name}:#{@options['dest']} -e UNISON_DIR=#{@options['dest']} --name #{container_name} -d #{@docker_image}"
|
84
85
|
else
|
85
86
|
say_status 'ok', "starting #{container_name} container", :white if @options['verbose']
|
86
87
|
cmd = "docker start #{container_name}"
|
@@ -1,13 +1,12 @@
|
|
1
1
|
require 'gem_update_checker'
|
2
2
|
require 'thor/actions'
|
3
|
-
require 'config'
|
3
|
+
require 'docker-sync/config'
|
4
4
|
|
5
5
|
class UpdateChecker
|
6
6
|
include Thor::Shell
|
7
|
-
include DockerSyncConfig
|
8
7
|
@config
|
9
8
|
def initialize
|
10
|
-
@config = global_config
|
9
|
+
@config = DockerSyncConfig::global_config
|
11
10
|
end
|
12
11
|
|
13
12
|
def run
|
@@ -18,7 +17,7 @@ class UpdateChecker
|
|
18
17
|
unless should_run
|
19
18
|
return
|
20
19
|
end
|
21
|
-
check_rsync_image unless is_first_run # do not check the image if its the first run - since this it will be downloaded anyway
|
20
|
+
check_rsync_image unless DockerSyncConfig::is_first_run # do not check the image if its the first run - since this it will be downloaded anyway
|
22
21
|
check_and_warn(@config['update_enforce'])
|
23
22
|
end
|
24
23
|
|
@@ -46,7 +45,7 @@ class UpdateChecker
|
|
46
45
|
end
|
47
46
|
|
48
47
|
def get_current_version
|
49
|
-
path = File.expand_path('
|
48
|
+
path = File.expand_path('../../../', __FILE__)
|
50
49
|
return File.read("#{path}/VERSION")
|
51
50
|
end
|
52
51
|
|
@@ -61,7 +60,7 @@ class UpdateChecker
|
|
61
60
|
# update the timestamp
|
62
61
|
now = DateTime.now
|
63
62
|
@config['update_last_check'] = now.iso8601(9)
|
64
|
-
global_config_save(@config)
|
63
|
+
DockerSyncConfig::global_config_save(@config)
|
65
64
|
|
66
65
|
check = docker_sync_update_check
|
67
66
|
if check.update_available
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'thor/shell'
|
2
|
+
require 'docker-sync/execution'
|
3
|
+
require 'docker-sync/preconditions'
|
4
|
+
|
5
|
+
module Docker_Sync
|
6
|
+
module WatchStrategy
|
7
|
+
class Dummy
|
8
|
+
include Thor::Shell
|
9
|
+
include Execution
|
10
|
+
|
11
|
+
@options
|
12
|
+
@sync_name
|
13
|
+
@watch_thread
|
14
|
+
|
15
|
+
def initialize(sync_name, options)
|
16
|
+
@options = options
|
17
|
+
@sync_name = sync_name
|
18
|
+
@watch_thread = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def run
|
22
|
+
say_status 'success', 'Watcher disabled by configuration' if @options['verbose']
|
23
|
+
end
|
24
|
+
|
25
|
+
def stop
|
26
|
+
end
|
27
|
+
|
28
|
+
def clean
|
29
|
+
end
|
30
|
+
|
31
|
+
def watch
|
32
|
+
end
|
33
|
+
|
34
|
+
def watch_options
|
35
|
+
end
|
36
|
+
|
37
|
+
def watch_thread
|
38
|
+
return @watch_thread
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
require 'thor/shell'
|
2
|
-
require 'execution'
|
3
|
-
require 'preconditions'
|
2
|
+
require 'docker-sync/execution'
|
3
|
+
require 'docker-sync/preconditions'
|
4
4
|
|
5
5
|
module Docker_Sync
|
6
6
|
module WatchStrategy
|
7
7
|
class Fswatch
|
8
8
|
include Thor::Shell
|
9
9
|
include Execution
|
10
|
-
include Preconditions
|
11
10
|
|
12
11
|
@options
|
13
12
|
@sync_name
|
@@ -18,7 +17,7 @@ module Docker_Sync
|
|
18
17
|
@options = options
|
19
18
|
|
20
19
|
begin
|
21
|
-
fswatch_available
|
20
|
+
Preconditions::fswatch_available
|
22
21
|
rescue Exception => e
|
23
22
|
say_status 'error', e.message, :red
|
24
23
|
exit 1
|
@@ -56,7 +55,7 @@ module Docker_Sync
|
|
56
55
|
|
57
56
|
sync_command = 'thor sync:sync'
|
58
57
|
begin
|
59
|
-
docker_sync_available
|
58
|
+
Preconditions::docker_sync_available
|
60
59
|
sync_command = 'docker-sync sync'
|
61
60
|
rescue Exception => e
|
62
61
|
say_status 'warning', 'docker-sync not available, assuming dev mode, using thor', :yellow
|
data/tasks/stack/stack.thor
CHANGED
@@ -1,13 +1,10 @@
|
|
1
|
-
require '
|
2
|
-
require 'config'
|
3
|
-
require 'preconditions'
|
4
|
-
require 'update_check'
|
5
|
-
require 'compose'
|
6
|
-
|
1
|
+
require 'docker-sync/sync_manager'
|
2
|
+
require 'docker-sync/config'
|
3
|
+
require 'docker-sync/preconditions'
|
4
|
+
require 'docker-sync/update_check'
|
5
|
+
require 'docker/compose'
|
6
|
+
require 'docker-sync/compose'
|
7
7
|
class Stack < Thor
|
8
|
-
include DockerSyncConfig
|
9
|
-
include Preconditions
|
10
|
-
|
11
8
|
class_option :config, :aliases => '-c', :default => nil, :type => :string, :desc => 'Path of the docker_sync config'
|
12
9
|
class_option :sync_name, :aliases => '-n', :type => :string, :desc => 'If given, only this sync configuration will be references/started/synced'
|
13
10
|
|
@@ -19,7 +16,7 @@ class Stack < Thor
|
|
19
16
|
updates.run
|
20
17
|
|
21
18
|
begin
|
22
|
-
check_all_preconditions
|
19
|
+
Preconditions::check_all_preconditions
|
23
20
|
rescue Exception => e
|
24
21
|
say_status 'error', e.message, :red
|
25
22
|
exit 1
|
@@ -29,7 +26,7 @@ class Stack < Thor
|
|
29
26
|
config_path = options[:config]
|
30
27
|
else
|
31
28
|
begin
|
32
|
-
config_path =
|
29
|
+
config_path = DockerSyncConfig::project_config_path
|
33
30
|
rescue Exception => e
|
34
31
|
say_status 'error', e.message, :red
|
35
32
|
return
|
@@ -38,8 +35,8 @@ class Stack < Thor
|
|
38
35
|
|
39
36
|
@sync_manager = Docker_Rsync::SyncManager.new(:config_path => config_path)
|
40
37
|
@sync_manager.run(options[:sync_name])
|
41
|
-
|
42
|
-
@compose_manager = ComposeManager.new
|
38
|
+
global_options = @sync_manager.global_options
|
39
|
+
@compose_manager = ComposeManager.new(global_options)
|
43
40
|
|
44
41
|
compose_thread = Thread.new {
|
45
42
|
@compose_manager.run
|
@@ -65,7 +62,7 @@ class Stack < Thor
|
|
65
62
|
|
66
63
|
def clean
|
67
64
|
begin
|
68
|
-
check_all_preconditions
|
65
|
+
Preconditions::check_all_preconditions
|
69
66
|
rescue Exception => e
|
70
67
|
say_status 'error', e.message, :red
|
71
68
|
exit 1
|
@@ -75,17 +72,20 @@ class Stack < Thor
|
|
75
72
|
config_path = options[:config]
|
76
73
|
else
|
77
74
|
begin
|
78
|
-
config_path =
|
75
|
+
config_path = DockerSyncConfig::project_config_path
|
79
76
|
rescue Exception => e
|
80
77
|
say_status 'error', e.message, :red
|
81
78
|
return
|
82
79
|
end
|
83
80
|
end
|
84
|
-
@
|
81
|
+
@sync_manager = Docker_Rsync::SyncManager.new(:config_path => config_path)
|
82
|
+
global_options = @sync_manager.global_options
|
83
|
+
# shutdown compose first
|
84
|
+
@compose_manager = ComposeManager.new(global_options)
|
85
85
|
@compose_manager.clean
|
86
86
|
say_status 'success', 'Finished cleaning up your app stack', :green
|
87
87
|
|
88
|
-
|
88
|
+
# now shutdown sync
|
89
89
|
@sync_manager.clean(options[:sync_name])
|
90
90
|
say_status 'success', 'Finished cleanup. Removed stopped, removed sync container and removed there volumes', :green
|
91
91
|
end
|
data/tasks/sync/sync.thor
CHANGED
@@ -1,11 +1,9 @@
|
|
1
|
-
require '
|
2
|
-
require 'config'
|
3
|
-
require 'preconditions'
|
4
|
-
require 'update_check'
|
1
|
+
require 'docker-sync/sync_manager'
|
2
|
+
require 'docker-sync/config'
|
3
|
+
require 'docker-sync/preconditions'
|
4
|
+
require 'docker-sync/update_check'
|
5
5
|
|
6
6
|
class Sync < Thor
|
7
|
-
include DockerSyncConfig
|
8
|
-
include Preconditions
|
9
7
|
|
10
8
|
class_option :config, :aliases => '-c',:default => nil, :type => :string, :desc => 'Path of the docker_sync config'
|
11
9
|
class_option :sync_name, :aliases => '-n',:type => :string, :desc => 'If given, only this sync configuration will be references/started/synced'
|
@@ -17,7 +15,7 @@ class Sync < Thor
|
|
17
15
|
updates.run
|
18
16
|
|
19
17
|
begin
|
20
|
-
check_all_preconditions
|
18
|
+
Preconditions::check_all_preconditions
|
21
19
|
rescue Exception => e
|
22
20
|
say_status 'error', e.message, :red
|
23
21
|
exit 1
|
@@ -27,7 +25,7 @@ class Sync < Thor
|
|
27
25
|
config_path = options[:config]
|
28
26
|
else
|
29
27
|
begin
|
30
|
-
config_path =
|
28
|
+
config_path = DockerSyncConfig::project_config_path
|
31
29
|
rescue Exception => e
|
32
30
|
say_status 'error', e.message, :red
|
33
31
|
return
|
@@ -41,7 +39,7 @@ class Sync < Thor
|
|
41
39
|
desc 'sync', 'sync - do not start a watcher'
|
42
40
|
def sync
|
43
41
|
begin
|
44
|
-
check_all_preconditions
|
42
|
+
Preconditions::check_all_preconditions
|
45
43
|
rescue Exception => e
|
46
44
|
say_status 'error', e.message, :red
|
47
45
|
exit 1
|
@@ -51,7 +49,7 @@ class Sync < Thor
|
|
51
49
|
config_path = options[:config]
|
52
50
|
else
|
53
51
|
begin
|
54
|
-
config_path =
|
52
|
+
config_path = DockerSyncConfig::project_config_path
|
55
53
|
rescue Exception => e
|
56
54
|
say_status 'error', e.message, :red
|
57
55
|
return
|
@@ -64,7 +62,7 @@ class Sync < Thor
|
|
64
62
|
desc 'clean', 'Stop and clean up all sync endpoints'
|
65
63
|
def clean
|
66
64
|
begin
|
67
|
-
check_all_preconditions
|
65
|
+
Preconditions::check_all_preconditions
|
68
66
|
rescue Exception => e
|
69
67
|
say_status 'error', e.message, :red
|
70
68
|
exit 1
|
@@ -74,7 +72,7 @@ class Sync < Thor
|
|
74
72
|
config_path = options[:config]
|
75
73
|
else
|
76
74
|
begin
|
77
|
-
config_path =
|
75
|
+
config_path = DockerSyncConfig::project_config_path
|
78
76
|
rescue Exception => e
|
79
77
|
say_status 'error', e.message, :red
|
80
78
|
return
|
@@ -89,7 +87,7 @@ class Sync < Thor
|
|
89
87
|
method_option :verbose, :default => false, :type => :boolean, :desc => 'Verbose output'
|
90
88
|
def list
|
91
89
|
begin
|
92
|
-
check_all_preconditions
|
90
|
+
Preconditions::check_all_preconditions
|
93
91
|
rescue Exception => e
|
94
92
|
say_status 'error', e.message, :red
|
95
93
|
exit 1
|
@@ -99,7 +97,7 @@ class Sync < Thor
|
|
99
97
|
config_path = options[:config]
|
100
98
|
else
|
101
99
|
begin
|
102
|
-
config_path =
|
100
|
+
config_path = DockerSyncConfig::project_config_path
|
103
101
|
rescue Exception => e
|
104
102
|
say_status 'error', e.message, :red
|
105
103
|
return
|
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.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugen Mayer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -50,6 +50,20 @@ dependencies:
|
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 0.2.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: docker-compose
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - '='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.8.3
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - '='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.8.3
|
53
67
|
description: Sync your code live to docker-containers without losing any performance
|
54
68
|
on OSX
|
55
69
|
email: eugen.mayer@kontextwork.de
|
@@ -63,16 +77,17 @@ files:
|
|
63
77
|
- VERSION
|
64
78
|
- bin/docker-sync
|
65
79
|
- bin/docker-sync-stack
|
66
|
-
- lib/compose.rb
|
67
|
-
- lib/config.rb
|
68
|
-
- lib/
|
69
|
-
- lib/
|
70
|
-
- lib/
|
71
|
-
- lib/
|
72
|
-
- lib/
|
73
|
-
- lib/
|
74
|
-
- lib/
|
75
|
-
- lib/
|
80
|
+
- lib/docker-sync/compose.rb
|
81
|
+
- lib/docker-sync/config.rb
|
82
|
+
- lib/docker-sync/execution.rb
|
83
|
+
- lib/docker-sync/preconditions.rb
|
84
|
+
- lib/docker-sync/sync_manager.rb
|
85
|
+
- lib/docker-sync/sync_process.rb
|
86
|
+
- lib/docker-sync/sync_strategy/rsync.rb
|
87
|
+
- lib/docker-sync/sync_strategy/unison.rb
|
88
|
+
- lib/docker-sync/update_check.rb
|
89
|
+
- lib/docker-sync/watch_strategy/dummy.rb
|
90
|
+
- lib/docker-sync/watch_strategy/fswatch.rb
|
76
91
|
- tasks/stack/stack.thor
|
77
92
|
- tasks/sync/sync.thor
|
78
93
|
homepage: https://github.com/EugenMayer/docker_sync
|
data/lib/compose.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'docker/compose'
|
2
|
-
|
3
|
-
class ComposeManager
|
4
|
-
include Thor::Shell
|
5
|
-
@compose_session
|
6
|
-
def initialize
|
7
|
-
@compose_session = Docker::Compose::Session.new(dir:'./')
|
8
|
-
end
|
9
|
-
|
10
|
-
def run
|
11
|
-
say_status 'ok','starting compose',:white
|
12
|
-
@compose_session.up
|
13
|
-
say_status 'success','started compose',:green
|
14
|
-
end
|
15
|
-
|
16
|
-
def stop
|
17
|
-
@compose_session.stop
|
18
|
-
end
|
19
|
-
|
20
|
-
def clean
|
21
|
-
@compose_session.down
|
22
|
-
end
|
23
|
-
end
|