Class: Judo::Setup

Inherits:
Object
  • Object
show all
Defined in:
lib/judo/setup.rb

Instance Method Summary collapse

Instance Method Details

#check_setupObject



30
31
32
33
# File 'lib/judo/setup.rb', line 30

def check_setup
  abort "you are already inside a judo repository" if Judo::Config.find_judo_dir(Dir.pwd)
  abort "./.git not found - judo configurations must be kept in a git repo.  type 'git init' to setup the git repo." unless File.exists? "./.git"
end

#default_configObject



3
4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/judo/setup.rb', line 3

def default_config
    <<DEFAULT
{
  "key_name":"#{@keypair}",
  "instance_size":"m1.small",
  "ami32":"ami-bb709dd2", // public ubuntu 9.10 ami - 32 bit
  "ami64":"ami-55739e3c", // public ubuntu 9.10 ami - 64 bit
  "user":"ubuntu",
  "security_group":"judo",
  "availability_zone":"us-east-1d"
}
DEFAULT
end

#ec2Object



106
107
108
# File 'lib/judo/setup.rb', line 106

def ec2
  @ec2 ||= Judo::Config.get_ec2(@aws_access_id, @aws_secret_key)
end

#getenv(key) ⇒ Object



17
18
19
20
21
22
# File 'lib/judo/setup.rb', line 17

def getenv(key)
  printf "Looking in your environment for #{key}..."
  printf "found!" if ENV[key]
  printf "\n"
  ENV[key]
end

#initObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/judo/setup.rb', line 35

def init
  check_setup
  @aws_access_id  ||= getenv('AWS_ACCESS_KEY_ID')
  @aws_access_id  ||= getenv('AMAZON_ACCESS_KEY_ID')
  @aws_secret_key ||= getenv('AWS_SECRET_ACCESS_KEY')
  @aws_secret_key ||= getenv('AMAZON_SECRET_ACCESS_KEY')
  @s3_bucket      ||= getenv('JUDO_S3_BUCKET')
  @s3_bucket      ||= "judo_#{rand(2**64).to_s(36)}"
  begin
    @aws_access_id  = request("Please enter your AWS access key",  @aws_access_id)
    @aws_secret_key = request("Please enter your AWS secret key" , @aws_secret_key)
    @s3_bucket      = request("Please enter an S3 bucket to use",  @s3_bucket)

    setup_default_server_group
    setup_default_security_group
    setup_bucket
    setup_db
    setup_judo_config

  rescue *[Interrupt, EOFError]
    puts "\nGoodbye!"
    exit(0)
  rescue Object => e
    puts "There was an error: #{e.class}:#{e.message}"
    puts "Try again or hit CTRL-C"
    retry
  end
end

#request(query, default = "") ⇒ Object



24
25
26
27
28
# File 'lib/judo/setup.rb', line 24

def request(query, default = "")
  printf "#{query} ['#{default}']: "
  input = STDIN.readline.strip
  input.empty? and default or input 
end

#sdbObject



110
111
112
# File 'lib/judo/setup.rb', line 110

def sdb
  @sdb ||= Judo::Config.get_sdb(@aws_access_id, @aws_secret_key)
end

#setup_bucketObject



83
84
85
86
# File 'lib/judo/setup.rb', line 83

def setup_bucket
  puts "setting up an s3 bucket"
  Aws::S3.new(@aws_access_id, @aws_secret_key, :logger => Logger.new(nil)).bucket(@s3_bucket, true)
end

#setup_dbObject



64
65
66
67
68
69
70
71
72
# File 'lib/judo/setup.rb', line 64

def setup_db
  puts "Trying to connect to SimpleDB with #{@aws_access_id}"
  sdb.create_domain(Judo::Server.domain)
  sdb.create_domain(Judo::Snapshot.domain)
  sdb.create_domain("judo_config")
  olddb = sdb.get_attributes("judo_config", "judo")[:attributes]["dbversion"]
  abort "There is an existing judo database of a newer version - upgrade judo and try again" if olddb and olddb.first.to_i > Judo::Config.db_version
  sdb.put_attributes("judo_config", "judo", { "dbversion" => Judo::Config.db_version }, :replace)
end

#setup_default_security_groupObject



74
75
76
77
78
79
80
81
# File 'lib/judo/setup.rb', line 74

def setup_default_security_group
  begin
    ec2.create_security_group('judo', 'Judo')
    ec2.authorize_security_group_IP_ingress("judo", 22, 22,'tcp','0.0.0.0/0')
  rescue Aws::AwsError => e
    raise unless e.message =~ /InvalidGroup.Duplicate/
  end
end

#setup_default_server_groupObject



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/judo/setup.rb', line 88

def setup_default_server_group
  puts "Setting up default group and keypair"
  system "mkdir -p default/keypairs"

  @keypair = "judo#{ec2.describe_key_pairs.map { |k| k[:aws_key_name] }.map { |k| k =~ /^judo(\d*)/; $1.to_i }.sort.last.to_i + 1}"
  material = ec2.create_key_pair(@keypair)[:aws_material]

  File.open("default/keypairs/#{@keypair}.pem", 'w') { |f| f.write material }
  File.chmod 0600, "default/keypairs/#{@keypair}.pem"
  File.open("default/config.json","w") { |f| f.write default_config }
end

#setup_judo_configObject



100
101
102
103
104
# File 'lib/judo/setup.rb', line 100

def setup_judo_config
  puts "setting up an .judo/config.yml"
  system "mkdir .judo"
  File.open(".judo/config.yml","w") { |f| f.write({ "access_id" => @aws_access_id, "access_secret" => @aws_secret_key, "s3_bucket" => @s3_bucket }.to_yaml) }
end