Class: Docker_sync::SyncManager
- Inherits:
-
Object
- Object
- Docker_sync::SyncManager
- Includes:
- Thor::Shell
- Defined in:
- lib/docker-sync/sync_manager.rb
Instance Method Summary collapse
- #clean(sync_name = nil) ⇒ Object
- #create_sync(sync_name, sync_configuration) ⇒ Object
- #get_sync_points ⇒ Object
- #global_options ⇒ Object
- #init_sync_processes(sync_name = nil) ⇒ Object
-
#initialize(options) ⇒ SyncManager
constructor
A new instance of SyncManager.
- #join_threads ⇒ Object
- #load_configuration ⇒ Object
- #run(sync_name = nil) ⇒ Object
- #start_container(sync_name = nil) ⇒ Object
- #stop ⇒ Object
- #sync(sync_name = nil) ⇒ Object
- #upgrade_syncs_config ⇒ Object
- #validate_config(config) ⇒ Object
- #validate_sync_config(name, sync_config) ⇒ Object
- #watch_start ⇒ Object
- #watch_stop ⇒ Object
Constructor Details
#initialize(options) ⇒ SyncManager
Returns a new instance of SyncManager.
18 19 20 21 22 23 24 25 26 |
# File 'lib/docker-sync/sync_manager.rb', line 18 def initialize() Dotenv.load @sync_processes = [] @config_syncs = [] @config_global = [] @config_path = [:config_path] load_configuration end |
Instance Method Details
#clean(sync_name = nil) ⇒ Object
114 115 116 117 118 119 |
# File 'lib/docker-sync/sync_manager.rb', line 114 def clean(sync_name = nil) init_sync_processes(sync_name) @sync_processes.each { |sync_process| sync_process.clean } end |
#create_sync(sync_name, sync_configuration) ⇒ Object
166 167 168 169 |
# File 'lib/docker-sync/sync_manager.rb', line 166 def create_sync(sync_name, sync_configuration) sync_process = Docker_Sync::SyncProcess.new(sync_name, sync_configuration) return sync_process end |
#get_sync_points ⇒ Object
45 46 47 |
# File 'lib/docker-sync/sync_manager.rb', line 45 def get_sync_points return @config_syncs end |
#global_options ⇒ Object
41 42 43 |
# File 'lib/docker-sync/sync_manager.rb', line 41 def return @config_global end |
#init_sync_processes(sync_name = nil) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/docker-sync/sync_manager.rb', line 99 def init_sync_processes(sync_name = nil) return if @sync_processes.size != 0 if sync_name.nil? @config_syncs.each { |name, sync_configuration| @sync_processes.push(create_sync(name, sync_configuration)) } else unless @config_syncs.key?(sync_name) raise("Could not find sync configuration with name #{sync_name}") end @sync_processes.push(create_sync(sync_name, @config_syncs[sync_name])) end end |
#join_threads ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/docker-sync/sync_manager.rb', line 143 def join_threads begin @sync_processes.each do |sync_process| if sync_process.watch_thread sync_process.watch_thread.join end if sync_process.watch_fork Process.wait(sync_process.watch_fork) end end rescue SystemExit, Interrupt say_status 'shutdown', 'Shutting down...', :blue @sync_processes.each do |sync_process| sync_process.stop end rescue Exception => e puts "EXCEPTION: #{e.inspect}" puts "MESSAGE: #{e.}" end end |
#load_configuration ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/docker-sync/sync_manager.rb', line 28 def load_configuration unless File.exist?(@config_path) raise "Config could not be loaded from #{@config_path} - it does not exist" end config = ConfigTemplate::interpolate_config_file(@config_path) validate_config(config) @config_global = config['options'] || {} @config_syncs = config['syncs'] upgrade_syncs_config end |
#run(sync_name = nil) ⇒ Object
135 136 137 138 139 140 141 |
# File 'lib/docker-sync/sync_manager.rb', line 135 def run(sync_name = nil) init_sync_processes(sync_name) @sync_processes.each { |sync_process| sync_process.run } end |
#start_container(sync_name = nil) ⇒ Object
128 129 130 131 132 133 |
# File 'lib/docker-sync/sync_manager.rb', line 128 def start_container(sync_name = nil) init_sync_processes(sync_name) @sync_processes.each { |sync_process| sync_process.start_container } end |
#stop ⇒ Object
171 172 173 174 175 176 177 178 |
# File 'lib/docker-sync/sync_manager.rb', line 171 def stop @sync_processes.each { |sync_process| sync_process.stop unless sync_process.watch_thread.nil? sync_process.watch_thread.kill unless sync_process.watch_thread.nil? end } end |
#sync(sync_name = nil) ⇒ Object
121 122 123 124 125 126 |
# File 'lib/docker-sync/sync_manager.rb', line 121 def sync(sync_name = nil) init_sync_processes(sync_name) @sync_processes.each { |sync_process| sync_process.sync } end |
#upgrade_syncs_config ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/docker-sync/sync_manager.rb', line 49 def upgrade_syncs_config @config_syncs.each do |name, config| @config_syncs[name]['config_path'] = @config_path # [nbr] convert the sync src from relative to absolute path # preserve '/' as it may be significant to the sync cmd absolute_path = File.(@config_syncs[name]['src']) absolute_path << "/" if @config_syncs[name]['src'].end_with?("/") @config_syncs[name]['src'] = absolute_path @config_syncs[name]['cli_mode'] = @config_global['cli_mode'] || 'auto' # set the global verbose setting, if the sync-endpoint does not define a own one unless config.key?('verbose') @config_syncs[name]['verbose'] = false if @config_global.key?('verbose') @config_syncs[name]['verbose'] = @config_global['verbose'] end end # for each strategy check if a custom image has been defined and inject that into the sync-endpoints # which do fit for this strategy %w(rsync unison).each do |strategy| if config.key?("#{strategy}_image") && @config_syncs[name]['sync_strategy'] == strategy @config_syncs[name]['image'] = config["#{strategy}_image"] end end end end |
#validate_config(config) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/docker-sync/sync_manager.rb', line 79 def validate_config(config) unless config.key?('syncs') raise ('no syncs defined') end config['syncs'].each do |name, sync_config| validate_sync_config(name, sync_config) end return true end |
#validate_sync_config(name, sync_config) ⇒ Object
91 92 93 94 95 96 97 |
# File 'lib/docker-sync/sync_manager.rb', line 91 def validate_sync_config(name, sync_config) config_mandatory = %w[src dest] config_mandatory.push('sync_host_port') if sync_config['sync_strategy'] == 'rsync' #TODO: Implement autodisovery for other strategies config_mandatory.each do |key| raise ("#{name} does not have #{key} configuration value set - this is mandatory") unless sync_config.key?(key) end end |
#watch_start ⇒ Object
186 187 188 189 190 |
# File 'lib/docker-sync/sync_manager.rb', line 186 def watch_start @sync_processes.each { |sync_process| sync_process.watch } end |
#watch_stop ⇒ Object
180 181 182 183 184 |
# File 'lib/docker-sync/sync_manager.rb', line 180 def watch_stop @sync_processes.each { |sync_process| sync_process.watch_thread.kill unless sync_process.watch_thread.nil? } end |