Class: Service
Class Method Summary
collapse
Instance Method Summary
collapse
#attach_network, #create_instance, #create_network, #create_volume, #delete_volume, #dettach_network, #execute_local, #inspect_instance, #inspect_volume, #network_exists?, #remove_instance, #remove_network, #start_instance, #stop_instance
#parse_model, #parse_template, #read_template
Class Method Details
.create(yaml) ⇒ Object
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/mkit/app/model/service.rb', line 33
def self.create(yaml)
config = yaml["service"]
raise MKIt::ServiceAlreadyExists.new unless Service.find_by_name(config.name).nil?
srv = Service.new(
name: config.name,
version: 1,
image: config.image,
command: config.command,
status: MKIt::Status::CREATING
)
srv.lease = Pool.find_by_name(MKIt::Utils.me).reserve_for(srv)
srv.dns_host = DnsHost.new(
service: srv,
name: srv.name,
ip: srv.lease.ip
)
srv.deploy_network
srv.configure(config)
srv.status = MKIt::Status::CREATED
srv.save
data = { service_id: srv.id, version: srv.version }
(1..srv.min_replicas).each { |i|
MkitJob.publish(topic: :create_pod_saga, service_id: srv.id, data: data)
}
srv
end
|
Instance Method Details
#add_service_config(key, value) ⇒ Object
145
146
147
148
149
|
# File 'lib/mkit/app/model/service.rb', line 145
def add_service_config(key, value)
v = ServiceConfig.create(service: self, key: key, value: value)
self.service_config << v
v
end
|
#add_volume(volume_config) ⇒ Object
139
140
141
142
143
|
# File 'lib/mkit/app/model/service.rb', line 139
def add_volume(volume_config)
v = Volume.create(self, volume_config)
self.volume << v
v
end
|
#as_json(options = {}) ⇒ Object
236
237
238
239
240
241
242
243
244
245
246
|
# File 'lib/mkit/app/model/service.rb', line 236
def as_json(options = {})
srv = super
a=[:pod, :volume, :service_config, :service_port]
a.each { | k |
srv[k] ||= []
self.send(k).each { |v|
srv[k] << v.as_json
}
}
srv
end
|
#clean_up ⇒ Object
215
216
217
218
219
|
# File 'lib/mkit/app/model/service.rb', line 215
def clean_up
my_addr = self.lease.ip.split('.')[3]
filename = "#{'%04i' % my_addr.to_i}_#{self.name}.cfg"
MkitJob.publish(topic: :destroy_proxy_config, data: {filename: filename})
end
|
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/mkit/app/model/service.rb', line 70
def configure(config)
self.image = config.image if config.image != self.image
self.command = config.command if config.command != self.command
unless config.resources.nil?
self.max_replicas = config.resources.max_replicas unless config.resources.max_replicas.nil? || config.resources.max_replicas < 1
self.min_replicas = config.resources.min_replicas unless config.resources.min_replicas.nil? || config.resources.min_replicas < 1
else
self.min_replicas = 1
self.max_replicas = 1
end
self.max_replicas = self.min_replicas if self.min_replicas > self.max_replicas
if config.network.nil? || config.network.empty?
self.pods_network="mkit"
else
self.pods_network=config.network
end
self.create_pods_network
self.service_port = []
config.ports&.each do |p|
port = ServicePort.create(service: self, config: p)
self.service_port << port
end
self.volume = []
config.volumes&.each { |volume|
self.add_volume(volume)
}
self.service_config=[]
config.environment&.each_pair { |key,value|
self.add_service_config(key, value)
}
self.volume.each { | volume |
volume.deploy
}
end
|
#create_pods_network ⇒ Object
129
130
131
|
# File 'lib/mkit/app/model/service.rb', line 129
def create_pods_network
create_network(self.pods_network) if !network_exists?(self.pods_network)
end
|
#current_configs ⇒ Object
151
152
153
|
# File 'lib/mkit/app/model/service.rb', line 151
def current_configs
self.service_config&.select{ |x| x.ctype == MKIt::CType::ENVIRONMENT.to_s && x.version == self.version}
end
|
#current_ports ⇒ Object
155
156
157
|
# File 'lib/mkit/app/model/service.rb', line 155
def current_ports
self.service_port&.select{ |x| x.version == self.version}
end
|
#deploy_network ⇒ Object
133
134
135
136
137
|
# File 'lib/mkit/app/model/service.rb', line 133
def deploy_network
self.lease.confirm
self.lease.up
end
|
#my_dns ⇒ Object
159
160
161
|
# File 'lib/mkit/app/model/service.rb', line 159
def my_dns
MKIt::Interface.ip
end
|
#parse ⇒ Object
211
212
213
|
# File 'lib/mkit/app/model/service.rb', line 211
def parse
parse_model(MKIt::Templates::HAPROXY).result(binding)
end
|
#proxy_config ⇒ Object
202
203
204
205
206
207
208
209
|
# File 'lib/mkit/app/model/service.rb', line 202
def proxy_config
haproxy = parse
my_addr = self.lease.ip.split('.')[3]
filename = "#{'%04i' % my_addr.to_i}_#{self.name}.cfg"
MKItLogger.debug("haproxy config file: #{filename}")
{filename: filename, data: haproxy}
end
|
#start ⇒ Object
224
225
226
227
228
|
# File 'lib/mkit/app/model/service.rb', line 224
def start
self.pod.each { |p|
MkitJob.publish(topic: :start_pod, service_id: self.id, pod_id: p.id)
}
end
|
#stop ⇒ Object
230
231
232
233
234
|
# File 'lib/mkit/app/model/service.rb', line 230
def stop
self.pod.each { |p|
MkitJob.publish(topic: :stop_pod, service_id: self.id, pod_id: p.id)
}
end
|
#update!(yaml) ⇒ Object
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
# File 'lib/mkit/app/model/service.rb', line 113
def update!(yaml)
config = yaml["service"]
raise MKIt::ServiceNameMismatch.new unless config.name == self.name
self.version+=1
self.configure(config)
self.pod.each { |pod| MkitJob.publish(topic: :destroy_pod, pod_id: pod.id, data: {}) }
data = { service_id: self.id, version: self.version }
(1..self.min_replicas).each { |i|
MkitJob.publish(topic: :create_pod_saga, service_id: self.id, data: data)
}
self.save
end
|
#update_proxy ⇒ Object
ha proxy configs & template
198
199
200
|
# File 'lib/mkit/app/model/service.rb', line 198
def update_proxy
MkitJob.publish(topic: :update_proxy_config, application_id: self.id, data: proxy_config)
end
|