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"