Class: Superhosting::Controller::Container
- Inherits:
-
Base
- Object
- Base
- Base
- Superhosting::Controller::Container
show all
- Includes:
- Helper::States
- Defined in:
- lib/superhosting/controller/container.rb,
lib/superhosting/controller/container/admin.rb,
lib/superhosting/controller/container/states.rb
Defined Under Namespace
Classes: Admin
Constant Summary
collapse
- CONTAINER_NAME_FORMAT =
/^[a-zA-Z0-9][a-zA-Z0-9_.-]+$/
Instance Attribute Summary
Attributes inherited from Base
#config, #lib
Instance Method Summary
collapse
-
#_collect_docker_options(mapper:, model_or_mux: nil) ⇒ Object
-
#_config_options(name:, on_reconfig:, on_config:) ⇒ Object
-
#_delete_docker(name:) ⇒ Object
-
#_each_site(name:) ⇒ Object
-
#_list ⇒ Object
-
#_reconfigure(name:, **kwargs) ⇒ Object
-
#_recreate_docker(*docker_options, name:) ⇒ Object
-
#_run_docker(*docker_options, name:) ⇒ Object
-
#_safe_run_docker(*docker_options, name:, restart: false) ⇒ Object
-
#add(name:, mail: 'model', admin_mail: nil, model: nil) ⇒ Object
-
#adding_validation(name:) ⇒ Object
-
#admin(name:) ⇒ Object
-
#apply(name:) ⇒ Object
-
#available_validation(name:) ⇒ Object
-
#base_validation(name:) ⇒ Object
-
#change(name:, mail: 'model', admin_mail: nil, model: nil) ⇒ Object
-
#configure(name:) ⇒ Object
-
#configure_with_apply(name:) ⇒ Object
-
#data(name) ⇒ Object
-
#delete(name:) ⇒ Object
-
#existing_validation(name:) ⇒ Object
-
#index ⇒ Object
-
#initialize(**kwargs) ⇒ Container
constructor
A new instance of Container.
-
#inspect(name:) ⇒ Object
-
#install_data(name:, mail: 'model', admin_mail: nil, model: nil) ⇒ Object
-
#install_users(name:) ⇒ Object
-
#list ⇒ Object
-
#not_existing_validation(name:) ⇒ Object
-
#not_running_validation(name:) ⇒ Object
-
#reconfigure(name:) ⇒ Object
-
#reindex ⇒ Object
-
#reindex_container(name:) ⇒ Object
-
#rename(name:, new_name:) ⇒ Object
-
#restore(name:, from:, mail: 'model', admin_mail: nil, model: nil) ⇒ Object
-
#run(name:) ⇒ Object
-
#run_mux(name:) ⇒ Object
-
#running_validation(name:) ⇒ Object
-
#save(name:, to:) ⇒ Object
-
#stop(name:) ⇒ Object
-
#stop_mux(name:) ⇒ Object
-
#unconfigure(name:) ⇒ Object
-
#uninstall_data(name:) ⇒ Object
-
#uninstall_users(name:) ⇒ Object
-
#update(name:) ⇒ Object
#method_options, #on_state, #set_state, #state
Methods inherited from Base
#repair
Methods inherited from Base
#get_base_controller_options, #get_controller
Methods included from Helpers
#instance_variables_to_hash
#_config, #_save_registry!, #reconfig, #unapply, #unconfigure_with_unapply
#_command, #_command_without_debug, #command, #command!
#chmod!, #chown!, #chown_r!, #safe_link!, #safe_unlink!
#__debug, #__dry_run, #__dry_run=, #__logger, #__logger=, #debug, #debug_block, #debug_operation, #indent, #indent=, #indent_reset, #indent_step, #indent_step_back, #info, #storage, #t, #with_dry_run, #with_indent, #with_logger
Constructor Details
#initialize(**kwargs) ⇒ Container
Returns a new instance of Container.
6
7
8
9
|
# File 'lib/superhosting/controller/container.rb', line 6
def initialize(**kwargs)
super
self.index
end
|
Instance Method Details
#_collect_docker_options(mapper:, model_or_mux: nil) ⇒ Object
273
274
275
276
277
278
279
280
281
282
283
284
285
286
|
# File 'lib/superhosting/controller/container/states.rb', line 273
def _collect_docker_options(mapper:, model_or_mux: nil)
model_or_mux ||= mapper.f('model', default: @config.default_model)
return { error: :input_error, code: :no_docker_image_specified_in_model_or_mux, data: { name: model_or_mux } } if (image = mapper.docker.image).nil?
all_options = mapper.docker.grep_files.map {|n| [n.name[/(.*(?=\.erb))|(.*)/].to_sym, n.value] }.to_h
return { error: :logical_error, code: :docker_command_not_found } if (command = all_options[:command]).nil?
command_options = @docker_api.grab_container_options(all_options)
volume_opts = []
mapper.docker.f('volume', overlay: false).each {|v| volume_opts += v.lines unless v.nil? }
volume_opts.each {|val| command_options << "--volume #{val}" }
{ data: [command_options, image, command] }
end
|
#_config_options(name:, on_reconfig:, on_config:) ⇒ Object
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
|
# File 'lib/superhosting/controller/container/states.rb', line 212
def _config_options(name:, on_reconfig:, on_config:)
mapper = self.index[name][:mapper]
model = mapper.model(default: @config.default_model)
model_mapper = @config.models.f(:"#{model}")
registry_mapper = mapper.lib.registry.f('container')
mux_mapper = self.index[name][:mux_mapper]
{
container: mapper,
mux: mux_mapper,
model: model_mapper,
registry_mapper: registry_mapper,
on_reconfig: on_reconfig,
on_config: on_config,
etc: @config,
lib: @lib,
docker_api: @docker_api
}
end
|
#_delete_docker(name:) ⇒ Object
232
233
234
235
236
237
238
|
# File 'lib/superhosting/controller/container/states.rb', line 232
def _delete_docker(name:)
if @docker_api.container_exists?(name)
@docker_api.container_unpause!(name) if @docker_api.container_paused?(name)
@docker_api.container_kill!(name)
@docker_api.container_rm!(name)
end
end
|
#_each_site(name:) ⇒ Object
288
289
290
291
292
293
|
# File 'lib/superhosting/controller/container/states.rb', line 288
def _each_site(name:)
site_controller = self.get_controller(Superhosting::Controller::Site)
site_controller._list(container_name: name).each do |site_name, data|
yield site_controller, site_name, data[:state]
end
end
|
#_list ⇒ Object
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/superhosting/controller/container.rb', line 21
def _list
def data(name)
mapper = self.index[name][:mapper]
docker_options = mapper.docker.grep_files.map {|f| [f.name, f.value] }.to_h
configs = mapper.f('config.rb', overlay: false).reverse.map {|f| f.value }
{ docker: docker_options, configs: configs }
end
containers = {}
@config.containers.grep_dirs.map do |n|
name = n.name
user_controller = self.get_controller(User)
containers[name] = {
state: self.state(name: name).value,
users: user_controller._list(container_name: name),
admins: self.admin(name: name)._list
}.merge(data(name)) if self.index.key? name and self.index[name][:mapper].lib.state.file?
end
containers
end
|
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
# File 'lib/superhosting/controller/container.rb', line 139
def _reconfigure(name:, **kwargs)
lib_mapper = @lib.containers.f(name)
states = {
none: { action: :install_data, undo: :uninstall_data, next: :data_installed },
data_installed: { action: :install_users, undo: :uninstall_users, next: :users_installed },
users_installed: { action: :run_mux, undo: :stop_mux, next: :mux_runned },
mux_runned: { action: :configure_with_apply, undo: :unconfigure_with_unapply, next: :configuration_applied },
configuration_applied: { action: :run, undo: :stop, next: :up }
}
self.on_state(state_mapper: lib_mapper, states: states,
name: name, **kwargs)
end
|
#_recreate_docker(*docker_options, name:) ⇒ Object
240
241
242
243
244
|
# File 'lib/superhosting/controller/container/states.rb', line 240
def _recreate_docker(*docker_options, name:)
docker_options ||= self._collect_docker_options(mapper: self.index[name][:mapper]).net_status_ok!
self._delete_docker(name: name)
self._run_docker(*docker_options, name: name)
end
|
#_run_docker(*docker_options, name:) ⇒ Object
246
247
248
249
|
# File 'lib/superhosting/controller/container/states.rb', line 246
def _run_docker(*docker_options, name:)
docker_options = self._collect_docker_options(mapper: self.index[name][:mapper]).net_status_ok![:data] if docker_options.empty?
@docker_api.container_run(name, *docker_options)
end
|
#_safe_run_docker(*docker_options, name:, restart: false) ⇒ Object
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
|
# File 'lib/superhosting/controller/container/states.rb', line 251
def _safe_run_docker(*docker_options, name:, restart: false)
if restart
self._recreate_docker(*docker_options, name: name)
elsif @docker_api.container_exists?(name)
if @docker_api.container_dead?(name)
self._recreate_docker(*docker_options, name: name)
elsif @docker_api.container_exited?(name)
@docker_api.container_start!(name)
elsif @docker_api.container_paused?(name)
@docker_api.container_unpause!(name)
elsif @docker_api.container_restarting?(name)
Polling.start 10 do
break unless @docker_api.container_restarting?(name)
sleep 2
end
end
else
self._run_docker(*docker_options, name: name)
end
self.running_validation(name: name)
end
|
#add(name:, mail: 'model', admin_mail: nil, model: nil) ⇒ Object
50
51
52
53
|
# File 'lib/superhosting/controller/container.rb', line 50
def add(name:, mail: 'model', admin_mail: nil, model: nil)
resp = self._reconfigure(name: name, mail: mail, admin_mail: admin_mail, model: model) if (resp = self.not_existing_validation(name: name)).net_status_ok?
resp
end
|
#adding_validation(name:) ⇒ Object
171
172
173
174
175
176
|
# File 'lib/superhosting/controller/container.rb', line 171
def adding_validation(name:)
if (resp = self.base_validation(name: name)).net_status_ok?
resp = self.not_running_validation(name: name)
end
resp
end
|
#admin(name:) ⇒ Object
162
163
164
|
# File 'lib/superhosting/controller/container.rb', line 162
def admin(name:)
self.get_controller(Admin, name: name)
end
|
#apply(name:) ⇒ Object
147
148
149
150
151
152
|
# File 'lib/superhosting/controller/container/states.rb', line 147
def apply(name:)
self._each_site(name: name) do |controller, sname, state|
controller.apply(name: sname).net_status_ok!
end
super
end
|
#available_validation(name:) ⇒ Object
194
195
196
197
198
199
|
# File 'lib/superhosting/controller/container.rb', line 194
def available_validation(name:)
if (resp = self.existing_validation(name: name)).net_status_ok?
resp = (self.index[name][:mapper].lib.state.value == 'up') ? {} : { error: :logical_error, code: :container_is_not_available, data: { name: name } }
end
resp
end
|
#base_validation(name:) ⇒ Object
166
167
168
169
|
# File 'lib/superhosting/controller/container.rb', line 166
def base_validation(name:)
@docker_api.container_rm_inactive!(name)
(name !~ CONTAINER_NAME_FORMAT) ? { error: :input_error, code: :invalid_container_name, data: { name: name, regex: CONTAINER_NAME_FORMAT } } : {}
end
|
#change(name:, mail: 'model', admin_mail: nil, model: nil) ⇒ Object
73
74
75
|
# File 'lib/superhosting/controller/container.rb', line 73
def change(name:, mail: 'model', admin_mail: nil, model: nil)
end
|
133
134
135
136
137
138
|
# File 'lib/superhosting/controller/container/states.rb', line 133
def configure(name:)
self._each_site(name: name) do |controller, sname, state|
controller.configure(name: sname).net_status_ok!
end
super
end
|
154
155
156
157
158
159
|
# File 'lib/superhosting/controller/container/states.rb', line 154
def configure_with_apply(name:)
self._each_site(name: name) do |controller, sname, state|
controller.reconfigure(name: sname).net_status_ok!
end
super
end
|
#data(name) ⇒ Object
22
23
24
25
26
27
|
# File 'lib/superhosting/controller/container.rb', line 22
def data(name)
mapper = self.index[name][:mapper]
docker_options = mapper.docker.grep_files.map {|f| [f.name, f.value] }.to_h
configs = mapper.f('config.rb', overlay: false).reverse.map {|f| f.value }
{ docker: docker_options, configs: configs }
end
|
#delete(name:) ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/superhosting/controller/container.rb', line 55
def delete(name:)
if (resp = self.existing_validation(name: name)).net_status_ok?
lib_mapper = @lib.containers.f(name)
states = {
up: { action: :stop, undo: :run, next: :configuration_applied },
configuration_applied: { action: :unconfigure_with_unapply, undo: :configure_with_apply, next: :mux_runned },
mux_runned: { action: :stop_mux, undo: :run_mux, next: :users_installed },
users_installed: { action: :uninstall_users, next: :data_installed },
data_installed: { action: :uninstall_data }
}
self.on_state(state_mapper: lib_mapper, states: states,
name: name)
end
resp
end
|
#existing_validation(name:) ⇒ Object
186
187
188
|
# File 'lib/superhosting/controller/container.rb', line 186
def existing_validation(name:)
self.index.include?(name) ? {} : { error: :logical_error, code: :container_does_not_exists, data: { name: name } }
end
|
#index ⇒ Object
201
202
203
|
# File 'lib/superhosting/controller/container.rb', line 201
def index
@@index ||= self.reindex
end
|
#inspect(name:) ⇒ Object
42
43
44
45
46
47
48
|
# File 'lib/superhosting/controller/container.rb', line 42
def inspect(name:)
if (resp = self.existing_validation(name: name)).net_status_ok?
{ data: self._list[name] }
else
resp
end
end
|
#install_data(name:, mail: 'model', admin_mail: nil, model: nil) ⇒ Object
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/superhosting/controller/container/states.rb', line 6
def install_data(name:, mail: 'model', admin_mail: nil, model: nil)
if !(resp = self.adding_validation(name: name)).net_status_ok?
return resp
elsif (model_ = model || @config.containers.f(name).f('model', default: @config.default_model)).nil?
return { error: :input_error, code: :no_model_given }
end
model_mapper = @config.models.f(model_)
return { error: :input_error, code: :model_does_not_exists, data: { name: model_ } } unless @config.models.f(model_).dir?
etc_mapper = @config.containers.f(name).create!
etc_mapper.model.put!(model) unless model.nil?
self.reindex_container(name: name)
mapper = self.index[name][:mapper]
unless mail != 'no'
if mail == 'yes'
mapper.mail.put!(mail)
unless (admin_mail_ = admin_mail).nil?
mapper.admin_mail.put!(admin_mail_)
end
elsif mail == 'model'
if model_mapper.default_mail == 'yes'
admin_mail_ = admin_mail || model_mapper.default_admin_mail
end
end
return { error: :input_error, code: :option_admin_mail_required } if defined? admin_mail_ and admin_mail_.nil?
end
mapper.lib.config.delete!
mapper.lib.config.create!
mapper.lib.web.create!
PathMapper.new('/web').create!
safe_link!(mapper.lib.web.path, mapper.web.path)
{}
end
|
#install_users(name:) ⇒ Object
69
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
112
113
114
|
# File 'lib/superhosting/controller/container/states.rb', line 69
def install_users(name:)
mapper = self.index[name][:mapper]
user_controller = self.get_controller(User)
user_controller._group_pretty_add(name: name)
unless (resp = user_controller._pretty_add_custom(name: name, group: name)).net_status_ok?
return resp
end
user = user_controller._get(name: name)
self.with_dry_run do |dry_run|
user_gid = if dry_run
'XXXX' if user.nil?
else
user.gid
end
mapper.lib.config.f('etc-group').append_line!("#{name}:x:#{user_gid}:") unless user_gid.nil?
end
current_system_users = user_controller._group_get_system_users(name: name)
add_users = mapper.system_users.lines - current_system_users
del_users = current_system_users - mapper.system_users.lines
add_users.each do |u|
unless (resp = user_controller._add_system_user(name: u.strip, container_name: name)).net_status_ok?
return resp
end
end
del_users.each do |u|
user_name = "#{name}_#{u.strip}"
user = user_controller._get(name: user_name)
unless (resp = user_controller._del(name: user_name)).net_status_ok?
return resp
end
mapper.lib.config.f('etc-passwd').remove_line!(/^#{user_name}:.*/)
end
PathMapper.new('/etc/security/docker.conf').append_line!("@#{name} #{name}")
chown_r!(name, name, mapper.lib.web.path)
{}
end
|
#list ⇒ Object
11
12
13
14
15
16
17
18
19
|
# File 'lib/superhosting/controller/container.rb', line 11
def list
containers = self._list
{ data: containers }
end
|
#not_existing_validation(name:) ⇒ Object
190
191
192
|
# File 'lib/superhosting/controller/container.rb', line 190
def not_existing_validation(name:)
self.existing_validation(name: name).net_status_ok? ? { error: :logical_error, code: :container_exists, data: { name: name } } : {}
end
|
#not_running_validation(name:) ⇒ Object
182
183
184
|
# File 'lib/superhosting/controller/container.rb', line 182
def not_running_validation(name:)
@docker_api.container_not_running?(name) ? {} : { error: :logical_error, code: :container_is_running, data: { name: name } }
end
|
131
132
133
134
135
136
137
|
# File 'lib/superhosting/controller/container.rb', line 131
def reconfigure(name:)
if (resp = self.existing_validation(name: name)).net_status_ok?
self.set_state(name: name, state: :data_installed)
resp = self._reconfigure(name: name)
end
resp
end
|
#reindex ⇒ Object
205
206
207
208
|
# File 'lib/superhosting/controller/container.rb', line 205
def reindex
@config.containers.grep_dirs.each {|mapper| self.reindex_container(name: mapper.name) }
@@index ||= {}
end
|
#reindex_container(name:) ⇒ Object
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
# File 'lib/superhosting/controller/container.rb', line 210
def reindex_container(name:)
@@index ||= {}
etc_mapper = @config.containers.f(name)
web_mapper = PathMapper.new('/web').f(name)
lib_mapper = @lib.containers.f(name)
state_mapper = lib_mapper.state
if etc_mapper.nil?
@@index.delete(name)
return
end
model_name = etc_mapper.f('model', default: @config.default_model)
model_mapper = @config.models.f(model_name)
etc_mapper = MapperInheritance::Model.new(model_mapper).set_inheritors(etc_mapper)
mapper = CompositeMapper.new(etc_mapper: etc_mapper, lib_mapper: lib_mapper, web_mapper: web_mapper)
etc_mapper.erb_options = { container: mapper }
mux_mapper = if (mux_file_mapper = etc_mapper.mux).file?
MapperInheritance::Mux.new(@config.muxs.f(mux_file_mapper)).set_inheritors
end
@@index[name] = { mapper: mapper, mux_mapper: mux_mapper, state_mapper: state_mapper }
end
|
#rename(name:, new_name:) ⇒ Object
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/superhosting/controller/container.rb', line 86
def rename(name:, new_name:)
if (resp = self.available_validation(name: name)).net_status_ok? and
(resp = self.adding_validation(name: new_name)).net_status_ok?
mapper = self.index[name][:mapper]
new_etc_mapper = mapper.etc.parent.f(new_name)
model = nil if (model = mapper.f('model').value).nil?
mapper.rename!(new_etc_mapper.path)
mapper.create!
begin
self.stop(name: name).net_status_ok!
self.unconfigure_with_unapply(name: name).net_status_ok!
if (resp = self._reconfigure(name: new_name, model: model)).net_status_ok?
new_mapper = self.index[new_name][:mapper]
mapper.lib.web.rename!(new_mapper.lib.web.path)
mapper.lib.sites.rename!(new_mapper.lib.sites.path)
mapper.lib.registry.sites.rename!(new_mapper.lib.registry.sites.path)
site_controller = self.get_controller(Site)
site_controller.reindex_container_sites(container_name: new_name)
site_controller.reindex_container_sites(container_name: name)
self.reconfigure(name: new_name).net_status_ok!
self.delete(name: name).net_status_ok!
end
rescue Exception => e
resp = e.net_status
raise
ensure
unless resp.net_status_ok?
unless new_mapper.nil?
new_mapper.lib.web.rename!(mapper.lib.web.path)
new_mapper.lib.sites.rename!(mapper.lib.sites.path)
new_etc_mapper.rename!(mapper.path)
self.reconfigure(name: name)
end
self.delete(name: new_name)
end
end
end
resp
end
|
#restore(name:, from:, mail: 'model', admin_mail: nil, model: nil) ⇒ Object
158
159
160
|
# File 'lib/superhosting/controller/container.rb', line 158
def restore(name:, from:, mail: 'model', admin_mail: nil, model: nil)
end
|
#run(name:) ⇒ Object
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
# File 'lib/superhosting/controller/container/states.rb', line 161
def run(name:)
mapper = self.index[name][:mapper]
if (resp = self._collect_docker_options(mapper: mapper)).net_status_ok?
command_options, image, command = resp[:data]
dump_command_option = (command_options + [command]).join("\n")
dummy_signature_md5 = Digest::MD5.new.digest(dump_command_option)
restart = (!image.compare_with(mapper.lib.image) or (dummy_signature_md5 != mapper.lib.signature.md5))
if (resp = self._safe_run_docker(command_options, image, command, name: name, restart: restart)).net_status_ok?
mapper.lib.image.put!(image, logger: false)
mapper.lib.signature.put!(dump_command_option, logger: false)
end
end
resp
end
|
#run_mux(name:) ⇒ Object
179
180
181
182
183
184
185
186
187
188
189
190
191
|
# File 'lib/superhosting/controller/container/states.rb', line 179
def run_mux(name:)
resp = {}
mapper = self.index[name][:mapper]
if (mux_mapper = mapper.mux).file?
mux_name = "mux-#{mux_mapper.value}"
mux_controller = self.get_controller(Mux)
resp = mux_controller.add(name: mux_name) if mux_controller.not_running_validation(name: mux_name).net_status_ok?
mux_controller.index_push(mux_name, name)
end
resp
end
|
#running_validation(name:) ⇒ Object
178
179
180
|
# File 'lib/superhosting/controller/container.rb', line 178
def running_validation(name:)
@docker_api.container_running?(name) ? {}: { error: :logical_error, code: :container_is_not_running, data: { name: name } }
end
|
#save(name:, to:) ⇒ Object
154
155
156
|
# File 'lib/superhosting/controller/container.rb', line 154
def save(name:, to:)
end
|
#stop(name:) ⇒ Object
206
207
208
209
210
|
# File 'lib/superhosting/controller/container/states.rb', line 206
def stop(name:)
self._delete_docker(name: name)
self.get_controller(Mux).reindex
{}
end
|
#stop_mux(name:) ⇒ Object
193
194
195
196
197
198
199
200
201
202
203
204
|
# File 'lib/superhosting/controller/container/states.rb', line 193
def stop_mux(name:)
mapper = self.index[name][:mapper]
if (mux_mapper = mapper.mux).file?
mux_name = "mux-#{mux_mapper.value}"
mux_controller = self.get_controller(Mux)
mux_controller.index_pop(mux_name, name)
self._delete_docker(name: mux_name) unless mux_controller.index.include?(mux_name)
end
{}
end
|
140
141
142
143
144
145
|
# File 'lib/superhosting/controller/container/states.rb', line 140
def unconfigure(name:)
self._each_site(name: name) do |controller, sname, state|
controller.unconfigure(name: sname).net_status_ok!
end
super
end
|
#uninstall_data(name:) ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/superhosting/controller/container/states.rb', line 49
def uninstall_data(name:)
if self.index.include? name
mapper = self.index[name][:mapper]
safe_unlink!(mapper.web.path)
mapper.lib = mapper.lib
mapper.lib.web.delete!
mapper.lib.config.delete!
mapper.lib.delete!
mapper.delete!
self.reindex_container(name: name)
end
{}
end
|
#uninstall_users(name:) ⇒ Object
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
# File 'lib/superhosting/controller/container/states.rb', line 116
def uninstall_users(name:)
mapper = self.index[name][:mapper]
user_controller = self.get_controller(User)
if (user = user_controller._get(name: name))
mapper.lib.config.f('etc-group').remove_line!("#{name}:x:#{user.gid}:")
end
user_controller._group_del_users(name: name)
user_controller._group_pretty_del(name: name)
PathMapper.new('/etc/security/docker.conf').remove_line!("@#{name} #{name}")
{}
end
|
#update(name:) ⇒ Object
77
78
79
80
81
82
83
84
|
# File 'lib/superhosting/controller/container.rb', line 77
def update(name:)
if (resp = self.existing_validation(name: name)).net_status_ok? and @docker_api.container_exists?(name)
mapper = self.index[name][:mapper]
image = mapper.lib.image.value
self._recreate_docker(name: name) unless @docker_api.container_image?(name, image)
end
resp
end
|