mana 0.0.4 → 0.0.5

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.
data/README.md CHANGED
@@ -4,6 +4,8 @@ Configuration management with Chef & Capistrano
4
4
 
5
5
  ## Installation
6
6
 
7
+ ### Step 1
8
+
7
9
  Add this line to your application's Gemfile:
8
10
 
9
11
  gem 'mana'
@@ -16,10 +18,32 @@ Or install it yourself as:
16
18
 
17
19
  $ gem install mana
18
20
 
19
- ## Usage
21
+ ### Step 2
22
+
23
+ Init project with Chef, Capistrano and Vagrant configs:
20
24
 
21
25
  rake mana:install
22
26
 
27
+ Edit `config/deploy.rb` to provide application name, SCM repository etc. and Chef cookbook params.
28
+
29
+ Edit `Vagrantfile` to match your available Vagrant boxes and personal taste.
30
+
31
+ Edit Chef cookbooks under `config/deploy/cookbooks` directory to add software.
32
+
33
+ ## Usage
34
+
35
+ Setup all software on server:
36
+
37
+ cap <stage> mana:setup
38
+
39
+ where `<stage>` is server name. Individual stages can be added in `config/deploy/` directory.
40
+ See default `vagrant` stage for details.
41
+
42
+ Use ordinary `cap deploy`-like stuff for later deploys and `cap mana:install` for configuration upgrades.
43
+
44
+ Use `cap -T mana` to see useful stuff added after this.
45
+
46
+
23
47
  ## Contributing
24
48
 
25
49
  1. Fork it
@@ -1,40 +1,57 @@
1
1
  require 'roundsman/capistrano'
2
- require 'capistrano_colors'
3
2
  require 'capistrano/ext/multistage'
3
+ require 'capistrano/recipes/deploy/strategy/remote_cache'
4
+ require 'mana/remote_cache_subdir'
4
5
 
5
6
  Capistrano::Configuration.default_io_proc = ->(ch, stream, out){
6
- next if out.strip.empty?
7
+ next if out.strip.empty? # skipping extensive blank lines
7
8
  level = stream == :err ? :important : :info
8
9
  ch[:options][:logger].send(level, out.strip, "#{stream} :: #{ch[:server]}")
9
10
  }
10
11
 
11
12
  Capistrano::Configuration.instance(:must_exist).load do
12
-
13
+
13
14
  # Convinient defaults
14
-
15
+
15
16
  set(:deploy_to) { "/opt/#{fetch(:application)}" }
16
17
  set :scm, 'git'
17
18
  set :deploy_via, :remote_cache
18
19
  set :use_sudo, false
19
-
20
+
20
21
  default_run_options[:pty] = true
21
22
  ssh_options[:forward_agent] = true
22
-
23
+
24
+ set :strategy, RemoteCacheSubdir.new(self)
25
+
23
26
  # Roundsman fine-tuning
24
27
 
25
- set :chef_version, '10.12.0'
28
+ set :chef_version, '~> 10.18.2'
26
29
  set :cookbooks_directory, 'config/deploy/cookbooks'
27
- set :stream_roundsman_output, false
28
- set :ruby_install_script do %Q{
29
- apt-get install -y python-software-properties
30
- apt-add-repository -y ppa:brightbox/ruby-ng
31
- apt-get update
32
- apt-get install -y ruby1.9.3
33
- gem install bundler
34
- } end
35
-
30
+ set :stream_roundsman_output, false # todo check why is this needed
31
+ set :ruby_install_script do
32
+ if fetch(:ruby_version) == :brightbox
33
+ %Q{
34
+ apt-get install -y python-software-properties
35
+ apt-add-repository -y ppa:brightbox/ruby-ng
36
+ apt-get update
37
+ apt-get install -y ruby1.9.3
38
+ gem install bundler
39
+ }
40
+ else
41
+ %Q{
42
+ set -e
43
+ cd #{roundsman_working_dir}
44
+ rm -rf ruby-build
45
+ git clone -q https://github.com/sstephenson/ruby-build.git
46
+ cd ruby-build
47
+ ./install.sh
48
+ CONFIGURE_OPTS='--disable-install-rdoc' ruby-build #{fetch(:ruby_version)} #{fetch(:ruby_install_dir)}
49
+ }
50
+ end
51
+ end
52
+
36
53
  # Mana
37
-
54
+
38
55
  namespace :mana do
39
56
  desc 'Complete update of all software'
40
57
  task :default do
@@ -44,23 +61,23 @@ Capistrano::Configuration.instance(:must_exist).load do
44
61
  install
45
62
  deploy.migrations
46
63
  end
47
-
64
+
48
65
  desc 'Bootstrap chef and ruby'
49
66
  task :bootstrap do
50
67
  roundsman.install.default
51
68
  roundsman.chef.install
52
69
  end
53
-
70
+
54
71
  desc 'Install & update software'
55
72
  task :install do
56
73
  roundsman.chef.default
57
74
  end
58
-
75
+
59
76
  desc 'Show install log'
60
77
  task :log do
61
78
  sudo "cat /tmp/roundsman/cache/chef-stacktrace.out"
62
79
  end
63
-
80
+
64
81
  desc 'Complete setup'
65
82
  task :setup do
66
83
  upgrade
@@ -71,28 +88,40 @@ Capistrano::Configuration.instance(:must_exist).load do
71
88
  deploy.seed
72
89
  sudo 'monit reload'
73
90
  end
74
-
91
+
75
92
  desc 'Upgrade software'
76
93
  task :upgrade do
77
94
  sudo "DEBIAN_FRONTEND=noninteractive #{fetch(:package_manager)} -yq update"
78
95
  sudo "DEBIAN_FRONTEND=noninteractive #{fetch(:package_manager)} -yq upgrade"
79
96
  end
80
-
97
+
81
98
  desc "Open SSH connection to server"
82
99
  task :ssh do
83
100
  host = roles[:app].servers.first # silly approach
84
101
  exec "ssh -L 3737:localhost:3737 #{fetch(:user)}@#{host}" # forward monit status server port
85
102
  end
103
+
104
+ desc "Watch Rails log"
105
+ task :watchlog do
106
+ begin
107
+ run "tail -n 100 -f #{fetch(:shared_path)}/log/#{rails_env}.log", pty: true do |_, stream, data|
108
+ puts "[#{channel[:host]}][#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}] #{data}"
109
+ break if stream == :err
110
+ end
111
+ rescue Interrupt
112
+ exit
113
+ end
114
+ end
86
115
  end
87
-
116
+
88
117
  # More convinience
89
-
118
+
90
119
  namespace :deploy do
91
120
  desc 'Update the database with seed data'
92
121
  task :seed, roles: :db, only: {primary: true} do
93
122
  run "cd #{current_path}; bundle exec rake db:seed RAILS_ENV=#{rails_env}"
94
123
  end
95
-
124
+
96
125
  desc "Restart unicorn"
97
126
  task :restart_unicorn, roles: :app, except: {no_release: true} do
98
127
  sudo "service #{fetch(:application)}-web restart"
@@ -0,0 +1,21 @@
1
+ class RemoteCacheSubdir < Capistrano::Deploy::Strategy::RemoteCache
2
+ private
3
+
4
+ def repository_cache_subdir
5
+ if configuration[:deploy_subdir] then
6
+ File.join(repository_cache, configuration[:deploy_subdir])
7
+ else
8
+ repository_cache
9
+ end
10
+ end
11
+
12
+ def copy_repository_cache
13
+ logger.trace "copying the cached version to #{configuration[:release_path]}"
14
+ if copy_exclude.empty?
15
+ run "cp -RPp #{repository_cache_subdir} #{configuration[:release_path]} && #{mark}"
16
+ else
17
+ exclusions = copy_exclude.map { |e| "--exclude=\"#{e}\"" }.join(' ')
18
+ run "rsync -lrpt #{exclusions} #{repository_cache_subdir}/* #{configuration[:release_path]} && #{mark}"
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module Mana
2
- VERSION = "0.0.4"
2
+ VERSION = '0.0.5'
3
3
  end
@@ -17,5 +17,4 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency "capistrano"
19
19
  gem.add_dependency "roundsman"
20
- gem.add_dependency "capistrano_colors"
21
20
  end
@@ -1,17 +1,35 @@
1
- set :application, 'application' #TODO: change this to application name
1
+ #TODO: change this to application name
2
+ set :application, 'application'
2
3
 
3
- set :repository, 'git@github.com:author/application.git' #TODO: change this to repository
4
+ #TODO: change this to repository
5
+ set :repository, 'git@github.com:author/application.git'
6
+
7
+ # set :deploy_subdir, ''
4
8
 
5
9
  set :default_stage, :vagrant
6
10
 
11
+ # Uses Brightbox Next Generation Ruby Packages
12
+ # http://wiki.brightbox.co.uk/docs:ruby-ng
13
+ # by default.
14
+ # Change to specific version in ruby-build format
15
+ # if exact version needed.
16
+ set :ruby_version, :brightbox
7
17
  set :care_about_ruby_version, false
8
18
 
9
- set :postgresql, version: '9.1'
19
+ set :postgresql,
20
+ version: '9.1',
21
+ listen_all: false #TODO: changes this to `true` for TCP connectivity
10
22
 
11
23
  set :monit,
12
24
  notify_email: 'admin@application.com', #TODO: change this to your email to receive monit alerts
13
25
  poll_period: 30
14
26
 
27
+ set :railsapp,
28
+ server_names: '_' #TODO: change this to domain name(s) of the project
29
+
30
+ # For other options look into cookbooks/*/attributes/default.rb
31
+ # and other cookbook sources.
32
+
15
33
  set :run_list, %w(
16
34
  recipe[monit]
17
35
  recipe[monit::ssh]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mana
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-08 00:00:00.000000000 Z
12
+ date: 2013-01-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
@@ -43,22 +43,6 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: capistrano_colors
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
46
  description: Configuration management with Chef & Capistrano
63
47
  email:
64
48
  - ilia@flamefork.ru
@@ -103,6 +87,7 @@ files:
103
87
  - lib/mana.rb
104
88
  - lib/mana/capistrano.rb
105
89
  - lib/mana/railtie.rb
90
+ - lib/mana/remote_cache_subdir.rb
106
91
  - lib/mana/version.rb
107
92
  - lib/tasks/mana.rake
108
93
  - mana.gemspec