lib/dev-lxc/server.rb in dev-lxc-0.6.4 vs lib/dev-lxc/server.rb in dev-lxc-1.0.0
- old
+ new
@@ -5,22 +5,24 @@
class Server
attr_reader :server, :platform_image_name, :shared_image_name
def initialize(name, server_type, cluster_config)
unless cluster_config[server_type]["servers"].keys.include?(name)
- raise "Server #{name} is not defined in the cluster config"
+ puts "ERROR: Server '#{name}' is not defined in the cluster config"
+ exit 1
end
@server_type = server_type
cluster = DevLXC::Cluster.new(cluster_config)
+ @lxc_config_path = cluster.lxc_config_path
@api_fqdn = cluster.api_fqdn
@analytics_fqdn = cluster.analytics_fqdn
@chef_server_bootstrap_backend = cluster.chef_server_bootstrap_backend
@analytics_bootstrap_backend = cluster.analytics_bootstrap_backend
@chef_server_config = cluster.chef_server_config
@analytics_config = cluster.analytics_config
- @server = DevLXC::Container.new(name)
+ @server = DevLXC::Container.new(name, @lxc_config_path)
@config = cluster_config[@server_type]["servers"][@server.name]
@ipaddress = @config["ipaddress"]
@role = @config["role"] ? @config["role"] : cluster_config[@server_type]['topology']
@mounts = cluster_config[@server_type]["mounts"]
@platform_image_name = cluster_config[@server_type]["platform_image"]
@@ -53,30 +55,20 @@
@shared_image_name += "-pushy-#{Regexp.last_match[1].gsub(".", "-")}" if @packages["push-jobs-server"].to_s.match(/[_-]((\d+\.?){3,})/)
@shared_image_name += "-sync-#{Regexp.last_match[1].gsub(".", "-")}" if @packages["sync"].to_s.match(/[_-]((\d+\.?){3,})/)
end
end
- def status
- if @server.defined?
- state = @server.state
- ip_addresses = @server.ip_addresses.join(" ") if @server.state == :running
- else
- state = "not_created"
- end
- printf "%25s %-15s %s\n", @server.name, state, ip_addresses
- end
-
def abspath(rootfs_path)
"#{@server.config_item('lxc.rootfs')}#{rootfs_path}" if @server.defined?
end
def run_command(command)
if @server.running?
- puts "Running '#{command}' in #{@server.name}"
+ puts "Running '#{command}' in '#{@server.name}'"
@server.run_command(command)
else
- puts "#{@server.name} is not running"
+ puts "'#{@server.name}' is not running"
end
end
def start
create
@@ -107,20 +99,20 @@
end
if @server.state != :stopped
puts "WARNING: Skipping snapshot of '#{@server.name}' because it is not stopped"
return
end
- custom_image = DevLXC::Container.new("c-#{@server.name}")
+ custom_image = DevLXC::Container.new("c-#{@server.name}", @lxc_config_path)
if custom_image.defined?
if force
custom_image.destroy
else
puts "WARNING: Skipping snapshot of '#{@server.name}' because a custom image already exists"
return
end
end
- puts "Creating snapshot of container #{@server.name} in custom image #{custom_image.name}"
+ puts "Creating snapshot of container '#{@server.name}' in custom image '#{custom_image.name}'"
@server.clone("#{custom_image.name}", {:flags => LXC::LXC_CLONE_SNAPSHOT|LXC::LXC_CLONE_KEEPMACADDR})
end
def destroy
hwaddr = @server.config_item("lxc.network.0.hwaddr") if @server.defined?
@@ -138,51 +130,55 @@
end
def destroy_image(type)
case type
when :custom
- DevLXC::Container.new("c-#{@server.name}").destroy
+ DevLXC::Container.new("c-#{@server.name}", @lxc_config_path).destroy
when :unique
- DevLXC::Container.new("u-#{@server.name}").destroy
+ DevLXC::Container.new("u-#{@server.name}", @lxc_config_path).destroy
when :shared
- DevLXC::Container.new(@shared_image_name).destroy
+ DevLXC::Container.new(@shared_image_name, @lxc_config_path).destroy
when :platform
- DevLXC::Container.new(@platform_image_name).destroy
+ DevLXC::Container.new(@platform_image_name, @lxc_config_path).destroy
end
end
def create
if @server.defined?
- puts "Using existing container #{@server.name}"
+ puts "Using existing container '#{@server.name}'"
return
end
- custom_image = DevLXC::Container.new("c-#{@server.name}")
- unique_image = DevLXC::Container.new("u-#{@server.name}")
+ custom_image = DevLXC::Container.new("c-#{@server.name}", @lxc_config_path)
+ unique_image = DevLXC::Container.new("u-#{@server.name}", @lxc_config_path)
if custom_image.defined?
- puts "Cloning custom image #{custom_image.name} into container #{@server.name}"
+ puts "Cloning custom image '#{custom_image.name}' into container '#{@server.name}'"
custom_image.clone(@server.name, {:flags => LXC::LXC_CLONE_SNAPSHOT|LXC::LXC_CLONE_KEEPMACADDR})
- @server = DevLXC::Container.new(@server.name)
+ @server = DevLXC::Container.new(@server.name, @lxc_config_path)
return
elsif unique_image.defined?
- puts "Cloning unique image #{unique_image.name} into container #{@server.name}"
+ puts "Cloning unique image '#{unique_image.name}' into container '#{@server.name}'"
unique_image.clone(@server.name, {:flags => LXC::LXC_CLONE_SNAPSHOT|LXC::LXC_CLONE_KEEPMACADDR})
- @server = DevLXC::Container.new(@server.name)
+ @server = DevLXC::Container.new(@server.name, @lxc_config_path)
return
else
- puts "Creating container #{@server.name}"
- unless @server.name == @chef_server_bootstrap_backend || DevLXC::Container.new(@chef_server_bootstrap_backend).defined?
- raise "The bootstrap backend server must be created first."
+ puts "Creating container '#{@server.name}'"
+ unless @server.name == @chef_server_bootstrap_backend || DevLXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).defined?
+ puts "ERROR: The bootstrap backend server '#{@chef_server_bootstrap_backend}' must be created first."
+ exit 1
end
shared_image = create_shared_image
- puts "Cloning shared image #{shared_image.name} into container #{@server.name}"
+ puts "Cloning shared image '#{shared_image.name}' into container '#{@server.name}'"
shared_image.clone(@server.name, {:flags => LXC::LXC_CLONE_SNAPSHOT})
- @server = DevLXC::Container.new(@server.name)
+ @server = DevLXC::Container.new(@server.name, @lxc_config_path)
puts "Adding lxc.hook.post-stop hook"
@server.set_config_item("lxc.hook.post-stop", "/usr/local/share/lxc/hooks/post-stop-dhcp-release")
@server.save_config
hwaddr = @server.config_item("lxc.network.0.hwaddr")
- raise "#{@server.name} needs to have an lxc.network.hwaddr entry" if hwaddr.empty?
+ if hwaddr.empty?
+ puts "ERROR: '#{@server.name}' needs to have an lxc.network.hwaddr entry"
+ exit 1
+ end
DevLXC.assign_ip_address(@ipaddress, @server.name, hwaddr)
unless @role == 'backend'
case @server_type
when 'analytics'
DevLXC.create_dns_record(@analytics_fqdn, @server.name, @ipaddress)
@@ -212,25 +208,25 @@
configure_chef_server_for_analytics
end
end
end
@server.stop
- puts "Cloning container #{@server.name} into unique image #{unique_image.name}"
+ puts "Cloning container '#{@server.name}' into unique image '#{unique_image.name}'"
@server.clone("#{unique_image.name}", {:flags => LXC::LXC_CLONE_SNAPSHOT|LXC::LXC_CLONE_KEEPMACADDR})
end
end
def create_shared_image
- shared_image = DevLXC::Container.new(@shared_image_name)
+ shared_image = DevLXC::Container.new(@shared_image_name, @lxc_config_path)
if shared_image.defined?
- puts "Using existing shared image #{shared_image.name}"
+ puts "Using existing shared image '#{shared_image.name}'"
return shared_image
end
- platform_image = DevLXC.create_platform_image(@platform_image_name)
- puts "Cloning platform image #{platform_image.name} into shared image #{shared_image.name}"
+ platform_image = DevLXC.create_platform_image(@platform_image_name, @lxc_config_path)
+ puts "Cloning platform image '#{platform_image.name}' into shared image '#{shared_image.name}'"
platform_image.clone(shared_image.name, {:flags => LXC::LXC_CLONE_SNAPSHOT})
- shared_image = DevLXC::Container.new(shared_image.name)
+ shared_image = DevLXC::Container.new(shared_image.name, @lxc_config_path)
# Disable certain sysctl.d files in Ubuntu 10.04, they cause `start procps` to fail
# Enterprise Chef server's postgresql recipe expects to be able to `start procps`
if platform_image.name == "p-ubuntu-1004"
if File.exist?("#{shared_image.config_item('lxc.rootfs')}/etc/sysctl.d/10-console-messages.conf")
@@ -273,21 +269,21 @@
puts "Creating /etc/opscode/chef-server.rb"
FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/etc/opscode")
IO.write("#{@server.config_item('lxc.rootfs')}/etc/opscode/chef-server.rb", @chef_server_config)
end
when "frontend"
- puts "Copying /etc/opscode from bootstrap backend"
- FileUtils.cp_r("#{LXC::Container.new(@chef_server_bootstrap_backend).config_item('lxc.rootfs')}/etc/opscode",
+ puts "Copying /etc/opscode from bootstrap backend '#{@chef_server_bootstrap_backend}'"
+ FileUtils.cp_r("#{LXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).config_item('lxc.rootfs')}/etc/opscode",
"#{@server.config_item('lxc.rootfs')}/etc")
end
run_ctl(@server_ctl, "reconfigure")
end
def configure_reporting
if @role == 'frontend'
- puts "Copying /etc/opscode-reporting from bootstrap backend"
- FileUtils.cp_r("#{LXC::Container.new(@chef_server_bootstrap_backend).config_item('lxc.rootfs')}/etc/opscode-reporting",
+ puts "Copying /etc/opscode-reporting from bootstrap backend '#{@chef_server_bootstrap_backend}'"
+ FileUtils.cp_r("#{LXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).config_item('lxc.rootfs')}/etc/opscode-reporting",
"#{@server.config_item('lxc.rootfs')}/etc")
end
run_ctl(@server_ctl, "reconfigure")
run_ctl("opscode-reporting", "reconfigure")
end
@@ -331,24 +327,24 @@
end
def configure_analytics
case @role
when "standalone", "backend"
- puts "Copying /etc/opscode-analytics from Chef Server bootstrap backend"
- FileUtils.cp_r("#{LXC::Container.new(@chef_server_bootstrap_backend).config_item('lxc.rootfs')}/etc/opscode-analytics",
+ puts "Copying /etc/opscode-analytics from Chef Server bootstrap backend '#{@chef_server_bootstrap_backend}'"
+ FileUtils.cp_r("#{LXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).config_item('lxc.rootfs')}/etc/opscode-analytics",
"#{@server.config_item('lxc.rootfs')}/etc")
IO.write("#{@server.config_item('lxc.rootfs')}/etc/opscode-analytics/opscode-analytics.rb", @analytics_config)
when "frontend"
- puts "Copying /etc/opscode-analytics from Analytics bootstrap backend"
- FileUtils.cp_r("#{LXC::Container.new(@analytics_bootstrap_backend).config_item('lxc.rootfs')}/etc/opscode-analytics",
+ puts "Copying /etc/opscode-analytics from Analytics bootstrap backend '#{@analytics_bootstrap_backend}'"
+ FileUtils.cp_r("#{LXC::Container.new(@analytics_bootstrap_backend, @lxc_config_path).config_item('lxc.rootfs')}/etc/opscode-analytics",
"#{@server.config_item('lxc.rootfs')}/etc")
end
run_ctl("opscode-analytics", "reconfigure")
end
def run_ctl(component, subcommand)
- puts "Running `#{component}-ctl #{subcommand}` in #{@server.name}"
+ puts "Running `#{component}-ctl #{subcommand}` in '#{@server.name}'"
@server.run_command("#{component}-ctl #{subcommand}")
end
def create_users
puts "Creating org, user, keys and knife.rb in /root/chef-repo/.chef"