lib/dev-lxc/container.rb in dev-lxc-2.6.1 vs lib/dev-lxc/container.rb in dev-lxc-2.6.2
- old
+ new
@@ -1,123 +1,123 @@
-module DevLXC
- class Container < LXC::Container
- def status
- if self.defined?
- state = self.state
- ip_addresses = self.ip_addresses.join(" ") if self.state == :running
- else
- state = "not_created"
- end
- { 'name' => self.name, 'state' => state, 'ip_addresses' => ip_addresses }
- end
-
- def start
- unless self.defined?
- puts "ERROR: Container '#{self.name}' does not exist."
- exit 1
- end
- puts "Starting container '#{self.name}'"
- super
- wait(:running, 3)
- puts "Waiting for '#{self.name}' container's network"
- ips = nil
- 30.times do
- ips = self.ip_addresses
- break unless ips.empty?
- sleep 1
- end
- if ips.empty?
- puts "ERROR: Container '#{self.name}' network is not available."
- exit 1
- end
- end
-
- def shutdown
- puts "Shutting down container '#{self.name}'"
- super
- wait(:stopped, 3)
- end
-
- def destroy
- stop if running?
- puts "Destroying container '#{self.name}'"
- super if self.defined?
- end
-
- def sync_mounts(mounts)
- existing_mounts = self.config_item("lxc.mount.entry")
- unless existing_mounts.nil?
- preserved_mounts = existing_mounts.delete_if { |m| m.end_with?("## dev-lxc ##") }
- self.clear_config_item('lxc.mount.entry')
- self.set_config_item("lxc.mount.entry", preserved_mounts)
- end
- unless mounts.nil?
- mounts.each do |mount|
- if ! preserved_mounts.nil? && preserved_mounts.any? { |m| m.start_with?("#{mount} ") }
- puts "Skipping mount entry #{mount}, it already exists"
- next
- else
- puts "Adding mount entry #{mount}"
- self.set_config_item("lxc.mount.entry", "#{mount} none bind,optional,create=dir 0 0 ## dev-lxc ##")
- end
- end
- end
- self.save_config
- end
-
- def sync_ssh_keys(ssh_keys)
- dot_ssh_path = "/home/dev-lxc/.ssh"
- unless File.exist?("#{config_item('lxc.rootfs')}#{dot_ssh_path}/authorized_keys")
- run_command("sudo -u dev-lxc mkdir -p #{dot_ssh_path}")
- run_command("sudo -u dev-lxc chmod 700 #{dot_ssh_path}")
- run_command("sudo -u dev-lxc touch #{dot_ssh_path}/authorized_keys")
- run_command("sudo -u dev-lxc chmod 600 #{dot_ssh_path}/authorized_keys")
- end
- authorized_keys = IO.read("#{config_item('lxc.rootfs')}#{dot_ssh_path}/authorized_keys").split("\n")
- authorized_keys.delete_if { |m| m.end_with?("## dev-lxc ##") }
- unless ssh_keys.nil?
- ssh_keys.each do |ssh_key|
- puts "Adding SSH key #{ssh_key} to #{dot_ssh_path}/authorized_keys"
- authorized_keys << IO.read(ssh_key).chomp + " ## dev-lxc ##"
- end
- end
- authorized_keys_content = String.new
- authorized_keys_content = authorized_keys.join("\n") + "\n" unless authorized_keys.empty?
- IO.write("#{config_item('lxc.rootfs')}#{dot_ssh_path}/authorized_keys", authorized_keys_content)
- end
-
- def run_command(command, output_file=nil)
- unless running?
- puts "ERROR: Container '#{self.name}' must be running first"
- exit 1
- end
- attach_opts = { wait: true, env_policy: LXC::LXC_ATTACH_CLEAR_ENV, extra_env_vars: ['HOME=/root'] }
- if output_file
- file = File.open(output_file, 'w+')
- attach_opts[:stdout] = file
- end
- begin
- attach(attach_opts) do
- LXC.run_command(command)
- end
- ensure
- file.close if file
- end
- end
-
- def install_package(package_path)
- unless run_command("test -e #{package_path}") == 0
- puts "ERROR: File #{package_path} does not exist in container '#{self.name}'"
- exit 1
- end
- puts "Installing #{package_path} in container '#{self.name}'"
- case File.extname(package_path)
- when ".deb"
- install_command = "dpkg -i --skip-same-version #{package_path}"
- when ".rpm"
- install_command = "rpm -Uvh #{package_path}"
- end
- run_command(install_command)
- end
-
- end
-end
+module DevLXC
+ class Container < LXC::Container
+ def status
+ if self.defined?
+ state = self.state
+ ip_addresses = self.ip_addresses.join(" ") if self.state == :running
+ else
+ state = "not_created"
+ end
+ { 'name' => self.name, 'state' => state, 'ip_addresses' => ip_addresses }
+ end
+
+ def start
+ unless self.defined?
+ puts "ERROR: Container '#{self.name}' does not exist."
+ exit 1
+ end
+ puts "Starting container '#{self.name}'"
+ super
+ wait(:running, 3)
+ puts "Waiting for '#{self.name}' container's network"
+ ips = nil
+ 30.times do
+ ips = self.ip_addresses
+ break unless ips.empty?
+ sleep 1
+ end
+ if ips.empty?
+ puts "ERROR: Container '#{self.name}' network is not available."
+ exit 1
+ end
+ end
+
+ def shutdown
+ puts "Shutting down container '#{self.name}'"
+ super
+ wait(:stopped, 3)
+ end
+
+ def destroy
+ stop if running?
+ puts "Destroying container '#{self.name}'"
+ super if self.defined?
+ end
+
+ def sync_mounts(mounts)
+ existing_mounts = self.config_item("lxc.mount.entry")
+ unless existing_mounts.nil?
+ preserved_mounts = existing_mounts.delete_if { |m| m.end_with?("## dev-lxc ##") }
+ self.clear_config_item('lxc.mount.entry')
+ self.set_config_item("lxc.mount.entry", preserved_mounts)
+ end
+ unless mounts.nil?
+ mounts.each do |mount|
+ if ! preserved_mounts.nil? && preserved_mounts.any? { |m| m.start_with?("#{mount} ") }
+ puts "Skipping mount entry #{mount}, it already exists"
+ next
+ else
+ puts "Adding mount entry #{mount}"
+ self.set_config_item("lxc.mount.entry", "#{mount} none bind,optional,create=dir 0 0 ## dev-lxc ##")
+ end
+ end
+ end
+ self.save_config
+ end
+
+ def sync_ssh_keys(ssh_keys)
+ dot_ssh_path = "/home/dev-lxc/.ssh"
+ unless File.exist?("#{config_item('lxc.rootfs')}#{dot_ssh_path}/authorized_keys")
+ run_command("sudo -u dev-lxc mkdir -p #{dot_ssh_path}")
+ run_command("sudo -u dev-lxc chmod 700 #{dot_ssh_path}")
+ run_command("sudo -u dev-lxc touch #{dot_ssh_path}/authorized_keys")
+ run_command("sudo -u dev-lxc chmod 600 #{dot_ssh_path}/authorized_keys")
+ end
+ authorized_keys = IO.read("#{config_item('lxc.rootfs')}#{dot_ssh_path}/authorized_keys").split("\n")
+ authorized_keys.delete_if { |m| m.end_with?("## dev-lxc ##") }
+ unless ssh_keys.nil?
+ ssh_keys.each do |ssh_key|
+ puts "Adding SSH key #{ssh_key} to #{dot_ssh_path}/authorized_keys"
+ authorized_keys << IO.read(ssh_key).chomp + " ## dev-lxc ##"
+ end
+ end
+ authorized_keys_content = String.new
+ authorized_keys_content = authorized_keys.join("\n") + "\n" unless authorized_keys.empty?
+ IO.write("#{config_item('lxc.rootfs')}#{dot_ssh_path}/authorized_keys", authorized_keys_content)
+ end
+
+ def run_command(command, output_file=nil)
+ unless running?
+ puts "ERROR: Container '#{self.name}' must be running first"
+ exit 1
+ end
+ attach_opts = { wait: true, env_policy: LXC::LXC_ATTACH_CLEAR_ENV, extra_env_vars: ['HOME=/root'] }
+ if output_file
+ file = File.open(output_file, 'w+')
+ attach_opts[:stdout] = file
+ end
+ begin
+ attach(attach_opts) do
+ LXC.run_command(command)
+ end
+ ensure
+ file.close if file
+ end
+ end
+
+ def install_package(package_path)
+ unless run_command("test -e #{package_path}") == 0
+ puts "ERROR: File #{package_path} does not exist in container '#{self.name}'"
+ exit 1
+ end
+ puts "Installing #{package_path} in container '#{self.name}'"
+ case File.extname(package_path)
+ when ".deb"
+ install_command = "dpkg -i --skip-same-version #{package_path}"
+ when ".rpm"
+ install_command = "rpm -Uvh #{package_path}"
+ end
+ run_command(install_command)
+ end
+
+ end
+end