nuri 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +6 -0
- data/.travis.yml +12 -0
- data/CHANGELOG +146 -0
- data/Gemfile +3 -0
- data/LICENSE +28 -0
- data/README.md +64 -0
- data/Rakefile +15 -0
- data/VERSION +1 -0
- data/bin/delete_modules +11 -0
- data/bin/install_agent +18 -0
- data/bin/install_module +65 -0
- data/bin/nuri +519 -0
- data/bin/nuri.old +183 -0
- data/bin/push_model +16 -0
- data/examples/.gitignore +3 -0
- data/examples/bonfire.sfp +95 -0
- data/examples/bonfire/epcc.sfp +43 -0
- data/examples/bonfire/epcc0.sfp +49 -0
- data/examples/bonfire/epcc2.sfp +52 -0
- data/examples/bonfire/epcc2a.sfp +25 -0
- data/examples/bonfire/inria.sfp +72 -0
- data/examples/bonfire/inria0.sfp +49 -0
- data/examples/bonfire/inria2.sfp +71 -0
- data/examples/bonfire/inria2a.sfp +44 -0
- data/examples/bonfire/inria2b.sfp +54 -0
- data/examples/bonfire/inria2c.sfp +62 -0
- data/examples/bonfire/inria2d.sfp +71 -0
- data/examples/bonfire/inria2e.sfp +80 -0
- data/examples/bonfire/main.sfp +33 -0
- data/examples/bonfire/old/bonfire-1-1-1.sfp +76 -0
- data/examples/bonfire/old/bonfire-1-10-1.sfp +77 -0
- data/examples/bonfire/old/bonfire-1-2-1.sfp +58 -0
- data/examples/bonfire/old/bonfire-1-3-1.sfp +61 -0
- data/examples/bonfire/old/bonfire-1-4-1.sfp +64 -0
- data/examples/bonfire/old/bonfire-1-5-1.sfp +67 -0
- data/examples/bonfire/old/bonfire-1-6-1.sfp +82 -0
- data/examples/bonfire/old/bonfire-1-7-1.sfp +82 -0
- data/examples/bonfire/old/bonfire-1-8-1.sfp +79 -0
- data/examples/bonfire/old/bonfire-1-9-1.sfp +83 -0
- data/examples/bonfire/old/wp-test1a.sfp +38 -0
- data/examples/bonfire/old/wp-test1b.sfp +18 -0
- data/examples/bonfire/old/wp-test1c.sfp +7 -0
- data/examples/bonfire/old/wp-test2.sfp +47 -0
- data/examples/bonfire/old3/bonfire-epcc.sfp +57 -0
- data/examples/bonfire/old3/bonfire-inria.sfp +72 -0
- data/examples/bonfire/old3/bonfire-master.sfp +18 -0
- data/examples/bonfire/old3/bonfire.sfp +23 -0
- data/examples/bonfire/old3/bonfire2.sfp +49 -0
- data/examples/bonfire/old3/bonfire3.sfp +76 -0
- data/examples/bonfire/old3/bonfire4.sfp +78 -0
- data/examples/bonfire/old3/bonfire5.sfp +34 -0
- data/examples/bonfire/old3/bonfire5b.sfp +84 -0
- data/examples/bonfire/old3/hpvm6.sfp +22 -0
- data/examples/bonfire/old3/model.json +1 -0
- data/examples/bonfire/old3/test0.sfp +16 -0
- data/examples/bonfire/old3/test1.sfp +5 -0
- data/examples/bonfire/old3/test10.sfp +5 -0
- data/examples/bonfire/old3/test2.sfp +18 -0
- data/examples/bonfire/old3/test3.sfp +10 -0
- data/examples/bonfire/old3/test4.sfp +11 -0
- data/examples/bonfire/old3/test5.sfp +18 -0
- data/examples/bonfire/old3/test6.sfp +19 -0
- data/examples/bonfire/old3/test7.sfp +34 -0
- data/examples/bonfire/old3/test8.sfp +5 -0
- data/examples/bonfire/old3/test9.sfp +16 -0
- data/examples/bonfire/old3/wordpress-test-cluster.sfp +38 -0
- data/examples/bonfire/old3/wordpress-test.sfp +22 -0
- data/examples/bonfire/old3/wp-test-2.sfp +49 -0
- data/examples/bonfire/test.sfp +13 -0
- data/examples/generator.rb +66 -0
- data/examples/hadoop2.sfp +20 -0
- data/examples/hpcloud.sfp +18 -0
- data/examples/run.rb +17 -0
- data/examples/test.inc +0 -0
- data/examples/test.sfp +11 -0
- data/lib/naas/d3.js +5 -0
- data/lib/naas/d3.v3.min.js +5 -0
- data/lib/naas/index.css +0 -0
- data/lib/naas/index.html +18 -0
- data/lib/naas/index.js +18 -0
- data/lib/naas/jquery-1.10.2.min.js +6 -0
- data/lib/naas/jquery.js +6 -0
- data/lib/naas/naas.rb +160 -0
- data/lib/nuri.rb +62 -0
- data/lib/nuri/choreographer.rb +151 -0
- data/lib/nuri/constraint_helper.rb +9 -0
- data/lib/nuri/directory.rb +40 -0
- data/lib/nuri/master.rb +725 -0
- data/lib/nuri/net_helper.rb +65 -0
- data/lib/nuri/orchestrator.rb +224 -0
- data/lib/nuri/server.rb +212 -0
- data/modules/.gitignore +4 -0
- data/modules/apache/apache.rb +255 -0
- data/modules/apache/apache.rb.old +167 -0
- data/modules/apache/apache.sfp +146 -0
- data/modules/apache/apache.sfp.future +100 -0
- data/modules/apache/load_balancer +20 -0
- data/modules/apache/model.json +1 -0
- data/modules/apache/test.sfp +8 -0
- data/modules/aptpackage/aptpackage.rb +82 -0
- data/modules/aptpackage/aptpackage.sfp +5 -0
- data/modules/bonfire/.gitignore +2 -0
- data/modules/bonfire/README.md +12 -0
- data/modules/bonfire/bonfire.rb +60 -0
- data/modules/bonfire/bonfire.sfp +9 -0
- data/modules/bonfire/config.yml +4 -0
- data/modules/bonfire/helper.rb +149 -0
- data/modules/bonfire/stresstest.rb +144 -0
- data/modules/bonfire/test.sfp +8 -0
- data/modules/client/client.rb +22 -0
- data/modules/client/client.sfp +14 -0
- data/modules/cloud/cloud.rb +11 -0
- data/modules/cloud/cloud.sfp +26 -0
- data/modules/file/file.rb +91 -0
- data/modules/file/file.sfp +9 -0
- data/modules/hadoop1/core-site.xml +17 -0
- data/modules/hadoop1/hadoop-env.sh +55 -0
- data/modules/hadoop1/hadoop1.rb +384 -0
- data/modules/hadoop1/hadoop1.sfp +93 -0
- data/modules/hadoop1/hdfs-site.xml +16 -0
- data/modules/hadoop1/mapred-site.xml +17 -0
- data/modules/hadoop2/core-site.xml +31 -0
- data/modules/hadoop2/hadoop-env.sh +77 -0
- data/modules/hadoop2/hadoop2.rb +401 -0
- data/modules/hadoop2/hadoop2.sfp +114 -0
- data/modules/hadoop2/hdfs-site.xml +47 -0
- data/modules/hadoop2/mapred-site.xml +71 -0
- data/modules/hadoop2/ports +14 -0
- data/modules/hadoop2/yarn-env.sh +112 -0
- data/modules/hadoop2/yarn-site.xml +107 -0
- data/modules/hpcloud/.gitignore +2 -0
- data/modules/hpcloud/README.md +16 -0
- data/modules/hpcloud/config.yml +3 -0
- data/modules/hpcloud/example.sfp +18 -0
- data/modules/hpcloud/hpcloud.rb +241 -0
- data/modules/hpcloud/hpcloud.sfp +22 -0
- data/modules/hpcloud/test.sfp +5 -0
- data/modules/install_module +65 -0
- data/modules/machine/machine.rb +95 -0
- data/modules/machine/machine.sfp +9 -0
- data/modules/mockcloud/mockcloud.rb +20 -0
- data/modules/mockcloud/mockcloud.sfp +6 -0
- data/modules/mysql/mysql.rb +118 -0
- data/modules/mysql/mysql.sfp +38 -0
- data/modules/mysql/test.sfp +3 -0
- data/modules/node/node.rb +8 -0
- data/modules/node/node.sfp +7 -0
- data/modules/object/object.rb +7 -0
- data/modules/object/object.sfp +1 -0
- data/modules/os/os.rb +38 -0
- data/modules/os/os.sfp +11 -0
- data/modules/package/package.rb +26 -0
- data/modules/package/package.sfp +22 -0
- data/modules/package/test.sfp +6 -0
- data/modules/service/model.json +1 -0
- data/modules/service/service.rb +50 -0
- data/modules/service/service.sfp +46 -0
- data/modules/service/test.sfp +6 -0
- data/modules/tarpackage/tarpackage.rb +93 -0
- data/modules/tarpackage/tarpackage.sfp +5 -0
- data/modules/vm/vm.rb +8 -0
- data/modules/vm/vm.sfp +18 -0
- data/modules/wordpress/wordpress.rb +98 -0
- data/modules/wordpress/wordpress.sfp +34 -0
- data/modules/wordpresscluster/wordpresscluster.rb +150 -0
- data/modules/wordpresscluster/wordpresscluster.sfp +74 -0
- data/nuri.gemspec +26 -0
- metadata +281 -0
data/modules/.gitignore
ADDED
@@ -0,0 +1,255 @@
|
|
1
|
+
require 'augeas' # require package libaugeas-ruby (Ubuntu)
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__)) + '/../service/service.rb'
|
4
|
+
|
5
|
+
class Sfp::Module::Apache < Sfp::Module::Service
|
6
|
+
include Sfp::Resource
|
7
|
+
|
8
|
+
ConfigFile = '/etc/apache2/sites-available/default'
|
9
|
+
SitesEnabledDir = '/etc/apache2/sites-enabled'
|
10
|
+
LoadBalancerConfigFile = '/etc/apache2/sites-enabled/load_balancer'
|
11
|
+
InstallingLockFile = '/tmp/sfp_apache_installing.lock'
|
12
|
+
NotRunningLockFile = '/tmp/sfp_apache_not_running.lock'
|
13
|
+
|
14
|
+
def update_state
|
15
|
+
# Call method 'update_state' of Sfp::Module::Service (superclass)
|
16
|
+
self.class.superclass.instance_method(:update_state).bind(self).call
|
17
|
+
|
18
|
+
@state['php_module'] = Sfp::Module::Package.installed?('libapache2-mod-php5')
|
19
|
+
@state['php_mysql_module'] = Sfp::Module::Package.installed?('php5-mysql')
|
20
|
+
|
21
|
+
if File.exist?(InstallingLockFile)
|
22
|
+
@state['installed'] = @state['running'] = false
|
23
|
+
@state['version'] = ''
|
24
|
+
else
|
25
|
+
@state['installed'] = Sfp::Module::Package.installed?('apache2')
|
26
|
+
@state['running'] = (File.exist?(NotRunningLockFile) ? false : Sfp::Module::Service.running?('apache2'))
|
27
|
+
@state['version'] = Sfp::Module::Package.version?('apache2').to_s
|
28
|
+
end
|
29
|
+
|
30
|
+
# port
|
31
|
+
data = (File.file?("/etc/apache2/ports.conf") ? `/bin/grep -e "^Listen " /etc/apache2/ports.conf` : "")
|
32
|
+
@state['port'] = (data.length > 0 ? @state["port"] = data.split(' ')[1].to_i : 80)
|
33
|
+
|
34
|
+
# document root
|
35
|
+
data = (File.file?(ConfigFile) ? `/bin/grep -e "DocumentRoot " #{ConfigFile}` : "")
|
36
|
+
@state['document_root'] = (data.length > 0 ? data.strip.split(' ')[1] : '/var/www')
|
37
|
+
|
38
|
+
# server_name
|
39
|
+
data = (File.file?(ConfigFile) ? `/bin/grep -e "ServerName " #{ConfigFile}` : "")
|
40
|
+
@state['server_name'] = (data.length > 0 ? data.strip.split(' ')[1] : '')
|
41
|
+
|
42
|
+
# is_load_balancer
|
43
|
+
@state['is_load_balancer'] = File.exists?(LoadBalancerConfigFile)
|
44
|
+
|
45
|
+
# lb_members
|
46
|
+
members = []
|
47
|
+
if @state['is_load_balancer']
|
48
|
+
data =`grep "BalancerMember" #{LoadBalancerConfigFile} 2>/dev/null`.chop
|
49
|
+
agents = Sfp::Agent.get_agents
|
50
|
+
data.split("\n").each do |line|
|
51
|
+
member = line.strip.split(' ')
|
52
|
+
next if member[1] == nil
|
53
|
+
_, address = member[1].split('http://', 2)
|
54
|
+
agents.each { |k,v|
|
55
|
+
if v['sfpAddress'] == address
|
56
|
+
members << '$.' + k
|
57
|
+
break
|
58
|
+
end
|
59
|
+
}
|
60
|
+
end
|
61
|
+
members.sort!
|
62
|
+
end
|
63
|
+
@state['lb_members'] = members
|
64
|
+
|
65
|
+
# lb_method
|
66
|
+
if @state['is_load_balancer']
|
67
|
+
data = `grep 'ProxySet' #{LoadBalancerConfigFile} | grep 'lbmethod'`.strip.split("=")
|
68
|
+
@state['lb_method'] = data[1].to_s
|
69
|
+
else
|
70
|
+
@state['lb_method'] = ''
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def install(p={})
|
75
|
+
begin
|
76
|
+
File.open(InstallingLockFile, 'w') { |f| f.write(' ') }
|
77
|
+
return (Sfp::Module::Package.install(@model['package_name']) and self.stop)
|
78
|
+
rescue Exception => e
|
79
|
+
Sfp::Agent.logger.error "#{e}\n#{e.backtrace.join("\n")}"
|
80
|
+
ensure
|
81
|
+
File.delete(InstallingLockFile) if File.exist?(InstallingLockFile)
|
82
|
+
end
|
83
|
+
false
|
84
|
+
end
|
85
|
+
|
86
|
+
def uninstall(p={})
|
87
|
+
begin
|
88
|
+
if Sfp::Module::Package.uninstall(@model['package_name'])
|
89
|
+
system('/bin/rm -rf /etc/apache2') if File.directory?('/etc/apache2')
|
90
|
+
return true
|
91
|
+
end
|
92
|
+
rescue Exception => e
|
93
|
+
Sfp::Agent.logger.error "#{e}\n#{e.backtrace.join("\n")}"
|
94
|
+
end
|
95
|
+
false
|
96
|
+
end
|
97
|
+
|
98
|
+
def set_port(p={})
|
99
|
+
return false if p['target'].nil?
|
100
|
+
port = p['target']
|
101
|
+
Augeas::open do |aug|
|
102
|
+
aug.set("/files/etc/apache2/ports.conf/*[self::directive='NameVirtualHost']/arg",
|
103
|
+
"*:#{port}")
|
104
|
+
aug.set("/files/etc/apache2/ports.conf/*[self::directive='Listen']/arg", port.to_s)
|
105
|
+
aug.set('/files/etc/apache2/sites-available/default/VirtualHost/arg', "*:#{port}")
|
106
|
+
return true if aug.save
|
107
|
+
end
|
108
|
+
false
|
109
|
+
end
|
110
|
+
|
111
|
+
def set_document_root(p={})
|
112
|
+
return false if not p.has_key?('target')
|
113
|
+
Augeas::open do |aug|
|
114
|
+
aug.set("/files/etc/apache2/sites-available/default/VirtualHost/*[self::directive='DocumentRoot']/arg", p['target'].to_s)
|
115
|
+
return true if aug.save
|
116
|
+
end
|
117
|
+
false
|
118
|
+
end
|
119
|
+
|
120
|
+
def set_server_name(p={})
|
121
|
+
return false if not p.has_key?('target')
|
122
|
+
server_name = p['target'].to_s
|
123
|
+
data = File.read(ConfigFile)
|
124
|
+
output = ""
|
125
|
+
data.split("\n").each do |line|
|
126
|
+
tuple = line.strip.split(' ')
|
127
|
+
if tuple[0] == 'ServerName'
|
128
|
+
# skip
|
129
|
+
elsif tuple[0] == 'DocumentRoot'
|
130
|
+
output += "#{line} \n"
|
131
|
+
output += "ServerName #{server_name}\n"
|
132
|
+
elsif line.strip != ''
|
133
|
+
output += "#{line} \n"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
File.open(ConfigFile, 'w') { |f| f.write(output) }
|
137
|
+
true
|
138
|
+
end
|
139
|
+
|
140
|
+
def install_php_mysql_module(p={})
|
141
|
+
begin
|
142
|
+
File.open(NotRunningLockFile, 'w') { |f| f.write(' ') }
|
143
|
+
return self.stop if Sfp::Module::Package.install('php5-mysql')
|
144
|
+
rescue Exception => e
|
145
|
+
Sfp::Agent.logger.error e.to_s + "\n" + e.backtrace.join("\n")
|
146
|
+
ensure
|
147
|
+
File.delete(NotRunningLockFile) if File.exist?(NotRunningLockFile)
|
148
|
+
end
|
149
|
+
false
|
150
|
+
end
|
151
|
+
|
152
|
+
def uninstall_php_mysql_module(p={})
|
153
|
+
begin
|
154
|
+
File.open(NotRunningLockFile, 'w') { |f| f.write(' ') }
|
155
|
+
return self.stop if Sfp::Module::Package.uninstall('php5-mysql')
|
156
|
+
rescue Exception => e
|
157
|
+
Sfp::Agent.logger.error e.to_s + "\n" + e.backtrace.join("\n")
|
158
|
+
ensure
|
159
|
+
File.delete(NotRunningLockFile) if File.exist?(NotRunningLockFile)
|
160
|
+
end
|
161
|
+
false
|
162
|
+
end
|
163
|
+
|
164
|
+
def install_php_module(p={})
|
165
|
+
begin
|
166
|
+
File.open(NotRunningLockFile, 'w') { |f| f.write(' ') }
|
167
|
+
return self.stop if Sfp::Module::Package.install('libapache2-mod-php5')
|
168
|
+
rescue Exception => e
|
169
|
+
Sfp::Agent.logger.error e.to_s + "\n" + e.backtrace.join("\n")
|
170
|
+
ensure
|
171
|
+
File.delete(NotRunningLockFile) if File.exist?(NotRunningLockFile)
|
172
|
+
end
|
173
|
+
false
|
174
|
+
end
|
175
|
+
|
176
|
+
def uninstall_php_module(p={})
|
177
|
+
begin
|
178
|
+
File.open(NotRunningLockFile, 'w') { |f| f.write(' ') }
|
179
|
+
return self.stop if Sfp::Module::Package.uninstall('libapache2-mod-php5')
|
180
|
+
rescue Exception => e
|
181
|
+
Sfp::Agent.logger.error e.to_s + "\n" + e.backtrace.join("\n")
|
182
|
+
ensure
|
183
|
+
File.delete(NotRunningLockFile) if File.exist?(NotRunningLockFile)
|
184
|
+
end
|
185
|
+
false
|
186
|
+
end
|
187
|
+
|
188
|
+
# Load Balancer methods
|
189
|
+
#
|
190
|
+
def enable_load_balancer(p={})
|
191
|
+
begin
|
192
|
+
File.open(InstallingLockFile, 'w') { |f| f.write(' ') }
|
193
|
+
template_file = File.expand_path(File.dirname(__FILE__)) + "/load_balancer"
|
194
|
+
exec_seq 'a2enmod proxy',
|
195
|
+
'a2enmod proxy_balancer',
|
196
|
+
'a2enmod proxy_http',
|
197
|
+
'a2enmod status',
|
198
|
+
"rm -rf #{SitesEnabledDir}/*",
|
199
|
+
"cp -f #{template_file} #{LoadBalancerConfigFile}",
|
200
|
+
"sudo service #{@model['service_name']} stop"
|
201
|
+
return true
|
202
|
+
rescue Exception => e
|
203
|
+
Sfp::Agent.logger.error "#{e}\n#{e.backtrace.join("\n")}"
|
204
|
+
ensure
|
205
|
+
File.delete(InstallingLockFile) if File.exist?(InstallingLockFile)
|
206
|
+
end
|
207
|
+
false
|
208
|
+
end
|
209
|
+
|
210
|
+
def disable_load_balancer(p={})
|
211
|
+
begin
|
212
|
+
File.open(InstallingLockFile, 'w') { |f| f.write(' ') }
|
213
|
+
exec_seq 'a2dismod proxy_balancer',
|
214
|
+
'a2dismod proxy_http',
|
215
|
+
'a2dismod proxy',
|
216
|
+
'a2dismod status',
|
217
|
+
"rm -f #{LoadBalancerConfigFile}",
|
218
|
+
"ln -sf #{ConfigFile} #{SitesEnabledDir}/default",
|
219
|
+
"sudo service #{@model['service_name']} stop"
|
220
|
+
return true
|
221
|
+
rescue Exception => e
|
222
|
+
Sfp::Agent.logger.error "#{e}\n#{e.backtrace.join("\n")}"
|
223
|
+
ensure
|
224
|
+
File.delete(InstallingLockFile) if File.exist?(InstallingLockFile)
|
225
|
+
end
|
226
|
+
false
|
227
|
+
end
|
228
|
+
|
229
|
+
def set_lb_method(p={})
|
230
|
+
return false if ['byrequests', 'bytraffic', 'bybusyness'].index(p['target']).nil?
|
231
|
+
return !!system("sed -i -e 's/^\\s*ProxySet.*lbmethod=.*/ProxySet lbmethod=#{p['target']}/' #{LoadBalancerConfigFile}")
|
232
|
+
end
|
233
|
+
|
234
|
+
def set_lb_members(p={})
|
235
|
+
lbmembers = p['members'].map { |m| m.sub! /^\$\./, '' }
|
236
|
+
members = reverses = ''
|
237
|
+
lbmembers.each do |m|
|
238
|
+
address = resolve("$.#{m}.sfpAddress")
|
239
|
+
Sfp::Agent.logger.info "lb_member => #{m}:#{address}"
|
240
|
+
return false if not address.is_a?(String) or address.strip == ''
|
241
|
+
members += "\n\tBalancerMember http://#{address}" #agents[m]['sfpAddress']}"
|
242
|
+
reverses += "\n\tProxyPassReverse / http://#{address}" #agents[m]['sfpAddress']}"
|
243
|
+
end
|
244
|
+
output = ''
|
245
|
+
File.read(LoadBalancerConfigFile).each_line do |line|
|
246
|
+
head, _ = line.strip.split(' ', 2)
|
247
|
+
next if head == 'BalancerMember' or head == 'ProxyPassReverse'
|
248
|
+
output += "#{line}"
|
249
|
+
output += "#{members}\n" if head == 'ProxySet'
|
250
|
+
output += "#{reverses}\n" if head == '</Location>'
|
251
|
+
end
|
252
|
+
File.open(LoadBalancerConfigFile, 'w') { |f| f.write(output); f.flush }
|
253
|
+
true
|
254
|
+
end
|
255
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'augeas'
|
2
|
+
|
3
|
+
class Sfp::Module::Apache
|
4
|
+
include Sfp::Resource
|
5
|
+
|
6
|
+
ConfigFile = '/etc/apache2/sites-available/default'
|
7
|
+
InstallingLockFile = '/tmp/nuri_apache_installing'
|
8
|
+
NotRunningLockFile = '/tmp/nuri_apache_not_running'
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@mutex = Mutex.new
|
12
|
+
end
|
13
|
+
|
14
|
+
# get state of this module
|
15
|
+
def update_state
|
16
|
+
to_model
|
17
|
+
|
18
|
+
# php module
|
19
|
+
@state['php_module'] = Nuri::Helper::Package.installed?('libapache2-mod-php5')
|
20
|
+
# php_mysql module
|
21
|
+
@state['php_mysql_module'] = Nuri::Helper::Package.installed?('php5-mysql')
|
22
|
+
|
23
|
+
# apache2 installed & running
|
24
|
+
if File.exist?(InstallingLockFile)
|
25
|
+
@state['installed'] = @state['running'] = false
|
26
|
+
@state['version'] = ''
|
27
|
+
else
|
28
|
+
@state['installed'] = Nuri::Helper::Package.installed?('apache2')
|
29
|
+
@state['version'] = Nuri::Helper::Package.version?('apache2')
|
30
|
+
@state['running'] = (File.exist?(NotRunningLockFile) ? false : Nuri::Helper::Service.running?('apache2'))
|
31
|
+
end
|
32
|
+
|
33
|
+
# port
|
34
|
+
data = (File.file?("/etc/apache2/ports.conf") ? `/bin/grep -e "^Listen " /etc/apache2/ports.conf` : "")
|
35
|
+
@state['port'] = (data.length > 0 ? @state["port"] = data.split(' ')[1].to_i : 0)
|
36
|
+
|
37
|
+
# document root
|
38
|
+
data = (File.file?(ConfigFile) ? `/bin/grep -e "DocumentRoot " #{ConfigFile}` : "")
|
39
|
+
@state['document_root'] = (data.length > 0 ? data.strip.split(' ')[1] : '')
|
40
|
+
|
41
|
+
# ServerName
|
42
|
+
data = (File.file?(ConfigFile) ? `/bin/grep -e "ServerName " #{ConfigFile}` : "")
|
43
|
+
@state['server_name'] = (data.length > 0 ? data.strip.split(' ')[1] : '')
|
44
|
+
|
45
|
+
return @state
|
46
|
+
end
|
47
|
+
|
48
|
+
def install
|
49
|
+
begin
|
50
|
+
File.open(InstallingLockFile, 'w') { |f| f.write(' ') }
|
51
|
+
return (Nuri::Helper::Package.install('apache2') and
|
52
|
+
Nuri::Helper::Service.stop('apache2'))
|
53
|
+
rescue
|
54
|
+
return false
|
55
|
+
ensure
|
56
|
+
File.delete(InstallingLockFile) if File.exist?(InstallingLockFile)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def uninstall
|
61
|
+
begin
|
62
|
+
Nuri::Helper::Package.uninstall('apache2')
|
63
|
+
system('/bin/rm -rf /etc/apache2') if File.directory?('/etc/apache2')
|
64
|
+
return true
|
65
|
+
rescue
|
66
|
+
end
|
67
|
+
return false
|
68
|
+
end
|
69
|
+
|
70
|
+
def start
|
71
|
+
return Nuri::Helper::Service.start('apache2')
|
72
|
+
end
|
73
|
+
|
74
|
+
def stop
|
75
|
+
return Nuri::Helper::Service.stop('apache2')
|
76
|
+
end
|
77
|
+
|
78
|
+
def set_port(params=nil)
|
79
|
+
return false if params == nil
|
80
|
+
p = params['target']
|
81
|
+
Augeas::open do |aug|
|
82
|
+
aug.set("/files/etc/apache2/ports.conf/*[self::directive='NameVirtualHost']/arg",
|
83
|
+
"*:" + p.to_s)
|
84
|
+
aug.set("/files/etc/apache2/ports.conf/*[self::directive='Listen']/arg", p.to_s)
|
85
|
+
aug.set('/files/etc/apache2/sites-available/default/VirtualHost/arg', "*:" + p.to_s)
|
86
|
+
return true if aug.save
|
87
|
+
end
|
88
|
+
return false
|
89
|
+
end
|
90
|
+
|
91
|
+
def set_document_root(params={})
|
92
|
+
return false if not params.has_key?('target')
|
93
|
+
dir = params['target']
|
94
|
+
Augeas::open do |aug|
|
95
|
+
aug.set("/files/etc/apache2/sites-available/default/VirtualHost/*[self::directive='DocumentRoot']/arg", dir)
|
96
|
+
return true if aug.save
|
97
|
+
end
|
98
|
+
return false
|
99
|
+
end
|
100
|
+
|
101
|
+
def set_server_name(params={})
|
102
|
+
return false if not params.has_key?('target')
|
103
|
+
server_name = params['target']
|
104
|
+
data = File.read(ConfigFile)
|
105
|
+
output = ""
|
106
|
+
data.split("\n").each do |line|
|
107
|
+
tuple = line.strip.split(' ')
|
108
|
+
if tuple[0] == 'ServerName'
|
109
|
+
# skip
|
110
|
+
elsif tuple[0] == 'DocumentRoot'
|
111
|
+
output += "#{line} \n"
|
112
|
+
output += "ServerName #{server_name}\n"
|
113
|
+
elsif line.strip != ''
|
114
|
+
output += "#{line} \n"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
File.open(ConfigFile, 'w') { |f| f.write(output) }
|
118
|
+
|
119
|
+
true
|
120
|
+
end
|
121
|
+
|
122
|
+
def install_php_mysql_module
|
123
|
+
begin
|
124
|
+
File.open(NotRunningLockFile, 'w') { |f| f.write(' ') }
|
125
|
+
return Nuri::Helper::Service.stop('apache2') if Nuri::Helper::Package.install('php5-mysql')
|
126
|
+
return false
|
127
|
+
rescue
|
128
|
+
ensure
|
129
|
+
File.delete(NotRunningLockFile) if File.exist?(NotRunningLockFile)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def uninstall_php_mysql_module
|
134
|
+
begin
|
135
|
+
File.open(NotRunningLockFile, 'w') { |f| f.write(' ') }
|
136
|
+
return Nuri::Helper::Service.stop('apache2') if Nuri::Helper::Package.uninstall('php5-mysql')
|
137
|
+
return false
|
138
|
+
rescue
|
139
|
+
ensure
|
140
|
+
File.delete(NotRunningLockFile) if File.exist?(NotRunningLockFile)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def install_php_module
|
145
|
+
begin
|
146
|
+
File.open(NotRunningLockFile, 'w') { |f| f.write(' ') }
|
147
|
+
return Nuri::Helper::Service.stop('apache2') if Nuri::Helper::Package.install('libapache2-mod-php5')
|
148
|
+
return false
|
149
|
+
rescue
|
150
|
+
ensure
|
151
|
+
File.delete(NotRunningLockFile) if File.exist?(NotRunningLockFile)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def uninstall_php_module
|
156
|
+
begin
|
157
|
+
File.open(NotRunningLockFile, 'w') { |f| f.write(' ') }
|
158
|
+
return Nuri::Helper::Service.stop('apache2') if Nuri::Helper::Package.uninstall('libapache2-mod-php5')
|
159
|
+
return false
|
160
|
+
rescue
|
161
|
+
ensure
|
162
|
+
File.delete(NotRunningLockFile) if File.exist?(NotRunningLockFile)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
include "../service/service.sfp"
|
2
|
+
include "../node/node.sfp"
|
3
|
+
|
4
|
+
schema Apache extends Service {
|
5
|
+
package_name = "apache2"
|
6
|
+
service_name = "apache2"
|
7
|
+
port : Int
|
8
|
+
document_root : String
|
9
|
+
installed : Bool
|
10
|
+
running : Bool
|
11
|
+
php_module : Bool
|
12
|
+
php_mysql_module : Bool
|
13
|
+
server_name : String
|
14
|
+
|
15
|
+
// load balancer config
|
16
|
+
is_load_balancer : Bool
|
17
|
+
lb_members isset Node
|
18
|
+
lb_method : String // byrequests, bytraffic, bybusyness
|
19
|
+
|
20
|
+
sub set_port(target isref Integer) {
|
21
|
+
condition {
|
22
|
+
this.installed = true
|
23
|
+
this.running = false
|
24
|
+
}
|
25
|
+
effect {
|
26
|
+
this.port = target
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
synchronized sub uninstall {
|
31
|
+
condition {
|
32
|
+
this.installed = true
|
33
|
+
this.running = false
|
34
|
+
this.php_module = false
|
35
|
+
this.php_mysql_module = false
|
36
|
+
}
|
37
|
+
effect {
|
38
|
+
this.installed = false
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
sub set_document_root (target isref String) {
|
43
|
+
condition {
|
44
|
+
this.running = false
|
45
|
+
this.installed = true
|
46
|
+
}
|
47
|
+
effect {
|
48
|
+
this.document_root = target
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
sub set_server_name (target isref String) {
|
53
|
+
condition {
|
54
|
+
this.running = false
|
55
|
+
this.installed = true
|
56
|
+
}
|
57
|
+
effect {
|
58
|
+
this.server_name = target
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
synchronized sub install_php_module {
|
63
|
+
condition {
|
64
|
+
this.installed = true
|
65
|
+
this.running = false
|
66
|
+
}
|
67
|
+
effect {
|
68
|
+
this.php_module = true
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
synchronized sub uninstall_php_module {
|
73
|
+
condition {
|
74
|
+
this.running = false
|
75
|
+
}
|
76
|
+
effect {
|
77
|
+
this.php_module = false
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
synchronized sub install_php_mysql_module {
|
82
|
+
condition {
|
83
|
+
this.php_module = true
|
84
|
+
this.installed = true
|
85
|
+
this.running = false
|
86
|
+
}
|
87
|
+
effect {
|
88
|
+
this.php_mysql_module = true
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
synchronized sub uninstall_php_mysql_module {
|
93
|
+
condition {
|
94
|
+
this.running = false
|
95
|
+
}
|
96
|
+
effect {
|
97
|
+
this.php_mysql_module = false
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
sub enable_load_balancer {
|
102
|
+
condition {
|
103
|
+
this.installed = true
|
104
|
+
this.running = false
|
105
|
+
}
|
106
|
+
effect {
|
107
|
+
this.is_load_balancer = true
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
sub disable_load_balancer {
|
112
|
+
condition {
|
113
|
+
this.installed = true
|
114
|
+
this.running = false
|
115
|
+
this.is_load_balancer = true
|
116
|
+
}
|
117
|
+
effect {
|
118
|
+
this.is_load_balancer = false
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
sub set_lb_members (members isset Node) {
|
123
|
+
condition {
|
124
|
+
this.installed = true
|
125
|
+
this.running = false
|
126
|
+
this.is_load_balancer = true
|
127
|
+
foreach (members as node) {
|
128
|
+
node.created = true
|
129
|
+
}
|
130
|
+
}
|
131
|
+
effect {
|
132
|
+
this.lb_members = members
|
133
|
+
}
|
134
|
+
}
|
135
|
+
|
136
|
+
sub set_lb_method (target isref String) {
|
137
|
+
condition {
|
138
|
+
this.installed = true
|
139
|
+
this.running = false
|
140
|
+
this.is_load_balancer = true
|
141
|
+
}
|
142
|
+
effect {
|
143
|
+
this.lb_method = target
|
144
|
+
}
|
145
|
+
}
|
146
|
+
}
|