dockerize_rails 1.1.0.beta.3 → 1.2.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -1
  3. data/{.travis.yml → .travis.example.yml} +0 -0
  4. data/README.md +51 -0
  5. data/docs/DockerizeRails/CommandLine.html +179 -0
  6. data/docs/DockerizeRails.html +127 -0
  7. data/docs/DockerizeRailsCLI.html +137 -0
  8. data/docs/_index.html +127 -0
  9. data/docs/class_list.html +51 -0
  10. data/docs/css/common.css +1 -0
  11. data/docs/css/full_list.css +58 -0
  12. data/docs/css/style.css +492 -0
  13. data/docs/file.README.html +185 -0
  14. data/docs/file_list.html +56 -0
  15. data/docs/frames.html +17 -0
  16. data/docs/index.html +185 -0
  17. data/docs/js/app.js +248 -0
  18. data/docs/js/full_list.js +216 -0
  19. data/docs/js/jquery.js +4 -0
  20. data/docs/method_list.html +59 -0
  21. data/docs/top-level-namespace.html +112 -0
  22. data/lib/dockerize_rails/command_line_methods.rb +27 -14
  23. data/lib/dockerize_rails/config_generator.rb +3 -3
  24. data/lib/dockerize_rails/constants.rb +22 -7
  25. data/lib/dockerize_rails/docker_commands/docker_build.rb +21 -6
  26. data/lib/dockerize_rails/docker_commands/docker_delete.rb +37 -0
  27. data/lib/dockerize_rails/docker_commands/docker_helpers.rb +81 -0
  28. data/lib/dockerize_rails/docker_commands/docker_options.rb +58 -0
  29. data/lib/dockerize_rails/docker_commands/docker_start.rb +106 -0
  30. data/lib/dockerize_rails/docker_commands/docker_stop.rb +43 -0
  31. data/lib/dockerize_rails/docker_commands.rb +39 -2
  32. data/lib/dockerize_rails/dr_config.rb +1 -1
  33. data/lib/dockerize_rails/helpers.rb +2 -1
  34. data/lib/dockerize_rails/version.rb +1 -1
  35. data/lib/dockerize_rails.rb +11 -0
  36. data/resources/.dockerignore.erb +1 -1
  37. metadata +25 -3
@@ -0,0 +1,37 @@
1
+ module DockerizeRails
2
+ module DockerCommands
3
+ module DockerDelete
4
+ def self.delete_rails
5
+ docker_delete DockerHelpers.get_name(:rails, :container)
6
+ end
7
+
8
+ def self.delete_mysql
9
+ if DRConfig.linked_database? && DRConfig.databases[DRConfig.application_env] == 'mysql'
10
+ return docker_delete DockerHelpers.get_name(:mysql, :container)
11
+ end
12
+ 0
13
+ end
14
+
15
+ def self.delete_postgres
16
+ if DRConfig.linked_database? && DRConfig.databases[DRConfig.application_env] == 'postgresql'
17
+ return docker_delete DockerHelpers.get_name(:postgres, :container)
18
+ end
19
+ 0
20
+ end
21
+
22
+ def self.docker_delete(container_name)
23
+ container = Docker::Container.get(container_name)
24
+ container.stop if container.info['State']['Running']
25
+ container.delete(:force => true)
26
+ puts "Container >#{container_name}< deleted successfully.".green
27
+ 0
28
+ rescue Docker::Error::NotFoundError => exception
29
+ puts exception.to_s.strip.red
30
+ 1
31
+ end
32
+ class << self
33
+ private :docker_delete
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,81 @@
1
+ module DockerizeRails
2
+ module DockerCommands
3
+ module DockerHelpers
4
+ NAMES = {
5
+ image: {
6
+ suffix: ":#{DRConfig.application_env}",
7
+ rails: "#{DRConfig.application_name}_rails".freeze,
8
+ mysql: "#{DRConfig.application_name}_mysql".freeze,
9
+ postgres: "#{DRConfig.application_name}_postgres".freeze
10
+ }.freeze,
11
+ container: {
12
+ suffix: '',
13
+ rails: "#{DRConfig.application_name}_rails_container".freeze,
14
+ mysql: "#{DRConfig.application_name}_mysql_container".freeze,
15
+ postgres: "#{DRConfig.application_name}_postgres_container".freeze
16
+ }.freeze
17
+ }.freeze
18
+
19
+ def self.get_name(service, type)
20
+ "#{NAMES[type][service]}#{NAMES[type][:suffix]}".freeze
21
+ end
22
+
23
+ def self.services_from_docker_compose
24
+ docker_compose = YAML.load_file "#{PATHS.current}/docker-compose.yml"
25
+ docker_compose['services']
26
+ end
27
+
28
+ def self.recurse_merge(first, second)
29
+ first.merge(second) do |_, first_element, second_element|
30
+ if first_element.is_a?(Hash) && second_element.is_a?(Hash)
31
+ recurse_merge(first_element, second_element)
32
+ else
33
+ [*first_element, *second_element]
34
+ end
35
+ end
36
+ end
37
+
38
+ # rubocop:disable Metrics/AbcSize
39
+ # rubocop:disable Metrics/MethodLength
40
+ def self.build_options(definitions, service)
41
+ options = DockerOptions.new
42
+ options.image get_name(service, :image)
43
+ options.name get_name(service, :container)
44
+ options.hostname '0.0.0.0'
45
+ definitions['expose'].each {|expose| options.expose expose} if definitions.key?('expose')
46
+ definitions['environment'].each {|env| options.add_env env} if definitions.key?('environment')
47
+ if definitions.key?('ports')
48
+ definitions['ports'].each do |ports|
49
+ options.add_port_binds(ports.split(':')[1], ports.split(':')[0])
50
+ end
51
+ end
52
+ if definitions.key?('links')
53
+ definitions['links'].each do |link|
54
+ options.add_links(get_name(link.split(':')[0].to_sym, :container), link.split(':')[1])
55
+ end
56
+ end
57
+ options.options
58
+ end
59
+ # rubocop:enable Metrics/AbcSize
60
+ # rubocop:enable Metrics/MethodLength
61
+
62
+ def self.print_version
63
+ docker_version = Docker.version
64
+
65
+ Helpers.print_formatted_info('Docker Version', "#{docker_version['Version']}\n")
66
+ Helpers.print_formatted_info(
67
+ 'API',
68
+ "#{docker_version['ApiVersion']} : #{docker_version['MinAPIVersion']}\n"
69
+ )
70
+ Helpers.print_formatted_info('Git Commit', "#{docker_version['GitCommit']}\n")
71
+ Helpers.print_formatted_info('Go Version', "#{docker_version['GoVersion']}\n")
72
+ # Helpers.print_formatted_info('OS', "#{v['Os']}_#{v['Arch']}_#{v['KernelVersion']}\n")
73
+ Helpers.print_formatted_info('Experimental', "#{docker_version['Experimental']}\n")
74
+ Helpers.print_formatted_info(
75
+ 'Build Time',
76
+ "#{DateTime.parse(docker_version['BuildTime']).strftime('%b %d, %Y %I:%M %p')}\n"
77
+ )
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,58 @@
1
+ module DockerizeRails
2
+ module DockerCommands
3
+ class DockerOptions
4
+ def initialize
5
+ @options = {
6
+ 'Image' => '',
7
+ 'name' => '',
8
+ 'Hostname' => '0.0.0.0',
9
+ 'ExposedPorts' => {},
10
+ 'Env' => [],
11
+ 'HostConfig' => {
12
+ 'PortBindings' => {},
13
+ 'Links' => []
14
+ }
15
+ }
16
+ end
17
+
18
+ def image(image)
19
+ @options['Image'] = image
20
+ end
21
+
22
+ def name(name)
23
+ @options['name'] = name
24
+ end
25
+
26
+ def hostname(hostname)
27
+ @options['Hostname'] = hostname
28
+ end
29
+
30
+ def expose(port)
31
+ @options['ExposedPorts']["#{port}/tcp"] = {}
32
+ @options['HostConfig']['PortBindings']["#{port}/tcp"] = [{'HostPort' => port}]
33
+ end
34
+
35
+ def add_port_binds(container, host)
36
+ @options['HostConfig']['PortBindings']["#{container}/tcp"] = [{'HostPort' => host}]
37
+ end
38
+
39
+ def add_env(env)
40
+ @options['Env'] << env
41
+ end
42
+
43
+ def add_links(container, alias_name)
44
+ @options['HostConfig']['Links'] << "#{container}:#{alias_name}"
45
+ end
46
+
47
+ def options
48
+ deep_copy @options
49
+ end
50
+
51
+ private
52
+
53
+ def deep_copy(o)
54
+ Marshal.load(Marshal.dump(o))
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,106 @@
1
+ module DockerizeRails
2
+ module DockerCommands
3
+ module DockerStart
4
+ def self.start_rails
5
+ services = DockerHelpers.services_from_docker_compose
6
+ begin
7
+ container = Docker::Container.get(DockerHelpers.get_name(:rails, :container))
8
+ if container.info['State']['Running']
9
+ puts " ==> Container >#{DockerHelpers.get_name(:rails, :container)}< already running.".yellow
10
+ else
11
+ docker_start_container(container, services['rails'], :rails)
12
+ puts " ==> Container >#{DockerHelpers.get_name(:rails, :container)}< started successfully".green
13
+ end
14
+ 0
15
+ rescue Docker::Error::NotFoundError
16
+ services.key?('rails') && docker_start(services['rails'], :rails)
17
+ puts " ==> Container >#{DockerHelpers.get_name(:rails, :container)}< started successfully".green
18
+ 0
19
+ rescue Docker::Error::NotFoundError => exception
20
+ puts
21
+ puts exception.to_s.red
22
+ puts
23
+ 1
24
+ end
25
+ end
26
+
27
+ def self.start_mysql
28
+ return 0 unless DRConfig.linked_database? && DRConfig.databases[DRConfig.application_env] == 'mysql'
29
+ services = DockerHelpers.services_from_docker_compose
30
+ begin
31
+ container = Docker::Container.get(DockerHelpers.get_name(:mysql, :container))
32
+ if container.info['State']['Running']
33
+ puts " ==> Container >#{DockerHelpers.get_name(:mysql, :container)}< already running.".yellow
34
+ else
35
+ docker_start_container(container, services['mysql'], :mysql)
36
+ puts " ==> Container >#{DockerHelpers.get_name(:mysql, :container)}< started successfully".green
37
+ end
38
+ 0
39
+ rescue Docker::Error::NotFoundError
40
+ services.key?('mysql') && docker_start(services['mysql'], :mysql)
41
+ puts " ==> Container >#{DockerHelpers.get_name(:mysql, :container)}< started successfully".green
42
+ 0
43
+ rescue Docker::Error::NotFoundError => exception
44
+ puts
45
+ puts exception.to_s.red
46
+ puts
47
+ 1
48
+ end
49
+ end
50
+
51
+ def self.start_postgres
52
+ return 0 unless DRConfig.linked_database? && DRConfig.databases[DRConfig.application_env] == 'postgresql'
53
+ services = DockerHelpers.services_from_docker_compose
54
+ begin
55
+ container = Docker::Container.get(DockerHelpers.get_name(:postgres, :container))
56
+ if container.info['State']['Running']
57
+ puts " ==> Container >#{DockerHelpers.get_name(:postgres, :container)}< already running.".yellow
58
+ else
59
+ docker_start_container(container, services['postgresql'], :postgres)
60
+ puts " ==> Container >#{DockerHelpers.get_name(:postgres, :container)}< started successfully".green
61
+ end
62
+ 0
63
+ rescue Docker::Error::NotFoundError
64
+ services.key?('postgresql') && docker_start(services['postgresql'], :postgres)
65
+ puts " ==> Container >#{DockerHelpers.get_name(:postgres, :container)}< started successfully".green
66
+ 0
67
+ rescue Docker::Error::NotFoundError => exception
68
+ puts
69
+ puts exception.to_s.red
70
+ puts
71
+ 1
72
+ end
73
+ end
74
+
75
+ def self.docker_start_container(container, definitions, service)
76
+ options = DockerCommands::DockerHelpers.build_options(definitions, service)
77
+ container.start(options)
78
+ end
79
+
80
+ # rubocop:disable Metrics/AbcSize
81
+ def self.docker_start(definitions, service)
82
+ options = DockerHelpers.build_options(definitions, service)
83
+ container = Docker::Container.create options
84
+ binds =
85
+ if definitions.key? 'volumes'
86
+ { 'Binds' => definitions['volumes'].map do |volume|
87
+ [if volume.split(':')[0].start_with?('/')
88
+ volume.split(':')[0]
89
+ else
90
+ File.join(PATHS.current, volume.split(':')[0])
91
+ end,
92
+ volume.split(':')[1],
93
+ volume.length > 2 ? volume.split(':')[2] : 'rw'].join(':')
94
+ end }
95
+ end
96
+ container.start binds
97
+ end
98
+ # rubocop:enable Metrics/AbcSize
99
+
100
+ class << self
101
+ private :docker_start
102
+ private :docker_start_container
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,43 @@
1
+ module DockerizeRails
2
+ module DockerCommands
3
+ module DockerStop
4
+ def self.stop_rails
5
+ docker_stop DockerHelpers.get_name(:rails, :container)
6
+ end
7
+
8
+ def self.stop_mysql
9
+ if DRConfig.linked_database? && DRConfig.databases[DRConfig.application_env] == 'mysql'
10
+ return docker_stop DockerHelpers.get_name(:mysql, :container)
11
+ end
12
+ 0
13
+ end
14
+
15
+ def self.stop_postgres
16
+ if DRConfig.linked_database? && DRConfig.databases[DRConfig.application_env] == 'postgresql'
17
+ return docker_stop DockerHelpers.get_name(:postgres, :container)
18
+ end
19
+ 0
20
+ end
21
+
22
+ def self.docker_stop(container_name)
23
+ container = Docker::Container.get(container_name)
24
+ if container.info['State']['Running']
25
+ container.stop
26
+ container.delete(:force => true) if DRNameSpace.namespace.delete_containers
27
+ puts "Container >#{container_name}< stopped successfully.".green
28
+ puts "Container >#{container_name}< deleted successfully.".green if DRNameSpace.namespace.delete_containers
29
+ else
30
+ puts "Container >#{container_name}< is not running.".blue
31
+ end
32
+ 0
33
+ rescue Docker::Error::NotFoundError => exception
34
+ puts exception.to_s.strip.red
35
+ 1
36
+ end
37
+
38
+ class << self
39
+ private :docker_stop
40
+ end
41
+ end
42
+ end
43
+ end
@@ -2,8 +2,10 @@ module DockerizeRails
2
2
  module DockerCommands
3
3
  require 'docker'
4
4
 
5
- def self.version
6
- Docker.version
5
+ def self.info
6
+ puts
7
+ DockerHelpers.print_version
8
+ puts
7
9
  end
8
10
 
9
11
  def self.pull
@@ -31,5 +33,40 @@ module DockerizeRails
31
33
  puts
32
34
  1
33
35
  end
36
+
37
+ def self.start
38
+ status = 0
39
+ status += DockerStart.start_mysql
40
+ status += DockerStart.start_postgres
41
+ status += DockerStart.start_rails
42
+ status
43
+ rescue Docker::Error::NotFoundError => exception
44
+ puts
45
+ puts exception.to_s.red
46
+ puts
47
+ 1
48
+ end
49
+
50
+ def self.stop
51
+ status = 0
52
+ status += DockerStop.stop_rails
53
+ status += DockerStop.stop_mysql
54
+ status += DockerStop.stop_postgres
55
+ status
56
+ rescue Docker::Error::NotFoundError => exception
57
+ puts exception.to_s.strip.red
58
+ 1
59
+ end
60
+
61
+ def self.delete
62
+ status = 0
63
+ status += DockerDelete.delete_rails
64
+ status += DockerDelete.delete_mysql
65
+ status += DockerDelete.delete_postgres
66
+ status
67
+ rescue Docker::Error::NotFoundError => exception
68
+ puts exception.to_s.strip.red
69
+ 1
70
+ end
34
71
  end
35
72
  end
@@ -25,7 +25,7 @@ module DockerizeRails
25
25
  @databases = {}
26
26
 
27
27
  def self.load_dockerize_rails_config
28
- dockerize_rails_config_file = File.join(PATHS.current, Constants::DOCKERIZE_RAILS_CONFIG_FILE_NAME)
28
+ dockerize_rails_config_file = File.join(PATHS.current, Constants::CONFIG_FILE_NAME)
29
29
  if File.exist? dockerize_rails_config_file
30
30
  dockerize_rails_config = YAML.load_file(dockerize_rails_config_file)
31
31
  ATTRIBUTES.each do |attr|
@@ -15,6 +15,7 @@ module DockerizeRails
15
15
  opts.on('--tiny') { options[:tiny] = true }
16
16
  opts.on('--purge') { options[:purge] = true }
17
17
  opts.on('--test-env') { options[:test_env] = true }
18
+ opts.on('--delete') { options[:delete_containers] = true }
18
19
  end
19
20
  parser.parse!
20
21
  [ARGV[0].to_s, args: options]
@@ -43,7 +44,7 @@ module DockerizeRails
43
44
  # -rubocop:disable Metrics/AbcSize
44
45
  def self.help
45
46
  ['
46
- Usage: rocker <command>
47
+ Usage: dock <command>
47
48
  or: bundle exec dock <command>
48
49
 
49
50
  commands:
@@ -1,3 +1,3 @@
1
1
  module DockerizeRails
2
- VERSION = '1.1.0.beta.3'.freeze
2
+ VERSION = '1.2.0.beta.1'.freeze
3
3
  end
@@ -7,8 +7,13 @@ require 'dockerize_rails/dr_config'
7
7
  require 'dockerize_rails/config_loader'
8
8
  require 'dockerize_rails/dr_name_space'
9
9
  require 'dockerize_rails/config_generator'
10
+ require 'dockerize_rails/docker_commands/docker_options'
11
+ require 'dockerize_rails/docker_commands/docker_helpers'
10
12
  require 'dockerize_rails/docker_commands/docker_pull'
11
13
  require 'dockerize_rails/docker_commands/docker_build'
14
+ require 'dockerize_rails/docker_commands/docker_start'
15
+ require 'dockerize_rails/docker_commands/docker_stop'
16
+ require 'dockerize_rails/docker_commands/docker_delete'
12
17
  require 'dockerize_rails/docker_commands'
13
18
  require 'dockerize_rails/command_line_methods'
14
19
  require 'dockerize_rails/command_line'
@@ -23,10 +28,16 @@ module DockerizeRails
23
28
  private_constant :Constants
24
29
  private_constant :Templates
25
30
  private_constant :CommandLineMethods
31
+ private_constant :DockerCommands
26
32
 
27
33
  module DockerCommands
28
34
  private_constant :DockerPull
29
35
  private_constant :DockerBuild
36
+ private_constant :DockerStart
37
+ private_constant :DockerStop
38
+ private_constant :DockerDelete
39
+ private_constant :DockerHelpers
40
+ private_constant :DockerOptions
30
41
  end
31
42
  end
32
43
 
@@ -14,7 +14,7 @@ config/database.yml
14
14
  public/uploads
15
15
  public/assets
16
16
 
17
- <%= Constants::DOCKERIZE_RAILS_CONFIG_FILE_NAME %>
17
+ <%= Constants::CONFIG_FILE_NAME %>
18
18
  <%= Constants::DOCKER_COMPOSE_FILE_NAME %>
19
19
  <%= Constants::DOCKERIGNORE_FILE_NAME %>
20
20
  <%= Constants::SHELL_SCRIPT_FILE_NAME %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockerize_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0.beta.3
4
+ version: 1.2.0.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - indrajit
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-06 00:00:00.000000000 Z
11
+ date: 2017-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docker-api
@@ -119,7 +119,7 @@ files:
119
119
  - ".reek"
120
120
  - ".rspec"
121
121
  - ".rubocop.yml"
122
- - ".travis.yml"
122
+ - ".travis.example.yml"
123
123
  - CODE_OF_CONDUCT.md
124
124
  - CONTRIBUTORS.md
125
125
  - Gemfile
@@ -130,6 +130,23 @@ files:
130
130
  - bin/setup
131
131
  - config/database.yml
132
132
  - dockerize_rails.gemspec
133
+ - docs/DockerizeRails.html
134
+ - docs/DockerizeRails/CommandLine.html
135
+ - docs/DockerizeRailsCLI.html
136
+ - docs/_index.html
137
+ - docs/class_list.html
138
+ - docs/css/common.css
139
+ - docs/css/full_list.css
140
+ - docs/css/style.css
141
+ - docs/file.README.html
142
+ - docs/file_list.html
143
+ - docs/frames.html
144
+ - docs/index.html
145
+ - docs/js/app.js
146
+ - docs/js/full_list.js
147
+ - docs/js/jquery.js
148
+ - docs/method_list.html
149
+ - docs/top-level-namespace.html
133
150
  - exe/dock
134
151
  - lib/dockerize_rails.rb
135
152
  - lib/dockerize_rails/command_line.rb
@@ -139,7 +156,12 @@ files:
139
156
  - lib/dockerize_rails/constants.rb
140
157
  - lib/dockerize_rails/docker_commands.rb
141
158
  - lib/dockerize_rails/docker_commands/docker_build.rb
159
+ - lib/dockerize_rails/docker_commands/docker_delete.rb
160
+ - lib/dockerize_rails/docker_commands/docker_helpers.rb
161
+ - lib/dockerize_rails/docker_commands/docker_options.rb
142
162
  - lib/dockerize_rails/docker_commands/docker_pull.rb
163
+ - lib/dockerize_rails/docker_commands/docker_start.rb
164
+ - lib/dockerize_rails/docker_commands/docker_stop.rb
143
165
  - lib/dockerize_rails/dr_config.rb
144
166
  - lib/dockerize_rails/dr_name_space.rb
145
167
  - lib/dockerize_rails/helpers.rb