Skip to content

Instantly share code, notes, and snippets.

@coderforhire
Last active December 15, 2015 23:39
Show Gist options
  • Save coderforhire/5341636 to your computer and use it in GitHub Desktop.
Save coderforhire/5341636 to your computer and use it in GitHub Desktop.
require 'openstack/compute'
require 'clouddns'
module ProvisionServer
@queue = :provision_server
def self.perform(server_id, plan, email)
@server = Server.find_by_id(server_id)
@server.status = 'PROVISIONING'
@provisioned_server = @server.create_server(plan)
while @provisioned_server.status == 'BUILD'
@provisioned_server.refresh
sleep 5
end
if plan == 1 || plan == 4
external_ip = @provisioned_server.addresses[:public]
internal_ip = @provisioned_server.addresses[:private]
@server.update_attributes(
:domain_name => @provisioned_server.name,
:external_ip => @provisioned_server.addresses[:public][0],
:internal_ip => @provisioned_server.addresses[:private][0],
:status => 'SETUP'
)
else
@server.update_attributes(
:domain_name => @provisioned_server.name,
:external_ip => @provisioned_server.accessipv4,
:internal_ip => @provisioned_server.addresses[:private][0].address,
:status => 'SETUP'
)
end
system "knife bootstrap #{@server.external_ip} -x root"
sleep 30
system "knife ssh -a ipaddress ipaddress:#{@server.external_ip} -x root \"apt-get update\" "
sleep 120
dns = CloudDns::Client.new(:username => RACKSPACE_USER_NAME_US, :api_key => RACKSPACE_API_KEY_US, :location=> :us)
domain = dns.domain("3392521")
domain.a(:name => "#{@server.domain_name}.cloudpokerdb.com", :data => "#{@server.external_ip}", :ttl => 360)
domain.save
@node = Spice.get("/nodes/#{@server.domain_name}")
#POSTGRES INSTALL RECIPES
@node["run_list"] << "recipe[build-essential]"
@node["run_list"] << "recipe[openssl]"
@node["run_list"] << "recipe[postgresql::client]"
@node["run_list"] << "recipe[ufw]"
@node["run_list"] << "recipe[postgresql]"
@node["run_list"] << "recipe[postgresql::server]"
#ZABBIX INSTALL RECIPES
@node["run_list"] << "recipe[zabbix::default]"
@node["run_list"] << "recipe[zabbix::agent_install]"
@node["run_list"] << "recipe[zabbix::host_registration]"
Spice.put("/nodes/#{@server.domain_name}", @node)
@data_bag = Spice.data_bag("clientip")
@data_bag.update(:id => "#{@server.domain_name}", :client_ip => "0.0.0.0/0")
Spice.post("/data/clientip",@data_bag)
system "knife ssh -a ipaddress ipaddress:#{@server.external_ip} -x root \"chef-client\" "
@server.update_attributes(:status => 'ACTIVE' )
NotifyMailer.server_ready(email).deliver
end
end
class Subscription < ActiveRecord::Base
belongs_to :user
attr_accessible :user_id, :stripe_card_token, :coupon
def save_with_payment(plan, email,coupon_code)
if valid?
if coupon_code == 'LAUNCHDAY' || coupon_code == 'launchday'
customer = Stripe::Customer.create(description: "#{email}", plan: "#{plan}", card: stripe_card_token, coupon: "LAUNCHDAY")
self.stripe_customer_token = customer.id
save!
else
customer = Stripe::Customer.create(description: "#{email}", plan: "#{plan}", card: stripe_card_token )
self.stripe_customer_token = customer.id
save!
end
end
rescue Stripe::InvalidRequestError => e
logger.error "Stripe error while creating customer: #{e.message}"
errors.add :base, "There was a problem with your credit card."
false
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment