/
rudy.rb
146 lines (119 loc) · 3.91 KB
/
rudy.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
unless defined?(RUDY_HOME)
RUDY_HOME = File.join(File.dirname(__FILE__), '..')
RUDY_LIB = File.join(File.dirname(__FILE__), '..', 'lib')
end
#local_libs = %w{net-ssh net-scp aws-s3 caesars drydock rye storable sysinfo annoy gibbler}
#local_libs.each { |dir| $:.unshift File.join(RUDY_HOME, '..', dir, 'lib') }
#require 'rubygems'
begin; require 'json'; rescue LoadError; end # Silence!
require 'digest/md5'
require 'stringio'
require 'ostruct'
require 'logger'
require 'socket'
require 'resolv'
require 'gibbler/aliases'
require 'rudy/mixins'
require 'storable'
require 'sysinfo'
require 'attic'
require 'rye'
require 'annoy'
require 'tempfile'
require 'timeout'
require 'yaml'
# = Rudy
#
#
# Rudy is a development and deployment tool for the Amazon Elastic Compute Cloud
# (EC2). <a href="http://solutious.com/projects/rudy/getting-started">Getting Started</a> today!
#
#
module Rudy
extend self
module VERSION #:nodoc:
unless defined?(MAJOR)
MAJOR = 0.freeze
MINOR = 9.freeze
TINY = 6.freeze
PATCH = '001'.freeze
end
def self.to_s; [MAJOR, MINOR, TINY, PATCH].join('.'); end
def self.to_f; self.to_s.to_f; end
end
def Rudy.sysinfo
@@sysinfo = SysInfo.new.freeze if @@sysinfo.nil?
@@sysinfo
end
def sysinfo; Rudy.sysinfo; end
unless defined? Rudy::DOMAIN # We can assume all constants are defined
@@quiet = false
@@auto = false
@@debug = false
@@sysinfo = nil
# SimpleDB accepts dashes in the domain name on creation and with the query syntax.
# However, with select syntax it says: "The specified query expression syntax is not valid"
DOMAIN = "rudy_state".freeze
DELIM = '-'.freeze
CONFIG_DIR = File.join(Rudy.sysinfo.home, '.rudy').freeze
CONFIG_FILE = File.join(Rudy::CONFIG_DIR, 'config').freeze
SSH_KEY_DIR = File.expand_path('~/.ssh').freeze
DEFAULT_ZONE = :'us-east-1b'.freeze
DEFAULT_REGION = DEFAULT_ZONE.to_s.gsub(/[a-z]$/, '').to_sym.freeze
DEFAULT_ENVIRONMENT = :stage.freeze
DEFAULT_ROLE = :app.freeze
DEFAULT_EC2_HOST = "ec2.amazonaws.com"
DEFAULT_EC2_PORT = 443
DEFAULT_WINDOWS_FS = 'ntfs'
DEFAULT_LINUX_FS = 'ext3'
DEFAULT_WINDOWS_DEVICE = 'xvdf'
DEFAULT_LINUX_DEVICE = '/dev/sdh'
MAX_INSTANCES = 20.freeze
ID_MAP = {
:instance => 'i',
:machine => 'm',
:reservation => 'r',
:pkey => 'pk',
:volume => 'vol',
:kernel => 'aki',
:image => 'ami',
:ramdisk => 'ari',
:group => 'grp',
:log => 'log',
:key => 'key',
:dns_public => 'ec2',
:disk => 'disk',
:backup => 'back',
:snapshot => 'snap',
:cert => 'cert',
:dns_private => 'domU'
}.freeze
end
def Rudy.quiet?; @@quiet == true; end
def Rudy.enable_quiet; @@quiet = true; end
def Rudy.disable_quiet; @@quiet = false; end
def Rudy.auto?; @@auto == true; end
def Rudy.enable_auto; @@auto = true; end
def Rudy.disable_auto; @@auto = false; end
def Rudy.debug?; @@debug == true; end
def Rudy.enable_debug; @@debug = true; end
def Rudy.disable_debug; @@debug = false; end
require 'rudy/exceptions'
require 'rudy/utils' # The
require 'rudy/global' # order
require 'rudy/config' # of
require 'rudy/huxtable' # requires
autoload :AWS, 'rudy/aws' # is
autoload :Metadata, 'rudy/metadata' # super
autoload :Machines, 'rudy/machines' # important.
autoload :Backups, 'rudy/backups'
autoload :Disks, 'rudy/disks'
autoload :Routines, 'rudy/routines'
end
if Rudy.sysinfo.vm == :java
require 'java'
module Java
include_class java.net.Socket unless defined?(Java::Socket)
include_class java.net.InetSocketAddress unless defined?(Java::InetSocketAddress)
end
end