Extract pre-mount and post-stop into separate methods
This commit is contained in:
parent
9630198859
commit
577cb4592c
|
@ -8,7 +8,6 @@ module LXC
|
||||||
|
|
||||||
dest_path = File.join(LXC.global_config_item('lxc.lxcpath'), target_container_name)
|
dest_path = File.join(LXC.global_config_item('lxc.lxcpath'), target_container_name)
|
||||||
Dir.mkdir(dest_path, 0770)
|
Dir.mkdir(dest_path, 0770)
|
||||||
overlay_dirs = [[orig.config_item("lxc.rootfs"), File.join(dest_path, "rootfs")]]
|
|
||||||
|
|
||||||
dest.load_config(orig.config_file_name)
|
dest.load_config(orig.config_file_name)
|
||||||
|
|
||||||
|
@ -19,6 +18,39 @@ module LXC
|
||||||
dest.set_config_item("lxc.network.#{index}.hwaddr", random_mac) if dest.config_item("lxc.network.#{index}.hwaddr")
|
dest.set_config_item("lxc.network.#{index}.hwaddr", random_mac) if dest.config_item("lxc.network.#{index}.hwaddr")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_pre_mount(orig, dest, opts)
|
||||||
|
|
||||||
|
create_post_stop(orig, dest, opts)
|
||||||
|
|
||||||
|
dest.save_config
|
||||||
|
|
||||||
|
dest.start(daemonize: opts[:daemonize])
|
||||||
|
|
||||||
|
if !dest.wait(:running, 5)
|
||||||
|
dest.stop
|
||||||
|
dest.destroy if dest.defined?
|
||||||
|
raise "The container '#{dest.name}' failed to start."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def new_overlay?
|
||||||
|
@new_overlay ||= File.readlines('/proc/filesystems').include?("nodev\toverlay\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
def random_mac
|
||||||
|
mac = [0x00, 0x16, 0x3e,
|
||||||
|
SecureRandom.random_number(0x7f),
|
||||||
|
SecureRandom.random_number(0xff),
|
||||||
|
SecureRandom.random_number(0xff)
|
||||||
|
]
|
||||||
|
mac.map {|number| number.to_s(16) }.join(':')
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_pre_mount(orig, dest, opts)
|
||||||
|
dest_path = File.join(LXC.global_config_item('lxc.lxcpath'), dest.name)
|
||||||
|
overlay_dirs = [[orig.config_item("lxc.rootfs"), File.join(dest_path, "rootfs")]]
|
||||||
File.open(File.join(dest_path, 'pre-mount'), 'w+', 0755) do |pre_mount|
|
File.open(File.join(dest_path, 'pre-mount'), 'w+', 0755) do |pre_mount|
|
||||||
pre_mount.puts "#!/bin/sh"
|
pre_mount.puts "#!/bin/sh"
|
||||||
pre_mount.puts %Q{LXC_DIR="#{dest_path}"}
|
pre_mount.puts %Q{LXC_DIR="#{dest_path}"}
|
||||||
|
@ -62,37 +94,15 @@ module LXC
|
||||||
end
|
end
|
||||||
|
|
||||||
dest.set_config_item("lxc.hook.pre-mount", File.join(dest_path, "pre-mount"))
|
dest.set_config_item("lxc.hook.pre-mount", File.join(dest_path, "pre-mount"))
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_post_stop(orig, dest, opts)
|
||||||
|
dest_path = File.join(LXC.global_config_item('lxc.lxcpath'), dest.name)
|
||||||
File.open(File.join(dest_path, 'post-stop'), 'w+', 0755) do |post_stop|
|
File.open(File.join(dest_path, 'post-stop'), 'w+', 0755) do |post_stop|
|
||||||
post_stop.puts %Q{[ -d #{dest_path} ] && rm -Rf "#{dest_path}"}
|
post_stop.puts %Q{[ -d #{dest_path} ] && rm -Rf "#{dest_path}"}
|
||||||
end
|
end
|
||||||
|
|
||||||
dest.set_config_item("lxc.hook.post-stop", File.join(dest_path, "post-stop"))
|
dest.set_config_item("lxc.hook.post-stop", File.join(dest_path, "post-stop"))
|
||||||
|
|
||||||
dest.save_config
|
|
||||||
|
|
||||||
dest.start(daemonize: opts[:daemonize])
|
|
||||||
|
|
||||||
if !dest.wait(:running, 5)
|
|
||||||
dest.stop
|
|
||||||
dest.destroy if dest.defined?
|
|
||||||
raise "The container '#{dest.name}' failed to start."
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def new_overlay?
|
|
||||||
@new_overlay ||= File.readlines('/proc/filesystems').include?("nodev\toverlay\n")
|
|
||||||
end
|
|
||||||
|
|
||||||
def random_mac
|
|
||||||
mac = [0x00, 0x16, 0x3e,
|
|
||||||
SecureRandom.random_number(0x7f),
|
|
||||||
SecureRandom.random_number(0xff),
|
|
||||||
SecureRandom.random_number(0xff)
|
|
||||||
]
|
|
||||||
mac.map {|number| number.to_s(16) }.join(':')
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue