lib/dev-lxc/server.rb in dev-lxc-1.5.1 vs lib/dev-lxc/server.rb in dev-lxc-1.6.0
- old
+ new
@@ -1,5 +1,6 @@
+require "json"
require "dev-lxc/container"
require "dev-lxc/cluster"
module DevLXC
class Server
@@ -13,26 +14,33 @@
@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
+ @compliance_fqdn = cluster.compliance_fqdn
+ @supermarket_fqdn = cluster.supermarket_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, @lxc_config_path)
@config = cluster_config[@server_type]["servers"][@server.name]
@ipaddress = @config["ipaddress"]
- @role = @config["role"] ? @config["role"] : cluster_config[@server_type]['topology']
+ @role = @config["role"]
+ @role ||= cluster_config[@server_type]['topology']
+ @role ||= 'standalone'
@mounts = cluster_config[@server_type]["mounts"]
+ @mounts ||= cluster_config["mounts"]
@platform_image_name = cluster_config[@server_type]["platform_image"]
+ @platform_image_name ||= cluster_config["platform_image"]
@platform_image_options = cluster_config[@server_type]["platform_image_options"]
+ @platform_image_options ||= cluster_config["platform_image_options"]
@packages = cluster_config[@server_type]["packages"]
case @server_type
- when 'adhoc'
+ when 'adhoc', 'compliance', 'supermarket'
@shared_image_name = ''
when 'analytics'
@shared_image_name = "s#{@platform_image_name[1..-1]}"
@shared_image_name += "-analytics-#{Regexp.last_match[1].gsub(".", "-")}" if @packages["analytics"].to_s.match(/[_-]((\d+\.?){3,})/)
when 'chef-server'
@@ -80,10 +88,14 @@
case @server_type
when 'analytics'
DevLXC.create_dns_record(@analytics_fqdn, @server.name, @ipaddress)
when 'chef-server'
DevLXC.create_dns_record(@api_fqdn, @server.name, @ipaddress)
+ when 'compliance'
+ DevLXC.create_dns_record(@compliance_fqdn, @server.name, @ipaddress)
+ when 'supermarket'
+ DevLXC.create_dns_record(@supermarket_fqdn, @server.name, @ipaddress)
end
end
@server.sync_mounts(@mounts)
@server.start
end
@@ -161,11 +173,15 @@
unique_image.clone(@server.name, {:flags => LXC::LXC_CLONE_SNAPSHOT|LXC::LXC_CLONE_KEEPMACADDR})
@server = DevLXC::Container.new(@server.name, @lxc_config_path)
return
else
puts "Creating container '#{@server.name}'"
- if @server_type == 'adhoc'
+ if %w(adhoc compliance supermarket).include?(@server_type)
+ if @server_type == 'supermarket' && (@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
platform_image = DevLXC.create_platform_image(@platform_image_name, @platform_image_options, @lxc_config_path)
puts "Cloning platform image '#{platform_image.name}' into container '#{@server.name}'"
platform_image.clone(@server.name, {:flags => LXC::LXC_CLONE_SNAPSHOT})
else
unless @server.name == @chef_server_bootstrap_backend || DevLXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).defined?
@@ -192,10 +208,14 @@
case @server_type
when 'analytics'
DevLXC.create_dns_record(@analytics_fqdn, @server.name, @ipaddress)
when 'chef-server'
DevLXC.create_dns_record(@api_fqdn, @server.name, @ipaddress)
+ when 'compliance'
+ DevLXC.create_dns_record(@compliance_fqdn, @server.name, @ipaddress)
+ when 'supermarket'
+ DevLXC.create_dns_record(@supermarket_fqdn, @server.name, @ipaddress)
end
end
@server.sync_mounts(@mounts)
# if platform image is centos then `/etc/hosts` file needs to be modified so `hostname -f`
# provides the FQDN instead of `localhost`
@@ -203,24 +223,29 @@
IO.write("#{@server.config_item('lxc.rootfs')}/etc/hosts", "127.0.0.1 localhost\n127.0.1.1 #{@server.name}\n")
end
@server.start
# Allow adhoc servers time to generate SSH Server Host Keys
sleep 5 if @server_type == 'adhoc'
+ case @server_type
+ when 'compliance'
+ @server.install_package(@packages["compliance"]) unless @packages["compliance"].nil?
+ when 'supermarket'
+ @server.install_package(@packages["supermarket"]) unless @packages["supermarket"].nil?
+ end
configure_analytics if @server_type == 'analytics'
+ configure_compliance if @server_type == 'compliance'
+ configure_supermarket if @server_type == 'supermarket'
if @server_type == 'chef-server' && ! @packages["server"].nil?
configure_server
create_users if @server.name == @chef_server_bootstrap_backend
if %w(standalone frontend).include?(@role) && ! @packages["manage"].nil?
@server.install_package(@packages["manage"])
configure_manage
end
unless @role == 'open-source'
configure_reporting unless @packages["reporting"].nil?
configure_push_jobs_server unless @packages["push-jobs-server"].nil?
- if @analytics_bootstrap_backend && %w(standalone backend).include?(@role)
- configure_chef_server_for_analytics
- end
end
end
@server.stop
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})
@@ -314,33 +339,10 @@
run_ctl(@server_ctl, "reconfigure")
end
run_ctl("opscode-manage", "reconfigure")
end
- def configure_chef_server_for_analytics
- puts "Configuring for Analytics"
- case @chef_server_type
- when 'private-chef'
- DevLXC.append_line_to_file("#{@server.config_item('lxc.rootfs')}/etc/opscode/private-chef.rb",
- "\noc_id['applications'] = {\n 'analytics' => {\n 'redirect_uri' => 'https://#{@analytics_fqdn}/'\n }\n}\n")
-
- DevLXC.append_line_to_file("#{@server.config_item('lxc.rootfs')}/etc/opscode/private-chef.rb",
- "\nrabbitmq['vip'] = '#{@chef_server_bootstrap_backend}'\nrabbitmq['node_ip_address'] = '0.0.0.0'\n")
- when 'chef-server-core'
- DevLXC.append_line_to_file("#{@server.config_item('lxc.rootfs')}/etc/opscode/chef-server.rb",
- "\noc_id['applications'] = {\n 'analytics' => {\n 'redirect_uri' => 'https://#{@analytics_fqdn}/'\n }\n}\n")
-
- DevLXC.append_line_to_file("#{@server.config_item('lxc.rootfs')}/etc/opscode/chef-server.rb",
- "\nrabbitmq['vip'] = '#{@chef_server_bootstrap_backend}'\nrabbitmq['node_ip_address'] = '0.0.0.0'\n")
- end
-
- run_ctl(@server_ctl, "stop")
- run_ctl(@server_ctl, "reconfigure")
- run_ctl(@server_ctl, "restart")
- run_ctl("opscode-manage", "reconfigure") if @role == 'frontend'
- end
-
def configure_analytics
case @role
when "standalone", "backend"
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",
@@ -353,10 +355,29 @@
"#{@server.config_item('lxc.rootfs')}/etc")
end
run_ctl("opscode-analytics", "reconfigure")
end
+ def configure_compliance
+ run_ctl("chef-compliance", "reconfigure")
+ end
+
+ def configure_supermarket
+ if @chef_server_bootstrap_backend && DevLXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).defined?
+ chef_server_supermarket_config = JSON.parse(IO.read("#{LXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).config_item('lxc.rootfs')}/etc/opscode/oc-id-applications/supermarket.json"))
+ supermarket_config = {
+ 'chef_server_url' => "https://#{@api_fqdn}/",
+ 'chef_oauth2_app_id' => chef_server_supermarket_config['uid'],
+ 'chef_oauth2_secret' => chef_server_supermarket_config['secret'],
+ 'chef_oauth2_verify_ssl' => false
+ }
+ FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/etc/supermarket")
+ IO.write("#{@server.config_item('lxc.rootfs')}/etc/supermarket/supermarket.json", JSON.pretty_generate(supermarket_config))
+ end
+ run_ctl("supermarket", "reconfigure")
+ end
+
def run_ctl(component, subcommand)
puts "Running `#{component}-ctl #{subcommand}` in '#{@server.name}'"
@server.run_command("#{component}-ctl #{subcommand}")
end
@@ -365,19 +386,20 @@
FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/root/chef-repo/.chef")
case @chef_server_type
when 'chef-server'
chef_server_url = "https://127.0.0.1"
- username = "admin"
+ admin_username = "admin"
validator_name = "chef-validator"
FileUtils.cp( Dir.glob("#{@server.config_item('lxc.rootfs')}/etc/chef-server/{admin,chef-validator}.pem"), "#{@server.config_item('lxc.rootfs')}/root/chef-repo/.chef" )
when 'private-chef', 'chef-server-core'
chef_server_root = "https://127.0.0.1"
- chef_server_url = "https://127.0.0.1/organizations/ponyville"
- username = "rainbowdash"
- validator_name = "ponyville-validator"
+ chef_server_url = "https://127.0.0.1/organizations/demo"
+ admin_username = "mary-admin"
+ username = "joe-user"
+ validator_name = "demo-validator"
FileUtils.cp( "#{@server.config_item('lxc.rootfs')}/etc/opscode/pivotal.pem", "#{@server.config_item('lxc.rootfs')}/root/chef-repo/.chef" )
pivotal_rb = %Q(
current_dir = File.dirname(__FILE__)
@@ -399,13 +421,20 @@
knife_rb = %Q(
current_dir = File.dirname(__FILE__)
chef_server_url "#{chef_server_url}"
-node_name "#{username}"
-client_key "\#{current_dir}/#{username}.pem"
+node_name "#{admin_username}"
+client_key "\#{current_dir}/#{admin_username}.pem"
+)
+ knife_rb += %Q(
+#node_name "#{username}"
+#client_key "\#{current_dir}/#{username}.pem"
+) unless username.nil?
+
+ knife_rb += %Q(
validation_client_name "#{validator_name}"
validation_key "\#{current_dir}/#{validator_name}.pem"
cookbook_path Dir.pwd + "/cookbooks"
knife[:chef_repo_path] = Dir.pwd
@@ -417,18 +446,22 @@
case @chef_server_type
when 'private-chef'
# give time for all services to come up completely
sleep 60
@server.run_command("/opt/opscode/embedded/bin/gem install knife-opc --no-ri --no-rdoc")
- @server.run_command("/opt/opscode/embedded/bin/knife opc org create ponyville ponyville --filename /root/chef-repo/.chef/ponyville-validator.pem -c /root/chef-repo/.chef/pivotal.rb")
- @server.run_command("/opt/opscode/embedded/bin/knife opc user create rainbowdash rainbowdash rainbowdash rainbowdash@noreply.com rainbowdash --filename /root/chef-repo/.chef/rainbowdash.pem -c /root/chef-repo/.chef/pivotal.rb")
- @server.run_command("/opt/opscode/embedded/bin/knife opc org user add ponyville rainbowdash --admin -c /root/chef-repo/.chef/pivotal.rb")
+ @server.run_command("/opt/opscode/embedded/bin/knife opc org create demo demo --filename /root/chef-repo/.chef/demo-validator.pem -c /root/chef-repo/.chef/pivotal.rb")
+ @server.run_command("/opt/opscode/embedded/bin/knife opc user create mary-admin mary admin mary-admin@noreply.com mary-admin --filename /root/chef-repo/.chef/mary-admin.pem -c /root/chef-repo/.chef/pivotal.rb")
+ @server.run_command("/opt/opscode/embedded/bin/knife opc org user add demo mary-admin --admin -c /root/chef-repo/.chef/pivotal.rb")
+ @server.run_command("/opt/opscode/embedded/bin/knife opc user create joe-user joe user joe-user@noreply.com joe-user --filename /root/chef-repo/.chef/joe-user.pem -c /root/chef-repo/.chef/pivotal.rb")
+ @server.run_command("/opt/opscode/embedded/bin/knife opc org user add demo joe-user -c /root/chef-repo/.chef/pivotal.rb")
when 'chef-server-core'
# give time for all services to come up completely
sleep 10
- run_ctl(@server_ctl, "org-create ponyville ponyville --filename /root/chef-repo/.chef/ponyville-validator.pem")
- run_ctl(@server_ctl, "user-create rainbowdash rainbowdash rainbowdash rainbowdash@noreply.com rainbowdash --filename /root/chef-repo/.chef/rainbowdash.pem")
- run_ctl(@server_ctl, "org-user-add ponyville rainbowdash --admin")
+ run_ctl(@server_ctl, "org-create demo demo --filename /root/chef-repo/.chef/demo-validator.pem")
+ run_ctl(@server_ctl, "user-create mary-admin mary admin mary-admin@noreply.com mary-admin --filename /root/chef-repo/.chef/mary-admin.pem")
+ run_ctl(@server_ctl, "org-user-add demo mary-admin --admin")
+ run_ctl(@server_ctl, "user-create joe-user joe user joe-user@noreply.com joe-user --filename /root/chef-repo/.chef/joe-user.pem")
+ run_ctl(@server_ctl, "org-user-add demo joe-user")
end
end
end
end