setup_openshift 4.9KB

    #!/usr/bin/env ruby require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'setup_tools')) include SetupTools if ARGV.length > 0 mode = ARGV.shift else mode = '' end unless `which rhc` =~ /rhc/ puts "It looks like the 'rhc' command line tool hasn't been installed yet. Please install" puts "it with 'gem install rhc', run 'rhc setup', and then run this script again." exit 1 end def grab_openshift_config! grab_config_with_cmd!("rhc env list") end def set_env(key, value) capture("rhc env set #{key}=#{value}") end def check_login! token_file = Dir[File.join(File.expand_path('~/.openshift'), 'token_*')].first unless token_file puts "It looks like you need to log in to OpenShift. Please run 'rhc setup' before continuing a choose the option to 'Generate a token now', then run bin/setup_openshift again." exit 1 end unless (Time.now - File.stat(token_file).mtime).to_i < 60 * 60 * 24 * 5 puts "Please run 'rhc logout' and then 'rhc account' to refresh your session, then run bin/setup_openshift again." exit 1 end puts "Welcome #{`rhc account`.scan(/Login (.*?) on /).first.first}! It looks like you're logged into OpenShift." puts end check_login! info = capture("rhc app show") just_made = false if info =~ /must specify an application/i foreman_cartridge = 'http://cartreflect-claytondev.rhcloud.com/reflect?github=cantino/huginn-openshift-foreman-cartridge' cmd = "rhc app create huginn ruby-2.0 mysql-5.5 #{foreman_cartridge} -s -r tmp-huginn" puts "It looks like you don't have an OpenShift app set up yet for this repo. I can make one for you." if yes?("Would you like me to create an OpenShift app for you now in this repo?") puts "Okay, this may take a moment..." puts `#{cmd}` git_config = capture("git config --list -f tmp-huginn/.git/config").split("\n") git_config.grep(/^rhc\./).each do |line| path, value = line.split('=') puts `git config #{path} #{value}` end url = git_config.grep(/^remote\.origin\.url/).first.split('=').last puts "Adding remote #{url}" puts `git remote add openshift #{url}` puts "Removing tmp OpenShift repo" puts `rm -rf ./tmp-huginn` puts "Updating git" puts `git fetch openshift` info = capture("rhc app show") just_made = true else puts "Okay, exiting so you can do it." exit 0 end elsif info =~ /Application '.*?' not found/ puts "It looks like you've deleted your OpenShift app. If that's the case, you should" puts "edit .git/config and remove the sections under [rhc] and under [remote \"openshift\"]." exit 1 end app_name, app_url = info.scan(/^([\w\d]+) @ https?:\/\/([^\/ ]+)/i).flatten confirm_app_name app_name unless just_made grab_openshift_config! print_config set_defaults! first_time = mode =~ /^first/i unless $config['DOMAIN'] set_value 'DOMAIN', app_url, force: false first_time = true end set_value 'BUNDLE_WITHOUT', 'development:test' puts `rhc ssh huginn 'gem install bundler'` puts puts "To setup outbound email, we suggest using Gmail. See the 'Outgoing email settings' section in .env.example." puts "You'll need to set those environment variables in OpenShift using 'rhc env set VARIABLE=VALUE'" puts branch = capture("git rev-parse --abbrev-ref HEAD") if first_time || yes?("Should I push your current branch (#{branch}) to OpenShift?") puts "This may take a moment..." puts capture("git push openshift #{branch}:master -f") end if first_time puts "Restarting..." puts capture("rhc app restart") puts capture("rhc cartridge restart foreman") puts "Done!" puts puts puts "I can make an admin user on your new Huginn instance and setup some example Agents." if yes?("Should I create a new admin user and some example Agents?") done = false while !done seed_email = nag "Okay, what is your email address?" seed_username = nag "And what username would you like to login as?" seed_password = nag "Finally, what password would you like to use?", noecho: true puts "\nJust a moment..." result = capture("rhc ssh huginn 'cd $OPENSHIFT_REPO_DIR && RAILS_ENV=production bundle exec rake db:seed SEED_EMAIL=#{seed_email} SEED_USERNAME=#{seed_username} SEED_PASSWORD=#{seed_password}'") puts result if result =~ /Validation failed/ puts "ERROR:" puts puts result puts else done = true end end puts puts puts "Okay, you should be all set! Visit http://#{app_url} and login as '#{seed_username}' with your password." puts puts "If you'd like to make more users, you can visit http://#{app_url}/users/sign_up and use the invitation code:" else puts puts "Visit https://#{app_url}/users/sign_up and use the invitation code shown below:" end puts puts "\t#{$config['INVITATION_CODE']}" puts puts "We recommend that you read https://github.com/cantino/huginn/wiki/Run-Huginn-for-free-on-OpenShift and setup Pingdom to keep your app awake!" end puts puts "Done!"