lib/dev-lxc/chef-cluster.rb in dev-lxc-0.2.5 vs lib/dev-lxc/chef-cluster.rb in dev-lxc-0.3.0

- old
+ new

@@ -1,23 +1,20 @@ require "dev-lxc/chef-server" module DevLXC class ChefCluster - attr_reader :api_fqdn, :topology, :bootstrap_backend, :secondary_backend, :frontends + attr_reader :api_fqdn, :topology, :bootstrap_backend, :frontends def initialize(cluster_config) @cluster_config = cluster_config @api_fqdn = @cluster_config["api_fqdn"] @topology = @cluster_config["topology"] @servers = @cluster_config["servers"] - if %w(tier ha).include?(@topology) + if @topology == 'tier' @bootstrap_backend = @servers.select {|k,v| v["role"] == "backend" && v["bootstrap"] == true}.first.first @frontends = @servers.select {|k,v| v["role"] == "frontend"}.keys end - if @topology == "ha" - @secondary_backend = @servers.select {|k,v| v["role"] == "backend" && v["bootstrap"] == nil}.first.first - end end def chef_servers chef_servers = Array.new case @topology @@ -26,16 +23,10 @@ when "tier" chef_servers << ChefServer.new(@bootstrap_backend, @cluster_config) @frontends.each do |frontend_name| chef_servers << ChefServer.new(frontend_name, @cluster_config) end - when "ha" - chef_servers << ChefServer.new(@bootstrap_backend, @cluster_config) - chef_servers << ChefServer.new(@secondary_backend, @cluster_config) - @frontends.each do |frontend_name| - chef_servers << ChefServer.new(frontend_name, @cluster_config) - end end chef_servers end def status @@ -47,10 +38,48 @@ abspath = Array.new chef_servers.each { |cs| abspath << cs.abspath(rootfs_path) } abspath.compact end + def chef_repo + case @topology + when "open-source" + puts "Unable to create a chef-repo for an Open Source Chef Server" + exit 1 + when "standalone" + chef_server = ChefServer.new(@servers.keys.first, @cluster_config) + when "tier" + chef_server = ChefServer.new(@bootstrap_backend, @cluster_config) + end + if ! chef_server.server.defined? + puts "The '#{chef_server.server.name}' Chef Server does not exist. Please create it first." + exit 1 + end + puts "Creating chef-repo with pem files and knife.rb in the current directory" + FileUtils.mkdir_p("./chef-repo/.chef") + knife_rb = %Q( +current_dir = File.dirname(__FILE__) + +chef_server_url "https://#{api_fqdn}/organizations/ponyville" + +node_name "rainbowdash" +client_key "\#{current_dir}/rainbowdash.pem" + +validation_client_name "ponyville-validator" +validation_key "\#{current_dir}/ponyville-validator.pem" + +cookbook_path Dir.pwd + "/cookbooks" +knife[:chef_repo_path] = Dir.pwd +) + IO.write("./chef-repo/.chef/knife.rb", knife_rb) + if Dir.glob("#{chef_server.abspath('/root/chef-repo/.chef')}/*.pem").empty? + puts "The pem files can not be copied because they do not exist in '#{chef_server.server.name}' Chef Server's `/root/chef-repo/.chef` directory" + else + FileUtils.cp( Dir.glob("#{chef_server.abspath('/root/chef-repo/.chef')}/*.pem"), "./chef-repo/.chef" ) + end + end + def run_command(command) chef_servers.each { |cs| cs.run_command(command) } end def start @@ -65,57 +94,37 @@ def destroy puts "Destroying cluster" chef_servers.reverse_each { |cs| cs.destroy } end - - def destroy_base_container(type) + + def destroy_container(type) case type when :unique @servers.keys.each do |server_name| - DevLXC::ChefServer.new(server_name, @cluster_config).destroy_base_container(:unique) + DevLXC::ChefServer.new(server_name, @cluster_config).destroy_container(:unique) end when :shared - DevLXC::ChefServer.new(@servers.keys.first, @cluster_config).destroy_base_container(:shared) + DevLXC::ChefServer.new(@servers.keys.first, @cluster_config).destroy_container(:shared) when :platform - DevLXC::ChefServer.new(@servers.keys.first, @cluster_config).destroy_base_container(:platform) + DevLXC::ChefServer.new(@servers.keys.first, @cluster_config).destroy_container(:platform) end end def chef_server_config chef_server_config = %Q(api_fqdn "#{@api_fqdn}"\n) - if %w(tier ha).include?(@topology) + if @topology == 'tier' chef_server_config += %Q( topology "#{@topology}" server "#{@bootstrap_backend}", :ipaddress => "#{@servers[@bootstrap_backend]["ipaddress"]}", :role => "backend", - :bootstrap => true) + :bootstrap => true - case @topology - when "tier" - chef_server_config += %Q( - backend_vip "#{@bootstrap_backend}", :ipaddress => "#{@servers[@bootstrap_backend]["ipaddress"]}" ) - when "ha" - backend_vip_name = config["backend_vip"].keys.first - chef_server_config += %Q(, - :cluster_ipaddress => "#{@servers[@bootstrap_backend]["cluster_ipaddress"]}" - -server "#{@secondary_backend}", - :ipaddress => "#{@servers[@secondary_backend]["ipaddress"]}", - :role => "backend", - :cluster_ipaddress => "#{@servers[@secondary_backend]["cluster_ipaddress"]} - -backend_vip "#{backend_vip_name}", - :ipaddress => "#{config["backend_vip"][backend_vip_name]["ipaddress"]}", - :device => "#{config["backend_vip"][backend_vip_name]["device"]}", - :heartbeat_device => "#{config["backend_vip"][backend_vip_name]["heartbeat_device"]}" -) - end @frontends.each do |frontend_name| chef_server_config += %Q( server "#{frontend_name}", :ipaddress => "#{@servers[frontend_name]["ipaddress"]}", :role => "frontend"