sunzi 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +11 -17
- data/lib/sunzi/cli.rb +22 -12
- data/lib/templates/create/files/.gitkeep +0 -0
- data/lib/templates/create/install.sh +2 -2
- data/lib/templates/create/sunzi.yml +4 -0
- data/sunzi.gemspec +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ec250a135b740f0a34196be384788cdebf33d5a
|
4
|
+
data.tar.gz: 27cf354835d55b8463964df7e8095c8880d3750a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22a9585b4f2228b01509924b4c7509ca8b20b5ffd300a5a06338db32cbb12e8d1a6b23d129f9be2513d86435bb2c0c708f82b162ea708eeaefbf2cb412281414
|
7
|
+
data.tar.gz: d50ddebc4f553446f4c54fcec5099c7dfab232fc1e74888bdcdc1890b06506c401cac336e6c6e860806f277bd8263c31efedec045b443f715e7fdeae70dd4988
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -18,6 +18,7 @@ Its design goals are:
|
|
18
18
|
|
19
19
|
### What's new:
|
20
20
|
|
21
|
+
* v1.2: Evaluate everything as ERB templates by default. Added "files" folder.
|
21
22
|
* v1.1: "set -e" by default. apt-get everywhere in place of aptitude. Linode DNS support for DigitalOcean instances.
|
22
23
|
* v1.0: System functions are refactored into sunzi.mute() and sunzi.install().
|
23
24
|
* v0.9: Support for [DigitalOcean](https://www.digitalocean.com) setup / teardown.
|
@@ -89,25 +90,24 @@ sunzi/
|
|
89
90
|
roles/ # when role is specified, scripts here will be concatenated
|
90
91
|
db.sh # to install.sh in the compile phase
|
91
92
|
web.sh
|
93
|
+
files/ # put any files to be transferred
|
92
94
|
compiled/ # everything under this folder will be transferred to the
|
93
95
|
# remote server (do not edit directly)
|
94
96
|
```
|
95
97
|
|
96
|
-
How do you pass dynamic values
|
97
|
-
|
98
|
+
How do you pass dynamic values?
|
99
|
+
-------------------------------
|
98
100
|
|
99
|
-
|
101
|
+
There are two ways to pass dynamic values to the script - ruby and bash.
|
100
102
|
|
101
|
-
|
103
|
+
**For ruby (recommended)**: Make sure `eval_erb: true` is set in `sunzi.yml`. In the compile phase, attributes defined in `sunzi.yml` are accessible from any files in the form of `<%= @attributes.ruby_version %>`.
|
102
104
|
|
103
|
-
For
|
105
|
+
**For bash**: In the compile phase, attributes defined in `sunzi.yml` are split into multiple files in `compiled/attributes`, one per attribute. Now you can refer to it by `$(cat attributes/ruby_version)` in the script.
|
104
106
|
|
105
|
-
|
106
|
-
# Greeting
|
107
|
-
# $1: Name for goodbye
|
108
|
-
# $2: Name for hello
|
107
|
+
For instance, given the following `install.sh`:
|
109
108
|
|
110
|
-
|
109
|
+
```bash
|
110
|
+
echo "Goodbye <%= @attributes.goodbye %>, Hello <%= @attributes.hello %>!"
|
111
111
|
```
|
112
112
|
|
113
113
|
With `sunzi.yml`:
|
@@ -118,13 +118,7 @@ attributes:
|
|
118
118
|
hello: Sunzi
|
119
119
|
```
|
120
120
|
|
121
|
-
|
122
|
-
|
123
|
-
```bash
|
124
|
-
source recipes/greeting.sh $(cat attributes/goodbye) $(cat attributes/hello)
|
125
|
-
```
|
126
|
-
|
127
|
-
Now, you get the following result. Isn't it awesome?
|
121
|
+
Now, you get the following result.
|
128
122
|
|
129
123
|
```
|
130
124
|
Goodbye Chef, Hello Sunzi!
|
data/lib/sunzi/cli.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'open3'
|
2
|
+
require 'ostruct'
|
2
3
|
|
3
4
|
module Sunzi
|
4
5
|
class Cli < Thor
|
@@ -43,12 +44,13 @@ module Sunzi
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def do_create(project)
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
47
|
+
copy_file 'templates/create/.gitignore', "#{project}/.gitignore"
|
48
|
+
copy_file 'templates/create/sunzi.yml', "#{project}/sunzi.yml"
|
49
|
+
copy_file 'templates/create/install.sh', "#{project}/install.sh"
|
50
|
+
copy_file 'templates/create/recipes/sunzi.sh', "#{project}/recipes/sunzi.sh"
|
51
|
+
copy_file 'templates/create/roles/db.sh', "#{project}/roles/db.sh"
|
52
|
+
copy_file 'templates/create/roles/web.sh', "#{project}/roles/web.sh"
|
53
|
+
copy_file 'templates/create/files/.gitkeep', "#{project}/files/.gitkeep"
|
52
54
|
end
|
53
55
|
|
54
56
|
def do_deploy(target, role, force_sudo)
|
@@ -102,7 +104,7 @@ module Sunzi
|
|
102
104
|
@config = YAML.load(File.read('sunzi.yml'))
|
103
105
|
|
104
106
|
# Break down attributes into individual files
|
105
|
-
(@config['attributes'] ||
|
107
|
+
(@config['attributes'] || {}).each {|key, value| create_file "compiled/attributes/#{key}", value }
|
106
108
|
|
107
109
|
# Retrieve remote recipes via HTTP
|
108
110
|
cache_remote_recipes = @config['preferences'] && @config['preferences']['cache_remote_recipes']
|
@@ -112,15 +114,23 @@ module Sunzi
|
|
112
114
|
end
|
113
115
|
|
114
116
|
# Copy local files
|
115
|
-
|
116
|
-
|
117
|
-
|
117
|
+
@attributes = OpenStruct.new(@config['attributes'])
|
118
|
+
copy_or_template = (@config['preferences'] && @config['preferences']['eval_erb']) ? :template : :copy_file
|
119
|
+
Dir['recipes/*'].each {|file| send copy_or_template, File.expand_path(file), "compiled/recipes/#{File.basename(file)}" }
|
120
|
+
Dir['roles/*'].each {|file| send copy_or_template, File.expand_path(file), "compiled/roles/#{File.basename(file)}" }
|
121
|
+
Dir['files/*'].each {|file| send copy_or_template, File.expand_path(file), "compiled/files/#{File.basename(file)}" }
|
122
|
+
(@config['files'] || []).each {|file| send copy_or_template, File.expand_path(file), "compiled/files/#{File.basename(file)}" }
|
118
123
|
|
119
124
|
# Build install.sh
|
120
125
|
if role
|
121
|
-
|
126
|
+
if copy_or_template == :template
|
127
|
+
template File.expand_path('install.sh'), 'compiled/_install.sh'
|
128
|
+
create_file 'compiled/install.sh', File.binread('compiled/_install.sh') << "\n" << File.binread("compiled/roles/#{role}.sh")
|
129
|
+
else
|
130
|
+
create_file 'compiled/install.sh', File.binread('install.sh') << "\n" << File.binread("roles/#{role}.sh")
|
131
|
+
end
|
122
132
|
else
|
123
|
-
|
133
|
+
send copy_or_template, File.expand_path('install.sh'), 'compiled/install.sh'
|
124
134
|
end
|
125
135
|
end
|
126
136
|
|
File without changes
|
@@ -25,7 +25,7 @@ if sunzi.install "sysstat"; then
|
|
25
25
|
fi
|
26
26
|
|
27
27
|
# Set RAILS_ENV
|
28
|
-
environment
|
28
|
+
environment=<%= @attributes.environment %>
|
29
29
|
|
30
30
|
if ! grep -Fq "RAILS_ENV" ~/.bash_profile; then
|
31
31
|
echo 'Setting up RAILS_ENV...'
|
@@ -35,7 +35,7 @@ fi
|
|
35
35
|
|
36
36
|
# Install Ruby using RVM
|
37
37
|
source recipes/rvm.sh
|
38
|
-
ruby_version
|
38
|
+
ruby_version=<%= @attributes.ruby_version %>
|
39
39
|
|
40
40
|
if [[ "$(which ruby)" != /usr/local/rvm/rubies/ruby-$ruby_version* ]]; then
|
41
41
|
echo "Installing ruby-$ruby_version"
|
@@ -23,3 +23,7 @@ preferences:
|
|
23
23
|
# Skip retrieving remote recipes when local copies already exist. This setting helps
|
24
24
|
# iterative deploy testing considerably faster, when you have a lot of remote recipes.
|
25
25
|
cache_remote_recipes: false
|
26
|
+
|
27
|
+
# Evaluate files as ERB templates. When enabled, you can pass dynamic values in the form
|
28
|
+
# of <%= @attributes.environment %> in recipes, roles, files and install.sh.
|
29
|
+
eval_erb: true
|
data/sunzi.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'sunzi'
|
5
|
-
spec.version = '1.
|
5
|
+
spec.version = '1.2.0' # retrieve this value by: Gem.loaded_specs['sunzi'].version.to_s
|
6
6
|
spec.authors = ['Kenn Ejima']
|
7
7
|
spec.email = ['kenn.ejima@gmail.com']
|
8
8
|
spec.homepage = 'http://github.com/kenn/sunzi'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sunzi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenn Ejima
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-04-
|
11
|
+
date: 2013-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- lib/sunzi/logger.rb
|
80
80
|
- lib/sunzi/utility.rb
|
81
81
|
- lib/templates/create/.gitignore
|
82
|
+
- lib/templates/create/files/.gitkeep
|
82
83
|
- lib/templates/create/install.sh
|
83
84
|
- lib/templates/create/recipes/sunzi.sh
|
84
85
|
- lib/templates/create/roles/db.sh
|
@@ -108,9 +109,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
109
|
version: '0'
|
109
110
|
requirements: []
|
110
111
|
rubyforge_project:
|
111
|
-
rubygems_version: 2.0.
|
112
|
+
rubygems_version: 2.0.3
|
112
113
|
signing_key:
|
113
114
|
specification_version: 4
|
114
115
|
summary: Server provisioning utility for minimalists
|
115
116
|
test_files:
|
116
117
|
- test/test_cli.rb
|
118
|
+
has_rdoc:
|