-
Notifications
You must be signed in to change notification settings - Fork 33
/
chef_config_generator_spec.rb
203 lines (185 loc) · 5.95 KB
/
chef_config_generator_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
require 'rspec'
require 'lib/soloist'
describe "ChefConfigGenerator" do
describe "generation" do
before do
@config = <<-CONFIG
Cookbook_Paths:
- ./chef/cookbooks/
Recipes:
- pivotal_workstation::ack
CONFIG
@generator = ChefConfigGenerator.new(@config, "../..")
FileUtils.stub(:pwd).and_return("/current/working/directory")
end
it "appends the current path and relative path to the cookbooks directory" do
@generator.cookbook_paths.should == ["/current/working/directory/../.././chef/cookbooks/"]
end
it "can generate a solo.rb contents" do
@generator.solo_rb.should == 'cookbook_path ["/current/working/directory/../.././chef/cookbooks/"]'
end
it "can generate the json contents" do
@generator.json_hash.should == {
"recipes" => ['pivotal_workstation::ack']
}
end
it "can generate json files" do
JSON.parse(@generator.json_file).should == {
"recipes" => ['pivotal_workstation::ack']
}
end
describe "passing env variables to chef-solo through sudo" do
it "has a list of env variables which are passed through" do
@generator.preserved_environment_variables.should == %w{PATH BUNDLE_PATH GEM_HOME GEM_PATH RAILS_ENV RACK_ENV}
end
it "can generate an env_variable_string which is passed through sudo to chef-solo" do
ENV["FOO"]="BAR"
ENV["FAZ"]="FUZ"
@generator.stub!(:preserved_environment_variables).and_return(["FOO", "FAZ"])
@generator.preserved_environment_variables_string.should == "FOO=BAR FAZ=FUZ"
end
it "adds any environment variables that are switched in the config" do
@config = <<-CONFIG
cookbook_paths:
- ./chef/cookbooks/
recipes:
- pivotal_workstation::ack
env_variable_switches:
ME_TOO:
development:
cookbook_paths:
- ./chef/dev_cookbooks/
recipes:
- pivotal_dev::foo
CONFIG
@generator = ChefConfigGenerator.new(@config, "")
@generator.preserved_environment_variables.should =~ %w{PATH BUNDLE_PATH GEM_HOME GEM_PATH RAILS_ENV RACK_ENV ME_TOO}
end
end
end
describe "yaml config values" do
before do
FileUtils.stub(:pwd).and_return("/")
end
it "accepts Cookbook_Paths, because the CamelSnake is a typo that must be supported" do
@config = "Cookbook_Paths:\n- ./chef/cookbooks/\n"
@generator = ChefConfigGenerator.new(@config, "")
@generator.cookbook_paths.should == ["///./chef/cookbooks/"]
end
it "accepts cookbook_paths, because it is sane" do
@config = "cookbook_paths:\n- ./chef/cookbooks/\n"
@generator = ChefConfigGenerator.new(@config, "")
@generator.cookbook_paths.should == ["///./chef/cookbooks/"]
end
it "accepts Recipes, because that's the way it was" do
@config = "Recipes:\n- pivotal_workstation::ack"
@generator = ChefConfigGenerator.new(@config, "")
@generator.json_hash.should == { "recipes" => ["pivotal_workstation::ack"]}
end
it "accepts recipes, because it's snake now" do
@config = "recipes:\n- pivotal_workstation::ack"
@generator = ChefConfigGenerator.new(@config, "")
@generator.json_hash.should == { "recipes" => ["pivotal_workstation::ack"]}
end
end
describe "environment variable merging" do
before do
FileUtils.stub(:pwd).and_return("/")
end
it "merges in if the variable is set to the the value" do
@config = <<-CONFIG
cookbook_paths:
- ./chef/cookbooks/
recipes:
- pivotal_workstation::ack
env_variable_switches:
RACK_ENV:
development:
cookbook_paths:
- ./chef/dev_cookbooks/
recipes:
- pivotal_dev::foo
CONFIG
ENV["RACK_ENV"]="development"
@generator = ChefConfigGenerator.new(@config, "../..")
@generator.cookbook_paths.should == [
"//../.././chef/cookbooks/",
"//../.././chef/dev_cookbooks/"
]
@generator.json_hash["recipes"].should == [
"pivotal_workstation::ack",
"pivotal_dev::foo"
]
end
it "splits the value on comma and applies all matching" do
ENV["ROLES"]="application,database"
@config = <<-CONFIG
cookbook_paths:
- ./chef/cookbooks/
recipes:
- pivotal_workstation::ack
env_variable_switches:
ROLES:
application:
cookbook_paths:
- ./chef/app_cookbooks/
recipes:
- pivotal_app::application
database:
cookbook_paths:
- ./chef/db_cookbooks/
recipes:
- pivotal_db::database
CONFIG
@generator = ChefConfigGenerator.new(@config, "../..")
@generator.cookbook_paths.should =~ [
"//../.././chef/cookbooks/",
"//../.././chef/app_cookbooks/",
"//../.././chef/db_cookbooks/"
]
@generator.json_hash["recipes"].should =~ [
"pivotal_workstation::ack",
"pivotal_app::application",
"pivotal_db::database",
]
end
it "can deal with only having environment switched recipes/cookbooks" do
config = <<-CONFIG
env_variable_switches:
RACK_ENV:
development:
cookbook_paths:
- ./chef/development_cookbooks/
recipes:
- pivotal_development::foo
CONFIG
@generator = ChefConfigGenerator.new(config, "../..")
@generator.cookbook_paths.should == [
"//../.././chef/development_cookbooks/"
]
@generator.json_hash["recipes"].should == [
"pivotal_development::foo"
]
end
it "can deal with only having empty recipes/cookbooks" do
config = <<-CONFIG
cookbook_paths:
recipes:
env_variable_switches:
RACK_ENV:
development:
cookbook_paths:
- ./chef/development_cookbooks/
recipes:
- pivotal_development::foo
CONFIG
@generator = ChefConfigGenerator.new(config, "../..")
@generator.cookbook_paths.should == [
"//../.././chef/development_cookbooks/"
]
@generator.json_hash["recipes"].should == [
"pivotal_development::foo"
]
end
end
end