ucb_ist_unix 1.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +42 -0
- data/Manifest +10 -0
- data/README +7 -0
- data/Rakefile +19 -0
- data/lib/ucb_calweb_pro.rb +15 -0
- data/lib/ucb_ist_unix.rb +6 -0
- data/lib/ucb_unix_environment.rb +166 -0
- data/lib/ucb_webfarm.rb +108 -0
- data/tasks/ucb_ist_unix.rake +9 -0
- data/ucb_ist_unix.gemspec +34 -0
- data/version.yml +1 -0
- metadata +77 -0
data/CHANGELOG
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
= UCB::Webfarm Changelog
|
2
|
+
|
3
|
+
== Version 0.4.0, 2007-10-04
|
4
|
+
|
5
|
+
* Changed to RSpec from Test::Unit
|
6
|
+
* Tests run on developer desktop (Mac and PC) and webfarm
|
7
|
+
* Removed several methods that were required for testing
|
8
|
+
* Made webfarm-only methods raise error when not called from webfarm
|
9
|
+
|
10
|
+
== Version 0.3.4, 2007-08-21
|
11
|
+
|
12
|
+
* added #mongrel_logs_dir
|
13
|
+
* added #apache_logs_dir
|
14
|
+
|
15
|
+
== Version 0.3.3, 2007-08-08
|
16
|
+
|
17
|
+
* added development_migration_environment
|
18
|
+
|
19
|
+
== Version 0.3.2, 2007-07-18
|
20
|
+
|
21
|
+
* added #rails_migration_environment
|
22
|
+
* added qa/quality_assurance/quality_assurance_migration environments
|
23
|
+
|
24
|
+
== Version 0.3.1, 2007-07-17
|
25
|
+
|
26
|
+
* added #rails_environment
|
27
|
+
|
28
|
+
== Version 0.3.0, 2007-03-05
|
29
|
+
|
30
|
+
* added #first_mongrel_port
|
31
|
+
* added #home_dir
|
32
|
+
* added #local_home_dir
|
33
|
+
* added constants for rails environments
|
34
|
+
|
35
|
+
== Version 0.2.0, 2007-02-08
|
36
|
+
|
37
|
+
* made unit tests runnable on Windows/Unix desktops and Webfarm
|
38
|
+
* added "programmer" environment which is where programmer develops applications
|
39
|
+
* added #machine_name which returns name of webfarm instance logged on to
|
40
|
+
* added #all_machines which returns all machine names in the current instance
|
41
|
+
|
42
|
+
== Version 0.1.0, Initial release
|
data/Manifest
ADDED
data/README
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
require 'hanna/rdoctask'
|
5
|
+
|
6
|
+
Echoe.new('ucb_ist_unix', '1.1.4') do |p|
|
7
|
+
p.description = "UCB Webfarm/Calweb-Pro environment utilities"
|
8
|
+
p.url = "http://ucbrb.rubyforge.org/ucb_ist_unix"
|
9
|
+
p.author = "Steven Hansen"
|
10
|
+
p.email = "runner@berkeley.edu"
|
11
|
+
p.ignore_pattern = ["svn_user.yml", "ucb_ist_unix.rake", "spec/**/**"]
|
12
|
+
p.project = "ucbrb"
|
13
|
+
p.rdoc_options = "-o doc --inline-source -T hanna lib/*.rb"
|
14
|
+
p.rdoc_pattern = ["README", "CHANGELOG", "lib/**/**"]
|
15
|
+
end
|
16
|
+
|
17
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
18
|
+
|
19
|
+
|
data/lib/ucb_ist_unix.rb
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
|
2
|
+
module UCB
|
3
|
+
# Module giving Ruby access to various attributes of the webfarm
|
4
|
+
# including environment (dev, qa, prod), user/group info and ports.
|
5
|
+
#
|
6
|
+
# `uname -n` #=> "webfarm-dev-01\n"
|
7
|
+
#
|
8
|
+
# UCB::Webfarm.machine_name #=> "webfarm-dev-01"
|
9
|
+
# UCB::Webfarm.machines #=> ["webfarm-dev-01", "webfarm-dev-02"]
|
10
|
+
#
|
11
|
+
# `id` #=> "uid=10099(a_user) gid=10099(a_group)\n"
|
12
|
+
#
|
13
|
+
# UCB::Webfarm.webfarm_id #=> 99
|
14
|
+
# UCB::Webfarm.uid #=> 10099
|
15
|
+
# UCB::Webfarm.user #=> "a_user"
|
16
|
+
# UCB::Webfarm.shared_dir #=> "/users/a_user"
|
17
|
+
# UCB::Webfarm.local_dir #=> "/users/a_user/local"
|
18
|
+
#
|
19
|
+
# UCB::Webfarm.http_port #=> 10099
|
20
|
+
# UCB::Webfarm.https_port #=> 20099
|
21
|
+
#
|
22
|
+
# UCB::Webfarm.mongrel_port_count #=> 4
|
23
|
+
# UCB::Webfarm.mongrel_ports #=> [30099, 40099, 50099, 60099]
|
24
|
+
#
|
25
|
+
module UnixEnvironment
|
26
|
+
|
27
|
+
def self.included(klass)
|
28
|
+
klass.extend(ClassMethods)
|
29
|
+
klass.extend(AbstractClassMethods)
|
30
|
+
end
|
31
|
+
|
32
|
+
module AbstractClassMethods
|
33
|
+
def environment
|
34
|
+
begin
|
35
|
+
super
|
36
|
+
rescue NoMethodError
|
37
|
+
raise NoMethodError, "Abstract method 'environment' not implemented."
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
module ClassMethods
|
43
|
+
# Returns +true+ if on Windows.
|
44
|
+
def win32?
|
45
|
+
RUBY_PLATFORM =~ /win32/
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns the machine name.
|
49
|
+
def machine_name
|
50
|
+
return "" if win32?
|
51
|
+
`uname -n`.chop
|
52
|
+
end
|
53
|
+
|
54
|
+
def unix_service
|
55
|
+
return "" if win32?
|
56
|
+
machine_name.split('-')
|
57
|
+
end
|
58
|
+
|
59
|
+
def domain_name
|
60
|
+
return "" if win32?
|
61
|
+
`domainname`.chomp.downcase
|
62
|
+
end
|
63
|
+
|
64
|
+
# Returns the user account home directory. This is on shared storage across machines.
|
65
|
+
def shared_dir
|
66
|
+
"/users/#{user}"
|
67
|
+
end
|
68
|
+
alias :home_dir :shared_dir
|
69
|
+
|
70
|
+
# Returns the local directory of the individual for your account.
|
71
|
+
# i.e., not shared across webfarm instances.
|
72
|
+
def local_dir
|
73
|
+
"/users/#{user}/local"
|
74
|
+
end
|
75
|
+
|
76
|
+
# Returns full path of the directory containing the mongrel logs.
|
77
|
+
def mongrel_log_dir
|
78
|
+
"#{local_dir}/rails/log"
|
79
|
+
end
|
80
|
+
|
81
|
+
def mongrel_pid_dir
|
82
|
+
"#{local_dir}/rails/#{user}/pid"
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns full path of the directory containing the apache logs.
|
86
|
+
def apache_log_dir
|
87
|
+
"#{local_dir}/apache2/logs"
|
88
|
+
end
|
89
|
+
|
90
|
+
# Returns the unique identifier of the account instance.
|
91
|
+
def webfarm_id
|
92
|
+
uid - 10000
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
# Returns the +gid+.
|
97
|
+
def gid
|
98
|
+
id_info(:gid)
|
99
|
+
end
|
100
|
+
|
101
|
+
# Returns the +group+.
|
102
|
+
def group
|
103
|
+
id_info(:group)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Returns the +uid+.
|
107
|
+
def uid
|
108
|
+
id_info(:uid)
|
109
|
+
end
|
110
|
+
|
111
|
+
# Returns the +user+.
|
112
|
+
def user
|
113
|
+
id_info(:user)
|
114
|
+
end
|
115
|
+
|
116
|
+
def id_info(symbol) #:nodoc:
|
117
|
+
unless @id_info
|
118
|
+
@id_info = {}
|
119
|
+
unless win32?
|
120
|
+
login = ENV['LOGNAME']
|
121
|
+
user = Etc.getpwnam(login)
|
122
|
+
group = Etc.getgrnam(login)
|
123
|
+
@id_info = {:uid => user.uid, :user => user.name, :gid => group.gid, :group => group.name }
|
124
|
+
end
|
125
|
+
end
|
126
|
+
@id_info[symbol]
|
127
|
+
end
|
128
|
+
|
129
|
+
|
130
|
+
#### Ports #####
|
131
|
+
|
132
|
+
# Returns an +Array+ (of +Integer+) of ports.
|
133
|
+
def ports
|
134
|
+
@ports ||= Array.new(6) { |i| (i*10000) + uid }
|
135
|
+
end
|
136
|
+
|
137
|
+
# Returns the Apache http port
|
138
|
+
def http_port
|
139
|
+
ports[0]
|
140
|
+
end
|
141
|
+
alias :non_ssl_port :http_port
|
142
|
+
|
143
|
+
# Returns the Apache https port.
|
144
|
+
def https_port
|
145
|
+
ports[1]
|
146
|
+
end
|
147
|
+
alias :ssl_port :https_port
|
148
|
+
|
149
|
+
# Returns ports not used by Apache in standard webfarm configurations.
|
150
|
+
def apache_ports
|
151
|
+
@apache_ports ||= [http_port, https_port]
|
152
|
+
end
|
153
|
+
|
154
|
+
# Setter for mongrel_port_count.
|
155
|
+
def mongrel_ports=(port_array)
|
156
|
+
@mongrel_ports = port_array
|
157
|
+
end
|
158
|
+
|
159
|
+
# Returns ports for mongrel processes.
|
160
|
+
def mongrel_ports
|
161
|
+
@mongrel_ports ||= (ports - apache_ports)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
166
|
+
end
|
data/lib/ucb_webfarm.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
|
2
|
+
module UCB #:nodoc:
|
3
|
+
# Module giving Ruby access to various attributes of the webfarm
|
4
|
+
# including environment (dev, qa, prod), user/group info and ports.
|
5
|
+
#
|
6
|
+
# require 'ucb_ist_unix'
|
7
|
+
#
|
8
|
+
# `domainname` #=> "dev\n"
|
9
|
+
#
|
10
|
+
# UCB::Webfarm.environment #=> "dev"
|
11
|
+
# UCB::Webfarm.dev_int? #=> true
|
12
|
+
# UCB::Webfarm.prod? #=> false
|
13
|
+
#
|
14
|
+
module Webfarm
|
15
|
+
include UCB::UnixEnvironment
|
16
|
+
|
17
|
+
# Webfarm Environments
|
18
|
+
DEV_INT_ENV = 'dev'
|
19
|
+
QA_ENV = 'qa'
|
20
|
+
PROD_ENV = 'prod'
|
21
|
+
|
22
|
+
# Rails Environments
|
23
|
+
RAILS_DEV_INTEGRATION_ENV = 'dev_integration'
|
24
|
+
RAILS_QUALITY_ASSURANCE_ENV = 'quality_assurance'
|
25
|
+
RAILS_PRODUCTION_ENV = 'production'
|
26
|
+
|
27
|
+
# Rails Migration Environments
|
28
|
+
RAILS_DEV_INTEGRATION_MIGRATION_ENV = 'dev_integration_migration'
|
29
|
+
RAILS_QUALITY_ASSURANCE_MIGRATION_ENV = 'quality_assurance_migration'
|
30
|
+
RAILS_PRODUCTION_MIGRATION_ENV = 'production_migration'
|
31
|
+
|
32
|
+
|
33
|
+
class << self
|
34
|
+
# Returns an +Array+ of the Webfarm (not Rails) environments.
|
35
|
+
def environments
|
36
|
+
@webfarm_environments ||= [DEV_INT_ENV, QA_ENV, PROD_ENV]
|
37
|
+
end
|
38
|
+
alias :webfarm_environments :environments
|
39
|
+
|
40
|
+
# Returns _webfarm_ environment.
|
41
|
+
def environment
|
42
|
+
webfarm_environments.include?(domain_name) ? domain_name : nil
|
43
|
+
end
|
44
|
+
alias :webfarm_environment :environment
|
45
|
+
|
46
|
+
def webfarm?
|
47
|
+
machine_name.split('-').first == 'webfarm'
|
48
|
+
end
|
49
|
+
|
50
|
+
# An +Array+ of all machine names for the environment.
|
51
|
+
def machines
|
52
|
+
return [] if win32?
|
53
|
+
|
54
|
+
if dev?
|
55
|
+
['localhost']
|
56
|
+
elsif dev_int?
|
57
|
+
['webfarm-dev-01', 'webfarm-dev-02']
|
58
|
+
elsif qa?
|
59
|
+
['webfarm-qa-01', 'webfarm-qa-02']
|
60
|
+
elsif prod?
|
61
|
+
['webfarm-prod-01', 'webfarm-prod-02', 'webfarm-prod-03', 'webfarm-prod-04']
|
62
|
+
else
|
63
|
+
raise(Exception, "Unrecognized Environment")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def dev?
|
68
|
+
environment.nil?
|
69
|
+
end
|
70
|
+
|
71
|
+
# Returns +true+ for dev webfarm instances
|
72
|
+
def dev_int?
|
73
|
+
environment == DEV_INT_ENV
|
74
|
+
end
|
75
|
+
|
76
|
+
# Returns +true+ for qa webfarm instances
|
77
|
+
def qa?
|
78
|
+
environment == QA_ENV
|
79
|
+
end
|
80
|
+
|
81
|
+
# Returns +true+ for prod webfarm instances
|
82
|
+
def prod?
|
83
|
+
environment == PROD_ENV
|
84
|
+
end
|
85
|
+
|
86
|
+
# Returns Rails environment corresponding to the Webfarm environment.
|
87
|
+
# Returns ENV_RAILS_DEVELOPMENT unless webfarm?
|
88
|
+
#
|
89
|
+
# Raises RuntimeError for unknown environment.
|
90
|
+
def rails_environment
|
91
|
+
return RAILS_DEV_INTEGRATION_ENV if dev_int?
|
92
|
+
return RAILS_QUALITY_ASSURANCE_ENV if qa?
|
93
|
+
return RAILS_PRODUCTION_ENV if prod?
|
94
|
+
raise "Unknown webfarm rails_environment '#{environment}'"
|
95
|
+
end
|
96
|
+
|
97
|
+
# Returns environment to use for migrations. Allows different
|
98
|
+
# credentials for migrations than for web app.
|
99
|
+
def rails_migration_environment
|
100
|
+
return RAILS_DEV_INTEGRATION_MIGRATION_ENV if dev_int?
|
101
|
+
return RAILS_QUALITY_ASSURANCE_MIGRATION_ENV if qa?
|
102
|
+
return RAILS_PRODUCTION_MIGRATION_ENV if prod?
|
103
|
+
raise "Unknown webfarm rails_migration_environment '#{environment}'"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'spec/rake/spectask'
|
3
|
+
require 'svn/rake/svntask'
|
4
|
+
|
5
|
+
svn = Rake::SVN::ProjectTask.new() do |s|
|
6
|
+
s.method = "svn+ssh"
|
7
|
+
s.project_url = "svn.berkeley.edu/svn/ist-svn/berkeley/projects/commons/ruby/ucb-webfarm"
|
8
|
+
s.username = YAML.load_file('svn_user.yml')['svn_username']
|
9
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{ucb_ist_unix}
|
5
|
+
s.version = "1.1.4"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Steven Hansen"]
|
9
|
+
s.date = %q{2009-04-15}
|
10
|
+
s.description = %q{UCB Webfarm/Calweb-Pro environment utilities}
|
11
|
+
s.email = %q{runner@berkeley.edu}
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "README", "lib/ucb_calweb_pro.rb", "lib/ucb_ist_unix.rb", "lib/ucb_unix_environment.rb", "lib/ucb_webfarm.rb"]
|
13
|
+
s.files = ["CHANGELOG", "Manifest", "README", "Rakefile", "lib/ucb_calweb_pro.rb", "lib/ucb_ist_unix.rb", "lib/ucb_unix_environment.rb", "lib/ucb_webfarm.rb", "tasks/ucb_ist_unix.rake", "version.yml", "ucb_ist_unix.gemspec"]
|
14
|
+
s.has_rdoc = true
|
15
|
+
s.homepage = %q{http://ucbrb.rubyforge.org/ucb_ist_unix}
|
16
|
+
s.rdoc_options = ["-o doc --inline-source -T hanna lib/*.rb"]
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.rubyforge_project = %q{ucbrb}
|
19
|
+
s.rubygems_version = %q{1.3.1}
|
20
|
+
s.summary = %q{UCB Webfarm/Calweb-Pro environment utilities}
|
21
|
+
|
22
|
+
if s.respond_to? :specification_version then
|
23
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
+
s.specification_version = 2
|
25
|
+
|
26
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
27
|
+
s.add_development_dependency(%q<echoe>, [">= 0"])
|
28
|
+
else
|
29
|
+
s.add_dependency(%q<echoe>, [">= 0"])
|
30
|
+
end
|
31
|
+
else
|
32
|
+
s.add_dependency(%q<echoe>, [">= 0"])
|
33
|
+
end
|
34
|
+
end
|
data/version.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
version: 'rel-1.1.4'
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ucb_ist_unix
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Steven Hansen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-04-15 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: echoe
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: UCB Webfarm/Calweb-Pro environment utilities
|
26
|
+
email: runner@berkeley.edu
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- CHANGELOG
|
33
|
+
- README
|
34
|
+
- lib/ucb_calweb_pro.rb
|
35
|
+
- lib/ucb_ist_unix.rb
|
36
|
+
- lib/ucb_unix_environment.rb
|
37
|
+
- lib/ucb_webfarm.rb
|
38
|
+
files:
|
39
|
+
- CHANGELOG
|
40
|
+
- Manifest
|
41
|
+
- README
|
42
|
+
- Rakefile
|
43
|
+
- lib/ucb_calweb_pro.rb
|
44
|
+
- lib/ucb_ist_unix.rb
|
45
|
+
- lib/ucb_unix_environment.rb
|
46
|
+
- lib/ucb_webfarm.rb
|
47
|
+
- tasks/ucb_ist_unix.rake
|
48
|
+
- version.yml
|
49
|
+
- ucb_ist_unix.gemspec
|
50
|
+
has_rdoc: true
|
51
|
+
homepage: http://ucbrb.rubyforge.org/ucb_ist_unix
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options:
|
54
|
+
- -o doc --inline-source -T hanna lib/*.rb
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: "0"
|
62
|
+
version:
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "1.2"
|
68
|
+
version:
|
69
|
+
requirements: []
|
70
|
+
|
71
|
+
rubyforge_project: ucbrb
|
72
|
+
rubygems_version: 1.3.1
|
73
|
+
signing_key:
|
74
|
+
specification_version: 2
|
75
|
+
summary: UCB Webfarm/Calweb-Pro environment utilities
|
76
|
+
test_files: []
|
77
|
+
|