Class: PicsolveDockerBuilder::Composer::Composer
- Inherits:
-
Object
- Object
- PicsolveDockerBuilder::Composer::Composer
show all
- Includes:
- Base
- Defined in:
- lib/picsolve_docker_builder/composer/composer.rb
Overview
The composer parses a docker-compose.yml and tries to spin up the containers in a kubernetes cluster
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Base
#config, #config_file, #config_path, #config_paths, #create_logger, #log, #read_config, #validate_config
Constructor Details
Returns a new instance of Composer.
17
18
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 17
def initialize
end
|
Instance Attribute Details
#stage ⇒ Object
Returns the value of attribute stage.
15
16
17
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 15
def stage
@stage
end
|
Instance Method Details
#app_name ⇒ Object
28
29
30
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 28
def app_name
config['compose']['app_name'].downcase.gsub(/[^a-z0-9\-]/, '-')
end
|
#base_dir ⇒ Object
108
109
110
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 108
def base_dir
Dir.pwd
end
|
#cleanup ⇒ Object
58
59
60
61
62
63
64
65
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 58
def cleanup
kubernetes_clusters.each do |cluster|
begin
log.info "Cleanup kubernetes cluster #{cluster.host}"
cluster.cleanup
end
end
end
|
#default_config ⇒ Object
40
41
42
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 40
def default_config
{ 'compose' => {} }
end
|
#deploy ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 67
def deploy
errors = 0
kubernetes_clusters.each do |cluster|
begin
log.info "Deploy to kubernetes cluster #{cluster.host}"
cluster.deploy
cluster.stop
rescue StandardError => e
errors += 1
log.error "Failed deployment to kubernetes cluster: #{e}"
e.backtrace.each do |line|
log.error line
end
end
end
fail 'deployment to at least one cluster failed' if errors > 0
end
|
#docker_compose ⇒ Object
104
105
106
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 104
def docker_compose
@docker_compose ||= read_docker_compose
end
|
#docker_compose_path ⇒ Object
112
113
114
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 112
def docker_compose_path
File.join(base_dir, 'docker-compose.yml')
end
|
#hash ⇒ Object
36
37
38
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 36
def hash
@hash ||= SecureRandom.hex[0..7]
end
|
#images ⇒ Object
44
45
46
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 44
def images
@images ||= read_images
end
|
#kubernetes_clusters ⇒ Object
48
49
50
51
52
53
54
55
56
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 48
def kubernetes_clusters
config['compose']['clusters'].map do |cluster|
PicsolveDockerBuilder::Helpers::KubernetesManager.new(
self,
cluster,
:ssh_forward, )
end
end
|
#namespace ⇒ Object
32
33
34
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 32
def namespace
"#{app_name}-#{stage}".downcase
end
|
#prepare ⇒ Object
20
21
22
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 20
def prepare
images
end
|
#query_registry ⇒ Object
124
125
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 124
def query_registry
end
|
#read_docker_compose ⇒ Object
116
117
118
119
120
121
122
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 116
def read_docker_compose
path = docker_compose_path
Psych.load_file path
rescue Errno::ENOENT
log.debug "can not find docker-compose.yml at '#{path}'"
nil
end
|
#read_images ⇒ Object
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/picsolve_docker_builder/composer/composer.rb', line 85
def read_images
containers = docker_compose
unless containers.nil?
i = []
containers.each do |name, config|
i << Container.new(name, config, self)
end
return i
end
c = PicsolveDockerBuilder::Helpers::ConfigManager.new(
config_paths,
stage
)
c.containers(self)
end
|