vault-tree 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (164) hide show
  1. data/.gitignore +26 -0
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +43 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +118 -0
  6. data/Rakefile +17 -0
  7. data/VagrantFile +30 -0
  8. data/features/core.feature +44 -0
  9. data/features/exceptions.feature +41 -0
  10. data/features/steps/core.steps.rb +168 -0
  11. data/features/steps/exceptions.steps.rb +103 -0
  12. data/features/support/env.rb +1 -0
  13. data/features/world.rb +3 -0
  14. data/lib/vault-tree.rb +7 -0
  15. data/lib/vault-tree/config/dependencies.rb +4 -0
  16. data/lib/vault-tree/config/lib.rb +2 -0
  17. data/lib/vault-tree/config/path_helpers.rb +49 -0
  18. data/lib/vault-tree/config/string.rb +25 -0
  19. data/lib/vault-tree/contract/close_validator.rb +35 -0
  20. data/lib/vault-tree/contract/contract.rb +85 -0
  21. data/lib/vault-tree/contract/contract_presenter.rb +27 -0
  22. data/lib/vault-tree/contract/doorman.rb +112 -0
  23. data/lib/vault-tree/contract/null_vault.rb +16 -0
  24. data/lib/vault-tree/contract/open_validator.rb +20 -0
  25. data/lib/vault-tree/contract/vault.rb +96 -0
  26. data/lib/vault-tree/exceptions/empty_vault.rb +8 -0
  27. data/lib/vault-tree/exceptions/fill_attempt_master_password.rb +6 -0
  28. data/lib/vault-tree/exceptions/invalid_signature.rb +0 -0
  29. data/lib/vault-tree/exceptions/malformed_json.rb +0 -0
  30. data/lib/vault-tree/exceptions/missing_external_data.rb +6 -0
  31. data/lib/vault-tree/exceptions/missing_partner_decryption_key.rb +6 -0
  32. data/lib/vault-tree/exceptions/missing_passphrase.rb +6 -0
  33. data/lib/vault-tree/exceptions/non_unique_vault_id.rb +0 -0
  34. data/lib/vault-tree/exceptions/unsupported_keyword.rb +6 -0
  35. data/lib/vault-tree/exceptions/vault_does_not_exist.rb +6 -0
  36. data/lib/vault-tree/exceptions/vault_tree_exception.rb +6 -0
  37. data/lib/vault-tree/keywords/decryption_key.rb +14 -0
  38. data/lib/vault-tree/keywords/external_data.rb +13 -0
  39. data/lib/vault-tree/keywords/keyword.rb +19 -0
  40. data/lib/vault-tree/keywords/keyword_interpreter.rb +45 -0
  41. data/lib/vault-tree/keywords/master_passphrase.rb +9 -0
  42. data/lib/vault-tree/keywords/public_encryption_key.rb +27 -0
  43. data/lib/vault-tree/keywords/random_number.rb +9 -0
  44. data/lib/vault-tree/keywords/shared_key.rb +24 -0
  45. data/lib/vault-tree/keywords/unlocked.rb +9 -0
  46. data/lib/vault-tree/keywords/vault_contents.rb +13 -0
  47. data/lib/vault-tree/lock_smith/asymmetric_cipher.rb +31 -0
  48. data/lib/vault-tree/lock_smith/crypto_hash.rb +11 -0
  49. data/lib/vault-tree/lock_smith/digital_signature.rb +32 -0
  50. data/lib/vault-tree/lock_smith/encryption_key_pair.rb +25 -0
  51. data/lib/vault-tree/lock_smith/null_vault.rb +4 -0
  52. data/lib/vault-tree/lock_smith/random_number.rb +11 -0
  53. data/lib/vault-tree/lock_smith/shared_key_pair.rb +12 -0
  54. data/lib/vault-tree/lock_smith/signing_key_pair.rb +25 -0
  55. data/lib/vault-tree/lock_smith/symmetric_cipher.rb +25 -0
  56. data/lib/vault-tree/util/json.rb +16 -0
  57. data/lib/vault-tree/version.rb +3 -0
  58. data/spec/app/locksmith/asymmetric_cipher_spec.rb +25 -0
  59. data/spec/app/locksmith/signing_key_pair_spec.rb +22 -0
  60. data/spec/spec_helper.rb +5 -0
  61. data/spec/support/fixtures/blank_simple_test_contract.json +14 -0
  62. data/spec/support/fixtures/broken_contract.json +55 -0
  63. data/spec/support/fixtures/one_two_three-0.5.0.EXP.json +105 -0
  64. data/spec/support/fixtures/reference_contract.1.0.0.json +227 -0
  65. data/spec/support/fixtures/simple_test_contract.json +14 -0
  66. data/support/cookbooks/ark/.gitignore +12 -0
  67. data/support/cookbooks/ark/.kitchen.yml +34 -0
  68. data/support/cookbooks/ark/.travis.yml +6 -0
  69. data/support/cookbooks/ark/Berksfile +9 -0
  70. data/support/cookbooks/ark/CHANGELOG.md +87 -0
  71. data/support/cookbooks/ark/CONTRIBUTING.md +257 -0
  72. data/support/cookbooks/ark/README.md +301 -0
  73. data/support/cookbooks/ark/Rakefile +36 -0
  74. data/support/cookbooks/ark/TESTING.md +25 -0
  75. data/support/cookbooks/ark/Toftfile +15 -0
  76. data/support/cookbooks/ark/attributes/default.rb +6 -0
  77. data/support/cookbooks/ark/chefignore +96 -0
  78. data/support/cookbooks/ark/files/default/foo.tar.gz +0 -0
  79. data/support/cookbooks/ark/files/default/foo.tbz +0 -0
  80. data/support/cookbooks/ark/files/default/foo.tgz +0 -0
  81. data/support/cookbooks/ark/files/default/foo.zip +0 -0
  82. data/support/cookbooks/ark/files/default/tests/minitest/default_test.rb +0 -0
  83. data/support/cookbooks/ark/files/default/tests/minitest/support/helpers.rb +0 -0
  84. data/support/cookbooks/ark/files/default/tests/minitest/test_test.rb +94 -0
  85. data/support/cookbooks/ark/libraries/default.rb +167 -0
  86. data/support/cookbooks/ark/metadata.rb +13 -0
  87. data/support/cookbooks/ark/providers/default.rb +370 -0
  88. data/support/cookbooks/ark/recipes/default.rb +31 -0
  89. data/support/cookbooks/ark/recipes/test.rb +138 -0
  90. data/support/cookbooks/ark/resources/default.rb +54 -0
  91. data/support/cookbooks/ark/templates/default/add_to_path.sh.erb +1 -0
  92. data/support/cookbooks/ark/test/support/Gemfile +4 -0
  93. data/support/cookbooks/build-essential/README.md +24 -0
  94. data/support/cookbooks/build-essential/metadata.rb +10 -0
  95. data/support/cookbooks/build-essential/recipes/default.rb +45 -0
  96. data/support/cookbooks/chruby/.gitignore +15 -0
  97. data/support/cookbooks/chruby/.kitchen.yml +26 -0
  98. data/support/cookbooks/chruby/.ruby_version +1 -0
  99. data/support/cookbooks/chruby/Berksfile +3 -0
  100. data/support/cookbooks/chruby/Gemfile +7 -0
  101. data/support/cookbooks/chruby/LICENSE +14 -0
  102. data/support/cookbooks/chruby/README.md +92 -0
  103. data/support/cookbooks/chruby/Rakefile +7 -0
  104. data/support/cookbooks/chruby/Thorfile +6 -0
  105. data/support/cookbooks/chruby/Vagrantfile +86 -0
  106. data/support/cookbooks/chruby/attributes/default.rb +10 -0
  107. data/support/cookbooks/chruby/chefignore +96 -0
  108. data/support/cookbooks/chruby/metadata.rb +11 -0
  109. data/support/cookbooks/chruby/recipes/default.rb +43 -0
  110. data/support/cookbooks/chruby/recipes/system.rb +25 -0
  111. data/support/cookbooks/chruby/templates/default/chruby.sh.erb +22 -0
  112. data/support/cookbooks/chruby/test/integration/default/bash/embedded_test.sh +1 -0
  113. data/support/cookbooks/git/.gitignore +14 -0
  114. data/support/cookbooks/git/.kitchen.yml +46 -0
  115. data/support/cookbooks/git/Berksfile +8 -0
  116. data/support/cookbooks/git/CHANGELOG.md +87 -0
  117. data/support/cookbooks/git/CONTRIBUTING +29 -0
  118. data/support/cookbooks/git/Gemfile +3 -0
  119. data/support/cookbooks/git/LICENSE +201 -0
  120. data/support/cookbooks/git/README.md +115 -0
  121. data/support/cookbooks/git/TESTING.md +25 -0
  122. data/support/cookbooks/git/attributes/default.rb +40 -0
  123. data/support/cookbooks/git/metadata.rb +35 -0
  124. data/support/cookbooks/git/recipes/default.rb +53 -0
  125. data/support/cookbooks/git/recipes/server.rb +58 -0
  126. data/support/cookbooks/git/recipes/source.rb +49 -0
  127. data/support/cookbooks/git/recipes/windows.rb +37 -0
  128. data/support/cookbooks/git/templates/default/git-xinetd.d.erb +10 -0
  129. data/support/cookbooks/git/templates/default/sv-git-daemon-log-run.erb +2 -0
  130. data/support/cookbooks/git/templates/default/sv-git-daemon-run.erb +3 -0
  131. data/support/cookbooks/install_ruby/README.md +3 -0
  132. data/support/cookbooks/install_ruby/metadata.rb +10 -0
  133. data/support/cookbooks/install_ruby/recipes/default.rb +14 -0
  134. data/support/cookbooks/ruby_build/.gitignore +6 -0
  135. data/support/cookbooks/ruby_build/.kitchen.yml +31 -0
  136. data/support/cookbooks/ruby_build/.travis.yml +4 -0
  137. data/support/cookbooks/ruby_build/Berksfile +10 -0
  138. data/support/cookbooks/ruby_build/CHANGELOG.md +72 -0
  139. data/support/cookbooks/ruby_build/Gemfile +14 -0
  140. data/support/cookbooks/ruby_build/README.md +338 -0
  141. data/support/cookbooks/ruby_build/Rakefile +21 -0
  142. data/support/cookbooks/ruby_build/attributes/default.rb +67 -0
  143. data/support/cookbooks/ruby_build/chefignore +53 -0
  144. data/support/cookbooks/ruby_build/libraries/ruby_build_recipe_helpers.rb +40 -0
  145. data/support/cookbooks/ruby_build/metadata.rb +18 -0
  146. data/support/cookbooks/ruby_build/providers/ruby.rb +88 -0
  147. data/support/cookbooks/ruby_build/recipes/default.rb +69 -0
  148. data/support/cookbooks/ruby_build/resources/ruby.rb +33 -0
  149. data/support/cookbooks/ruby_build/test/cookbooks/alltherubies/metadata.rb +10 -0
  150. data/support/cookbooks/ruby_build/test/cookbooks/alltherubies/recipes/default.rb +59 -0
  151. data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/_verify_tests.bash +33 -0
  152. data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_1.8.7.bats +29 -0
  153. data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_1.9.2.bats +18 -0
  154. data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_1.9.3.bats +18 -0
  155. data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_2.0.0.bats +18 -0
  156. data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_jruby.bats +20 -0
  157. data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_rbx.bats +18 -0
  158. data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_ree.bats +19 -0
  159. data/support/cookbooks/ruby_build/test/integration/installation/bats/installation.bats +6 -0
  160. data/support/scripts/libsodium_ubuntu.sh +80 -0
  161. data/support/tasks/.gitkeep +0 -0
  162. data/support/tasks/libsodium_install.rb +57 -0
  163. data/vault-tree.gemspec +26 -0
  164. metadata +305 -0
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env rake
2
+
3
+ @cookbook = "ark"
4
+
5
+ desc "Runs foodcritc linter"
6
+ task :foodcritic do
7
+ if Gem::Version.new("1.9.2") <= Gem::Version.new(RUBY_VERSION.dup)
8
+ sandbox = File.join(File.dirname(__FILE__), %w{tmp foodcritic}, @cookbook)
9
+ prepare_foodcritic_sandbox(sandbox)
10
+
11
+ sh "foodcritic --epic-fail any #{File.dirname(sandbox)} -t ~FC017"
12
+ else
13
+ puts "WARN: foodcritic run is skipped as Ruby #{RUBY_VERSION} is < 1.9.2."
14
+ end
15
+ end
16
+
17
+ task :default => 'foodcritic'
18
+
19
+ private
20
+
21
+ def prepare_foodcritic_sandbox(sandbox)
22
+ files = %w{*.md *.rb attributes definitions files providers
23
+ recipes resources templates}
24
+
25
+ rm_rf sandbox
26
+ mkdir_p sandbox
27
+ cp_r Dir.glob("{#{files.join(',')}}"), sandbox
28
+ puts "\n\n"
29
+ end
30
+
31
+ begin
32
+ require 'kitchen/rake_tasks'
33
+ Kitchen::RakeTasks.new
34
+ rescue LoadError
35
+ puts ">>>>> Kitchen gem not loaded, omitting tasks" unless ENV['CI']
36
+ end
@@ -0,0 +1,25 @@
1
+ This cookbook includes support for running tests via Test Kitchen (1.0). This has some requirements.
2
+
3
+ 1. You must be using the Git repository, rather than the downloaded cookbook from the Chef Community Site.
4
+ 2. You must have Vagrant 1.1 installed.
5
+ 3. You must have a "sane" Ruby 1.9.3 environment.
6
+
7
+ Once the above requirements are met, install the additional requirements:
8
+
9
+ Install the berkshelf plugin for vagrant, and berkshelf to your local Ruby environment.
10
+
11
+ vagrant plugin install vagrant-berkshelf
12
+ gem install berkshelf
13
+
14
+ Install Test Kitchen 1.0 (unreleased yet, use the alpha / prerelease version).
15
+
16
+ gem install test-kitchen --pre
17
+
18
+ Install the Vagrant driver for Test Kitchen.
19
+
20
+ gem install kitchen-vagrant
21
+
22
+ Once the above are installed, you should be able to run Test Kitchen:
23
+
24
+ kitchen list
25
+ kitchen test
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'toft'
3
+
4
+ include Toft
5
+
6
+ n1 = create_node "n1", {:ip => '192.168.20.2'}
7
+
8
+ n1.start
9
+
10
+ n1.run_chef [ "recipe[chef_handler]", "recipe[minitest-handler::recipes]", "recipe[ark::test]" ]
11
+
12
+ n1.stop
13
+
14
+ n1.destroy
15
+
@@ -0,0 +1,6 @@
1
+
2
+ default['ark']['apache_mirror'] = 'http://apache.mirrors.tds.net'
3
+ default['ark']['prefix_root'] = "/usr/local"
4
+ default['ark']['prefix_bin'] = "/usr/local/bin"
5
+ default['ark']['prefix_home'] = "/usr/local"
6
+ default['ark']['tar'] = "/bin/tar"
@@ -0,0 +1,96 @@
1
+ # Put files/directories that should be ignored in this file when uploading
2
+ # or sharing to the community site.
3
+ # Lines that start with '# ' are comments.
4
+
5
+ # OS generated files #
6
+ ######################
7
+ .DS_Store
8
+ Icon?
9
+ nohup.out
10
+ ehthumbs.db
11
+ Thumbs.db
12
+
13
+ # SASS #
14
+ ########
15
+ .sass-cache
16
+
17
+ # EDITORS #
18
+ ###########
19
+ \#*
20
+ .#*
21
+ *~
22
+ *.sw[a-z]
23
+ *.bak
24
+ REVISION
25
+ TAGS*
26
+ tmtags
27
+ *_flymake.*
28
+ *_flymake
29
+ *.tmproj
30
+ .project
31
+ .settings
32
+ mkmf.log
33
+
34
+ ## COMPILED ##
35
+ ##############
36
+ a.out
37
+ *.o
38
+ *.pyc
39
+ *.so
40
+ *.com
41
+ *.class
42
+ *.dll
43
+ *.exe
44
+ */rdoc/
45
+
46
+ # Testing #
47
+ ###########
48
+ .watchr
49
+ .rspec
50
+ spec/*
51
+ spec/fixtures/*
52
+ test/*
53
+ features/*
54
+ Guardfile
55
+ Procfile
56
+
57
+ # SCM #
58
+ #######
59
+ .git
60
+ */.git
61
+ .gitignore
62
+ .gitmodules
63
+ .gitconfig
64
+ .gitattributes
65
+ .svn
66
+ */.bzr/*
67
+ */.hg/*
68
+ */.svn/*
69
+
70
+ # Berkshelf #
71
+ #############
72
+ Berksfile
73
+ Berksfile.lock
74
+ cookbooks/*
75
+ tmp
76
+
77
+ # Cookbooks #
78
+ #############
79
+ CONTRIBUTING
80
+ CHANGELOG*
81
+
82
+ # Strainer #
83
+ ############
84
+ Colanderfile
85
+ Strainerfile
86
+ .colander
87
+ .strainer
88
+
89
+ # Vagrant #
90
+ ###########
91
+ .vagrant
92
+ Vagrantfile
93
+
94
+ # Travis #
95
+ ##########
96
+ .travis.yml
@@ -0,0 +1,94 @@
1
+ require 'minitest/spec'
2
+
3
+ describe_recipe 'ark::test' do
4
+
5
+ # It's often convenient to load these includes in a separate
6
+ # helper along with
7
+ # your own helper methods, but here we just include them directly:
8
+ include MiniTest::Chef::Assertions
9
+ include MiniTest::Chef::Context
10
+ include MiniTest::Chef::Resources
11
+
12
+ it "installed the unzip package" do
13
+ package("unzip").must_be_installed
14
+ end
15
+
16
+ if RUBY_PLATFORM =~ /freebsd/
17
+ it "installs the gnu tar package on freebsc" do
18
+ package("gtar").must_be_installed
19
+ end
20
+ end
21
+
22
+ it "puts an ark in the desired directory w/out symlinks" do
23
+ directory("/usr/local/test_put").must_exist
24
+ end
25
+
26
+ it "dumps the correct files into place with correct owner and group" do
27
+ file("/usr/local/foo_dump/foo1.txt").must_have(:owner, "foobarbaz").and(:group, "foobarbaz")
28
+ end
29
+
30
+ it "cherrypicks the mysql connector and set the correct owner and group" do
31
+ file("/usr/local/foo_cherry_pick/foo1.txt").must_have(:owner, "foobarbaz").and(:group, "foobarbaz")
32
+ end
33
+
34
+ it "cherrypicks the file from a zip" do
35
+ file("/usr/local/foo_cherry_pick_from_zip/foo1.txt").must_exist
36
+ end
37
+
38
+ it "creates directory and symlink properly for the full ark install" do
39
+ directory("/usr/local/foo-2").must_have(:owner, "foobarbaz").and(:group, "foobarbaz")
40
+ link("/usr/local/foo").must_exist.with(:link_type, :symbolic).and(:to, "/usr/local/foo-2")
41
+ end
42
+
43
+ it "symlinks multiple binary commands" do
44
+ link("/usr/local/bin/do_foo").must_exist.with(:link_type, :symbolic).and(:to, "/usr/local/foo-2/bin/do_foo")
45
+ link("/usr/local/bin/do_more_foo").must_exist.with(:link_type, :symbolic).and(:to, "/usr/local/foo-2/bin/do_more_foo")
46
+ end
47
+
48
+ it "appends to the environment PATH" do
49
+ unless RUBY_PLATFORM =~ /freebsd/
50
+ file("/etc/profile.d/foo_append_env.sh").must_include '/usr/local/foo_append_env-7.0.26/bin'
51
+
52
+ bin_path_present = !ENV['PATH'].scan( '/usr/local/foo_append_env-7.0.26/bin').empty?
53
+ assert bin_path_present
54
+ end
55
+ end
56
+
57
+ it "doesn't strip top-level directory if specified" do
58
+ directory( "/usr/local/foo_dont_strip/foo_sub").must_exist
59
+ end
60
+
61
+ it "does strip for zip file" do
62
+ file("/usr/local/foo_zip_strip/foo1.txt").must_exist
63
+ end
64
+
65
+
66
+ it "successfully compiles haproxy" do
67
+ file("/usr/local/haproxy-1.5/haproxy").must_exist
68
+ end
69
+
70
+ unless RUBY_PLATFORM =~ /freebsd/
71
+ it "installs haproxy binary" do
72
+ file("/usr/local/sbin/haproxy").must_exist
73
+ directory("/usr/local/doc/haproxy").must_exist
74
+ end
75
+ end
76
+
77
+ it "creates an alternate prefix_bin" do
78
+ link("/opt/bin/do_foo").must_exist.with(:link_type, :symbolic).and(:to, "/opt/foo_alt_bin-3/bin/do_foo")
79
+ end
80
+
81
+ it "properly unpacks .tbz and .tgz archives" do
82
+ file("/usr/local/foo_tbz/foo1.txt").must_exist
83
+ file("/usr/local/foo_tgz/foo1.txt").must_exist
84
+ end
85
+
86
+ it "sends notification when resource updated" do
87
+ file("/tmp/foobarbaz/notification_successful.txt").must_exist
88
+ end
89
+
90
+ it "uses autogen.sh to generate configure script" do
91
+ file("/usr/local/test_autogen-1/configure").must_exist
92
+ end
93
+
94
+ end
@@ -0,0 +1,167 @@
1
+ # libs
2
+
3
+ module Opscode
4
+ module Ark
5
+ module ProviderHelpers
6
+ private
7
+
8
+ def unpack_type
9
+ case parse_file_extension
10
+ when /tar.gz|tgz/ then "tar_xzf"
11
+ when /tar.bz2|tbz/ then "tar_xjf"
12
+ when /zip|war|jar/ then "unzip"
13
+ else raise "Don't know how to expand #{new_resource.url}"
14
+ end
15
+ end
16
+
17
+ def parse_file_extension
18
+ if new_resource.extension.nil?
19
+ # purge any trailing redirect
20
+ url = new_resource.url.clone
21
+ url =~ /^https?:\/\/.*(.gz|bz2|bin|zip|jar|tgz|tbz)(\/.*\/)/
22
+ url.gsub!($2, '') unless $2.nil?
23
+ # remove tailing query string
24
+ release_basename = ::File.basename(url.gsub(/\?.*\z/, '')).gsub(/-bin\b/, '')
25
+ # (\?.*)? accounts for a trailing querystring
26
+ Chef::Log.debug("DEBUG: release_basename is #{release_basename}")
27
+ release_basename =~ %r{^(.+?)\.(tar\.gz|tar\.bz2|zip|war|jar|tgz|tbz)(\?.*)?}
28
+ Chef::Log.debug("DEBUG: file_extension is #{$2}")
29
+ new_resource.extension = $2
30
+ end
31
+ new_resource.extension
32
+ end
33
+
34
+ def unpack_command
35
+ case unpack_type
36
+ when "tar_xzf"
37
+ cmd = node['ark']['tar']
38
+ cmd = cmd + " xzf "
39
+ cmd = cmd + new_resource.release_file
40
+ cmd = cmd + tar_strip_args
41
+ when "tar_xjf"
42
+ cmd = node['ark']['tar']
43
+ cmd = cmd + " xjf "
44
+ cmd = cmd + " #{new_resource.release_file}"
45
+ cmd = cmd + tar_strip_args
46
+ when "unzip"
47
+ cmd = unzip_command
48
+ end
49
+ Chef::Log.debug("DEBUG: cmd: #{cmd}")
50
+ cmd
51
+ end
52
+
53
+ def unzip_command
54
+ if new_resource.strip_leading_dir
55
+ require 'tmpdir'
56
+ tmpdir = Dir.mktmpdir
57
+ cmd = "unzip -q -u -o #{new_resource.release_file} -d #{tmpdir}"
58
+ cmd = cmd + "&& rsync -a #{tmpdir}/*/ #{new_resource.path}"
59
+ cmd = cmd + "&& rm -rf #{tmpdir}"
60
+ else
61
+ cmd = "unzip -q -u -o #{new_resource.release_file} -d #{new_resource.path}"
62
+ end
63
+ end
64
+
65
+ def dump_command
66
+ case unpack_type
67
+ when "tar_xzf", "tar_xjf"
68
+ cmd = "tar -mxf \"#{new_resource.release_file}\" -C \"#{new_resource.path}\""
69
+ when "unzip"
70
+ cmd = "unzip -j -q -u -o \"#{new_resource.release_file}\" -d \"#{new_resource.path}\""
71
+ end
72
+ Chef::Log.debug("DEBUG: cmd: #{cmd}")
73
+ cmd
74
+ end
75
+
76
+ def cherry_pick_command
77
+ cmd = node['ark']['tar']
78
+
79
+ case unpack_type
80
+ when "tar_xzf"
81
+ cmd = cmd + " xzf "
82
+ cmd = cmd + " #{new_resource.release_file}"
83
+ cmd = cmd + " -C"
84
+ cmd = cmd + " #{new_resource.path}"
85
+ cmd = cmd + " #{new_resource.creates}"
86
+ cmd = cmd + tar_strip_args
87
+ when "tar_xjf"
88
+ cmd = cmd + "xjf #{new_resource.release_file}"
89
+ cmd = cmd + "-C #{new_resource.path} #{new_resource.creates}"
90
+ cmd = cmd + tar_strip_args
91
+ when "unzip"
92
+ cmd = "unzip -t #{new_resource.release_file} \"*/#{new_resource.creates}\" ; stat=$? ;"
93
+ cmd = cmd + "if [ $stat -eq 11 ] ; then "
94
+ cmd = cmd + "unzip -j -o #{new_resource.release_file} \"#{new_resource.creates}\" -d #{new_resource.path} ;"
95
+ cmd = cmd + "elif [ $stat -ne 0 ] ; then false ;"
96
+ cmd = cmd + "else "
97
+ cmd = cmd + "unzip -j -o #{new_resource.release_file} \"*/#{new_resource.creates}\" -d #{new_resource.path} ;"
98
+ cmd = cmd + "fi"
99
+ end
100
+ Chef::Log.debug("DEBUG: cmd: #{cmd}")
101
+ cmd
102
+ end
103
+
104
+ def set_paths
105
+ release_ext = parse_file_extension
106
+ prefix_bin = new_resource.prefix_bin.nil? ? new_resource.run_context.node['ark']['prefix_bin'] : new_resource.prefix_bin
107
+ prefix_root = new_resource.prefix_root.nil? ? new_resource.run_context.node['ark']['prefix_root'] : new_resource.prefix_root
108
+ if new_resource.prefix_home.nil?
109
+ default_home_dir = ::File.join(new_resource.run_context.node['ark']['prefix_home'], new_resource.name)
110
+ else
111
+ default_home_dir = ::File.join(new_resource.prefix_home, new_resource.name)
112
+ end
113
+ # set effective paths
114
+ new_resource.prefix_bin = prefix_bin
115
+ new_resource.version ||= "1" # initialize to one if nil
116
+ new_resource.path = ::File.join(prefix_root, "#{new_resource.name}-#{new_resource.version}")
117
+ new_resource.home_dir ||= default_home_dir
118
+ Chef::Log.debug("path is #{new_resource.path}")
119
+ new_resource.release_file = ::File.join(Chef::Config[:file_cache_path], "#{new_resource.name}.#{release_ext}")
120
+ end
121
+
122
+ def set_put_paths
123
+ release_ext = parse_file_extension
124
+ path = new_resource.path.nil? ? new_resource.run_context.node['ark']['prefix_root'] : new_resource.path
125
+ new_resource.path = ::File.join(path, new_resource.name)
126
+ Chef::Log.debug("DEBUG: path is #{new_resource.path}")
127
+ new_resource.release_file = ::File.join(Chef::Config[:file_cache_path], "#{new_resource.name}.#{release_ext}")
128
+ end
129
+
130
+ def set_dump_paths
131
+ release_ext = parse_file_extension
132
+ new_resource.release_file = ::File.join(Chef::Config[:file_cache_path], "#{new_resource.name}.#{release_ext}")
133
+ end
134
+
135
+ def set_apache_url(url_ref)
136
+ raise "Missing required resource attribute url" unless url_ref
137
+ url_ref.gsub!(/:name:/, name.to_s)
138
+ url_ref.gsub!(/:version:/, version.to_s)
139
+ url_ref.gsub!(/:apache_mirror:/, node['install_from']['apache_mirror'])
140
+ url_ref
141
+ end
142
+
143
+ def tar_strip_args
144
+ new_resource.strip_leading_dir ? " --strip-components=1" : ""
145
+ end
146
+
147
+ # def unpacked?(path)
148
+ # if new_resource.creates
149
+ # full_path = ::File.join(new_resource.path, new_resource.creates)
150
+ # else
151
+ # full_path = path
152
+ # end
153
+ # if ::File.directory? full_path
154
+ # if ::File.stat(full_path).nlink == 2
155
+ # false
156
+ # else
157
+ # true
158
+ # end
159
+ # elsif ::File.exists? full_path
160
+ # true
161
+ # else
162
+ # false
163
+ # end
164
+ # end
165
+ end
166
+ end
167
+ end