ssp 0.5 → 0.6
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/lib/ssp/application/chef.rb +46 -5
- data/lib/ssp/version.rb +1 -1
- metadata +3 -3
data/lib/ssp/application/chef.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'chef/config'
|
2
2
|
require 'chef/search/query'
|
3
3
|
require 'chef/node'
|
4
|
+
require 'chef/data_bag'
|
4
5
|
|
5
6
|
class SSP::App::Chef < Thor
|
6
7
|
namespace :chef
|
@@ -9,19 +10,37 @@ class SSP::App::Chef < Thor
|
|
9
10
|
:desc => "Location of the knife configuration file",
|
10
11
|
:default => File.join(ENV['HOME'], '.chef', 'knife.rb')
|
11
12
|
|
13
|
+
class_option :ssh_user, :aliases => "-u",
|
14
|
+
:desc => "The ssh username",
|
15
|
+
:default => "root"
|
16
|
+
class_option :ssh_password, :aliases => "-p",
|
17
|
+
:desc => "The ssh password"
|
12
18
|
|
13
19
|
desc "client [NODES...]", "Runs chef-client on multiple nodes"
|
14
|
-
method_option :ssh_user, :aliases => "-u",
|
15
|
-
:desc => "The ssh username",
|
16
|
-
:default => "root"
|
17
|
-
method_option :ssh_password, :aliases => "-p",
|
18
|
-
:desc => "The ssh password"
|
19
20
|
def client(*nodes)
|
20
21
|
chef_config
|
21
22
|
command = options[:ssh_user] == "root" ? "chef-client" : "sudo chef-client"
|
22
23
|
ssh_run nodes.join(" "), command
|
23
24
|
end
|
24
25
|
|
26
|
+
desc "deploy APP", "Runs chef-client with deployment enabled for the application on the right node"
|
27
|
+
method_options %w( production -P ) => false, %w( migrate -m ) => true,
|
28
|
+
%w( rollback -r ) => false, %w( force -f ) => false
|
29
|
+
def deploy(app)
|
30
|
+
if options[:ssh_user] == "root"
|
31
|
+
raise Thor::Error, "You cannot deploy directly with the root user, use the -u option to specify your user"
|
32
|
+
end
|
33
|
+
chef_config
|
34
|
+
node = "#{options[:production] ? "#{app}-app-01" : "sage"}.sspti.me"
|
35
|
+
command = "sudo chef-client -V -l debug -L /tmp/#{app}_deploy_chef_run.#{Time.now.strftime("%Y%m%d%H%M")}.log | grep '\\[[^]]*\\] [A-Z]*:' | grep -v DEBUG:"
|
36
|
+
|
37
|
+
env = options[:production] ? "production" : "staging"
|
38
|
+
deploy_action = options[:rollback] ? "rollback" : options[:force] ? "force_deploy" : "deploy"
|
39
|
+
with_updated_bag(app, env, :deploy_action => deploy_action, :migrate => options[:migrate]) do
|
40
|
+
ssh_run(node, command)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
25
44
|
private
|
26
45
|
def ssh_run(host, command, user = options[:ssh_user], pass = options[:ssh_password], manual = !host.index(':'))
|
27
46
|
ssh = ::Chef::Knife::Ssh.new
|
@@ -52,4 +71,26 @@ class SSP::App::Chef < Thor
|
|
52
71
|
end
|
53
72
|
::Chef::Config
|
54
73
|
end
|
74
|
+
|
75
|
+
def with_updated_bag(app, env, attributes={})
|
76
|
+
bag = Chef::DataBagItem.new
|
77
|
+
bag.data_bag("apps")
|
78
|
+
bag.raw_data = Chef::DataBagItem.load("apps", app)
|
79
|
+
|
80
|
+
original_values = {}
|
81
|
+
attributes.each do |key, value|
|
82
|
+
key = key.to_s
|
83
|
+
bag.raw_data[key] ||= {}
|
84
|
+
original_values[key] = bag.raw_data[key].dup
|
85
|
+
bag.raw_data[key][env] = value
|
86
|
+
end
|
87
|
+
bag.save
|
88
|
+
|
89
|
+
yield
|
90
|
+
|
91
|
+
attributes.each do |key, value|
|
92
|
+
bag.raw_data[key.to_s] = original_values[key.to_s]
|
93
|
+
end
|
94
|
+
bag.save
|
95
|
+
end
|
55
96
|
end
|
data/lib/ssp/version.rb
CHANGED
metadata
CHANGED
@@ -4,8 +4,8 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
version: "0.
|
7
|
+
- 6
|
8
|
+
version: "0.6"
|
9
9
|
platform: ruby
|
10
10
|
authors:
|
11
11
|
- "L\xC3\xA1szl\xC3\xB3 B\xC3\xA1csi"
|
@@ -13,7 +13,7 @@ autorequire:
|
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
15
|
|
16
|
-
date: 2010-10-
|
16
|
+
date: 2010-10-21 00:00:00 +02:00
|
17
17
|
default_executable:
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|