From ff543c0f030e45d9a63c0f61d154a9cb68d53342 Mon Sep 17 00:00:00 2001 From: Mahesh Date: Mon, 25 Jul 2011 12:08:55 -0700 Subject: [PATCH] Templates for CF config files. Also change deployment config from json to yml. Added template files for all cf components including services. Add comments to the deployment yaml config file. Cleanup some of the scripts. Change-Id: I9209749ab9ca50a2bd894189c571e1b4c33bc77b --- dev_setup/bin/chefsolo_launch.rb | 178 +++++++++--------- dev_setup/bin/vcap_defs.rb | 24 ++- dev_setup/bin/vcap_dev | 122 +++++------- .../cookbooks/cloud_controller/README.rdoc | 8 + .../cloud_controller/attributes/default.rb | 9 + .../cookbooks/cloud_controller/metadata.rb | 6 + .../cloud_controller/recipes/default.rb | 25 +++ .../default/cloud_controller.yml.erb | 107 +++++++++++ .../templates/default/grails.yml.erb | 20 ++ .../templates/default/lift.yml.erb | 18 ++ .../templates/default/node.yml.erb | 12 ++ .../templates/default/otp_rebar.yml.erb | 12 ++ .../templates/default/platform.yml.erb | 3 + .../templates/default/rails3.yml.erb | 33 ++++ .../templates/default/sinatra.yml.erb | 35 ++++ .../templates/default/spring.yml.erb | 20 ++ .../cloudfoundry/attributes/default.rb | 1 - .../cloudfoundry/libraries/cloudfoundry.rb | 14 ++ .../cookbooks/cloudfoundry/recipes/default.rb | 18 +- dev_setup/cookbooks/dea/attributes/default.rb | 1 + dev_setup/cookbooks/dea/recipes/default.rb | 9 + .../dea/templates/default/dea.yml.erb | 50 +++++ .../cookbooks/erlang/attributes/default.rb | 2 - dev_setup/cookbooks/erlang/recipes/default.rb | 8 +- .../essentials/attributes/default.rb | 2 - .../cookbooks/essentials/recipes/default.rb | 16 ++ .../cookbooks/health_manager/README.rdoc | 8 + .../health_manager/attributes/default.rb | 1 + .../cookbooks/health_manager/metadata.rb | 6 + .../health_manager/recipes/default.rb | 14 ++ .../templates/default/health_manager.yml.erb | 33 ++++ .../cookbooks/mongodb/attributes/default.rb | 2 - .../cookbooks/mongodb/recipes/default.rb | 8 +- .../cookbooks/nodejs/attributes/default.rb | 2 - dev_setup/cookbooks/nodejs/recipes/default.rb | 8 +- .../postgresql/attributes/default.rb | 2 +- .../cookbooks/postgresql/recipes/default.rb | 6 +- dev_setup/cookbooks/redis/recipes/default.rb | 16 +- dev_setup/cookbooks/router/README.rdoc | 8 + .../cookbooks/router/attributes/default.rb | 1 + dev_setup/cookbooks/router/metadata.rb | 6 + dev_setup/cookbooks/router/recipes/default.rb | 14 ++ .../router/templates/default/router.yml.erb | 7 + .../cookbooks/ruby/attributes/default.rb | 2 - dev_setup/cookbooks/ruby/recipes/default.rb | 26 +-- dev_setup/cookbooks/services/README.rdoc | 8 + dev_setup/cookbooks/services/metadata.rb | 6 + .../cookbooks/services/recipes/default.rb | 19 ++ .../templates/default/mongodb_backup.yml.erb | 8 + .../templates/default/mongodb_gateway.yml.erb | 15 ++ .../templates/default/mongodb_node.yml.erb | 16 ++ .../templates/default/mysql_backup.yml.erb | 13 ++ .../templates/default/mysql_gateway.yml.erb | 16 ++ .../templates/default/mysql_node.yml.erb | 22 +++ .../default/postgresql_backup.yml.erb | 6 + .../default/postgresql_gateway.yml.erb | 14 ++ .../templates/default/postgresql_node.yml.erb | 18 ++ .../templates/default/redis_backup.yml.erb | 5 + .../templates/default/redis_gateway.yml.erb | 15 ++ .../templates/default/redis_node.yml.erb | 17 ++ dev_setup/deployments/devbox.yml.erb | 68 +++++++ dev_setup/deployments/singlehost.json.erb | 37 ---- .../roles/{cc.json => cloud_controller.json} | 5 +- dev_setup/roles/router.json | 3 +- 64 files changed, 964 insertions(+), 270 deletions(-) create mode 100644 dev_setup/cookbooks/cloud_controller/README.rdoc create mode 100644 dev_setup/cookbooks/cloud_controller/attributes/default.rb create mode 100644 dev_setup/cookbooks/cloud_controller/metadata.rb create mode 100644 dev_setup/cookbooks/cloud_controller/recipes/default.rb create mode 100644 dev_setup/cookbooks/cloud_controller/templates/default/cloud_controller.yml.erb create mode 100644 dev_setup/cookbooks/cloud_controller/templates/default/grails.yml.erb create mode 100644 dev_setup/cookbooks/cloud_controller/templates/default/lift.yml.erb create mode 100644 dev_setup/cookbooks/cloud_controller/templates/default/node.yml.erb create mode 100644 dev_setup/cookbooks/cloud_controller/templates/default/otp_rebar.yml.erb create mode 100644 dev_setup/cookbooks/cloud_controller/templates/default/platform.yml.erb create mode 100644 dev_setup/cookbooks/cloud_controller/templates/default/rails3.yml.erb create mode 100644 dev_setup/cookbooks/cloud_controller/templates/default/sinatra.yml.erb create mode 100644 dev_setup/cookbooks/cloud_controller/templates/default/spring.yml.erb create mode 100644 dev_setup/cookbooks/cloudfoundry/libraries/cloudfoundry.rb create mode 100644 dev_setup/cookbooks/dea/attributes/default.rb create mode 100644 dev_setup/cookbooks/dea/templates/default/dea.yml.erb create mode 100644 dev_setup/cookbooks/health_manager/README.rdoc create mode 100644 dev_setup/cookbooks/health_manager/attributes/default.rb create mode 100644 dev_setup/cookbooks/health_manager/metadata.rb create mode 100644 dev_setup/cookbooks/health_manager/recipes/default.rb create mode 100644 dev_setup/cookbooks/health_manager/templates/default/health_manager.yml.erb create mode 100644 dev_setup/cookbooks/router/README.rdoc create mode 100644 dev_setup/cookbooks/router/attributes/default.rb create mode 100644 dev_setup/cookbooks/router/metadata.rb create mode 100644 dev_setup/cookbooks/router/recipes/default.rb create mode 100644 dev_setup/cookbooks/router/templates/default/router.yml.erb create mode 100644 dev_setup/cookbooks/services/README.rdoc create mode 100644 dev_setup/cookbooks/services/metadata.rb create mode 100644 dev_setup/cookbooks/services/recipes/default.rb create mode 100644 dev_setup/cookbooks/services/templates/default/mongodb_backup.yml.erb create mode 100644 dev_setup/cookbooks/services/templates/default/mongodb_gateway.yml.erb create mode 100644 dev_setup/cookbooks/services/templates/default/mongodb_node.yml.erb create mode 100644 dev_setup/cookbooks/services/templates/default/mysql_backup.yml.erb create mode 100644 dev_setup/cookbooks/services/templates/default/mysql_gateway.yml.erb create mode 100644 dev_setup/cookbooks/services/templates/default/mysql_node.yml.erb create mode 100644 dev_setup/cookbooks/services/templates/default/postgresql_backup.yml.erb create mode 100644 dev_setup/cookbooks/services/templates/default/postgresql_gateway.yml.erb create mode 100644 dev_setup/cookbooks/services/templates/default/postgresql_node.yml.erb create mode 100644 dev_setup/cookbooks/services/templates/default/redis_backup.yml.erb create mode 100644 dev_setup/cookbooks/services/templates/default/redis_gateway.yml.erb create mode 100644 dev_setup/cookbooks/services/templates/default/redis_node.yml.erb create mode 100644 dev_setup/deployments/devbox.yml.erb delete mode 100644 dev_setup/deployments/singlehost.json.erb rename dev_setup/roles/{cc.json => cloud_controller.json} (74%) diff --git a/dev_setup/bin/chefsolo_launch.rb b/dev_setup/bin/chefsolo_launch.rb index 6ed6328f3..d37f83747 100755 --- a/dev_setup/bin/chefsolo_launch.rb +++ b/dev_setup/bin/chefsolo_launch.rb @@ -5,29 +5,30 @@ require 'tempfile' require 'uri' require 'fileutils' +require 'yaml' require 'pp' require File.expand_path('vcap_defs', File.dirname(__FILE__)) script_dir = File.expand_path(File.dirname(__FILE__)) -vcap_dir = File.expand_path(File.join(script_dir, "../..")) -deployment_config = File.expand_path(File.join(script_dir, "..", DEFAULT_DEPLOYMENT_CONFIG)) -deployment_home = DEFAULT_DEPLOYMENT_HOME -deployment_name = DEFAULT_DEPLOYMENT_NAME +vcap_path = File.expand_path(File.join(script_dir, "..", "..")) +deployment_spec = File.expand_path(File.join(script_dir, "..", DEPLOYMENT_DEFAULT_SPEC)) +deployment_name = DEPLOYMENT_DEFAULT_NAME +deployment_home = Deployment.get_home(deployment_name) deployment_user = ENV["USER"] deployment_group = `id -g`.strip download_cloudfoundry = false -unless ARGV[0].nil? - deployment_config = ARGV[0] - unless File.exists?(deployment_config) - puts "Cannont find deployment config file #{deployment_config}" - exit 1 - end +deployment_spec = ARGV[0] if ARGV[0] + +unless File.exists?(deployment_spec) + puts "Cannot find deployment spec #{deployment_spec}" + puts "Usage: #{$0} [deployment_spec]" + exit 1 end -env_erb = ERB.new(File.read(deployment_config)) +spec_erb = ERB.new(File.read(deployment_spec)) -JSON.parse(env_erb.dup.result).each do |package, properties| +YAML.load(spec_erb.result).each do |package, properties| # Find out the versions of the various packages case properties when Hash @@ -42,96 +43,99 @@ # Update config defaults case package when "cloudfoundry" - vcap_dir = File.expand_path(properties["path"]) - download_cloudfoundry = true - puts "vcap_dir is now #{vcap_dir}" - when "deployment_name" - deployment_name = properties - when "deployment_home" - deployment_home=properties - when "deployment_user" - deployment_user = properties - when "deployment_group" - deployment_group = properties + vcap_path = File.expand_path(properties["path"]) + download_cloudfoundry = true unless properties["revision"].nil? + puts "vcap_path is now #{vcap_path}" + when "deployment" + deployment_name = properties["name"] || deployment_name + deployment_home = properties["home"] || deployment_home + deployment_user = properties["user"] || deployment_user + deployment_group = properties["group"] || deployment_group end end +deployment_config_path = Deployment.get_config_path(deployment_home) -`mkdir -p #{deployment_home}/deploy;` -`mkdir -p #{deployment_home}/sys/log` -`chown #{deployment_user} #{deployment_home} #{deployment_home}/deploy #{deployment_home}/sys/log` -puts "Installing deployment #{deployment_name}, deployment home dir is #{deployment_home}, vcap dir is #{vcap_dir}" +FileUtils.mkdir_p(File.join(deployment_home, "deploy")) +FileUtils.mkdir_p(File.join(deployment_home, "sys", "log")) +FileUtils.chown(deployment_user, deployment_group, [deployment_home, File.join(deployment_home, "deploy"), File.join(deployment_home, "sys", "log")]) +puts "Installing deployment #{deployment_name}, deployment home dir is #{deployment_home}, vcap dir is #{vcap_path}" -run_list = Array.new -run_list << "role[dea]" -run_list << "role[router]" -run_list << "role[cc]" +run_list = [] run_list << "role[cloudfoundry]" if download_cloudfoundry - -# generate the chef-solo attributes -env = env_erb.result +run_list << "role[router]" +run_list << "role[cloud_controller]" +run_list << "role[dea]" +run_list << "recipe[health_manager]" +run_list << "recipe[services]" + +# Fill in default config attributes +spec = YAML.load(spec_erb.result) +spec["run_list"] = run_list +spec["deployment"] ||= {} +spec["deployment"]["name"] = deployment_name +spec["deployment"]["home"] = deployment_home +spec["deployment"]["user"] = deployment_user +spec["deployment"]["group"] = deployment_group +spec["deployment"]["config_path"] = deployment_config_path +spec["cloudfoundry"] ||= {} +spec["cloudfoundry"]["path"] = vcap_path # Deploy all the cf components -Dir.mktmpdir { |tmpdir| +Dir.mktmpdir do |tmpdir| # Create chef-solo config file - File.open("#{tmpdir}/solo.rb", "w") { |f| - f.puts("cookbook_path \"#{File.expand_path("../cookbooks", script_dir)}\"") - f.puts("role_path \"#{File.expand_path("../roles", script_dir)}\"") + File.open(File.join(tmpdir, "solo.rb"), "w") do |f| + f.puts("cookbook_path \"#{File.expand_path(File.join("..", "cookbooks"), script_dir)}\"") + f.puts("role_path \"#{File.expand_path(File.join("..", "roles"), script_dir)}\"") %w[ http_proxy https_proxy].each do |proxy| - unless ENV[proxy].nil? - uri = URI.parse(ENV[proxy]) - f.puts("#{proxy} \"#{uri.scheme}://#{uri.host}:#{uri.port}\"") - unless uri.userinfo.nil? - f.puts("http_proxy_user \"#{uri.userinfo.split(":")[0]}\"") - f.puts("http_proxy_pass \"#{uri.userinfo.split(":")[1]}\"") - end + if ENV[proxy] + uri = URI.parse(ENV[proxy]) + f.puts("#{proxy} \"#{uri.scheme}://#{uri.host}:#{uri.port}\"") + if uri.userinfo + f.puts("http_proxy_user \"#{uri.userinfo.split(":")[0]}\"") + f.puts("http_proxy_pass \"#{uri.userinfo.split(":")[1]}\"") + end end end - unless ENV["no_proxy"].nil? - f.puts("no_proxy \"#{ENV["no_proxy"]}\"") + if ENV["no_proxy"] + f.puts("no_proxy \"#{ENV["no_proxy"]}\"") end - } - + end # Create chef-solo attributes file - json_attribs = "#{tmpdir}/solo.json" - File.open(json_attribs, "w") { |f| - f.puts(env) - } - - FileUtils.cp("#{tmpdir}/solo.rb", "/tmp/solo.rb") - FileUtils.cp("#{json_attribs}", "/tmp/solo.json") - - id = fork { - proxy_env = Array.new - proxy_env << "http_proxy=#{ENV["http_proxy"]}" unless ENV["http_proxy"].nil? - proxy_env << "https_proxy=#{ENV["https_proxy"]}" unless ENV["https_proxy"].nil? - proxy_env << "no_proxy=#{ENV["no_proxy"]}" unless ENV["no_proxy"].nil? - exec("sudo env #{proxy_env.join(" ")} chef-solo -c #{tmpdir}/solo.rb -j #{json_attribs} -l debug") - } - pid, status = Process.waitpid2(id) - if status.exitstatus == 0 - # save the config of this deployment - config_base_dir = File.expand_path(File.join(vcap_dir, CONFIG_BASE_DIR)) - FileUtils.mkdir_p(config_base_dir) - `chown #{deployment_user} #{config_base_dir}` - - config_dir = File.join(config_base_dir, deployment_name) - FileUtils.mkdir_p(config_dir) - `chown #{deployment_user} #{config_dir}` - - File.open(File.join(config_dir, DEPLOYMENT_FILE), "w") { |f| - f.puts(env) - } - - puts "Cloudfoundry setup was successful." - if deployment_name != DEFAULT_DEPLOYMENT_NAME - puts "Config file for this deployment is in #{config_dir}." + json_attribs = File.join(tmpdir, "solo.json") + File.open(json_attribs, "w") { |f| f.puts(spec.to_json) } + + id = fork do + proxy_env = [] + # Setup proxy + %w(http_proxy https_proxy no_proxy).each do |env_var| + if ENV[env_var] || ENV[env_var.upcase] + [env_var, env_var.upcase].each do |v| + proxy = "#{v}=#{ENV[v.downcase] || ENV[v.upcase]}" + proxy_env << proxy + end + end end + exec("sudo env #{proxy_env.join(" ")} chef-solo -c #{File.join(tmpdir, "solo.rb")} -j #{json_attribs} -l debug") + end - env = JSON.parse(env) - ruby_path = "#{env["ruby"]["path"]}/bin" - puts "Note: You may need to add #{ruby_path} to your path to use vmc" + pid, status = Process.waitpid2(id) + if status.exitstatus != 0 + exit status.exitstatus end - exit status.exitstatus -} + + # save the config of this deployment + FileUtils.mkdir_p(deployment_config_path) + FileUtils.chown(deployment_user, deployment_group, deployment_config_path) + + File.open(Deployment.get_config_file(deployment_config_path), "w") { |f| f.puts(spec.to_json) } + + puts "Cloudfoundry setup was successful." + if deployment_name != DEPLOYMENT_DEFAULT_NAME + puts "Config file for this deployment is in #{deployment_config_path}." + end + + ruby_path = File.join(spec["ruby"]["path"], "bin") + puts "Note: You may need to add #{ruby_path} to your path to use vmc" +end diff --git a/dev_setup/bin/vcap_defs.rb b/dev_setup/bin/vcap_defs.rb index 8b767090f..93b2dd829 100644 --- a/dev_setup/bin/vcap_defs.rb +++ b/dev_setup/bin/vcap_defs.rb @@ -1,6 +1,20 @@ -DEFAULT_DEPLOYMENT_CONFIG = "deployments/singlehost.json.erb" -DEFAULT_DEPLOYMENT_NAME = "singlehost" -DEFAULT_DEPLOYMENT_HOME = File.expand_path(File.join(ENV["HOME"], ".cloudfoundry", DEFAULT_DEPLOYMENT_NAME)) +DEPLOYMENT_DEFAULT_SPEC = "deployments/devbox.yml.erb" +DEPLOYMENT_DEFAULT_NAME = "devbox" +DEPLOYMENT_CONFIG_DIR_NAME = "config" +DEPLOYMENT_CONFIG_FILE_NAME = "deploy.json" -CONFIG_BASE_DIR = "dev_setup/.config" -DEPLOYMENT_FILE = "deploy.json" +class Deployment + class << self + def get_home(name) + File.expand_path(File.join(ENV["HOME"], ".cloudfoundry", name)) + end + + def get_config_path(home) + File.expand_path(File.join(home, DEPLOYMENT_CONFIG_DIR_NAME)) + end + + def get_config_file(config_path) + File.expand_path(File.join(config_path, DEPLOYMENT_CONFIG_FILE_NAME)) + end + end +end diff --git a/dev_setup/bin/vcap_dev b/dev_setup/bin/vcap_dev index e876f9f05..f0dcc2a6f 100755 --- a/dev_setup/bin/vcap_dev +++ b/dev_setup/bin/vcap_dev @@ -3,44 +3,61 @@ require 'erb' require 'json' require 'fileutils' +require 'optparse' require File.expand_path('vcap_defs', File.dirname(__FILE__)) script_dir = File.expand_path(File.dirname(__FILE__)) -# TODO. These could be made parameters to this script -vcap_dir = ENV["VCAP_DIR"] || File.expand_path(File.join(script_dir, "../..")) -deployment_name = ENV["VCAP_DEPLOYMENT"] || DEFAULT_DEPLOYMENT_NAME +# TODO: Once we integrate better with bin/vcap, this option parsing should +# become more robust +options = {"name" => DEPLOYMENT_DEFAULT_NAME} +opts = OptionParser.new do |opts| + opts.banner = "Usage: #{$0} [--deployment name] [--home deployment_home] [start|stop|restart|tail|status] [COMPONENT] [--no-color] [--config CONFIGDIR]" + opts.on("-d", "--deployment name", "Name of the deployment") do |n| + options["name"] = n + end + opts.on("-h", "--home path", "Home directory of the deployment") do |n| + options["home"] = n + end +end +opts.order!(ARGV) -deployment_config_dir = File.expand_path(File.join(vcap_dir, CONFIG_BASE_DIR, deployment_name)) -vcap_config_dir = File.join(deployment_config_dir, "vcap") -staging_config_dir = File.join(vcap_config_dir, "staging") +if ARGV[0].nil? || !%w[start stop restart tail status].include?(ARGV[0].downcase) + STDERR.puts "Usage: #{$0} [--deployment name] [--home deployment_home] [start|stop|restart|tail|status] [COMPONENT] [--no-color] [--config CONFIGDIR]" + exit 1 +end -unless File.exists?("#{vcap_dir}/bin/vcap") - puts "Cannot find vcap repo. Did you set the VCAP_DIR env variable?" - exit 1 +if options["home"].nil? + deployment_home = Deployment.get_home(options["name"]) +else + deployment_home = options["home"] end -unless File.exists?("#{deployment_config_dir}") - puts "Cannot find deployment #{deployment_name}. Did you set the VCAP_DEPLOYMENT and VCAP_DIR env variables?" +deployment_config_path = Deployment.get_config_path(deployment_home) + +begin + config = JSON.parse(File.read(Deployment.get_config_file(deployment_config_path))) +rescue => e + STDERR.puts "Could not parse deployment config file #{Deployment.get_config_file(deployment_config_path)}. Please specify the deployment name or the deployment home directory where to find the config file" exit 1 end -if ARGV[0].nil? || !%w[start stop restart tail status].include?(ARGV[0].downcase) - STDERR.puts "Usage: #{$0} [start|stop|restart|tail|status] [COMPONENT] [--no-color] [--config CONFIGDIR]" - exit 1 +if config["cloudfoundry"].nil? || config["cloudfoundry"]["path"].nil? + vcap_dir = File.expand_path(File.join(script_dir, "..", "..")) +else + vcap_dir = config["cloudfoundry"]["path"] end +staging_config_dir = File.join(deployment_config_path, "staging") -begin - deployment_env = JSON.parse(File.read(File.join(deployment_config_dir, DEPLOYMENT_FILE))) -rescue => e - STDERR.puts "You need to setup vcap developer environment first. Have you run vcap_dev_setup?" - exit +unless File.exists?(File.join(vcap_dir, "bin", "vcap")) + puts "Cannot find vcap repo. Please specify the deployment name or the deployment home directory where to find the config file" + exit 1 end -ruby_path = "#{deployment_env["ruby"]["path"]}/bin" -gemdir = `#{ruby_path}/gem environment gemdir`.split("\n")[0] +ruby_path = File.join(config["ruby"]["path"], "bin") +gemdir = `#{File.join(ruby_path, "gem")} environment gemdir`.split("\n")[0] -ENV["PATH"] = "#{ruby_path}:#{gemdir}/bin:#{ENV["PATH"]}" +ENV["PATH"] = "#{ruby_path}:#{File.join(gemdir, "bin")}:#{ENV["PATH"]}" # Set both http_proxy and HTTP_PROXY %w(http_proxy https_proxy no_proxy).each do |var| @@ -57,65 +74,18 @@ def exec_cmd(cmd) status.exitstatus end +ruby_binary = File.join(ruby_path, "ruby") +vcap_binary = File.join(vcap_dir, "bin", "vcap") + cmd = nil case ARGV[0].upcase when "START" - user_defined_config = true - - #XXX This will all be replaced by appropriate yml.erb files soon. - - # Setup the config files if !ARGV.include?("-c") && !ARGV.include?("--config") - puts "Setting up cloudfoundry config in #{vcap_config_dir}" - user_defined_config = false - FileUtils.mkdir_p(vcap_config_dir) - %w(cloud_controller router dea health_manager).each do |component| - FileUtils.cp("#{vcap_dir}/#{component}/config/#{component}.yml", "#{vcap_config_dir}") - end - - %w(redis mysql mongodb postgres).each do |component| - begin - FileUtils.cp("#{vcap_dir}/services/#{component}/config/#{component}_node.yml", "#{vcap_config_dir}") - FileUtils.cp("#{vcap_dir}/services/#{component}/config/#{component}_gateway.yml", "#{vcap_config_dir}") - rescue => e - end - end - - `cd #{vcap_config_dir} && sed -i.bkup -e "s%executable: /usr/bin/ruby%executable: #{deployment_env["ruby18"]["path"]}/bin/ruby%" dea.yml` - `cd #{vcap_config_dir} && sed -i.bkup -e "s%executable: ruby%executable: #{deployment_env["ruby"]["path"]}/bin/ruby%" dea.yml` - `cd #{vcap_config_dir} && sed -i.bkup -e "s%executable: node%executable: #{deployment_env["nodejs"]["dir"]}/bin/node%" dea.yml` - `cd #{vcap_config_dir} && sed -i.bkup -e "s%staging_manifests: staging/manifests%staging_manifests: #{staging_config_dir}%" cloud_controller.yml` - - - # Setup the staging manifests files - ENV["STAGING_CONFIG_DIR"]=staging_config_dir - staging_config_dir = File.join(vcap_config_dir, "staging") - FileUtils.mkdir_p(staging_config_dir) - FileUtils.cp(Dir.glob("#{vcap_dir}/cloud_controller/staging/manifests/*.yml"), "#{staging_config_dir}") - ["rails3.yml", "sinatra.yml"].each do |cfg_file| - `cd #{staging_config_dir} && sed -i.bkup -e 's%executable: "/usr/bin/ruby"%executable: "#{deployment_env["ruby18"]["path"]}/bin/ruby"%' #{cfg_file}` - `cd #{staging_config_dir} && sed -i.bkup -e 's%executable: "ruby"%executable: "#{deployment_env["ruby"]["path"]}/bin/ruby"%' #{cfg_file}` - end - `cd #{staging_config_dir} && sed -i.bkup -e "s%executable: node%executable: #{deployment_env["nodejs"]["path"]}/bin/node%" node.yml` - `cd #{staging_config_dir} && sed -i.bkup -e "s%executable: /var/vcap/runtimes/erlang-R14B02/bin/erl%executable: #{deployment_env["erlang"]["path"]}/bin/erl%" otp_rebar.yml` - - # Fixup services - `cd #{vcap_config_dir} && sed -i.bkup -e "s%mongod_path: mongod%mongod_path: #{deployment_env["mongodb"]["path"]}/bin/mongod%" mongodb_node.yml` - `cd #{vcap_config_dir} && sed -i.bkup -e "s%redis_path: redis-server%redis_path: #{deployment_env["redis"]["path"]}/bin/redis-server%" redis_node.yml` - - # Setup ccdb passwords - `cd #{vcap_config_dir} && sed -i.bkup -e "s/pass: root/pass: #{deployment_env["mysql"]["server_root_password"]}/" mysql_node.yml` - - if File.directory? "#{script_dir}/../vcap/services/postgresql/config" - `cd #{vcap_config_dir} && sed -i.bkup -e "s/9.0/8.4/g" postgresql_gateway.yml&& sed -i.bkup -e "s/user: vcap/user: postgres/" -e "s/pass: vcap/pass: #{deployment_env["postgresql"]["server_password"]}/" postgresql_node.yml` - end - end - - if user_defined_config - exec_cmd("#{ruby_path}/ruby #{vcap_dir}/bin/vcap #{ARGV.join(" ")}") + puts "Using cloudfoundry config from #{deployment_config_path}" + exec_cmd("#{ruby_binary} #{vcap_binary} #{ARGV.join(" ")} -c #{deployment_config_path}") else - exec_cmd("#{ruby_path}/ruby #{vcap_dir}/bin/vcap #{ARGV.join(" ")} -c #{vcap_config_dir}") + exec_cmd("#{ruby_binary} #{vcap_binary} #{ARGV.join(" ")}") end else - exec_cmd("#{ruby_path}/ruby #{vcap_dir}/bin/vcap #{ARGV.join(" ")}") + exec_cmd("#{ruby_binary} #{vcap_binary} #{ARGV.join(" ")}") end diff --git a/dev_setup/cookbooks/cloud_controller/README.rdoc b/dev_setup/cookbooks/cloud_controller/README.rdoc new file mode 100644 index 000000000..3de2ec7a3 --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/README.rdoc @@ -0,0 +1,8 @@ += DESCRIPTION: + += REQUIREMENTS: + += ATTRIBUTES: + += USAGE: + diff --git a/dev_setup/cookbooks/cloud_controller/attributes/default.rb b/dev_setup/cookbooks/cloud_controller/attributes/default.rb new file mode 100644 index 000000000..f0dfbdd53 --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/attributes/default.rb @@ -0,0 +1,9 @@ +default[:cloud_controller][:config_file] = "cloud_controller.yml" +default[:cloud_controller][:staging][:grails] = "grails.yml" +default[:cloud_controller][:staging][:lift] = "lift.yml" +default[:cloud_controller][:staging][:node] = "node.yml" +default[:cloud_controller][:staging][:otp_rebar] = "otp_rebar.yml" +default[:cloud_controller][:staging][:platform] = "platform.yml" +default[:cloud_controller][:staging][:rails3] = "rails3.yml" +default[:cloud_controller][:staging][:sinatra] = "sinatra.yml" +default[:cloud_controller][:staging][:spring] = "spring.yml" diff --git a/dev_setup/cookbooks/cloud_controller/metadata.rb b/dev_setup/cookbooks/cloud_controller/metadata.rb new file mode 100644 index 000000000..6fc569313 --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/metadata.rb @@ -0,0 +1,6 @@ +maintainer "VMware" +maintainer_email "support@vmware.com" +license "Apache 2.0" +description "Installs/Configures cloud_controller" +long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc')) +version "0.0.1" diff --git a/dev_setup/cookbooks/cloud_controller/recipes/default.rb b/dev_setup/cookbooks/cloud_controller/recipes/default.rb new file mode 100644 index 000000000..baad972d2 --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/recipes/default.rb @@ -0,0 +1,25 @@ +# +# Cookbook Name:: cloud_controller +# Recipe:: default +# +# Copyright 2011, VMware +# +# + +template node[:cloud_controller][:config_file] do + path File.join(node[:deployment][:config_path], node[:cloud_controller][:config_file]) + source "cloud_controller.yml.erb" + owner node[:deployment][:user] + mode 0644 +end +cf_bundle_install(File.expand_path(File.join(node["cloudfoundry"]["path"], "cloud_controller"))) + +staging_dir = File.join(node[:deployment][:config_path], "staging") +node[:cloud_controller][:staging].each_pair do |framework, config| + template config do + path File.join(staging_dir, config) + source "#{config}.erb" + owner node[:deployment][:user] + mode 0644 + end +end diff --git a/dev_setup/cookbooks/cloud_controller/templates/default/cloud_controller.yml.erb b/dev_setup/cookbooks/cloud_controller/templates/default/cloud_controller.yml.erb new file mode 100644 index 000000000..3b4d7781a --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/templates/default/cloud_controller.yml.erb @@ -0,0 +1,107 @@ +--- +external_uri: api.vcap.me +description: "VMware's Cloud Application Platform" +support_address: http://support.cloudfoundry.com +local_route: 127.0.0.1 +local_register_only: false + +# Legacy (FIXME REMOVE) +allow_external_app_uris: false + +# This dicatates what the uri namespace rules +# are for apps. Admins can overide any of the +# below accept taking a used uri. + +app_uris: + allow_external: false +# reserved_file: +# reserved_list: [www, test, dash, register, foo, bar] +# reserved_length: 3 + +external_port: 9022 #public CC port + +#nginx proxy provide multiple functions including +#offloading of file uploads/downloads. +nginx: + use_nginx: false #nginx proxy in front of CC? + #instance_socket: /tmp/cloud_controller.sock + insecure_instance_port: 9025 #debug only!!!! -- not for production use. + +# if log_file is set, it must be a fully-qualified path, +# because the bin/vcap script reads it directly from the file. +logging: + level: debug +# file: + +# Settings for the rails logger +rails_logging: + level: debug +# file: + +directories: + droplets: /var/vcap/shared/droplets + resources: /var/vcap/shared/resources + # default values, relative to Rails.root. Leading slash for full path. + staging_manifests: <%= node[:deployment][:config_path] %>/staging + + # set to true to prevent filesystem resource leaks + # nukes tmpdir on startup -- be careful! + nuke_tmp_on_startup: false + + tmpdir: /var/vcap/data/cloud_controller/tmp + +mbus: nats://localhost:4222/ +keys: + password: 'password key goes here' + token: 'token key goes here' +pid: /var/vcap/sys/run/cloudcontroller.pid +rails_environment: development +database_environment: # replaces database.yml + production: + database: cloudcontroller + host: localhost + port: 5432 + encoding: utf8 + username: postgres + password: postgres + adapter: postgresql + timeout: 2000 + template: template0 # Required for utf8 encoding + development: + adapter: sqlite3 + database: db/cloudcontroller.sqlite3 + encoding: utf8 + test: + adapter: sqlite3 + database: db/test.sqlite3 + encoding: utf8 + +staging: + max_concurrent_stagers: 10 + max_staging_runtime: 120 # secs + secure: false + +# admin support +admins: [derek@gmail.com, foobar@vmware.com] +https_required: false +https_required_for_admins: false + +# Normal user accounts +default_account_capacity: + memory: 2048 + app_uris: 4 + services: 16 + apps: 20 + +# Services we provide, and their tokens. Avoids bootstrapping DB. +builtin_services: + mysql: + token: "0xdeadbeef" + postgresql: + token: "0xdeadbeef" + redis: + token: "0xdeadbeef" + mongodb: + token: "0xdeadbeef" + rabbitmq: + token: "0xdeadbeef" diff --git a/dev_setup/cookbooks/cloud_controller/templates/default/grails.yml.erb b/dev_setup/cookbooks/cloud_controller/templates/default/grails.yml.erb new file mode 100644 index 000000000..e2ea61164 --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/templates/default/grails.yml.erb @@ -0,0 +1,20 @@ +--- +name: "grails" +runtimes: + - "java": + description: "Java 6" + version: "1.6" + executable: "java" + default: true +app_servers: + - "tomcat": + description: "Tomcat" + executable: "false" + default: true +detection: + - "*.war": true # TODO - this thinks everything with an XML file is Spring +staged_services: + - "name": "mysql" + "version": "*" + - "name": "postgresql" + "version": "*" diff --git a/dev_setup/cookbooks/cloud_controller/templates/default/lift.yml.erb b/dev_setup/cookbooks/cloud_controller/templates/default/lift.yml.erb new file mode 100644 index 000000000..0e64ae9b7 --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/templates/default/lift.yml.erb @@ -0,0 +1,18 @@ +--- +name: "lift" +runtimes: + - "java": + description: "Java 6" + version: "1.6" + executable: "java" + default: true +app_servers: + - "tomcat": + description: "Tomcat" + executable: "false" + default: true +detection: + - "*.war": true +staged_services: + - "name": "mysql" + "version": "*" diff --git a/dev_setup/cookbooks/cloud_controller/templates/default/node.yml.erb b/dev_setup/cookbooks/cloud_controller/templates/default/node.yml.erb new file mode 100644 index 000000000..a75f883cc --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/templates/default/node.yml.erb @@ -0,0 +1,12 @@ +--- +name: "node" +runtimes: + - node: + version: '0.4.5' + description: 'Node.js' + executable: <%= node[:nodejs][:path] %>/bin/node + default: true +app_servers: +detection: + - "*.js": '.' +staged_services: diff --git a/dev_setup/cookbooks/cloud_controller/templates/default/otp_rebar.yml.erb b/dev_setup/cookbooks/cloud_controller/templates/default/otp_rebar.yml.erb new file mode 100644 index 000000000..fbb66a269 --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/templates/default/otp_rebar.yml.erb @@ -0,0 +1,12 @@ +--- +name: "otp_rebar" +runtimes: + - erlangR14B02: + version: 'R14B02' + description: 'Erlang R14B02' + executable: <%= node[:erlang][:path] %>/bin/erl + default: true +app_servers: +detection: + - "releases/*/*.rel": '.' +staged_services: diff --git a/dev_setup/cookbooks/cloud_controller/templates/default/platform.yml.erb b/dev_setup/cookbooks/cloud_controller/templates/default/platform.yml.erb new file mode 100644 index 000000000..ee8928676 --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/templates/default/platform.yml.erb @@ -0,0 +1,3 @@ +--- +cache: /var/vcap.local/staging +runtime: # if nil, determined at load time by default 'ruby' diff --git a/dev_setup/cookbooks/cloud_controller/templates/default/rails3.yml.erb b/dev_setup/cookbooks/cloud_controller/templates/default/rails3.yml.erb new file mode 100644 index 000000000..e50c425a8 --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/templates/default/rails3.yml.erb @@ -0,0 +1,33 @@ +--- +name: "rails3" +runtimes: + - "ruby18": + version: "1.8.7" # FIXME change to 1.8.7-p334 + description: "Ruby 1.8.7" + executable: "<%= node[:ruby18][:path] %>/bin/ruby" + default: true + environment: + rails_env: "production" + bundle_gemfile: + rack_env: "production" + - "ruby19": + version: "1.9.2p180" + description: "Ruby 1.9.2" + executable: "<%= node[:ruby][:path] %>/bin/ruby" + environment: + rails_env: "production" + bundle_gemfile: + rack_env: "production" +app_servers: + - "thin": + description: "Thin" + executable: false + default: true +detection: + - "config/application.rb": true + - "config/environment.rb": true +staged_services: + - "name": "mysql" + "version": "*" + - "name": "postgresql" + "version": "*" diff --git a/dev_setup/cookbooks/cloud_controller/templates/default/sinatra.yml.erb b/dev_setup/cookbooks/cloud_controller/templates/default/sinatra.yml.erb new file mode 100644 index 000000000..6896e0a8d --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/templates/default/sinatra.yml.erb @@ -0,0 +1,35 @@ +--- +name: "sinatra" +runtimes: + - "ruby18": + version: "1.8.7" # FIXME change to 1.8.7-p334 + description: "Ruby 1.8.7" + executable: "<%= node[:ruby18][:path] %>/bin/ruby" + default: true + environment: + rails_env: "production" + bundle_gemfile: + rack_env: "production" + - "ruby19": + version: "1.9.2p180" + description: "Ruby 1.9.2" + executable: "<%= node[:ruby][:path] %>/bin/ruby" + environment: + rails_env: "production" + bundle_gemfile: + rack_env: "production" +app_servers: + - "thin": + description: "Thin" + executable: false # determined during staging + default: true +detection: + - "*.rb": "require 'sinatra'|require \"sinatra\"" # .rb files in the root dir containing a require? + - "config/environment.rb": false # and config/environment.rb must not exist +staged_services: + - "name": "mysql" + "version": "*" + - "name": "postgresql" + "version": "*" + - "name": "redis" + "version": "2" diff --git a/dev_setup/cookbooks/cloud_controller/templates/default/spring.yml.erb b/dev_setup/cookbooks/cloud_controller/templates/default/spring.yml.erb new file mode 100644 index 000000000..127635996 --- /dev/null +++ b/dev_setup/cookbooks/cloud_controller/templates/default/spring.yml.erb @@ -0,0 +1,20 @@ +--- +name: "spring" +runtimes: + - "java": + description: "Java 6" + version: "1.6" + executable: "java" + default: true +app_servers: + - "tomcat": + description: "Tomcat" + executable: "false" + default: true +detection: + - "*.war": true # TODO - this thinks everything with an XML file is Spring +staged_services: + - "name": "mysql" + "version": "*" + - "name": "postgresql" + "version": "*" diff --git a/dev_setup/cookbooks/cloudfoundry/attributes/default.rb b/dev_setup/cookbooks/cloudfoundry/attributes/default.rb index db3772673..7d8e4c750 100644 --- a/dev_setup/cookbooks/cloudfoundry/attributes/default.rb +++ b/dev_setup/cookbooks/cloudfoundry/attributes/default.rb @@ -1,4 +1,3 @@ default[:cloudfoundry][:repo] = "https://github.com/cloudfoundry/vcap.git" default[:cloudfoundry][:revision] = "HEAD" default[:cloudfoundry][:path] = "/var/vcap/src/vcap" -default[:cloudfoundry][:user] = "vcap" diff --git a/dev_setup/cookbooks/cloudfoundry/libraries/cloudfoundry.rb b/dev_setup/cookbooks/cloudfoundry/libraries/cloudfoundry.rb new file mode 100644 index 000000000..b95ad54e5 --- /dev/null +++ b/dev_setup/cookbooks/cloudfoundry/libraries/cloudfoundry.rb @@ -0,0 +1,14 @@ +module CloudFoundry + def cf_bundle_install(path) + bash "Bundle install for #{path}" do + cwd path + user node[:deployment][:user] + code "#{node[:ruby][:path]}/bin/bundle install" + only_if { ::File.exist?(File.join(path, 'Gemfile')) } + end + end +end + +class Chef::Recipe + include CloudFoundry +end diff --git a/dev_setup/cookbooks/cloudfoundry/recipes/default.rb b/dev_setup/cookbooks/cloudfoundry/recipes/default.rb index a76ca5b39..63e71c272 100644 --- a/dev_setup/cookbooks/cloudfoundry/recipes/default.rb +++ b/dev_setup/cookbooks/cloudfoundry/recipes/default.rb @@ -7,8 +7,8 @@ # directory node[:cloudfoundry][:path] do - owner node[:cloudfoundry][:user] - group node[:cloudfoundry][:user] + owner node[:deployment][:user] + group node[:deployment][:group] mode "0755" action :create end @@ -16,20 +16,18 @@ git node[:cloudfoundry][:path] do repository node[:cloudfoundry][:repo] revision node[:cloudfoundry][:revision] - user node[:cloudfoundry][:user] + user node[:deployment][:user] enable_submodules true action :sync end -bash "Bundle install" do - cwd "#{node[:cloudfoundry][:path]}" - user "#{node[:cloudfoundry][:user]}" - environment ({'PATH' => "#{node[:ruby][:path]}/bin:#{ENV['PATH']}"}) - code <<-EOH - rake bundler:install - EOH +# Gem packages have transient failures, so try once while ignoring failures +gem_package "vmc" do + ignore_failure true + gem_binary "#{node[:ruby][:path]}/bin/gem" end +# Do not ignore failures gem_package "vmc" do gem_binary "#{node[:ruby][:path]}/bin/gem" end diff --git a/dev_setup/cookbooks/dea/attributes/default.rb b/dev_setup/cookbooks/dea/attributes/default.rb new file mode 100644 index 000000000..7190cc0ca --- /dev/null +++ b/dev_setup/cookbooks/dea/attributes/default.rb @@ -0,0 +1 @@ +default[:dea][:config_file] = "dea.yml" diff --git a/dev_setup/cookbooks/dea/recipes/default.rb b/dev_setup/cookbooks/dea/recipes/default.rb index f2acee1a5..7ed68c392 100644 --- a/dev_setup/cookbooks/dea/recipes/default.rb +++ b/dev_setup/cookbooks/dea/recipes/default.rb @@ -8,3 +8,12 @@ %w{lsof psmisc librmagick-ruby}.each do |pkg| package pkg end + +template node[:dea][:config_file] do + path File.join(node[:deployment][:config_path], node[:dea][:config_file]) + source "dea.yml.erb" + owner node[:deployment][:user] + mode 0644 +end + +cf_bundle_install(File.expand_path(File.join(node["cloudfoundry"]["path"], "dea"))) diff --git a/dev_setup/cookbooks/dea/templates/default/dea.yml.erb b/dev_setup/cookbooks/dea/templates/default/dea.yml.erb new file mode 100644 index 000000000..51c33e660 --- /dev/null +++ b/dev_setup/cookbooks/dea/templates/default/dea.yml.erb @@ -0,0 +1,50 @@ +--- +base_dir: /var/vcap.local/dea +local_route: 127.0.0.1 +filer_port: 12345 +mbus: nats://localhost:4222/ +intervals: + heartbeat: 10 +logging: + level: debug +multi_tenant: true +max_memory: 4096 +secure: false +enforce_ulimit: false +pid: /var/vcap/sys/run/dea.pid + +#Force droplets to be downloaded over http even when +#there is a shared directory containing the droplet. +force_http_sharing: true + +# This is where the execution agent determines its available runtimes. +# version flags are assumed to be '-v' unless noted below. + +runtimes: + ruby18: + executable: <%= node[:ruby18][:path] %>/bin/ruby + version: 1.8.7 + version_flag: "-e 'puts RUBY_VERSION'" + additional_checks: "-e 'puts RUBY_PATCHLEVEL >= 174'" + environment: + ruby19: + executable: <%= node[:ruby][:path] %>/bin/ruby + version: 1.9.2 + version_flag: "-e 'puts RUBY_VERSION'" + additional_checks: "-e 'puts RUBY_PATCHLEVEL >= 180'" + environment: + node: + executable: <%= node[:nodejs][:path] %>/bin/node + version: 0.4.[2-9] + version_flag: '-v' + environment: + java: + executable: java + version: 1.6.0 + version_flag: '-version' + environment: + erlangR14B02: + executable: <%= node[:erlang][:path] %>/bin/erl + version: ".* 5.8.3" + version_flag: '-version' + environment: diff --git a/dev_setup/cookbooks/erlang/attributes/default.rb b/dev_setup/cookbooks/erlang/attributes/default.rb index ea3995825..d9b138ad4 100644 --- a/dev_setup/cookbooks/erlang/attributes/default.rb +++ b/dev_setup/cookbooks/erlang/attributes/default.rb @@ -1,5 +1,3 @@ default[:erlang][:version] = "R14B02" default[:erlang][:source] = "http://erlang.org/download/otp_src_#{erlang[:version]}.tar.gz" default[:erlang][:path] = "/var/vcap/deploy/rubies/erlang" -default[:erlang][:user] = "erlang" -default[:erlang][:group] = "erlang" diff --git a/dev_setup/cookbooks/erlang/recipes/default.rb b/dev_setup/cookbooks/erlang/recipes/default.rb index ab9a41e13..a8560adc5 100644 --- a/dev_setup/cookbooks/erlang/recipes/default.rb +++ b/dev_setup/cookbooks/erlang/recipes/default.rb @@ -10,14 +10,14 @@ end remote_file "/tmp/otp_src_#{node[:erlang][:version]}.tar.gz" do - owner node[:erlang][:user] + owner node[:deployment][:user] source node[:erlang][:source] not_if { ::File.exists?("/tmp/otp_src_#{node[:erlang][:version]}.tar.gz") } end directory node[:erlang][:path] do - owner node[:erlang][:user] - group node[:erlang][:group] + owner node[:deployment][:user] + group node[:deployment][:group] mode "0755" recursive true action :create @@ -25,7 +25,7 @@ bash "Install Erlang" do cwd "/tmp" - user node[:erlang][:user] + user node[:deployment][:user] code <<-EOH tar xvzf otp_src_#{node[:erlang][:version]}.tar.gz cd otp_src_#{node[:erlang][:version]} diff --git a/dev_setup/cookbooks/essentials/attributes/default.rb b/dev_setup/cookbooks/essentials/attributes/default.rb index c8976607b..3e22c1b5f 100644 --- a/dev_setup/cookbooks/essentials/attributes/default.rb +++ b/dev_setup/cookbooks/essentials/attributes/default.rb @@ -1,7 +1,5 @@ default[:ruby][:version] = "1.9.2-p180" default[:ruby][:source] = "http://ftp.ruby-lang.org//pub/ruby/1.9/ruby-#{ruby[:version]}.tar.gz" default[:ruby][:path] = "/cloudfoundry/deploy/rubies/ruby-#{ruby[:version]}" -default[:ruby][:user] = "ruby" -default[:ruby][:group] = "ruby" default[:rubygems][:version] = "1.5.2" default[:rubygems][:bundler][:version] = "1.0.10" diff --git a/dev_setup/cookbooks/essentials/recipes/default.rb b/dev_setup/cookbooks/essentials/recipes/default.rb index 472f3ace7..e55bd462f 100644 --- a/dev_setup/cookbooks/essentials/recipes/default.rb +++ b/dev_setup/cookbooks/essentials/recipes/default.rb @@ -12,3 +12,19 @@ action [:install] end end + +directory node[:deployment][:config_path] do + owner node[:deployment][:user] + group node[:deployment][:group] + mode "0755" + recursive true + action :create +end + +directory File.join(node[:deployment][:config_path], "staging") do + owner node[:deployment][:user] + group node[:deployment][:group] + mode "0755" + recursive true + action :create +end diff --git a/dev_setup/cookbooks/health_manager/README.rdoc b/dev_setup/cookbooks/health_manager/README.rdoc new file mode 100644 index 000000000..3de2ec7a3 --- /dev/null +++ b/dev_setup/cookbooks/health_manager/README.rdoc @@ -0,0 +1,8 @@ += DESCRIPTION: + += REQUIREMENTS: + += ATTRIBUTES: + += USAGE: + diff --git a/dev_setup/cookbooks/health_manager/attributes/default.rb b/dev_setup/cookbooks/health_manager/attributes/default.rb new file mode 100644 index 000000000..d9ff2e52d --- /dev/null +++ b/dev_setup/cookbooks/health_manager/attributes/default.rb @@ -0,0 +1 @@ +default[:health_manager][:config_file] = "health_manager.yml" diff --git a/dev_setup/cookbooks/health_manager/metadata.rb b/dev_setup/cookbooks/health_manager/metadata.rb new file mode 100644 index 000000000..d4050d3f8 --- /dev/null +++ b/dev_setup/cookbooks/health_manager/metadata.rb @@ -0,0 +1,6 @@ +maintainer "VMware" +maintainer_email "support@vmware.com" +license "Apache 2.0" +description "Installs/Configures health_manager" +long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc')) +version "0.0.1" diff --git a/dev_setup/cookbooks/health_manager/recipes/default.rb b/dev_setup/cookbooks/health_manager/recipes/default.rb new file mode 100644 index 000000000..d34b02e4c --- /dev/null +++ b/dev_setup/cookbooks/health_manager/recipes/default.rb @@ -0,0 +1,14 @@ +# +# Cookbook Name:: health_manager +# Recipe:: default +# +# Copyright 2011, VMware +# +template node[:health_manager][:config_file] do + path File.join(node[:deployment][:config_path], node[:health_manager][:config_file]) + source "health_manager.yml.erb" + owner node[:deployment][:user] + mode 0644 +end + +cf_bundle_install(File.expand_path(File.join(node["cloudfoundry"]["path"], "health_manager"))) diff --git a/dev_setup/cookbooks/health_manager/templates/default/health_manager.yml.erb b/dev_setup/cookbooks/health_manager/templates/default/health_manager.yml.erb new file mode 100644 index 000000000..b0924a932 --- /dev/null +++ b/dev_setup/cookbooks/health_manager/templates/default/health_manager.yml.erb @@ -0,0 +1,33 @@ +--- +local_route: 127.0.0.1 +mbus: nats://localhost:4222/ +logging: + level: debug +pid: /var/vcap/sys/run/healthmanager.pid +database_environment: # replaces database.yml + production: + database: cloudcontroller + host: localhost + port: 5432 + encoding: utf8 + username: postgres + password: postgres + adapter: postgresql + timeout: 2000 + template: template0 # Required for utf8 encoding + development: + adapter: sqlite3 + database: db/cloudcontroller.sqlite3 # sqlite3 paths are relative to CC root. + encoding: utf8 + test: + adapter: sqlite3 + database: db/test.sqlite3 + encoding: utf8 +intervals: + database_scan: 60 + droplet_lost: 30 + droplets_analysis: 10 + flapping_death: 3 + flapping_timeout: 180 + restart_timeout: 20 + stable_state: 60 diff --git a/dev_setup/cookbooks/mongodb/attributes/default.rb b/dev_setup/cookbooks/mongodb/attributes/default.rb index f97eb25ec..ffe983210 100644 --- a/dev_setup/cookbooks/mongodb/attributes/default.rb +++ b/dev_setup/cookbooks/mongodb/attributes/default.rb @@ -1,5 +1,3 @@ default[:mongodb][:version] = "1.8.1" default[:mongodb][:source] = "http://fastdl.mongodb.org/linux/mongodb-linux-#{node[:kernel][:machine]}-#{mongodb[:version]}.tgz" default[:mongodb][:path] = "/var/vcap/deploy/mongodb" -default[:mongodb][:user] = "mongodb" -default[:mongodb][:group] = "mongodb" diff --git a/dev_setup/cookbooks/mongodb/recipes/default.rb b/dev_setup/cookbooks/mongodb/recipes/default.rb index bae47b70d..016e7a88e 100644 --- a/dev_setup/cookbooks/mongodb/recipes/default.rb +++ b/dev_setup/cookbooks/mongodb/recipes/default.rb @@ -6,14 +6,14 @@ # # remote_file "/tmp/mongodb-linux-#{node[:kernel][:machine]}-#{node[:mongodb][:version]}.tgz" do - owner node[:mongodb][:user] + owner node[:deployment][:user] source node[:mongodb][:source] not_if { ::File.exists?("/tmp/mongodb-linux-#{node[:kernel][:machine]}-#{node[:mongodb][:version]}.tgz") } end directory "#{node[:mongodb][:path]}/bin" do - owner node[:mongodb][:user] - group node[:mongodb][:group] + owner node[:deployment][:user] + group node[:deployment][:group] mode "0755" recursive true action :create @@ -21,7 +21,7 @@ bash "Install Mongodb" do cwd "/tmp" - user node[:mongodb][:user] + user node[:deployment][:user] code <<-EOH tar xvzf mongodb-linux-#{node[:kernel][:machine]}-#{node[:mongodb][:version]}.tgz cd mongodb-linux-#{node[:kernel][:machine]}-#{node[:mongodb][:version]} diff --git a/dev_setup/cookbooks/nodejs/attributes/default.rb b/dev_setup/cookbooks/nodejs/attributes/default.rb index ed23e491a..3ce6e3228 100644 --- a/dev_setup/cookbooks/nodejs/attributes/default.rb +++ b/dev_setup/cookbooks/nodejs/attributes/default.rb @@ -1,5 +1,3 @@ default[:nodejs][:version] = "0.4.7" default[:nodejs][:path] = "/var/vcap/deploy/nodejs" default[:nodejs][:source] = "http://nodejs.org/dist/node-v#{nodejs[:version]}.tar.gz" -default[:nodejs][:user] = "nodejs" -default[:nodejs][:group] = "nodejs" diff --git a/dev_setup/cookbooks/nodejs/recipes/default.rb b/dev_setup/cookbooks/nodejs/recipes/default.rb index 20f32f0fd..8e30c2318 100644 --- a/dev_setup/cookbooks/nodejs/recipes/default.rb +++ b/dev_setup/cookbooks/nodejs/recipes/default.rb @@ -10,14 +10,14 @@ end remote_file "/tmp/node-v#{node[:nodejs][:version]}.tar.gz" do - owner node[:nodejs][:user] + owner node[:deployment][:user] source node[:nodejs][:source] not_if { ::File.exists?("/tmp/node-v#{node[:nodejs][:version]}.tar.gz") } end directory node[:nodejs][:path] do - owner node[:nodejs][:user] - group node[:nodejs][:group] + owner node[:deployment][:user] + group node[:deployment][:group] mode "0755" recursive true action :create @@ -25,7 +25,7 @@ bash "Install Nodejs" do cwd "/tmp" - user node[:nodejs][:user] + user node[:deployment][:user] code <<-EOH tar xzf node-v#{node[:nodejs][:version]}.tar.gz cd node-v#{node[:nodejs][:version]} diff --git a/dev_setup/cookbooks/postgresql/attributes/default.rb b/dev_setup/cookbooks/postgresql/attributes/default.rb index fda6c9a75..31649bba5 100644 --- a/dev_setup/cookbooks/postgresql/attributes/default.rb +++ b/dev_setup/cookbooks/postgresql/attributes/default.rb @@ -1 +1 @@ -default[:postgres][:server_password] = "temp" +default[:postgres][:server_root_password] = "temp" diff --git a/dev_setup/cookbooks/postgresql/recipes/default.rb b/dev_setup/cookbooks/postgresql/recipes/default.rb index 64e0b9222..5b93ddf50 100644 --- a/dev_setup/cookbooks/postgresql/recipes/default.rb +++ b/dev_setup/cookbooks/postgresql/recipes/default.rb @@ -6,13 +6,13 @@ # # -%w[postgresql libpq-dev].each do |p| - package p +%w[postgresql libpq-dev].each do |pkg| + package pkg end bash "Setup PostgreSQL" do user "postgres" code <<-EOH - /usr/bin/psql -c "alter role postgres password '#{node[:postgres][:server_password]}'" + /usr/bin/psql -c "alter role postgres password '#{node[:postgres][:server_root_password]}'" EOH end diff --git a/dev_setup/cookbooks/redis/recipes/default.rb b/dev_setup/cookbooks/redis/recipes/default.rb index 69595facb..8dc6942a9 100644 --- a/dev_setup/cookbooks/redis/recipes/default.rb +++ b/dev_setup/cookbooks/redis/recipes/default.rb @@ -1,19 +1,19 @@ remote_file "/tmp/redis-#{node[:redis][:version]}.tar.gz" do - owner node[:redis][:runner] + owner node[:deployment][:user] source "http://redis.googlecode.com/files/redis-#{node[:redis][:version]}.tar.gz" not_if { ::File.exists?("/tmp/redis-#{node[:redis][:version]}.tar.gz") } end directory "#{node[:redis][:path]}" do - owner node[:redis][:runner] - group node[:redis][:runner] + owner node[:deployment][:user] + group node[:deployment][:user] mode "0755" end %w[bin etc var].each do |dir| directory "#{node[:redis][:path]}/#{dir}" do - owner node[:redis][:runner] - group node[:redis][:runner] + owner node[:deployment][:user] + group node[:deployment][:user] mode "0755" recursive true action :create @@ -22,7 +22,7 @@ bash "Install Redis" do cwd "/tmp" - user node[:redis][:runner] + user node[:deployment][:user] code <<-EOH tar xzf redis-#{node[:redis][:version]}.tar.gz cd redis-#{node[:redis][:version]} @@ -38,6 +38,6 @@ template "#{node[:redis][:path]}/etc/redis.conf" do source "redis.conf.erb" mode 0600 - owner node[:redis][:runner] - group node[:redis][:runner] + owner node[:deployment][:user] + group node[:deployment][:user] end diff --git a/dev_setup/cookbooks/router/README.rdoc b/dev_setup/cookbooks/router/README.rdoc new file mode 100644 index 000000000..3de2ec7a3 --- /dev/null +++ b/dev_setup/cookbooks/router/README.rdoc @@ -0,0 +1,8 @@ += DESCRIPTION: + += REQUIREMENTS: + += ATTRIBUTES: + += USAGE: + diff --git a/dev_setup/cookbooks/router/attributes/default.rb b/dev_setup/cookbooks/router/attributes/default.rb new file mode 100644 index 000000000..16894f6f7 --- /dev/null +++ b/dev_setup/cookbooks/router/attributes/default.rb @@ -0,0 +1 @@ +default[:router][:config_file] = "router.yml" diff --git a/dev_setup/cookbooks/router/metadata.rb b/dev_setup/cookbooks/router/metadata.rb new file mode 100644 index 000000000..741e096d9 --- /dev/null +++ b/dev_setup/cookbooks/router/metadata.rb @@ -0,0 +1,6 @@ +maintainer "VMware" +maintainer_email "support@vmware.com" +license "Apache 2.0" +description "Installs/Configures router" +long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc')) +version "0.0.1" diff --git a/dev_setup/cookbooks/router/recipes/default.rb b/dev_setup/cookbooks/router/recipes/default.rb new file mode 100644 index 000000000..3911a97c1 --- /dev/null +++ b/dev_setup/cookbooks/router/recipes/default.rb @@ -0,0 +1,14 @@ +# +# Cookbook Name:: router +# Recipe:: default +# +# Copyright 2011, VMware +# +template node[:router][:config_file] do + path File.join(node[:deployment][:config_path], node[:router][:config_file]) + source "router.yml.erb" + owner node[:deployment][:user] + mode 0644 +end + +cf_bundle_install(File.expand_path(File.join(node["cloudfoundry"]["path"], "router"))) diff --git a/dev_setup/cookbooks/router/templates/default/router.yml.erb b/dev_setup/cookbooks/router/templates/default/router.yml.erb new file mode 100644 index 000000000..5d6b1ccb8 --- /dev/null +++ b/dev_setup/cookbooks/router/templates/default/router.yml.erb @@ -0,0 +1,7 @@ +port: 2222 +inet: 0.0.0.0 +sock: /tmp/router.sock +mbus: nats://localhost:4222 +logging: + level: info +pid: /var/vcap/sys/run/router.pid diff --git a/dev_setup/cookbooks/ruby/attributes/default.rb b/dev_setup/cookbooks/ruby/attributes/default.rb index 7cb1106f8..cdb8822c9 100644 --- a/dev_setup/cookbooks/ruby/attributes/default.rb +++ b/dev_setup/cookbooks/ruby/attributes/default.rb @@ -3,5 +3,3 @@ default[:ruby][:path] = "/var/vcap/deploy/rubies/ruby-#{ruby[:version]}" default[:rubygems][:version] = "1.7.2" default[:rubygems][:bundler][:version] = "1.0.12" -default[:ruby][:user] = "ruby" -default[:ruby][:group] = "ruby" diff --git a/dev_setup/cookbooks/ruby/recipes/default.rb b/dev_setup/cookbooks/ruby/recipes/default.rb index 88eced5d7..0db2bd795 100644 --- a/dev_setup/cookbooks/ruby/recipes/default.rb +++ b/dev_setup/cookbooks/ruby/recipes/default.rb @@ -10,14 +10,14 @@ end remote_file "/tmp/ruby-#{ruby_version}.tar.gz" do - owner node[:ruby][:user] + owner node[:deployment][:user] source ruby_source not_if { ::File.exists?("/tmp/ruby-#{ruby_version}.tar.gz") } end directory ruby_path do - owner node[:ruby][:user] - group node[:ruby][:group] + owner node[:deployment][:user] + group node[:deployment][:group] mode "0755" recursive true action :create @@ -25,7 +25,7 @@ bash "Install Ruby" do cwd "/tmp" - user node[:ruby][:user] + user node[:deployment][:user] code <<-EOH tar xzf ruby-#{ruby_version}.tar.gz cd ruby-#{ruby_version} @@ -39,14 +39,14 @@ end remote_file "/tmp/rubygems-#{rubygems_version}.tgz" do - owner node[:ruby][:user] + owner node[:deployment][:user] source "http://production.cf.rubygems.org/rubygems/rubygems-#{rubygems_version}.tgz" not_if { ::File.exists?("/tmp/rubygems-#{rubygems_version}.tgz") } end bash "Install RubyGems" do cwd "/tmp" - user node[:ruby][:user] + user node[:deployment][:user] code <<-EOH tar xzf rubygems-#{rubygems_version}.tgz cd rubygems-#{rubygems_version} @@ -68,17 +68,9 @@ gem_binary "#{ruby_path}/bin/gem" end -# Workaround for random failures while installing gems. Try first while ignoring -# failures. -# Looks like newer versions of chef support a "retries" option -%w[ rack eventmachine thin sinatra mysql pg].each do |gem| - gem_package gem do - ignore_failure true - gem_binary "#{ruby_path}/bin/gem" - end -end - -# Dont ignore failures +# The default chef installed with Ubuntu 10.04 does not support the "retries" option +# for gem_package. It may be a good idea to add/use that option once the ubuntu +# chef package gets updated. %w[ rack eventmachine thin sinatra mysql pg].each do |gem| gem_package gem do gem_binary "#{ruby_path}/bin/gem" diff --git a/dev_setup/cookbooks/services/README.rdoc b/dev_setup/cookbooks/services/README.rdoc new file mode 100644 index 000000000..3de2ec7a3 --- /dev/null +++ b/dev_setup/cookbooks/services/README.rdoc @@ -0,0 +1,8 @@ += DESCRIPTION: + += REQUIREMENTS: + += ATTRIBUTES: + += USAGE: + diff --git a/dev_setup/cookbooks/services/metadata.rb b/dev_setup/cookbooks/services/metadata.rb new file mode 100644 index 000000000..f1353d780 --- /dev/null +++ b/dev_setup/cookbooks/services/metadata.rb @@ -0,0 +1,6 @@ +maintainer "VMware" +maintainer_email "support@vmware.com" +license "Apache 2.0" +description "Installs/Configures services" +long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc')) +version "0.0.1" diff --git a/dev_setup/cookbooks/services/recipes/default.rb b/dev_setup/cookbooks/services/recipes/default.rb new file mode 100644 index 000000000..f6f809965 --- /dev/null +++ b/dev_setup/cookbooks/services/recipes/default.rb @@ -0,0 +1,19 @@ +# +# Cookbook Name:: services +# Recipe:: default +# +# Copyright 2011, VMware +# + +node[:services].each do |service| + ["#{service}_node.yml", "#{service}_gateway.yml", "#{service}_backup.yml"].each do |f| + template f do + path File.join(node[:deployment][:config_path], f) + source "#{f}.erb" + owner node[:deployment][:user] + mode 0644 + end + end + + cf_bundle_install(File.expand_path(File.join(node[:cloudfoundry][:path], "services", service))) +end diff --git a/dev_setup/cookbooks/services/templates/default/mongodb_backup.yml.erb b/dev_setup/cookbooks/services/templates/default/mongodb_backup.yml.erb new file mode 100644 index 000000000..a97f7bf00 --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/mongodb_backup.yml.erb @@ -0,0 +1,8 @@ +service_name: mongodb +backup_base_dir: /mnt/nfs/servicebackup/ +local_db: sqlite3:/var/vcap/services/mongodb/mongodb_node.db +service_base_dir: /var/vcap/services/mongodb/instances/ +mongodump_path: mongodump +log_level: DEBUG +log_file: /tmp/mongodb_backup.log +timeout: 600 diff --git a/dev_setup/cookbooks/services/templates/default/mongodb_gateway.yml.erb b/dev_setup/cookbooks/services/templates/default/mongodb_gateway.yml.erb new file mode 100644 index 000000000..476a47fa6 --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/mongodb_gateway.yml.erb @@ -0,0 +1,15 @@ +--- +# cloud_controller_uri: api.vcap.me +service: + name: mongodb + version: "1.8" + description: 'MongoDB NoSQL store' + plans: ['free'] + tags: ['mongodb', 'mongodb-1.6', 'nosql'] +host: localhost +index: 0 +token: "0xdeadbeef" +mbus: nats://localhost:4222 +log_level: DEBUG +pid: /var/vcap/sys/run/mongodb_service.pid +# allow_over_provisioning: false diff --git a/dev_setup/cookbooks/services/templates/default/mongodb_node.yml.erb b/dev_setup/cookbooks/services/templates/default/mongodb_node.yml.erb new file mode 100644 index 000000000..0258ef02f --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/mongodb_node.yml.erb @@ -0,0 +1,16 @@ +--- +local_db: sqlite3:/var/vcap/services/mongodb/mongodb_node.db +mbus: nats://localhost:4222 +index: 0 +base_dir: /var/vcap/services/mongodb/instances +log_level: DEBUG +pid: /var/vcap/sys/run/mongodb_node.pid +available_memory: 4096 +max_memory: 128 +node_id: mongodb_node_1 +mongod_path: <%= node[:mongodb][:path] %>/bin/mongod +mongorestore_path: mongorestore +port_range: + first: 25001 + last: 45000 +migration_nfs: /mnt/migration diff --git a/dev_setup/cookbooks/services/templates/default/mysql_backup.yml.erb b/dev_setup/cookbooks/services/templates/default/mysql_backup.yml.erb new file mode 100644 index 000000000..26534c1a7 --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/mysql_backup.yml.erb @@ -0,0 +1,13 @@ +--- +service_name: mysql +backup_path: /mnt/backup +backup_cmd: mysqldump --host=:host --user=:user --password=:passwd --result-file=:full_path/:name.sql --single-transaction :name +compress_cmd: gzip :full_path/:name.sql +logfile: /tmp/mysql_backup.log +timeout: 120 +node_id: mysql_node_1 +mysql: + host: localhost + port: 3306 + user: root + pass: root diff --git a/dev_setup/cookbooks/services/templates/default/mysql_gateway.yml.erb b/dev_setup/cookbooks/services/templates/default/mysql_gateway.yml.erb new file mode 100644 index 000000000..97eb0cce5 --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/mysql_gateway.yml.erb @@ -0,0 +1,16 @@ +--- +#cloud_controller_uri: api.vcap.me +service: + name: mysql + version: "5.1" + description: 'MySQL database service' + plans: ['free'] + tags: ['mysql', 'mysql-5.1', 'relational'] +host: localhost +index: 0 +token: "0xdeadbeef" +log_level: DEBUG +mbus: nats://localhost:4222 +pid: /var/vcap/sys/run/mysql_service.pid +node_timeout: 2 +# allow_over_provisioning: false diff --git a/dev_setup/cookbooks/services/templates/default/mysql_node.yml.erb b/dev_setup/cookbooks/services/templates/default/mysql_node.yml.erb new file mode 100644 index 000000000..2ecbdc1ba --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/mysql_node.yml.erb @@ -0,0 +1,22 @@ +--- +local_db: sqlite3:/var/vcap/services/mysql/mysql_node.db +base_dir: /var/vcap/services/mysql/ +mysqldump_bin: mysqldump +gzip_bin: gzip +mysql_bin: mysql +ip_route: 127.0.0.1 +mbus: nats://localhost:4222 +index: 0 +log_level: DEBUG +pid: /var/vcap/sys/run/mysql_node.pid +available_storage: 1024 +node_id: mysql_node_1 +max_db_size: 20 +max_long_query: 3 +max_long_tx: 30 +migration_nfs: /mnt/migration +mysql: + host: localhost + port: 3306 + user: root + pass: <%= node[:mysql][:server_root_password] %> diff --git a/dev_setup/cookbooks/services/templates/default/postgresql_backup.yml.erb b/dev_setup/cookbooks/services/templates/default/postgresql_backup.yml.erb new file mode 100644 index 000000000..e25a4b6e8 --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/postgresql_backup.yml.erb @@ -0,0 +1,6 @@ +--- +service_name: postgresql +backup_path: /opt/backup_nfs/ +backup_cmd: /usr/bin/pg_dump --host=:host --username=:user --file=:full_path/:name.sql :name +compress_cmd: /bin/gzip :full_path/:name.sql +logfile: /tmp/postgresql_backup.log diff --git a/dev_setup/cookbooks/services/templates/default/postgresql_gateway.yml.erb b/dev_setup/cookbooks/services/templates/default/postgresql_gateway.yml.erb new file mode 100644 index 000000000..210a0e2df --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/postgresql_gateway.yml.erb @@ -0,0 +1,14 @@ +--- +# cloud_controller_uri: api.vcap.me +service: + name: postgresql + version: "9.0" + description: 'PostgreSQL database service' + plans: ['free'] + tags: ['postgresql', 'postgresql-9.0', 'relational'] +host: localhost +token: "0xdeadbeef" +log_level: DEBUG +mbus: nats://localhost:4222 +pid: /var/vcap/sys/run/postgresql_service.pid +node_timeout: 2 diff --git a/dev_setup/cookbooks/services/templates/default/postgresql_node.yml.erb b/dev_setup/cookbooks/services/templates/default/postgresql_node.yml.erb new file mode 100644 index 000000000..6a5ccfe70 --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/postgresql_node.yml.erb @@ -0,0 +1,18 @@ +--- +local_db: sqlite3:/var/vcap/services/postgresql/postgresql_node.db +base_dir: /var/vcap/services/postgresql/ +ip_route: 127.0.0.1 +mbus: nats://localhost:4222 +log_level: DEBUG +pid: /var/vcap/sys/run/postgresql_node.pid +available_storage: 1024 +node_id: postgresql_node_1 +max_db_size: 20 +max_long_query: 3 +max_long_tx: 30 +postgresql: + host: 127.0.0.1 + port: 5432 + user: vcap + pass: <%= node[:postgres][:server_root_password] %> + database: postgres diff --git a/dev_setup/cookbooks/services/templates/default/redis_backup.yml.erb b/dev_setup/cookbooks/services/templates/default/redis_backup.yml.erb new file mode 100644 index 000000000..5d5dd6c5b --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/redis_backup.yml.erb @@ -0,0 +1,5 @@ +service_name: redis +backup_base_dir: /mnt/appcloud +service_base_dir: /var/vcap/services/redis/instances +backup_log: /tmp/redis_backup.log +timeout: 600 diff --git a/dev_setup/cookbooks/services/templates/default/redis_gateway.yml.erb b/dev_setup/cookbooks/services/templates/default/redis_gateway.yml.erb new file mode 100644 index 000000000..4f917e2ae --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/redis_gateway.yml.erb @@ -0,0 +1,15 @@ +--- +# cloud_controller_uri: api.vcap.me +service: + name: redis + version: "2.2" + description: 'Redis key-value store service' + plans: ['free'] + tags: ['redis', 'redis-2.2', 'key-value', 'nosql'] +host: localhost +index: 0 +token: "0xdeadbeef" +log_level: DEBUG +mbus: nats://localhost:4222 +pid: /var/vcap/sys/run/redis_service.pid +# allow_over_provisioning: false diff --git a/dev_setup/cookbooks/services/templates/default/redis_node.yml.erb b/dev_setup/cookbooks/services/templates/default/redis_node.yml.erb new file mode 100644 index 000000000..df8e34bed --- /dev/null +++ b/dev_setup/cookbooks/services/templates/default/redis_node.yml.erb @@ -0,0 +1,17 @@ +--- +local_db: sqlite3:/var/vcap/services/redis/redis_node.db +mbus: nats://localhost:4222 +index: 0 +base_dir: /var/vcap/services/redis/instances +ip_route: 127.0.0.1 +log_level: DEBUG +pid: /var/vcap/sys/run/redis_node.pid +available_memory: 4096 +max_memory: 16 +max_swap: 32 +node_id: redis_node_1 +redis_server_path: <%= node[:redis][:path] %>/bin/redis-server +port_range: + first: 5000 + last: 25000 +migration_nfs: /mnt/appcloud diff --git a/dev_setup/deployments/devbox.yml.erb b/dev_setup/deployments/devbox.yml.erb new file mode 100644 index 000000000..184d04c96 --- /dev/null +++ b/dev_setup/deployments/devbox.yml.erb @@ -0,0 +1,68 @@ +--- +#deployment: + # Name of this deployment, defaults to "devbox" + # name: "some_name" + + # Defaults to $HOME/.cloudfoundry/ + # home: "/path/to/deployments/deployment_name" + + # User as which cloudfoundry will run, defaults to the user running the setup + # script + # user: "some_user" + + # Group for cloudfoundry, defaults to the group of the user running the setup + # script + # group: "some_group" + +# +#cloudfoundry: +# path: "path to the cloud foundry code, defaults to base vcap dir containing the setup script" +# revision: "Optional argument, if present specifies the version of +# cloud foundry code that should be downloaded, If absent no code is +# dowloaded. +# +cloudfoundry: + revision: "HEAD" + path: "<%= deployment_home %>/vcap" + +#------------------------------------------------------------ +#NOTE: There are no default values for the following options. +#------------------------------------------------------------ +ruby: + version: "1.9.2-p180" + path: "<%= deployment_home %>/deploy/rubies/ruby-<%= @ruby_version %>" +ruby18: + version: "1.8.7-p334" + path: "<%= deployment_home %>/deploy/rubies/ruby-<%= @ruby18_version %>" +rubygems: + version: "1.5.2" + bundler: + version: "1.0.10" + rake: + version: "0.8.7" +mongodb: + version: "1.8.1" + path: "<%= deployment_home %>/deploy/mongodb" +redis: + version: "2.2.4" + path: "<%= deployment_home %>/deploy/redis" + runner: "<%= deployment_user %>" +nodejs: + version: "0.4.8" + path: "<%= deployment_home %>/deploy/nodejs" +nginx: + vcap_log: "<%= deployment_home %>/sys/log/vcap.access.log" +mysql: + server_root_password: "root" + server_repl_password: "root" + bind_address: "127.0.0.1" +postgresql: + server_root_password: "root" +erlang: + version: "R14B02" + path: "<%= deployment_home %>/deploy/erlang" +services: + - redis + - mysql + - mongodb + - postgresql diff --git a/dev_setup/deployments/singlehost.json.erb b/dev_setup/deployments/singlehost.json.erb deleted file mode 100644 index 0f8be8da1..000000000 --- a/dev_setup/deployments/singlehost.json.erb +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name" : "singlehost", - "run_list": <%= run_list.to_json %>, - "ruby": { "version": "1.9.2-p180", - "path": "<%= deployment_home %>/deploy/rubies/ruby-<%= @ruby_version %>", - "user": "<%= deployment_user %>", - "group": "<%= deployment_group %>" }, - "ruby18": { "version": "1.8.7-p334", - "path": "<%= deployment_home %>/deploy/rubies/ruby-<%= @ruby18_version %>" }, - "rubygems": { "version": "1.5.2", - "bundler": { "version": "1.0.10" }, - "rake": { "version": "0.8.7" } }, - "mongodb": { "version": "1.8.1", - "path": "<%= deployment_home %>/deploy/mongodb", - "user": "<%= deployment_user %>", - "group": "<%= deployment_group %>" }, - "redis": { "version": "2.2.4", - "path": "<%= deployment_home %>/deploy/redis", - "runner": "<%= deployment_user %>" }, - "nodejs": { "version": "0.4.8", - "path": "<%= deployment_home %>/deploy/nodejs", - "user": "<%= deployment_user %>", - "group": "<%= deployment_group %>" }, - "nginx": { "vcap_log": "<%= deployment_home %>/sys/log/vcap.access.log" }, - "mysql" : { "server_debian_password" : "root", - "server_root_password": "root", - "server_repl_password": "root", - "bind_address": "127.0.0.1"}, - "postgresql" : { "server_password" : "root"}, - "erlang": { "version": "R14B02", - "path": "<%= deployment_home %>/deploy/erlang", - "user" : "<%= deployment_user %>", - "group" : "<%= deployment_group %>"}, - "cloudfoundry": { "revision": "HEAD", - "path": "<%= deployment_home %>/vcap", - "user": "<%= deployment_user %>"} -} diff --git a/dev_setup/roles/cc.json b/dev_setup/roles/cloud_controller.json similarity index 74% rename from dev_setup/roles/cc.json rename to dev_setup/roles/cloud_controller.json index 56f83ae4a..9a8b0e56a 100644 --- a/dev_setup/roles/cc.json +++ b/dev_setup/roles/cloud_controller.json @@ -1,5 +1,5 @@ { - "name": "cc", + "name": "cloud_controller", "default_attributes": {}, "override_attributes": {}, "json_class": "Chef::Role", @@ -9,5 +9,6 @@ "recipe[ruby]", "recipe[postgresql]", "recipe[mysql::server]", - "recipe[mysql]" ] + "recipe[mysql]", + "recipe[cloud_controller]"] } diff --git a/dev_setup/roles/router.json b/dev_setup/roles/router.json index d6432974d..b7cd0cc63 100644 --- a/dev_setup/roles/router.json +++ b/dev_setup/roles/router.json @@ -7,5 +7,6 @@ "chef_type": "role", "run_list" : [ "recipe[essentials]", "recipe[ruby]", - "recipe[nginx]" ] + "recipe[nginx]", + "recipe[router]"] }