sunzi 1.1.2 → 1.2.0
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 +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:
|