from-scratch 0.1.0
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.
- checksums.yaml +7 -0
- data/.chef/knife.rb +6 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/Berksfile +17 -0
- data/Berksfile.lock +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +58 -0
- data/Rakefile +6 -0
- data/Thorfile +5 -0
- data/bin/scratchify +6 -0
- data/chefignore +101 -0
- data/cookbooks/chef_gem/CHANGELOG.md +24 -0
- data/cookbooks/chef_gem/README.md +38 -0
- data/cookbooks/chef_gem/libraries/chef_gem.rb +72 -0
- data/cookbooks/chef_gem/metadata.json +29 -0
- data/cookbooks/chef_gem/recipes/default.rb +0 -0
- data/cookbooks/java/.gitignore +21 -0
- data/cookbooks/java/.kitchen.docker.yml +15 -0
- data/cookbooks/java/.kitchen.yml +126 -0
- data/cookbooks/java/.travis.yml +6 -0
- data/cookbooks/java/Berksfile +10 -0
- data/cookbooks/java/CHANGELOG.md +398 -0
- data/cookbooks/java/CONTRIBUTING.md +12 -0
- data/cookbooks/java/Gemfile +15 -0
- data/cookbooks/java/ISSUES.md +43 -0
- data/cookbooks/java/LICENSE +201 -0
- data/cookbooks/java/README.md +402 -0
- data/cookbooks/java/Rakefile +60 -0
- data/cookbooks/java/TESTING.md +41 -0
- data/cookbooks/java/attributes/default.rb +146 -0
- data/cookbooks/java/libraries/helpers.rb +120 -0
- data/cookbooks/java/libraries/matchers.rb +5 -0
- data/cookbooks/java/metadata.json +69 -0
- data/cookbooks/java/providers/alternatives.rb +94 -0
- data/cookbooks/java/providers/ark.rb +255 -0
- data/cookbooks/java/recipes/default.rb +22 -0
- data/cookbooks/java/recipes/default_java_symlink.rb +19 -0
- data/cookbooks/java/recipes/homebrew.rb +3 -0
- data/cookbooks/java/recipes/ibm.rb +76 -0
- data/cookbooks/java/recipes/ibm_tar.rb +70 -0
- data/cookbooks/java/recipes/openjdk.rb +74 -0
- data/cookbooks/java/recipes/oracle.rb +74 -0
- data/cookbooks/java/recipes/oracle_i386.rb +73 -0
- data/cookbooks/java/recipes/oracle_jce.rb +75 -0
- data/cookbooks/java/recipes/oracle_rpm.rb +60 -0
- data/cookbooks/java/recipes/purge_packages.rb +20 -0
- data/cookbooks/java/recipes/set_attributes_from_version.rb +55 -0
- data/cookbooks/java/recipes/set_java_home.rb +44 -0
- data/cookbooks/java/recipes/windows.rb +82 -0
- data/cookbooks/java/resources/alternatives.rb +30 -0
- data/cookbooks/java/resources/ark.rb +58 -0
- data/cookbooks/java/templates/default/ibm_jdk.installer.properties.erb +3 -0
- data/cookbooks/java/templates/default/oracle.jinfo.erb +6 -0
- data/cookbooks/rvm/.foodcritic +1 -0
- data/cookbooks/rvm/.gitignore +7 -0
- data/cookbooks/rvm/.kitchen.yml +66 -0
- data/cookbooks/rvm/.travis.yml +9 -0
- data/cookbooks/rvm/Berksfile +10 -0
- data/cookbooks/rvm/CHANGELOG.md +253 -0
- data/cookbooks/rvm/CODE_OF_CONDUCT.md +12 -0
- data/cookbooks/rvm/CONTRIBUTING.md +26 -0
- data/cookbooks/rvm/Gemfile +20 -0
- data/cookbooks/rvm/Guardfile +12 -0
- data/cookbooks/rvm/README.md +1459 -0
- data/cookbooks/rvm/Rakefile +18 -0
- data/cookbooks/rvm/attributes/.gitkeep +0 -0
- data/cookbooks/rvm/attributes/default.rb +68 -0
- data/cookbooks/rvm/attributes/gem_package.rb +23 -0
- data/cookbooks/rvm/attributes/vagrant.rb +23 -0
- data/cookbooks/rvm/libraries/chef_rvm_environment_helpers.rb +55 -0
- data/cookbooks/rvm/libraries/chef_rvm_gemset_helpers.rb +67 -0
- data/cookbooks/rvm/libraries/chef_rvm_recipe_helpers.rb +80 -0
- data/cookbooks/rvm/libraries/chef_rvm_ruby_helpers.rb +95 -0
- data/cookbooks/rvm/libraries/chef_rvm_set_helpers.rb +16 -0
- data/cookbooks/rvm/libraries/chef_rvm_shell_helpers.rb +57 -0
- data/cookbooks/rvm/libraries/chef_rvm_string_cache.rb +104 -0
- data/cookbooks/rvm/libraries/chef_rvm_string_helpers.rb +61 -0
- data/cookbooks/rvm/libraries/chef_rvm_version_helpers.rb +45 -0
- data/cookbooks/rvm/libraries/gem_package_monkeypatch.rb +34 -0
- data/cookbooks/rvm/libraries/provider_rvm_installation.rb +185 -0
- data/cookbooks/rvm/libraries/resource_rvm_installation.rb +103 -0
- data/cookbooks/rvm/libraries/rvm_chef_user_environment.rb +55 -0
- data/cookbooks/rvm/libraries/rvm_rubygems_package.rb +189 -0
- data/cookbooks/rvm/libraries/rvm_shell_chef_wrapper.rb +99 -0
- data/cookbooks/rvm/metadata.json +51 -0
- data/cookbooks/rvm/providers/default_ruby.rb +63 -0
- data/cookbooks/rvm/providers/environment.rb +78 -0
- data/cookbooks/rvm/providers/gemset.rb +118 -0
- data/cookbooks/rvm/providers/global_gem.rb +97 -0
- data/cookbooks/rvm/providers/ruby.rb +178 -0
- data/cookbooks/rvm/providers/shell.rb +121 -0
- data/cookbooks/rvm/providers/wrapper.rb +73 -0
- data/cookbooks/rvm/recipes/.gitkeep +0 -0
- data/cookbooks/rvm/recipes/default.rb +40 -0
- data/cookbooks/rvm/recipes/gem_package.rb +33 -0
- data/cookbooks/rvm/recipes/system.rb +37 -0
- data/cookbooks/rvm/recipes/system_install.rb +42 -0
- data/cookbooks/rvm/recipes/user.rb +43 -0
- data/cookbooks/rvm/recipes/user_install.rb +58 -0
- data/cookbooks/rvm/recipes/vagrant.rb +37 -0
- data/cookbooks/rvm/resources/default_ruby.rb +31 -0
- data/cookbooks/rvm/resources/environment.rb +31 -0
- data/cookbooks/rvm/resources/gem.rb +37 -0
- data/cookbooks/rvm/resources/gemset.rb +32 -0
- data/cookbooks/rvm/resources/global_gem.rb +34 -0
- data/cookbooks/rvm/resources/ruby.rb +32 -0
- data/cookbooks/rvm/resources/shell.rb +41 -0
- data/cookbooks/rvm/resources/wrapper.rb +34 -0
- data/cookbooks/rvm/templates/default/rvmrc.erb +14 -0
- data/cookbooks/rvm/templates/default/vagrant-chef-client-wrapper.erb +23 -0
- data/cookbooks/rvm/templates/default/vagrant-chef-solo-wrapper.erb +23 -0
- data/cookbooks/rvm/test/integration/data_bags/users/virgil1.json +4 -0
- data/cookbooks/rvm/test/integration/data_bags/users/virgil2.json +4 -0
- data/cookbooks/rvm/test/integration/data_bags/users/wigglebottom.json +3 -0
- data/cookbooks/rvm/test/integration/installs/bats/version_pinning.bats +13 -0
- data/cookbooks/rvm/test/integration/rubies/bats/_common.bash +16 -0
- data/cookbooks/rvm/test/integration/rubies/bats/verify_1.9.3.bats +9 -0
- data/cookbooks/rvm/test/integration/rubies/bats/verify_jruby.bats +12 -0
- data/cookbooks/rvm/test/integration/rubies/bats/verify_patch_support.bats +19 -0
- data/cookbooks/rvm/test/integration/rubies/bats/verify_ree.bats +9 -0
- data/cookbooks/rvm/test/integration/rubies/bats/verify_rubygems_version_support.bats +15 -0
- data/cookbooks/rvm/test/integration/stock_system_and_user/bats/system.bats +45 -0
- data/cookbooks/rvm/test/unit/libraries/provider_rvm_installation_spec.rb +220 -0
- data/cookbooks/rvm/test/unit/libraries/resource_rvm_installation_spec.rb +139 -0
- data/cookbooks/rvm/test/unit/spec_helper.rb +23 -0
- data/cookbooks/scratchify/.chef/knife.rb +9 -0
- data/cookbooks/scratchify/Berksfile +16 -0
- data/cookbooks/scratchify/Berksfile.lock +19 -0
- data/cookbooks/scratchify/LICENSE.txt +21 -0
- data/cookbooks/scratchify/README.md +41 -0
- data/cookbooks/scratchify/Thorfile +5 -0
- data/cookbooks/scratchify/bin/console +14 -0
- data/cookbooks/scratchify/bin/scratchify +6 -0
- data/cookbooks/scratchify/bin/setup +7 -0
- data/cookbooks/scratchify/chefignore +101 -0
- data/cookbooks/scratchify/data_bags/users/deploy.json +6 -0
- data/cookbooks/scratchify/environments/.gitkeep +0 -0
- data/cookbooks/scratchify/from-scratch.gemspec +36 -0
- data/cookbooks/scratchify/lib/from/scratch.rb +31 -0
- data/cookbooks/scratchify/lib/from/scratch/interviewer.rb +35 -0
- data/cookbooks/scratchify/lib/from/scratch/version.rb +3 -0
- data/cookbooks/scratchify/metadata.json +36 -0
- data/cookbooks/scratchify/nodes/normfood.ru.json +75 -0
- data/cookbooks/scratchify/recipes/default.rb +0 -0
- data/cookbooks/scratchify/roles/.gitkeep +0 -0
- data/cookbooks/scratchify/spec/from/scratch_spec.rb +11 -0
- data/cookbooks/scratchify/spec/spec_helper.rb +2 -0
- data/cookbooks/user/.gitignore +5 -0
- data/cookbooks/user/.kitchen.yml +46 -0
- data/cookbooks/user/.travis.yml +4 -0
- data/cookbooks/user/Berksfile +7 -0
- data/cookbooks/user/CHANGELOG.md +101 -0
- data/cookbooks/user/Gemfile +14 -0
- data/cookbooks/user/README.md +447 -0
- data/cookbooks/user/Rakefile +21 -0
- data/cookbooks/user/attributes/default.rb +50 -0
- data/cookbooks/user/libraries/matchers.rb +26 -0
- data/cookbooks/user/metadata.json +46 -0
- data/cookbooks/user/providers/account.rb +212 -0
- data/cookbooks/user/recipes/data_bag.rb +59 -0
- data/cookbooks/user/recipes/default.rb +18 -0
- data/cookbooks/user/resources/account.rb +41 -0
- data/cookbooks/user/templates/default/authorized_keys.erb +7 -0
- data/from-scratch.gemspec +33 -0
- data/lib/from-scratch.rb +25 -0
- data/lib/from-scratch/version.rb +3 -0
- data/metadata.rb +15 -0
- data/recipes/default.rb +0 -0
- data/templates/node.json.erb +31 -0
- data/templates/user.json.erb +6 -0
- metadata +330 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env bats
|
|
2
|
+
|
|
3
|
+
rubie="1.9.3-p327-railsexpress"
|
|
4
|
+
|
|
5
|
+
load _common
|
|
6
|
+
|
|
7
|
+
@test "RVM $rubie can use nokogiri with openssl" {
|
|
8
|
+
run_nokogiri_openssl_test $rubie
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
# For more details, please see:
|
|
12
|
+
# https://github.com/fnichol/chef-rvm/pull/137#issuecomment-12258247
|
|
13
|
+
@test "RVM $rubie can use patched functionality" {
|
|
14
|
+
script="puts Thread.current.thread_variable_set :foo, 'bar'"
|
|
15
|
+
|
|
16
|
+
run rvm $rubie do ruby -e "$script"
|
|
17
|
+
[ "$status" -eq 0 ]
|
|
18
|
+
[ "$output" = "bar" ]
|
|
19
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env bats
|
|
2
|
+
|
|
3
|
+
rubie="1.8.7"
|
|
4
|
+
|
|
5
|
+
load _common
|
|
6
|
+
|
|
7
|
+
@test "RVM $rubie can use nokogiri with openssl" {
|
|
8
|
+
run_nokogiri_openssl_test $rubie
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@test "Installs RubyGems 1.6.0 in RVM $rubie" {
|
|
12
|
+
run rvm 1.8.7 do gem --version
|
|
13
|
+
[ "$status" -eq 0 ]
|
|
14
|
+
[ "$output" = "1.6.0" ]
|
|
15
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env bats
|
|
2
|
+
|
|
3
|
+
default_ruby="ruby-1.9.3-p484"
|
|
4
|
+
https_url="https://google.com"
|
|
5
|
+
|
|
6
|
+
setup() {
|
|
7
|
+
source /etc/profile.d/rvm.sh
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@test "creates system install RVM directory" {
|
|
11
|
+
[ -d "/usr/local/rvm" ]
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@test "sources into environment" {
|
|
15
|
+
[ "$(type rvm | head -1)" = "rvm is a function" ]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@test "installs $default_ruby" {
|
|
19
|
+
run sudo -u wigglebottom -i rvm list strings
|
|
20
|
+
[ "$status" -eq 0 ]
|
|
21
|
+
[ "$output" = "$default_ruby" ]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@test "sets $default_ruby as the default" {
|
|
25
|
+
run sudo -u wigglebottom -i rvm list default string
|
|
26
|
+
[ "$status" -eq 0 ]
|
|
27
|
+
[ "${lines[0]}" = "$default_ruby" ]
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@test "default Ruby can use openssl from stdlib" {
|
|
31
|
+
expr="puts OpenSSL::PKey::RSA.new(32).to_pem"
|
|
32
|
+
run sudo -u wigglebottom -i rvm $default_ruby do ruby -ropenssl -e "$expr"
|
|
33
|
+
[ "$status" -eq 0 ]
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@test "default Ruby can install nokogiri gem" {
|
|
37
|
+
run sudo -u wigglebottom -i rvm $default_ruby do gem install nokogiri --no-ri --no-rdoc
|
|
38
|
+
[ "$status" -eq 0 ]
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@test "default Ruby can use nokogiri with openssl" {
|
|
42
|
+
expr="puts Nokogiri::HTML(open('$https_url')).css('input')"
|
|
43
|
+
run sudo -u wigglebottom -i rvm $default_ruby do ruby -ropen-uri -rnokogiri -e "$expr"
|
|
44
|
+
[ "$status" -eq 0 ]
|
|
45
|
+
}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Cookbook Name:: rvm
|
|
3
|
+
#
|
|
4
|
+
# Author:: Fletcher Nichol <fnichol@nichol.ca>
|
|
5
|
+
#
|
|
6
|
+
# Copyright 2013, Fletcher Nichol
|
|
7
|
+
#
|
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
require_relative "../spec_helper"
|
|
22
|
+
require "resource_rvm_installation"
|
|
23
|
+
require "provider_rvm_installation"
|
|
24
|
+
|
|
25
|
+
describe Chef::Provider::RvmInstallation do
|
|
26
|
+
|
|
27
|
+
let(:node) do
|
|
28
|
+
n = Chef::Node.new
|
|
29
|
+
n.set["rvm"]["installer_url"] = "http://rvm.me"
|
|
30
|
+
n.set["rvm"]["installer_flags"] = "stable"
|
|
31
|
+
n.set["rvm"]["install_pkgs"] = ["cake", "pie"]
|
|
32
|
+
n.set["rvm"]["rvmrc_env"] = {"RVM_ENABLE" => "alittle"}
|
|
33
|
+
n
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
let(:new_resource) do
|
|
37
|
+
r = Chef::Resource::RvmInstallation.new("franky", run_context)
|
|
38
|
+
r.rvmrc_template_cookbook("nadda")
|
|
39
|
+
r
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
let(:current_resource) do
|
|
43
|
+
Chef::Resource::RvmInstallation.new("franky", run_context)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
let(:nutered_resources) do
|
|
47
|
+
[Chef::Resource::Package, Chef::Resource::RemoteFile,
|
|
48
|
+
Chef::Resource::Template]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
subject(:provider) do
|
|
52
|
+
Chef::Provider::RvmInstallation.new(new_resource, run_context)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
before do
|
|
56
|
+
nutered_resources.each do |klass|
|
|
57
|
+
klass.any_instance.stub(:run_action).and_return(true)
|
|
58
|
+
end
|
|
59
|
+
provider.stub(:load_current_resource).and_return(current_resource)
|
|
60
|
+
provider.stub(:version).and_return("6.7.8")
|
|
61
|
+
provider.new_resource = new_resource
|
|
62
|
+
provider.current_resource = current_resource
|
|
63
|
+
|
|
64
|
+
Etc.stub(:getpwnam).with("franky").and_return(
|
|
65
|
+
double("user", :dir => "/fake/home/franky", :uid => 101, :gid => 601)
|
|
66
|
+
)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
describe "#load_current_resource" do
|
|
70
|
+
|
|
71
|
+
before do
|
|
72
|
+
provider.unstub(:load_current_resource)
|
|
73
|
+
provider.unstub(:version)
|
|
74
|
+
|
|
75
|
+
provider.stub(:shell_out).
|
|
76
|
+
with(/type rvm/, hash_including(:user => "franky")).
|
|
77
|
+
and_return(installed_cmd)
|
|
78
|
+
provider.stub(:shell_out).
|
|
79
|
+
with(/rvm version/, hash_including(:user => "franky")).
|
|
80
|
+
and_return(version_cmd)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
context "rvm is installed" do
|
|
84
|
+
|
|
85
|
+
let(:installed_cmd) do
|
|
86
|
+
double("output",
|
|
87
|
+
:stdout => ["rvm is a function", "rvm ()", "{", "eh", "}"].join("\n"),
|
|
88
|
+
:exitstatus => 0
|
|
89
|
+
)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
let(:version_cmd) do
|
|
93
|
+
double("output",
|
|
94
|
+
:stdout => "\nrvm 400.23.9 () yadda yadda\n\n",
|
|
95
|
+
:exitstatus => 0
|
|
96
|
+
)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "sets installed state to true" do
|
|
100
|
+
provider.load_current_resource
|
|
101
|
+
|
|
102
|
+
expect(provider.current_resource.installed).to be_truthy
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "sets version state" do
|
|
106
|
+
provider.load_current_resource
|
|
107
|
+
|
|
108
|
+
expect(provider.current_resource.version).to eq("400.23.9")
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
context "with a mangled version string" do
|
|
112
|
+
|
|
113
|
+
let(:version_cmd) do
|
|
114
|
+
double("output",
|
|
115
|
+
:stdout => "\nuh oh rvm cake () yadda yadda\n\n",
|
|
116
|
+
:exitstatus => 0
|
|
117
|
+
)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "raises an exception" do
|
|
121
|
+
expect{ provider.load_current_resource }.to raise_error
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
context "with a non-zero version command" do
|
|
126
|
+
|
|
127
|
+
let(:version_cmd) do
|
|
128
|
+
double("output",
|
|
129
|
+
:stdout => "\nrvm 1.2.3 () yadda yadda\n\n",
|
|
130
|
+
:exitstatus => 6
|
|
131
|
+
)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it "raises an exception" do
|
|
135
|
+
expect{ provider.load_current_resource }.to raise_error
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
context "rvm is not installed" do
|
|
141
|
+
|
|
142
|
+
let(:installed_cmd) do
|
|
143
|
+
double("output", :stdout => "who cares, it failed\n", :exitstatus => 1)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
let(:version_cmd) do
|
|
147
|
+
double("output", :stdout => "not what you expected?", :exitstatus => 1)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "sets installed state to false" do
|
|
151
|
+
provider.load_current_resource
|
|
152
|
+
|
|
153
|
+
expect(provider.current_resource.installed).to be false
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
describe "actions" do
|
|
159
|
+
|
|
160
|
+
describe "install" do
|
|
161
|
+
|
|
162
|
+
before do
|
|
163
|
+
provider.current_resource.installed(true)
|
|
164
|
+
provider.stub(:rvm_shell_out!).with(/^bash/)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
let(:cache_path) { Chef::Config[:file_cache_path] }
|
|
168
|
+
|
|
169
|
+
it "creates a collection of packages to install" do
|
|
170
|
+
expect(provider.install_packages.map { |pkg| pkg.name }).to eq(%w(cake pie))
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it "calls the package resources" do
|
|
174
|
+
expect(provider).to receive(:install_packages)
|
|
175
|
+
|
|
176
|
+
provider.install_rvm
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
it "creates a template to manage rvmrc" do
|
|
180
|
+
template = provider.send(:write_rvmrc)
|
|
181
|
+
|
|
182
|
+
expect(template.class).to be(Chef::Resource::Template)
|
|
183
|
+
expect(template.name).to eq("/fake/home/franky/.rvmrc")
|
|
184
|
+
expect(template.owner).to eq("franky")
|
|
185
|
+
expect(template.group).to eq(601)
|
|
186
|
+
expect(template.mode).to eq("0644")
|
|
187
|
+
expect(template.source).to eq("rvmrc.erb")
|
|
188
|
+
expect(template.cookbook).to eq("nadda")
|
|
189
|
+
expect(template.variables).to eq(
|
|
190
|
+
:user => "franky",
|
|
191
|
+
:rvm_path => "/fake/home/franky/.rvm",
|
|
192
|
+
:rvmrc_env => {"RVM_ENABLE" => "alittle"}
|
|
193
|
+
)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
it "creates a remote_file to download the installer script" do
|
|
197
|
+
remote_script = provider.send(:download_installer)
|
|
198
|
+
|
|
199
|
+
expect(remote_script.class).to be(Chef::Resource::RemoteFile)
|
|
200
|
+
expect(remote_script.name).to eq("#{cache_path}/rvm-installer-franky")
|
|
201
|
+
expect(Array(remote_script.source)).to include("http://rvm.me")
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
it "calls the remote_file" do
|
|
205
|
+
expect(provider).to receive(:download_installer)
|
|
206
|
+
|
|
207
|
+
provider.install_rvm
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
it "runs the installer" do
|
|
211
|
+
provider.stub(:rvm_shell_out!)
|
|
212
|
+
expect(provider).to receive(:rvm_shell_out!).with(
|
|
213
|
+
"bash #{cache_path}/rvm-installer-franky stable"
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
provider.install_rvm
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Cookbook Name:: rvm
|
|
3
|
+
#
|
|
4
|
+
# Author:: Fletcher Nichol <fnichol@nichol.ca>
|
|
5
|
+
#
|
|
6
|
+
# Copyright 2013, Fletcher Nichol
|
|
7
|
+
#
|
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
require_relative "../spec_helper"
|
|
22
|
+
require "resource_rvm_installation"
|
|
23
|
+
require "provider_rvm_installation"
|
|
24
|
+
|
|
25
|
+
describe Chef::Resource::RvmInstallation do
|
|
26
|
+
|
|
27
|
+
let(:node) do
|
|
28
|
+
node = Chef::Node.new
|
|
29
|
+
node.set["rvm"]["installer_url"] = "http://example.com/rvm.me"
|
|
30
|
+
node.set["rvm"]["installer_flags"] = "--buy-me beer"
|
|
31
|
+
node.set["rvm"]["install_pkgs"] = ["cake", "pie"]
|
|
32
|
+
node.set["rvm"]["gem_options"] = "--gem-all-the-things"
|
|
33
|
+
node.set["rvm"]["rvmrc_env"] = { "RVM_EVERYTHING" => "maybe" }
|
|
34
|
+
node
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
let(:resource_name) { "franky" }
|
|
38
|
+
|
|
39
|
+
subject(:resource) do
|
|
40
|
+
Chef::Resource::RvmInstallation.new(resource_name, run_context)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "sets resource_name" do
|
|
44
|
+
expect(resource.resource_name).to eq(:rvm_installation)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "sets the provider class" do
|
|
48
|
+
expect(resource.provider).to be(Chef::Provider::RvmInstallation)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "sets the resource name" do
|
|
52
|
+
expect(resource.name).to eq("franky")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context "attribute" do
|
|
56
|
+
|
|
57
|
+
it "user can be set" do
|
|
58
|
+
resource.user("root")
|
|
59
|
+
expect(resource.user).to eq("root")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "installer_url defaults to node.rvm.installer_url" do
|
|
63
|
+
expect(resource.installer_url).to eq("http://example.com/rvm.me")
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "installer_url can be set" do
|
|
67
|
+
resource.installer_url("https://www.google.ca/#q=rvm")
|
|
68
|
+
expect(resource.installer_url).to eq("https://www.google.ca/#q=rvm")
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "installer_flags defaults to node.rvm.installer_flags" do
|
|
72
|
+
expect(resource.installer_flags).to eq("--buy-me beer")
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "installer_flags can be set" do
|
|
76
|
+
resource.installer_flags("--send pizza")
|
|
77
|
+
expect(resource.installer_flags).to eq("--send pizza")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "rvmrc_template_source defaults rvmrc.erb" do
|
|
81
|
+
expect(resource.rvmrc_template_source).to eq("rvmrc.erb")
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "rvmrc_template_source can be set" do
|
|
85
|
+
resource.rvmrc_template_source("that_other_one.erb")
|
|
86
|
+
expect(resource.rvmrc_template_source).to eq("that_other_one.erb")
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "rvmrc_template_cookbook defaults to rvm" do
|
|
90
|
+
expect(resource.rvmrc_template_cookbook).to eq("rvm")
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "rvmrc_template_cookbook can be set" do
|
|
94
|
+
resource.rvmrc_template_cookbook("my_rvm_wrapper")
|
|
95
|
+
expect(resource.rvmrc_template_cookbook).to eq("my_rvm_wrapper")
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "rvmrc_gem_options defaults to node.rvm.gem_options" do
|
|
99
|
+
expect(resource.rvmrc_gem_options).to eq("--gem-all-the-things")
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "rvmrc_gem_options can be set" do
|
|
103
|
+
resource.rvmrc_gem_options("--nope")
|
|
104
|
+
expect(resource.rvmrc_gem_options).to eq("--nope")
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "rvmrc_env defaults to node.rvm.rvmrc_env" do
|
|
108
|
+
expect(resource.rvmrc_env).to eq({"RVM_EVERYTHING" => "maybe"})
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "rvmrc_env can be set to merge with defaults" do
|
|
112
|
+
resource.rvmrc_env({"FOO" => "is_bar", "this" => "too"})
|
|
113
|
+
expect(resource.rvmrc_env).to eq({
|
|
114
|
+
"RVM_EVERYTHING" => "maybe",
|
|
115
|
+
"FOO" => "is_bar",
|
|
116
|
+
"this" => "too"
|
|
117
|
+
})
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "install_pkgs defaults to node.rvm.install_pkgs" do
|
|
121
|
+
expect(resource.install_pkgs).to eq(["cake", "pie"])
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "installed can be set" do
|
|
125
|
+
resource.installed(true)
|
|
126
|
+
expect(resource.installed).to be_truthy
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it "version can be set" do
|
|
130
|
+
resource.version("x.y.z")
|
|
131
|
+
expect(resource.version).to eq("x.y.z")
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "action defaults to :install" do
|
|
136
|
+
expect(resource.action).to eq(:install)
|
|
137
|
+
expect(resource.allowed_actions).to include(:install)
|
|
138
|
+
end
|
|
139
|
+
end
|