rezzza_capistrano_tools 0.1.0.dev → 0.2.0.dev

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README.md +21 -0
  2. data/lib/vaultage.rb +63 -10
  3. metadata +3 -3
data/README.md CHANGED
@@ -1,2 +1,23 @@
1
1
  Rezzza Capistrano Tools
2
2
  =======================
3
+
4
+
5
+ Vaultage
6
+ --------
7
+
8
+
9
+ 1) Decrypt:
10
+ ~~~~~~~~~~~
11
+
12
+ After `composer:install`:
13
+
14
+ - Fetch parameters files in /tmp/...
15
+ - Decrypt them.
16
+ - Upload them in specific location.
17
+
18
+ ```
19
+ set :vaultage, true
20
+ set(:vaultage_files) {[
21
+ ["/app/config/parameters/#{rails_env}.yml.gpg", "/app/config/parameters.yml"]
22
+ ]}
23
+ ```
data/lib/vaultage.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  set :vaultage, false
2
2
  set :vaultage_bin, "vaultage"
3
+ set :vaultage_extension, "gpg"
4
+ set :branch, "master"
3
5
 
4
- before "deploy:update" do
6
+ after "symfony:composer:install" do
5
7
  if vaultage
6
8
  vaultage.decrypt
7
9
  end
@@ -9,19 +11,70 @@ end
9
11
 
10
12
  namespace :vaultage do
11
13
  task :decrypt do
12
- filesToDecrypt = [];
14
+ randomstr = `openssl rand -base64 10`.strip
15
+ localfiles = []
13
16
 
14
- for files in vaultage_files
15
- files.push(`openssl rand -base64 10`.strip);
16
- tmpName = "/tmp/"+application+"_parameters_"+files[2]+".yml.gpg"
17
- top.download(latest_release+files[0], tmpName)
18
- filesToDecrypt.push(tmpName)
17
+ vaultage_files.each_with_index do |files, index|
18
+ tmp = "/tmp/#{application}_parameters_#{randomstr}#{index}.yml.#{vaultage_extension}"
19
+ top.download(latest_release+"/"+files[0], tmp)
20
+ localfiles.push(tmp)
19
21
  end
20
22
 
21
- system "vaultage decrypt --write --files="+filesToDecrypt.join(',')
23
+ system "vaultage decrypt --write --files="+localfiles.join(',')
22
24
 
23
- for files in vaultage_files
24
- top.upload("/tmp/"+application+"_parameters_"+files[2]+".yml", latest_release+files[1])
25
+ vaultage_files.each_with_index do |files, index|
26
+ top.upload("/tmp/#{application}_parameters_#{randomstr}#{index}.yml", latest_release+"/"+files[1])
27
+ end
28
+ end
29
+
30
+ task :diff do
31
+ randomstr = `openssl rand -base64 10`.strip
32
+
33
+ vaultage_files.each_with_index do |files, index|
34
+ directory = File.dirname(files[0])
35
+
36
+ if (directory.scan(/^vendor.*/).size != 0)
37
+ if (!defined? vendor_dirs)
38
+ vendor_dirs = `find vendor -iname '.git' | sed -e 's/\.git//'`.strip.split("\n")
39
+ end
40
+
41
+ for vendor_dir in vendor_dirs
42
+ if (directory.index(vendor_dir) == 0)
43
+ root_directory = vendor_dir
44
+ break
45
+ end
46
+ end
47
+
48
+ if (!defined? root_directory)
49
+ raise 'Cannot fetch base directory of parameter #{files[0]}. May be file does not exists ? Or directory is not a git repository.'
50
+ end
51
+
52
+ from_vendor = true
53
+ else
54
+ root_directory = ''
55
+ from_vendor = false
56
+ end
57
+
58
+ absolute_directory = Dir.getwd+"/"+root_directory
59
+
60
+ if (from_vendor === false && `cd #{absolute_directory} && git remote | grep capistrano`.strip != 'capistrano')
61
+ system "cd #{absolute_directory} && git remote add capistrano #{repository}"
62
+ end
63
+
64
+ remote = from_vendor ? "composer" : "capistrano"
65
+ system "cd #{absolute_directory} && git fetch #{remote}"
66
+
67
+ tmp1 = "/tmp/#{application}_parameters_1_#{randomstr}#{index}.yml.gpg"
68
+ tmp2 = "/tmp/#{application}_parameters_2_#{randomstr}#{index}.yml"
69
+
70
+ # fetch encrypted file from git
71
+ system "cd #{absolute_directory} && git show #{remote}/#{branch}:#{files[0].gsub(root_directory, '')} > #{tmp1}"
72
+ # download decrypted file on remote server
73
+ top.download(latest_release+"/"+files[1], tmp2)
74
+
75
+ capifony_pretty_print("Diff between local (versionned) #{files[0]} and remote #{files[1]}")
76
+
77
+ system "vaultage diff --files=#{tmp1},#{tmp2}"
25
78
  end
26
79
  end
27
80
  end
metadata CHANGED
@@ -4,10 +4,10 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: true
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
9
  - dev
10
- version: 0.1.0.dev
10
+ version: 0.2.0.dev
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Les \xC3\xA9cureuils de Jean-Marc"
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2013-09-03 00:00:00 +02:00
19
+ date: 2013-09-04 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies: []
22
22