nuri 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (169) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.travis.yml +12 -0
  4. data/CHANGELOG +146 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE +28 -0
  7. data/README.md +64 -0
  8. data/Rakefile +15 -0
  9. data/VERSION +1 -0
  10. data/bin/delete_modules +11 -0
  11. data/bin/install_agent +18 -0
  12. data/bin/install_module +65 -0
  13. data/bin/nuri +519 -0
  14. data/bin/nuri.old +183 -0
  15. data/bin/push_model +16 -0
  16. data/examples/.gitignore +3 -0
  17. data/examples/bonfire.sfp +95 -0
  18. data/examples/bonfire/epcc.sfp +43 -0
  19. data/examples/bonfire/epcc0.sfp +49 -0
  20. data/examples/bonfire/epcc2.sfp +52 -0
  21. data/examples/bonfire/epcc2a.sfp +25 -0
  22. data/examples/bonfire/inria.sfp +72 -0
  23. data/examples/bonfire/inria0.sfp +49 -0
  24. data/examples/bonfire/inria2.sfp +71 -0
  25. data/examples/bonfire/inria2a.sfp +44 -0
  26. data/examples/bonfire/inria2b.sfp +54 -0
  27. data/examples/bonfire/inria2c.sfp +62 -0
  28. data/examples/bonfire/inria2d.sfp +71 -0
  29. data/examples/bonfire/inria2e.sfp +80 -0
  30. data/examples/bonfire/main.sfp +33 -0
  31. data/examples/bonfire/old/bonfire-1-1-1.sfp +76 -0
  32. data/examples/bonfire/old/bonfire-1-10-1.sfp +77 -0
  33. data/examples/bonfire/old/bonfire-1-2-1.sfp +58 -0
  34. data/examples/bonfire/old/bonfire-1-3-1.sfp +61 -0
  35. data/examples/bonfire/old/bonfire-1-4-1.sfp +64 -0
  36. data/examples/bonfire/old/bonfire-1-5-1.sfp +67 -0
  37. data/examples/bonfire/old/bonfire-1-6-1.sfp +82 -0
  38. data/examples/bonfire/old/bonfire-1-7-1.sfp +82 -0
  39. data/examples/bonfire/old/bonfire-1-8-1.sfp +79 -0
  40. data/examples/bonfire/old/bonfire-1-9-1.sfp +83 -0
  41. data/examples/bonfire/old/wp-test1a.sfp +38 -0
  42. data/examples/bonfire/old/wp-test1b.sfp +18 -0
  43. data/examples/bonfire/old/wp-test1c.sfp +7 -0
  44. data/examples/bonfire/old/wp-test2.sfp +47 -0
  45. data/examples/bonfire/old3/bonfire-epcc.sfp +57 -0
  46. data/examples/bonfire/old3/bonfire-inria.sfp +72 -0
  47. data/examples/bonfire/old3/bonfire-master.sfp +18 -0
  48. data/examples/bonfire/old3/bonfire.sfp +23 -0
  49. data/examples/bonfire/old3/bonfire2.sfp +49 -0
  50. data/examples/bonfire/old3/bonfire3.sfp +76 -0
  51. data/examples/bonfire/old3/bonfire4.sfp +78 -0
  52. data/examples/bonfire/old3/bonfire5.sfp +34 -0
  53. data/examples/bonfire/old3/bonfire5b.sfp +84 -0
  54. data/examples/bonfire/old3/hpvm6.sfp +22 -0
  55. data/examples/bonfire/old3/model.json +1 -0
  56. data/examples/bonfire/old3/test0.sfp +16 -0
  57. data/examples/bonfire/old3/test1.sfp +5 -0
  58. data/examples/bonfire/old3/test10.sfp +5 -0
  59. data/examples/bonfire/old3/test2.sfp +18 -0
  60. data/examples/bonfire/old3/test3.sfp +10 -0
  61. data/examples/bonfire/old3/test4.sfp +11 -0
  62. data/examples/bonfire/old3/test5.sfp +18 -0
  63. data/examples/bonfire/old3/test6.sfp +19 -0
  64. data/examples/bonfire/old3/test7.sfp +34 -0
  65. data/examples/bonfire/old3/test8.sfp +5 -0
  66. data/examples/bonfire/old3/test9.sfp +16 -0
  67. data/examples/bonfire/old3/wordpress-test-cluster.sfp +38 -0
  68. data/examples/bonfire/old3/wordpress-test.sfp +22 -0
  69. data/examples/bonfire/old3/wp-test-2.sfp +49 -0
  70. data/examples/bonfire/test.sfp +13 -0
  71. data/examples/generator.rb +66 -0
  72. data/examples/hadoop2.sfp +20 -0
  73. data/examples/hpcloud.sfp +18 -0
  74. data/examples/run.rb +17 -0
  75. data/examples/test.inc +0 -0
  76. data/examples/test.sfp +11 -0
  77. data/lib/naas/d3.js +5 -0
  78. data/lib/naas/d3.v3.min.js +5 -0
  79. data/lib/naas/index.css +0 -0
  80. data/lib/naas/index.html +18 -0
  81. data/lib/naas/index.js +18 -0
  82. data/lib/naas/jquery-1.10.2.min.js +6 -0
  83. data/lib/naas/jquery.js +6 -0
  84. data/lib/naas/naas.rb +160 -0
  85. data/lib/nuri.rb +62 -0
  86. data/lib/nuri/choreographer.rb +151 -0
  87. data/lib/nuri/constraint_helper.rb +9 -0
  88. data/lib/nuri/directory.rb +40 -0
  89. data/lib/nuri/master.rb +725 -0
  90. data/lib/nuri/net_helper.rb +65 -0
  91. data/lib/nuri/orchestrator.rb +224 -0
  92. data/lib/nuri/server.rb +212 -0
  93. data/modules/.gitignore +4 -0
  94. data/modules/apache/apache.rb +255 -0
  95. data/modules/apache/apache.rb.old +167 -0
  96. data/modules/apache/apache.sfp +146 -0
  97. data/modules/apache/apache.sfp.future +100 -0
  98. data/modules/apache/load_balancer +20 -0
  99. data/modules/apache/model.json +1 -0
  100. data/modules/apache/test.sfp +8 -0
  101. data/modules/aptpackage/aptpackage.rb +82 -0
  102. data/modules/aptpackage/aptpackage.sfp +5 -0
  103. data/modules/bonfire/.gitignore +2 -0
  104. data/modules/bonfire/README.md +12 -0
  105. data/modules/bonfire/bonfire.rb +60 -0
  106. data/modules/bonfire/bonfire.sfp +9 -0
  107. data/modules/bonfire/config.yml +4 -0
  108. data/modules/bonfire/helper.rb +149 -0
  109. data/modules/bonfire/stresstest.rb +144 -0
  110. data/modules/bonfire/test.sfp +8 -0
  111. data/modules/client/client.rb +22 -0
  112. data/modules/client/client.sfp +14 -0
  113. data/modules/cloud/cloud.rb +11 -0
  114. data/modules/cloud/cloud.sfp +26 -0
  115. data/modules/file/file.rb +91 -0
  116. data/modules/file/file.sfp +9 -0
  117. data/modules/hadoop1/core-site.xml +17 -0
  118. data/modules/hadoop1/hadoop-env.sh +55 -0
  119. data/modules/hadoop1/hadoop1.rb +384 -0
  120. data/modules/hadoop1/hadoop1.sfp +93 -0
  121. data/modules/hadoop1/hdfs-site.xml +16 -0
  122. data/modules/hadoop1/mapred-site.xml +17 -0
  123. data/modules/hadoop2/core-site.xml +31 -0
  124. data/modules/hadoop2/hadoop-env.sh +77 -0
  125. data/modules/hadoop2/hadoop2.rb +401 -0
  126. data/modules/hadoop2/hadoop2.sfp +114 -0
  127. data/modules/hadoop2/hdfs-site.xml +47 -0
  128. data/modules/hadoop2/mapred-site.xml +71 -0
  129. data/modules/hadoop2/ports +14 -0
  130. data/modules/hadoop2/yarn-env.sh +112 -0
  131. data/modules/hadoop2/yarn-site.xml +107 -0
  132. data/modules/hpcloud/.gitignore +2 -0
  133. data/modules/hpcloud/README.md +16 -0
  134. data/modules/hpcloud/config.yml +3 -0
  135. data/modules/hpcloud/example.sfp +18 -0
  136. data/modules/hpcloud/hpcloud.rb +241 -0
  137. data/modules/hpcloud/hpcloud.sfp +22 -0
  138. data/modules/hpcloud/test.sfp +5 -0
  139. data/modules/install_module +65 -0
  140. data/modules/machine/machine.rb +95 -0
  141. data/modules/machine/machine.sfp +9 -0
  142. data/modules/mockcloud/mockcloud.rb +20 -0
  143. data/modules/mockcloud/mockcloud.sfp +6 -0
  144. data/modules/mysql/mysql.rb +118 -0
  145. data/modules/mysql/mysql.sfp +38 -0
  146. data/modules/mysql/test.sfp +3 -0
  147. data/modules/node/node.rb +8 -0
  148. data/modules/node/node.sfp +7 -0
  149. data/modules/object/object.rb +7 -0
  150. data/modules/object/object.sfp +1 -0
  151. data/modules/os/os.rb +38 -0
  152. data/modules/os/os.sfp +11 -0
  153. data/modules/package/package.rb +26 -0
  154. data/modules/package/package.sfp +22 -0
  155. data/modules/package/test.sfp +6 -0
  156. data/modules/service/model.json +1 -0
  157. data/modules/service/service.rb +50 -0
  158. data/modules/service/service.sfp +46 -0
  159. data/modules/service/test.sfp +6 -0
  160. data/modules/tarpackage/tarpackage.rb +93 -0
  161. data/modules/tarpackage/tarpackage.sfp +5 -0
  162. data/modules/vm/vm.rb +8 -0
  163. data/modules/vm/vm.sfp +18 -0
  164. data/modules/wordpress/wordpress.rb +98 -0
  165. data/modules/wordpress/wordpress.sfp +34 -0
  166. data/modules/wordpresscluster/wordpresscluster.rb +150 -0
  167. data/modules/wordpresscluster/wordpresscluster.sfp +74 -0
  168. data/nuri.gemspec +26 -0
  169. metadata +281 -0
@@ -0,0 +1,4 @@
1
+ *.tgz
2
+ cell
3
+ autonomy*
4
+ idol*
@@ -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
+ }