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
@@ -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
|
+
}
|