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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ffa01c88c6e07a1cad033e00d59dc101f5682eb
4
- data.tar.gz: 292cbdf52feafdf63b92b8dac2b87d1f1469a219
3
+ metadata.gz: 0a3f735ba4adee8e29059770569406897d42e9a7
4
+ data.tar.gz: 3ec26e19e5ca10213f79726d0963e29b03672dc9
5
5
  SHA512:
6
- metadata.gz: 3c46c9e363903f7e6440ae3b7c0d6685b695e1bf469df7f3b41f1b9d446b85d7c8dc0a131c49b9c71d777dff0f8c7632cbc746f5a6d77295df1a302d4def8696
7
- data.tar.gz: 0ee5d4d9f5c9a00aa889e4a787be66a3b636d119f0506ff14d7915795c2025de3d33ecd8059bb5d1c2c1e150cf191f4da547e2fc3a6f0de5dc154ac6da69ed68
6
+ metadata.gz: 361584e1a3104439e3c1e4ab735ce920b32fdbb052af1815d47f3c5c88c7ffb801cb2b007c7cd5edb53897848aec88dd67239921a1edac9d585d61119c0b49cc
7
+ data.tar.gz: 564fa3ae5ac3f99ce117c79251a5249307f7e81a79dabbb5c49b973c3f3e1e9fdba766ae124377166600e8d000c9d435e6e5a946f420266cbea7475cf580a57d
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in sunzi.gemspec
4
3
  gemspec
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
- app.sh # to install.sh in the compile phase
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 "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
3
 
4
-
5
4
  Rake::TestTask.new do |t|
6
- t.libs << "test"
7
- t.test_files = FileList['test/test*.rb']
8
- t.verbose = true
9
- end
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
@@ -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.1' },
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 "aptitude update"
15
- sunzi.mute "aptitude -y safe-upgrade"
15
+ sunzi.mute "apt-get update"
16
+ sunzi.mute "apt-get -y upgrade"
16
17
 
17
18
  # Install packages
18
- sunzi.install "git-core ntp curl"
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
- sunzi.install build-essential libssl-dev libreadline6-dev
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 "aptitude" or "yum", or abort.
3
+ # Set $sunzi_pkg to "apt-get" or "yum", or abort.
4
4
  #
5
- if which aptitude >/dev/null 2>&1; then
6
- export sunzi_pkg=aptitude
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 aptitude and yum!' >&2
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" = 'aptitude' ]; then
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 # MongoDB
4
- # aptitude -q -y install mysql-server-5.5 # MySQL 5.5 - You may need to enable Dotdeb in install.sh first
5
- # aptitude -y install redis-server # Redis - You may need to enable Dotdeb in install.sh first
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
@@ -1,4 +1,4 @@
1
1
  # Install Web server
2
2
 
3
- aptitude -y install nginx # Nginx
4
- # aptitude -y install apache2 # Apache
3
+ apt-get -y install nginx # Nginx
4
+ # apt-get -y install apache2 # Apache
@@ -17,10 +17,12 @@ name:
17
17
  # filter out large lists by keyword
18
18
  distributions_filter: debian
19
19
 
20
- # dns takes "route53"
20
+ # DNS takes "route53" or "linode"
21
21
  # dns: route53
22
22
 
23
- # only used when route53 is chosen for DNS
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.0.0' # retrieve this value by: Gem.loaded_specs['sunzi'].version.to_s
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.0.0
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-03-22 00:00:00.000000000 Z
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.3
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