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.
- 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
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
class Sfp::Module::TarPackage
|
|
2
|
+
include Sfp::Resource
|
|
3
|
+
|
|
4
|
+
Signature = '.tarpackage.log'
|
|
5
|
+
|
|
6
|
+
def update_state
|
|
7
|
+
@state['installed'] = installed?
|
|
8
|
+
@state['version'] = version?
|
|
9
|
+
@state['source'] = @model['source']
|
|
10
|
+
@state['package_name'] = @model['package_name']
|
|
11
|
+
@state['home'] = (@state['installed'] ? @model['home'] : '')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
##############################
|
|
15
|
+
#
|
|
16
|
+
# Action methods (see TarPackage.sfp)
|
|
17
|
+
#
|
|
18
|
+
##############################
|
|
19
|
+
|
|
20
|
+
def install(p={})
|
|
21
|
+
src = url
|
|
22
|
+
dest = home
|
|
23
|
+
return false if dest.length <= 0
|
|
24
|
+
|
|
25
|
+
# create destination directory if not exist
|
|
26
|
+
system "mkdir -p #{dest}" if !::File.exist?(dest)
|
|
27
|
+
|
|
28
|
+
# install axel if it's not available
|
|
29
|
+
system "apt-get install axel" if `which axel`.strip.length <= 0
|
|
30
|
+
|
|
31
|
+
# download the file
|
|
32
|
+
system "cd #{dest} && axel -q #{src}"
|
|
33
|
+
|
|
34
|
+
file = src.split('/').last.to_s
|
|
35
|
+
# if downloaded file is not exist, then return false
|
|
36
|
+
if !::File.exist?("#{dest}/#{file}")
|
|
37
|
+
log.error "Failed to download file from #{url}"
|
|
38
|
+
return false
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# extract tar file, and then delete it
|
|
42
|
+
system "cd #{dest} && tar xvzf #{file}"
|
|
43
|
+
system "rm -f #{dest}/#{file}"
|
|
44
|
+
|
|
45
|
+
basename = (::File.extname(file) == '.gz' ? ::File.basename(file, '.tar.gz') : ::File.basename(file, ::File.extname(file)))
|
|
46
|
+
system "bash -c 'cd #{dest}/#{basename} && shopt -s dotglob && mv -f * .. && cd .. && rm -rf #{basename}'"
|
|
47
|
+
|
|
48
|
+
File.open("#{dest}/#{Signature}", 'w') { |f| f.write(Time.now.to_s) }
|
|
49
|
+
|
|
50
|
+
true
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def uninstall(p={})
|
|
54
|
+
!!system("rm -rf #{home}") if File.exist?(home)
|
|
55
|
+
true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
##############################
|
|
59
|
+
#
|
|
60
|
+
# Helper methods
|
|
61
|
+
#
|
|
62
|
+
##############################
|
|
63
|
+
|
|
64
|
+
protected
|
|
65
|
+
def installed?
|
|
66
|
+
::File.exist?("#{home}/#{Signature}")
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def version?
|
|
70
|
+
if @model['version'].length > 0
|
|
71
|
+
@model['version']
|
|
72
|
+
else
|
|
73
|
+
file_version = home + "/VERSION"
|
|
74
|
+
(::File.exist?(file_version) ? File.read(file_version).strip : '')
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def url
|
|
79
|
+
name = @model['package_name'].to_s.strip
|
|
80
|
+
version = @model['version'].to_s.strip
|
|
81
|
+
src = @model['source'].to_s.strip
|
|
82
|
+
|
|
83
|
+
if name.length > 0 and version.length > 0
|
|
84
|
+
"#{src}/#{name}-#{version}/#{name}-#{version}.tar.gz"
|
|
85
|
+
else
|
|
86
|
+
src
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def home
|
|
91
|
+
@model['home'].to_s.strip
|
|
92
|
+
end
|
|
93
|
+
end
|
data/modules/vm/vm.rb
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/../machine/machine.rb"
|
|
2
|
+
|
|
3
|
+
class Sfp::Module::VM < Sfp::Module::Machine
|
|
4
|
+
def update_state
|
|
5
|
+
self.class.superclass.instance_method(:update_state).bind(self).call
|
|
6
|
+
@state['in_cloud'] = @model['in_cloud']
|
|
7
|
+
end
|
|
8
|
+
end
|
data/modules/vm/vm.sfp
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
include "../machine/machine.sfp"
|
|
2
|
+
include "../cloud/cloud.sfp"
|
|
3
|
+
|
|
4
|
+
schema VM extends Machine {
|
|
5
|
+
created = true
|
|
6
|
+
in_cloud isref Cloud
|
|
7
|
+
|
|
8
|
+
final cpus = 1
|
|
9
|
+
final memory = 512
|
|
10
|
+
final network { }
|
|
11
|
+
final disk { }
|
|
12
|
+
|
|
13
|
+
final username = ""
|
|
14
|
+
final flavor = ""
|
|
15
|
+
final image = ""
|
|
16
|
+
final security_group = ""
|
|
17
|
+
final ssh_key_name = ""
|
|
18
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
class Sfp::Module::Wordpress
|
|
2
|
+
include Sfp::Resource
|
|
3
|
+
|
|
4
|
+
def update_state
|
|
5
|
+
@state['installed'] = false
|
|
6
|
+
doc_root = resolve(@model['http'] + '.document_root')
|
|
7
|
+
db_address = resolve(@model['database'] + '.parent.sfpAddress')
|
|
8
|
+
root_password = resolve(@model['database'] + '.root_password')
|
|
9
|
+
if db_address.is_a?(String) and root_password.is_a?(String) and doc_root.is_a?(String)
|
|
10
|
+
#data = `echo "show databases;" | mysql -h #{db_address} -u root --password=#{root_password} mysql`.strip.split("\n")
|
|
11
|
+
data = `echo "show databases;" | mysql -u root --password=#{root_password} mysql`.strip.split("\n")
|
|
12
|
+
path = "#{doc_root}/#{@model['path']}/wp-config.php"
|
|
13
|
+
path.gsub! /\/\//, '/'
|
|
14
|
+
@state['installed'] = true if data.index(@model['db_name']) and File.exist?(path)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
@state['http'] = @model['http']
|
|
18
|
+
@state['database'] = @model['database']
|
|
19
|
+
@state['db_name'] = @model['db_name']
|
|
20
|
+
@state['db_user'] = @model['db_user']
|
|
21
|
+
@state['db_password'] = @model['db_password']
|
|
22
|
+
@state['path'] = @model['path']
|
|
23
|
+
@state['source_url'] = @model['source_url']
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def install(p={})
|
|
27
|
+
system('apt-get update; apt-get install -y wget') if `which wget`.strip.length <= 0
|
|
28
|
+
return false if `which wget`.strip.length <= 0
|
|
29
|
+
|
|
30
|
+
doc_root = resolve(@model['http'] + '.document_root')
|
|
31
|
+
db_address = resolve(@model['database'] + '.parent.sfpAddress')
|
|
32
|
+
root_password = resolve(@model['database'] + '.root_password')
|
|
33
|
+
|
|
34
|
+
system("wget --output-document='/tmp/wp.tgz' #{@model['source_url']}")
|
|
35
|
+
return false if not File.exist?('/tmp/wp.tgz')
|
|
36
|
+
system("cd /tmp; tar xvzf wp.tgz")
|
|
37
|
+
|
|
38
|
+
home_path = "#{doc_root}/#{@model['path']}"
|
|
39
|
+
home_path.gsub! /\/\//, '/'
|
|
40
|
+
wp_config_path = "#{home_path}/wp-config.php"
|
|
41
|
+
wp_config_sample_path = "#{home_path}/wp-config-sample.php"
|
|
42
|
+
|
|
43
|
+
File.delete(home_path) if File.file?(home_path)
|
|
44
|
+
Dir.mkdir(home_path, 0755) if not File.directory?(home_path)
|
|
45
|
+
system("cd /tmp; mv -f wordpress/* #{home_path}/; mv -f wordpress/.* #{home_path}/;rmdir wordpress;rm -f wp.tgz")
|
|
46
|
+
return false if not File.exist?(wp_config_sample_path)
|
|
47
|
+
|
|
48
|
+
system("cp -f #{wp_config_sample_path} #{wp_config_path}")
|
|
49
|
+
|
|
50
|
+
system("sed -i 's/.*DB_NAME.*/define(\"DB_NAME\",\"#{@model['db_name']}\");/' #{wp_config_path}")
|
|
51
|
+
system("sed -i 's/.*DB_USER.*/define(\"DB_USER\",\"#{@model['db_user']}\");/' #{wp_config_path}")
|
|
52
|
+
system("sed -i 's/.*DB_PASSWORD.*/define(\"DB_PASSWORD\",\"#{@model['db_password']}\");/' #{wp_config_path}")
|
|
53
|
+
system("sed -i 's/.*DB_HOST.*/define(\"DB_HOST\",\"#{db_address}\");/' #{wp_config_path}")
|
|
54
|
+
|
|
55
|
+
# install database
|
|
56
|
+
#mysql_cmd = "mysql -h #{db_address} -u root --pasword=#{root_password}"
|
|
57
|
+
mysql_cmd = "mysql -u root --password=#{root_password}"
|
|
58
|
+
sql1 = "CREATE USER '#{@model['db_user']}'@'%' IDENTIFIED BY '#{@model['db_password']}';"
|
|
59
|
+
return false if not system("echo \"#{sql1}\" | #{mysql_cmd}")
|
|
60
|
+
sql2 = "CREATE DATABASE #{@model['db_name']};"
|
|
61
|
+
return false if not system("echo \"#{sql2}\" | #{mysql_cmd}")
|
|
62
|
+
sql3 = "GRANT ALL PRIVILEGES ON #{@model['db_name']}.* TO '#{@model['db_user']}'@'%';"
|
|
63
|
+
return false if not system("echo \"#{sql3}\" | #{mysql_cmd}")
|
|
64
|
+
sql4 = "FLUSH PRIVILEGES;"
|
|
65
|
+
return false if not system("echo \"#{sql4}\" | #{mysql_cmd}")
|
|
66
|
+
|
|
67
|
+
system("cd #{home_path}; mv -f index.html index.html.bak")
|
|
68
|
+
|
|
69
|
+
true
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def uninstall(p={})
|
|
73
|
+
doc_root = resolve(@model['http'] + '.document_root')
|
|
74
|
+
db_address = resolve(@model['database'] + '.parent.sfpAddress')
|
|
75
|
+
root_password = resolve(@model['database'] + '.root_password')
|
|
76
|
+
|
|
77
|
+
home_path = "#{doc_root}/#{@model['path']}"
|
|
78
|
+
home_path.gsub! /\/\//, '/'
|
|
79
|
+
|
|
80
|
+
# delete all files
|
|
81
|
+
if @model['path'] != '/'
|
|
82
|
+
system("rm -rf #{home_path}")
|
|
83
|
+
else
|
|
84
|
+
system("cd #{home_path}; mv -f index.html.bak /tmp; rm -rf *; mv -f /tmp/index.html.bak index.html")
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# uninstall database
|
|
88
|
+
mysql_cmd = "mysql -u root --password=#{root_password}"
|
|
89
|
+
sql1 = "DROP USER '#{@model['db_user']}'@'%';"
|
|
90
|
+
sql2 = "DROP DATABASE #{@model['db_name']};"
|
|
91
|
+
sql3 = "REVOKE ALL PRIVILEGES ON *.* FROM '#{@model['db_user']}'@'%';"
|
|
92
|
+
sql4 = "FLUSH PRIVILEGES;"
|
|
93
|
+
|
|
94
|
+
system("echo \"#{sql1} #{sql2} #{sql3} #{sql4}\" | #{mysql_cmd}")
|
|
95
|
+
|
|
96
|
+
true
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
include "../mysql/mysql.sfp"
|
|
2
|
+
include "../apache/apache.sfp"
|
|
3
|
+
|
|
4
|
+
schema Wordpress {
|
|
5
|
+
installed : Bool
|
|
6
|
+
http isref Apache
|
|
7
|
+
database isref Mysql
|
|
8
|
+
db_name = "wordpress"
|
|
9
|
+
db_user = "wordpress"
|
|
10
|
+
db_password = "password"
|
|
11
|
+
path = "/wp"
|
|
12
|
+
source_url = "http://wordpress.org/latest.tar.gz"
|
|
13
|
+
|
|
14
|
+
sub install {
|
|
15
|
+
condition {
|
|
16
|
+
this.http.running = true
|
|
17
|
+
this.http.php_module = true
|
|
18
|
+
this.http.php_mysql_module = true
|
|
19
|
+
this.database.running = true
|
|
20
|
+
}
|
|
21
|
+
effect {
|
|
22
|
+
this.installed = true
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
sub uninstall {
|
|
27
|
+
condition {
|
|
28
|
+
this.installed = true
|
|
29
|
+
}
|
|
30
|
+
effect {
|
|
31
|
+
this.installed = false
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
class Sfp::Module::WordpressDB
|
|
2
|
+
include Sfp::Resource
|
|
3
|
+
|
|
4
|
+
ConfigFile = '/tmp/sfp.module.wordpressdb.config'
|
|
5
|
+
|
|
6
|
+
def update_state
|
|
7
|
+
if ::File.exist?(ConfigFile)
|
|
8
|
+
config = JSON[::File.read(ConfigFile)]
|
|
9
|
+
root_password = resolve(config['mysql'] + '.root_password')
|
|
10
|
+
data = `echo "show databases;" | mysql -u root --password=#{root_password} mysql`.strip.split("\n")
|
|
11
|
+
@state['installed'] = !!data.index(config['db_name'])
|
|
12
|
+
@state['mysql'] = (@state['installed'] ? config['mysql'] : @model['mysql'])
|
|
13
|
+
@state['db_name'] = config['db_name']
|
|
14
|
+
@state['db_user'] = config['db_user']
|
|
15
|
+
@state['db_password'] = config['db_password']
|
|
16
|
+
else
|
|
17
|
+
@state['installed'] = false
|
|
18
|
+
@state['mysql'] = @model['mysql']
|
|
19
|
+
@state['db_name'] = @model['db_name']
|
|
20
|
+
@state['db_user'] = @model['db_user']
|
|
21
|
+
@state['db_password'] = @model['db_password']
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def install(p={})
|
|
26
|
+
return false if @model['mysql'].nil?
|
|
27
|
+
|
|
28
|
+
root_password = resolve(@model['mysql'] + '.root_password')
|
|
29
|
+
|
|
30
|
+
# install database
|
|
31
|
+
mysql_cmd = "mysql -u root --password=#{root_password}"
|
|
32
|
+
sql1 = "CREATE USER '#{@model['db_user']}'@'%' IDENTIFIED BY '#{@model['db_password']}';"
|
|
33
|
+
system("echo \"#{sql1}\" | #{mysql_cmd}")
|
|
34
|
+
sql2 = "DROP DATABASE IF EXISTS #{@model['db_name']}; CREATE DATABASE #{@model['db_name']};"
|
|
35
|
+
return false if not system("echo \"#{sql2}\" | #{mysql_cmd}")
|
|
36
|
+
sql3 = "GRANT ALL PRIVILEGES ON #{@model['db_name']}.* TO '#{@model['db_user']}'@'%';"
|
|
37
|
+
return false if not system("echo \"#{sql3}\" | #{mysql_cmd}")
|
|
38
|
+
sql4 = "FLUSH PRIVILEGES;"
|
|
39
|
+
return false if not system("echo \"#{sql4}\" | #{mysql_cmd}")
|
|
40
|
+
|
|
41
|
+
config = { 'mysql' => @model['mysql'],
|
|
42
|
+
'db_name' => @model['db_name'],
|
|
43
|
+
'db_user' => @model['db_user'],
|
|
44
|
+
'db_password' => @model['db_password'] }
|
|
45
|
+
::File.open(ConfigFile, 'w') { |f|
|
|
46
|
+
f.write(JSON.generate(config))
|
|
47
|
+
f.flush
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
true
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def uninstall(p={})
|
|
54
|
+
return false if not ::File.exist?(ConfigFile)
|
|
55
|
+
|
|
56
|
+
config = JSON[::File.read(ConfigFile)]
|
|
57
|
+
|
|
58
|
+
root_password = resolve(config['mysql'] + '.root_password')
|
|
59
|
+
# uninstall database
|
|
60
|
+
mysql_cmd = "mysql -u root --password=#{root_password}"
|
|
61
|
+
sql1 = "DROP USER '#{config['db_user']}'@'%';"
|
|
62
|
+
sql2 = "DROP DATABASE IF EXISTS #{config['db_name']};"
|
|
63
|
+
sql3 = "REVOKE ALL PRIVILEGES ON *.* FROM '#{config['db_user']}'@'%';"
|
|
64
|
+
sql4 = "FLUSH PRIVILEGES;"
|
|
65
|
+
system("echo \"#{sql1} #{sql2} #{sql3} #{sql4}\" | #{mysql_cmd}")
|
|
66
|
+
|
|
67
|
+
::File.delete(ConfigFile) if ::File.exist?(ConfigFile)
|
|
68
|
+
|
|
69
|
+
true
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
class Sfp::Module::WordpressWeb
|
|
74
|
+
include Sfp::Resource
|
|
75
|
+
|
|
76
|
+
ConfigFile = '/tmp/sfp.module.wordpressweb.config'
|
|
77
|
+
|
|
78
|
+
def update_state
|
|
79
|
+
@state['installed'] = false
|
|
80
|
+
@state['installed'] = ::File.exist?(@model['path'])
|
|
81
|
+
|
|
82
|
+
if ::File.exist?(ConfigFile)
|
|
83
|
+
config = JSON[::File.read(ConfigFile)]
|
|
84
|
+
@state['http'] = config['http']
|
|
85
|
+
@state['database'] = config['database']
|
|
86
|
+
@state['path'] = config['path']
|
|
87
|
+
else
|
|
88
|
+
@state['http'] = nil
|
|
89
|
+
@state['database'] = nil
|
|
90
|
+
@state['path'] = @model['path']
|
|
91
|
+
end
|
|
92
|
+
@state['source_url'] = @model['source_url']
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def install(p={})
|
|
96
|
+
return false if p['database'].nil? or p['http'].nil?
|
|
97
|
+
|
|
98
|
+
db_address = resolve(p['database'] + '.parent.sfpAddress')
|
|
99
|
+
return false if db_address.to_s.strip == ''
|
|
100
|
+
db = resolve(p['database'])
|
|
101
|
+
|
|
102
|
+
system('apt-get update; apt-get install -y wget') if `which wget`.strip.length <= 0
|
|
103
|
+
return false if `which wget`.strip.length <= 0
|
|
104
|
+
|
|
105
|
+
system("wget --output-document='/tmp/wp.tgz' #{@model['source_url']}")
|
|
106
|
+
return false if not ::File.exist?('/tmp/wp.tgz')
|
|
107
|
+
system("cd /tmp; tar xvzf wp.tgz")
|
|
108
|
+
|
|
109
|
+
home_path = @model['path']
|
|
110
|
+
wp_config_path = "#{home_path}/wp-config.php"
|
|
111
|
+
wp_config_sample_path = "#{home_path}/wp-config-sample.php"
|
|
112
|
+
|
|
113
|
+
system("rm -rf #{home_path}") if ::File.file?(home_path)
|
|
114
|
+
Dir.mkdir(home_path, 0755) if not ::File.directory?(home_path)
|
|
115
|
+
system("cd /tmp; mv -f wordpress/* #{home_path}/; mv -f wordpress/.* #{home_path}/;rmdir wordpress;rm -f wp.tgz")
|
|
116
|
+
return false if not ::File.exist?(wp_config_sample_path)
|
|
117
|
+
|
|
118
|
+
system("cp -f #{wp_config_sample_path} #{wp_config_path}")
|
|
119
|
+
|
|
120
|
+
system("sed -i 's/.*DB_NAME.*/define(\"DB_NAME\",\"#{db['db_name']}\");/' #{wp_config_path}")
|
|
121
|
+
system("sed -i 's/.*DB_USER.*/define(\"DB_USER\",\"#{db['db_user']}\");/' #{wp_config_path}")
|
|
122
|
+
system("sed -i 's/.*DB_PASSWORD.*/define(\"DB_PASSWORD\",\"#{db['db_password']}\");/' #{wp_config_path}")
|
|
123
|
+
system("sed -i 's/.*DB_HOST.*/define(\"DB_HOST\",\"#{db_address}\");/' #{wp_config_path}")
|
|
124
|
+
|
|
125
|
+
system("cd #{home_path}; mv -f index.html index.html.bak")
|
|
126
|
+
|
|
127
|
+
::File.open(ConfigFile, 'w') { |f|
|
|
128
|
+
config = { 'http' => p['http'], 'database' => p['database'], 'path' => @model['path'] }
|
|
129
|
+
f.write(JSON.generate(config))
|
|
130
|
+
f.flush
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
true
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def uninstall(p={})
|
|
137
|
+
home_path = @model['path']
|
|
138
|
+
|
|
139
|
+
# delete all files
|
|
140
|
+
if @model['path'] != '/'
|
|
141
|
+
system("rm -rf #{home_path}")
|
|
142
|
+
else
|
|
143
|
+
system("cd #{home_path}; mv -f index.html.bak /tmp; rm -rf *; mv -f /tmp/index.html.bak index.html")
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
::File.delete(ConfigFile) if ::File.exist?(ConfigFile)
|
|
147
|
+
|
|
148
|
+
true
|
|
149
|
+
end
|
|
150
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
include "../apache/apache.sfp"
|
|
2
|
+
include "../mysql/mysql.sfp"
|
|
3
|
+
|
|
4
|
+
schema WordpressCluster
|
|
5
|
+
|
|
6
|
+
schema WordpressDB extends WordpressCluster {
|
|
7
|
+
installed : Bool
|
|
8
|
+
mysql isref Mysql
|
|
9
|
+
final db_name = "wordpress"
|
|
10
|
+
final db_user = "wordpress"
|
|
11
|
+
final db_password = "password"
|
|
12
|
+
|
|
13
|
+
sub install(mysql: Mysql) {
|
|
14
|
+
condition {
|
|
15
|
+
this.installed != true
|
|
16
|
+
mysql.running = true
|
|
17
|
+
mysql.public = true
|
|
18
|
+
}
|
|
19
|
+
effect {
|
|
20
|
+
this.installed = true
|
|
21
|
+
this.mysql = mysql
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
sub uninstall (mysql: Mysql) {
|
|
25
|
+
condition {
|
|
26
|
+
this.mysql = mysql
|
|
27
|
+
mysql.running = true
|
|
28
|
+
this.installed = true
|
|
29
|
+
}
|
|
30
|
+
effect {
|
|
31
|
+
this.installed = false
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
schema WordpressWeb extends WordpressCluster {
|
|
37
|
+
installed : Bool
|
|
38
|
+
http isref Apache
|
|
39
|
+
database isref WordpressDB
|
|
40
|
+
final path = "/var/www/wp"
|
|
41
|
+
final source_url = "http://wordpress.org/latest.tar.gz"
|
|
42
|
+
|
|
43
|
+
sub install (http: Apache, database: WordpressDB) {
|
|
44
|
+
condition {
|
|
45
|
+
this.installed != true
|
|
46
|
+
http.installed = true
|
|
47
|
+
http.running = false
|
|
48
|
+
http.php_module = true
|
|
49
|
+
http.php_mysql_module = true
|
|
50
|
+
database.installed = true
|
|
51
|
+
}
|
|
52
|
+
effect {
|
|
53
|
+
this.installed = true
|
|
54
|
+
this.http = http
|
|
55
|
+
this.database = database
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
sub uninstall (http: Apache, database: WordpressDB) {
|
|
60
|
+
condition {
|
|
61
|
+
this.installed = true
|
|
62
|
+
this.http = http
|
|
63
|
+
http.running = false
|
|
64
|
+
http.installed = true
|
|
65
|
+
this.database = database
|
|
66
|
+
database.installed = true
|
|
67
|
+
}
|
|
68
|
+
effect {
|
|
69
|
+
this.installed = false
|
|
70
|
+
this.http = null
|
|
71
|
+
this.database = null
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|