lib/dev-lxc/server.rb in dev-lxc-1.7.0 vs lib/dev-lxc/server.rb in dev-lxc-2.0.0

- old
+ new

@@ -1,478 +1,165 @@ require "json" require "dev-lxc/container" -require "dev-lxc/cluster" module DevLXC class Server - attr_reader :server, :platform_image_name, :platform_image_options, :shared_image_name + attr_reader :container - def initialize(name, server_type, cluster_config) - unless cluster_config[server_type]["servers"].keys.include?(name) - 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 - @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 + def initialize(name, ipaddress, additional_fqdn, mounts, ssh_keys) + @container = DevLXC::Container.new(name) + @ipaddress = ipaddress + @additional_fqdn = additional_fqdn + @mounts = mounts + @ssh_keys = ssh_keys + end - @server = DevLXC::Container.new(name, @lxc_config_path) - @config = cluster_config[@server_type]["servers"][@server.name] - @ipaddress = @config["ipaddress"] - @role = @config["role"] - @role ||= cluster_config[@server_type]['topology'] - @role ||= 'standalone' - @mounts = cluster_config[@server_type]["mounts"] - @mounts ||= cluster_config["mounts"] - @ssh_keys = cluster_config[@server_type]["ssh-keys"] - @ssh_keys ||= cluster_config["ssh-keys"] - @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', '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' - if File.basename(@packages["server"]).match(/^(\w+-\w+.*)[_-]((?:\d+\.?){3,})/) - @chef_server_type = Regexp.last_match[1] - @chef_server_version = Regexp.last_match[2].gsub(".", "-") - end - - @shared_image_name = "s#{@platform_image_name[1..-1]}" - case @chef_server_type - when 'chef-server-core' - @shared_image_name += '-cs' - @server_ctl = 'chef-server' - when 'private-chef' - @shared_image_name += '-ec' - @server_ctl = 'private-chef' - when 'chef-server' - @shared_image_name += '-osc' - @server_ctl = 'chef-server' - end - @shared_image_name += "-#{@chef_server_version}" - @shared_image_name += "-reporting-#{Regexp.last_match[1].gsub(".", "-")}" if @packages["reporting"].to_s.match(/[_-]((\d+\.?){3,})/) - @shared_image_name += "-pushy-#{Regexp.last_match[1].gsub(".", "-")}" if @packages["push-jobs-server"].to_s.match(/[_-]((\d+\.?){3,})/) - end + def name + @container.name end - def realpath(rootfs_path) - "#{@server.config_item('lxc.rootfs')}#{rootfs_path}" if @server.defined? + def status + @container.status end def run_command(command) - if @server.running? - puts "Running '#{command}' in '#{@server.name}'" - @server.run_command(command) + if @container.running? + puts "Running '#{command}' in '#{@container.name}'" + @container.run_command(command) else - puts "'#{@server.name}' is not running" + puts "'#{@container.name}' is not running" end end + def install_package(package_path) + @container.install_package(package_path) + end + def start - create - hwaddr = @server.config_item("lxc.network.0.hwaddr") - 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) - 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 + hwaddr = @container.config_item("lxc.network.0.hwaddr") + if @ipaddress + DevLXC.assign_ip_address(@ipaddress, @container.name, hwaddr) + DevLXC.create_dns_record(@additional_fqdn, @container.name, @ipaddress) unless @additional_fqdn.nil? end - @server.sync_mounts(@mounts) - @server.start - @server.sync_ssh_keys(@ssh_keys) + @container.sync_mounts(@mounts) + @container.start + @container.sync_ssh_keys(@ssh_keys) end def stop - hwaddr = @server.config_item("lxc.network.0.hwaddr") if @server.defined? - @server.stop + hwaddr = @container.config_item("lxc.network.0.hwaddr") if @container.defined? + @container.stop deregister_from_dnsmasq(hwaddr) end - def snapshot(force=nil) - unless @server.defined? - puts "WARNING: Skipping snapshot of '#{@server.name}' because it is not created" + def snapshot(comment=nil) + unless @container.defined? + puts "WARNING: Skipping snapshot of '#{@container.name}' because it does not exist" return end - if @server.state != :stopped - puts "WARNING: Skipping snapshot of '#{@server.name}' because it is not stopped" + if @container.running? + puts "WARNING: Skipping snapshot of '#{@container.name}' because it is running" return end - 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 + puts "Creating snapshot of container '#{@container.name}'" + snapname = @container.snapshot + unless comment.nil? + snapshot = @container.snapshot_list.select { |sn| sn.first == snapname } + snapshot_comment_file = snapshot.flatten[1] + IO.write(snapshot_comment_file, comment) unless snapshot_comment_file.nil? end - 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? - @server.destroy - deregister_from_dnsmasq(hwaddr) - end - - def deregister_from_dnsmasq(hwaddr) - DevLXC.search_file_delete_line("/etc/lxc/addn-hosts.conf", /^#{@ipaddress}\s/) - DevLXC.search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /,#{@ipaddress}$/) - unless hwaddr.nil? - DevLXC.search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /^#{hwaddr}/) - end - DevLXC.reload_dnsmasq - end - - def destroy_image(type) - case type - when :custom - DevLXC::Container.new("c-#{@server.name}", @lxc_config_path).destroy - when :unique - DevLXC::Container.new("u-#{@server.name}", @lxc_config_path).destroy - when :shared - DevLXC::Container.new(@shared_image_name, @lxc_config_path).destroy unless @shared_image_name.empty? - when :platform - DevLXC::Container.new(@platform_image_name, @lxc_config_path).destroy - end - end - - def create - if @server.defined? - puts "Using existing container '#{@server.name}'" + def snapshot_destroy(snapname=nil) + unless @container.defined? + puts "Skipping container '#{@container.name}' because it does not exist" return end - 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}'" - custom_image.clone(@server.name, {:flags => LXC::LXC_CLONE_SNAPSHOT|LXC::LXC_CLONE_KEEPMACADDR}) - @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}'" - 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 %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}) + if snapname == "ALL" + if @container.snapshot_list.empty? + puts "Container '#{@container.name}' does not have any snapshots" else - 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 + @container.snapshot_list.each do |snapshot| + puts "Destroying snapshot '#{snapshot.first}' of container '#{@container.name}'" + @container.snapshot_destroy(snapshot.first) end - shared_image = create_shared_image - puts "Cloning shared image '#{shared_image.name}' into container '#{@server.name}'" - shared_image.clone(@server.name, {:flags => LXC::LXC_CLONE_SNAPSHOT}) end - @server = DevLXC::Container.new(@server.name, @lxc_config_path) - puts "Deleting SSH Server Host Keys" - FileUtils.rm_f(Dir.glob("#{@server.config_item('lxc.rootfs')}/etc/ssh/ssh_host*_key*")) - 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") - if hwaddr.empty? - puts "ERROR: '#{@server.name}' needs to have an lxc.network.hwaddr entry" - exit 1 + elsif snapname == "LAST" + if @container.snapshot_list.empty? + puts "Container '#{@container.name}' does not have any snapshots" + else + snapname = @container.snapshot_list.last.first + puts "Destroying snapshot '#{snapname}' of container '#{@container.name}'" + @container.snapshot_destroy(snapname) 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) - 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 + else + snapshot = @container.snapshot_list.select { |sn| sn.first == snapname } + if snapshot.flatten.empty? + puts "Container '#{@container.name}' does not have a '#{snapname}' snapshot" + else + puts "Destroying snapshot '#{snapname}' of container '#{@container.name}'" + @container.snapshot_destroy(snapname) 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` - if @platform_image_name.start_with?('p-centos-') - 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? - 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}) end end - def create_shared_image - shared_image = DevLXC::Container.new(@shared_image_name, @lxc_config_path) - if shared_image.defined? - puts "Using existing shared image '#{shared_image.name}'" - return shared_image + def snapshot_list + snapshots = Array.new + return snapshots unless @container.defined? + @container.snapshot_list.each do |snapshot| + (snapname, snap_comment_file, snaptime) = snapshot + snap_comment = IO.read(snap_comment_file).chomp if File.exist?(snap_comment_file) + snapshots << [snapname, snaptime, snap_comment] end - platform_image = DevLXC.create_platform_image(@platform_image_name, @platform_image_options, @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, @lxc_config_path) - puts "Deleting SSH Server Host Keys" - FileUtils.rm_f(Dir.glob("#{shared_image.config_item('lxc.rootfs')}/etc/ssh/ssh_host*_key*")) + snapshots + end - # 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") - FileUtils.mv("#{shared_image.config_item('lxc.rootfs')}/etc/sysctl.d/10-console-messages.conf", - "#{shared_image.config_item('lxc.rootfs')}/etc/sysctl.d/10-console-messages.conf.orig") - end + def snapshot_restore(snapname=nil) + unless @container.defined? + puts "WARNING: Skipping container '#{@container.name}' because it does not exist" + return end - unless shared_image.config_item("lxc.mount.auto").nil? - shared_image.set_config_item("lxc.mount.auto", "proc:rw sys:rw") - shared_image.save_config + if @container.running? + puts "WARNING: Skipping container '#{@container.name}' because it is running" + return end - shared_image.sync_mounts(@mounts) - shared_image.start - case @server_type - when 'analytics' - shared_image.install_package(@packages["analytics"]) unless @packages["analytics"].nil? - when 'chef-server' - shared_image.install_package(@packages["server"]) unless @packages["server"].nil? - shared_image.install_package(@packages["reporting"]) unless @packages["reporting"].nil? - shared_image.install_package(@packages["push-jobs-server"]) unless @packages["push-jobs-server"].nil? - end - shared_image.stop - return shared_image - end - - def configure_server - case @role - when "open-source" - puts "Creating /etc/chef-server/chef-server.rb" - FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/etc/chef-server") - IO.write("#{@server.config_item('lxc.rootfs')}/etc/chef-server/chef-server.rb", @chef_server_config) - when "standalone", "backend" - case @chef_server_type - when 'private-chef' - puts "Creating /etc/opscode/private-chef.rb" - FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/etc/opscode") - IO.write("#{@server.config_item('lxc.rootfs')}/etc/opscode/private-chef.rb", @chef_server_config) - when 'chef-server-core' - 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) + if snapname == "LAST" + if @container.snapshot_list.empty? + puts "WARNING: Skipping container '#{@container.name}' because it does not have any snapshots" + else + snapname = @container.snapshot_list.last.first + puts "Restoring snapshot '#{snapname}' of container '#{@container.name}'" + @container.snapshot_restore(snapname) end - when "frontend" - 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") + else + snapshot = @container.snapshot_list.select { |sn| sn.first == snapname } + if snapshot.flatten.empty? + puts "WARNING: Skipping container '#{@container.name}' because it does not have a '#{snapname}' snapshot" + else + puts "Restoring snapshot '#{snapname}' of container '#{@container.name}'" + @container.snapshot_restore(snapname) + end end - run_ctl(@server_ctl, "reconfigure") end - def configure_reporting - FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/var/opt/opscode-reporting") - FileUtils.touch("#{@server.config_item('lxc.rootfs')}/var/opt/opscode-reporting/.license.accepted") - if @role == 'frontend' - 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") + def destroy + if @container.defined? + hwaddr = @container.config_item("lxc.network.0.hwaddr") + @container.snapshot_list.each { |snapshot| @container.snapshot_destroy(snapshot.first) } end - run_ctl(@server_ctl, "reconfigure") - run_ctl("opscode-reporting", "reconfigure") + @container.destroy + deregister_from_dnsmasq(hwaddr) end - def configure_push_jobs_server - run_ctl("opscode-push-jobs-server", "reconfigure") - run_ctl(@server_ctl, "reconfigure") - end - - def configure_manage - FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/var/opt/chef-manage") - FileUtils.touch("#{@server.config_item('lxc.rootfs')}/var/opt/chef-manage/.license.accepted") - if @chef_server_type == 'private-chef' - puts "Disabling old opscode-webui in /etc/opscode/private-chef.rb" - DevLXC.search_file_delete_line("#{@server.config_item('lxc.rootfs')}/etc/opscode/private-chef.rb", /opscode_webui[.enable.]/) - DevLXC.append_line_to_file("#{@server.config_item('lxc.rootfs')}/etc/opscode/private-chef.rb", "\nopscode_webui['enable'] = false\n") - run_ctl(@server_ctl, "reconfigure") + def deregister_from_dnsmasq(hwaddr) + if @ipaddress + DevLXC.search_file_delete_line("/etc/lxc/addn-hosts.conf", /^#{@ipaddress}\s/) + DevLXC.search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /,#{@ipaddress}$/) end - run_ctl("opscode-manage", "reconfigure") - end - - def configure_analytics - FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/var/opt/opscode-analytics") - FileUtils.touch("#{@server.config_item('lxc.rootfs')}/var/opt/opscode-analytics/.license.accepted") - 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", - "#{@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 '#{@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") + unless hwaddr.nil? + DevLXC.search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /^#{hwaddr}/) end - run_ctl("opscode-analytics", "reconfigure") + DevLXC.reload_dnsmasq end - def configure_compliance - FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/var/opt/chef-compliance") - FileUtils.touch("#{@server.config_item('lxc.rootfs')}/var/opt/chef-compliance/.license.accepted") - 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 - - def create_users - puts "Creating org, user, keys and knife.rb in /root/chef-repo/.chef" - 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" - 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/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__) - -chef_server_root "#{chef_server_root}" -chef_server_url "#{chef_server_root}" - -node_name "pivotal" -client_key "\#{current_dir}/pivotal.pem" - -cookbook_path Dir.pwd + "/cookbooks" -knife[:chef_repo_path] = Dir.pwd - -ssl_verify_mode :verify_none -) - IO.write("#{@server.config_item('lxc.rootfs')}/root/chef-repo/.chef/pivotal.rb", pivotal_rb) - end - - knife_rb = %Q( -current_dir = File.dirname(__FILE__) - -chef_server_url "#{chef_server_url}" - -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 - -ssl_verify_mode :verify_none -) - IO.write("#{@server.config_item('lxc.rootfs')}/root/chef-repo/.chef/knife.rb", knife_rb) - - 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 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 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