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"