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