rezzza_capistrano_tools 0.1.0.dev → 0.2.0.dev

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.
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