sunzi 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -2
- data/README.md +3 -2
- data/Rakefile +5 -7
- data/lib/sunzi/cli.rb +0 -1
- data/lib/sunzi/cloud/digital_ocean.rb +14 -0
- data/lib/sunzi/dependency.rb +1 -1
- data/lib/templates/create/install.sh +6 -6
- data/lib/templates/create/recipes/sunzi.sh +8 -5
- data/lib/templates/create/roles/db.sh +3 -3
- data/lib/templates/create/roles/web.sh +2 -2
- data/lib/templates/setup/digital_ocean/digital_ocean.yml +4 -2
- data/sunzi.gemspec +1 -1
- metadata +3 -5
- data/lib/templates/create/roles/app.sh +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a3f735ba4adee8e29059770569406897d42e9a7
|
4
|
+
data.tar.gz: 3ec26e19e5ca10213f79726d0963e29b03672dc9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 361584e1a3104439e3c1e4ab735ce920b32fdbb052af1815d47f3c5c88c7ffb801cb2b007c7cd5edb53897848aec88dd67239921a1edac9d585d61119c0b49cc
|
7
|
+
data.tar.gz: 564fa3ae5ac3f99ce117c79251a5249307f7e81a79dabbb5c49b973c3f3e1e9fdba766ae124377166600e8d000c9d435e6e5a946f420266cbea7475cf580a57d
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -18,6 +18,8 @@ Its design goals are:
|
|
18
18
|
|
19
19
|
### What's new:
|
20
20
|
|
21
|
+
* v1.1: "set -e" by default. apt-get everywhere in place of aptitude. Linode DNS support for DigitalOcean instances.
|
22
|
+
* v1.0: System functions are refactored into sunzi.mute() and sunzi.install().
|
21
23
|
* v0.9: Support for [DigitalOcean](https://www.digitalocean.com) setup / teardown.
|
22
24
|
* v0.8: Added `--sudo` option to `sunzi deploy`.
|
23
25
|
* v0.7: Added `erase_remote_folder` and `cache_remote_recipes` preferences for customized behavior.
|
@@ -85,8 +87,7 @@ sunzi/
|
|
85
87
|
recipes/ # put commonly used scripts here, referred from install.sh
|
86
88
|
sunzi.sh
|
87
89
|
roles/ # when role is specified, scripts here will be concatenated
|
88
|
-
|
89
|
-
db.sh
|
90
|
+
db.sh # to install.sh in the compile phase
|
90
91
|
web.sh
|
91
92
|
compiled/ # everything under this folder will be transferred to the
|
92
93
|
# remote server (do not edit directly)
|
data/Rakefile
CHANGED
@@ -1,11 +1,9 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
2
|
require 'rake/testtask'
|
3
3
|
|
4
|
-
|
5
4
|
Rake::TestTask.new do |t|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
t.libs << 'test'
|
6
|
+
t.test_files = FileList['test/test*.rb']
|
7
|
+
t.verbose = true
|
8
|
+
end
|
11
9
|
task :default => :test
|
data/lib/sunzi/cli.rb
CHANGED
@@ -47,7 +47,6 @@ module Sunzi
|
|
47
47
|
template 'templates/create/sunzi.yml', "#{project}/sunzi.yml"
|
48
48
|
template 'templates/create/install.sh', "#{project}/install.sh"
|
49
49
|
template 'templates/create/recipes/sunzi.sh', "#{project}/recipes/sunzi.sh"
|
50
|
-
template 'templates/create/roles/app.sh', "#{project}/roles/app.sh"
|
51
50
|
template 'templates/create/roles/db.sh', "#{project}/roles/db.sh"
|
52
51
|
template 'templates/create/roles/web.sh', "#{project}/roles/web.sh"
|
53
52
|
end
|
@@ -80,6 +80,13 @@ module Sunzi
|
|
80
80
|
# Set the public IP to AWS Route 53
|
81
81
|
say "Setting the public IP to AWS Route 53..."
|
82
82
|
Route53::DNSRecord.new(@fqdn, "A", "300", [@public_ip], @route53_zone).create
|
83
|
+
when 'linode'
|
84
|
+
Sunzi::Dependency.load('linode') # FIXME: this should run at the beginning
|
85
|
+
linode = ::Linode.new(:api_key => @config['linode']['api_key'])
|
86
|
+
# Set the public IP to Linode DNS Manager
|
87
|
+
say "Setting the public IP to Linode DNS Manager..."
|
88
|
+
domainid = linode.domain.list.find{|i| i.domain == @config['fqdn']['zone'] }.domainid
|
89
|
+
linode.domain.resource.create(:DomainID => domainid, :Type => 'A', :Name => @fqdn, :Target => @public_ip)
|
83
90
|
end
|
84
91
|
|
85
92
|
# Save the instance info
|
@@ -128,6 +135,13 @@ module Sunzi
|
|
128
135
|
say 'deleting the public IP from AWS Route 53...'
|
129
136
|
@record = @route53_zone.get_records.find{|i| i.values.first == @instance[:ip_address] }
|
130
137
|
@record.delete if @record
|
138
|
+
when 'linode'
|
139
|
+
Sunzi::Dependency.load('linode') # FIXME: this should run at the beginning
|
140
|
+
linode = ::Linode.new(:api_key => @config['linode']['api_key'])
|
141
|
+
say 'deleting the public IP from Linode DNS Manager...'
|
142
|
+
domainid = linode.domain.list.find{|i| i.domain == @config['fqdn']['zone'] }.domainid
|
143
|
+
resource = linode.domain.resource.list(:DomainID => domainid).find{|i| i.target == @instance[:ip_address] }
|
144
|
+
linode.domain.resource.delete(:DomainID => domainid, :ResourceID => resource.resourceid)
|
131
145
|
end
|
132
146
|
|
133
147
|
# Remove the instance config file
|
data/lib/sunzi/dependency.rb
CHANGED
@@ -5,7 +5,7 @@ module Sunzi
|
|
5
5
|
'linode' => { :require => 'linode', :version => '>= 0.7.9' },
|
6
6
|
'highline' => { :require => 'highline', :version => '>= 1.6.11'},
|
7
7
|
'route53' => { :require => 'route53', :version => '>= 0.2.1' },
|
8
|
-
'digital_ocean' => { :require => 'digital_ocean', :version => '>= 0.0
|
8
|
+
'digital_ocean' => { :require => 'digital_ocean', :version => '>= 1.0.0' },
|
9
9
|
}
|
10
10
|
end
|
11
11
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/bin/bash
|
2
|
+
set -e
|
2
3
|
|
3
4
|
# Load base utility functions like sunzi.mute() and sunzi.install()
|
4
5
|
source recipes/sunzi.sh
|
@@ -11,11 +12,11 @@ export DEBIAN_FRONTEND=noninteractive
|
|
11
12
|
# source recipes/dotdeb.sh
|
12
13
|
|
13
14
|
# Update installed packages
|
14
|
-
sunzi.mute "
|
15
|
-
sunzi.mute "
|
15
|
+
sunzi.mute "apt-get update"
|
16
|
+
sunzi.mute "apt-get -y upgrade"
|
16
17
|
|
17
18
|
# Install packages
|
18
|
-
sunzi.install
|
19
|
+
sunzi.mute "apt-get -y install git-core ntp curl"
|
19
20
|
|
20
21
|
# Set RAILS_ENV
|
21
22
|
environment=$(cat attributes/environment)
|
@@ -32,13 +33,12 @@ ruby_version=$(cat attributes/ruby_version)
|
|
32
33
|
|
33
34
|
if [[ "$(which ruby)" != /usr/local/rvm/rubies/ruby-$ruby_version* ]]; then
|
34
35
|
echo "Installing ruby-$ruby_version"
|
35
|
-
|
36
|
-
rvm install $ruby_version
|
36
|
+
# Install dependencies using RVM autolibs - see https://blog.engineyard.com/2013/rvm-ruby-2-0
|
37
|
+
rvm install --autolibs=3 $ruby_version
|
37
38
|
rvm $ruby_version --default
|
38
39
|
echo 'gem: --no-ri --no-rdoc' > ~/.gemrc
|
39
40
|
|
40
41
|
# Install Bundler
|
41
|
-
gem update --system
|
42
42
|
gem install bundler
|
43
43
|
fi
|
44
44
|
|
@@ -1,15 +1,15 @@
|
|
1
1
|
# This file is used to define functions under the sunzi.* namespace.
|
2
2
|
|
3
|
-
# Set $sunzi_pkg to "
|
3
|
+
# Set $sunzi_pkg to "apt-get" or "yum", or abort.
|
4
4
|
#
|
5
|
-
if which
|
6
|
-
export sunzi_pkg=
|
5
|
+
if which apt-get >/dev/null 2>&1; then
|
6
|
+
export sunzi_pkg=apt-get
|
7
7
|
elif which yum >/dev/null 2>&1; then
|
8
8
|
export sunzi_pkg=yum
|
9
9
|
fi
|
10
10
|
|
11
11
|
if [ "$sunzi_pkg" = '' ]; then
|
12
|
-
echo 'sunzi only supports
|
12
|
+
echo 'sunzi only supports apt-get or yum!' >&2
|
13
13
|
exit 1
|
14
14
|
fi
|
15
15
|
|
@@ -24,7 +24,7 @@ function sunzi.mute() {
|
|
24
24
|
# Installer
|
25
25
|
#
|
26
26
|
function sunzi.installed() {
|
27
|
-
if [ "$sunzi_pkg" = '
|
27
|
+
if [ "$sunzi_pkg" = 'apt-get' ]; then
|
28
28
|
dpkg -s $@ >/dev/null 2>&1
|
29
29
|
elif [ "$sunzi_pkg" = 'yum' ]; then
|
30
30
|
rpm -qa | grep $@ >/dev/null
|
@@ -32,6 +32,9 @@ function sunzi.installed() {
|
|
32
32
|
return $?
|
33
33
|
}
|
34
34
|
|
35
|
+
# When there's "set -e" in install.sh, sunzi.install should be used with if statement,
|
36
|
+
# otherwise the script may exit unexpectedly when the package is already installed.
|
37
|
+
#
|
35
38
|
function sunzi.install() {
|
36
39
|
for name in $@
|
37
40
|
do
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Install Database Server
|
2
2
|
|
3
|
-
source recipes/mongodb-10gen.sh
|
4
|
-
#
|
5
|
-
#
|
3
|
+
# source recipes/mongodb-10gen.sh # MongoDB
|
4
|
+
# apt-get -q -y install mysql-server-5.5 # MySQL 5.5 - You may need to enable Dotdeb in install.sh first
|
5
|
+
# apt-get -y install redis-server # Redis - You may need to enable Dotdeb in install.sh first
|
@@ -17,10 +17,12 @@ name:
|
|
17
17
|
# filter out large lists by keyword
|
18
18
|
distributions_filter: debian
|
19
19
|
|
20
|
-
#
|
20
|
+
# DNS takes "route53" or "linode"
|
21
21
|
# dns: route53
|
22
22
|
|
23
|
-
#
|
23
|
+
# Credentials for DNS
|
24
24
|
route53:
|
25
25
|
key: your_aws_key
|
26
26
|
secret: your_aws_secret
|
27
|
+
linode:
|
28
|
+
api_key: your_linode_api_key
|
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.1.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.1.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-
|
11
|
+
date: 2013-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -76,7 +76,6 @@ files:
|
|
76
76
|
- lib/templates/create/.gitignore
|
77
77
|
- lib/templates/create/install.sh
|
78
78
|
- lib/templates/create/recipes/sunzi.sh
|
79
|
-
- lib/templates/create/roles/app.sh
|
80
79
|
- lib/templates/create/roles/db.sh
|
81
80
|
- lib/templates/create/roles/web.sh
|
82
81
|
- lib/templates/create/sunzi.yml
|
@@ -104,10 +103,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
103
|
version: '0'
|
105
104
|
requirements: []
|
106
105
|
rubyforge_project:
|
107
|
-
rubygems_version: 2.0.
|
106
|
+
rubygems_version: 2.0.2
|
108
107
|
signing_key:
|
109
108
|
specification_version: 4
|
110
109
|
summary: Server provisioning utility for minimalists
|
111
110
|
test_files:
|
112
111
|
- test/test_cli.rb
|
113
|
-
has_rdoc:
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# Install Application Server
|
2
|
-
|
3
|
-
# Required attributes: env, ruby_version
|
4
|
-
export ENVIRONMENT=$(cat attributes/environment)
|
5
|
-
export RUBY_VERSION=$(cat attributes/ruby_version)
|
6
|
-
|
7
|
-
# Install RVM
|
8
|
-
source recipes/rvm.sh
|
9
|
-
|
10
|
-
# Set RAILS_ENV
|
11
|
-
if grep -Fq "RAILS_ENV" ~/.bash_profile; then
|
12
|
-
echo 'RAILS_ENV entry already exists'
|
13
|
-
else
|
14
|
-
echo "export RAILS_ENV=$ENVIRONMENT" >> ~/.bash_profile
|
15
|
-
source ~/.bash_profile
|
16
|
-
fi
|
17
|
-
|
18
|
-
# Install Ruby
|
19
|
-
if [[ "$(which ruby)" == /usr/local/rvm/rubies/ruby-$RUBY_VERSION* ]]; then
|
20
|
-
echo 'ruby-$RUBY_VERSION already installed'
|
21
|
-
else
|
22
|
-
aptitude -y install curl build-essential libssl-dev libreadline6-dev
|
23
|
-
rvm install $RUBY_VERSION
|
24
|
-
rvm $RUBY_VERSION --default
|
25
|
-
echo 'gem: --no-ri --no-rdoc' > ~/.gemrc
|
26
|
-
|
27
|
-
# Install RubyGems
|
28
|
-
gem update --system
|
29
|
-
gem install bundler
|
30
|
-
fi
|