sunzi 1.0.0 → 1.1.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 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