nuri 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }