itamae-spec 0.0.2

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 (77) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +7 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +42 -0
  7. data/Rakefile +47 -0
  8. data/bin/itamae-spec +4 -0
  9. data/itamae-spec.gemspec +36 -0
  10. data/lib/itamae-spec.rb +10 -0
  11. data/lib/itamae-spec/cli.rb +19 -0
  12. data/lib/itamae-spec/generators.rb +20 -0
  13. data/lib/itamae-spec/generators/cookbook.rb +10 -0
  14. data/lib/itamae-spec/generators/project.rb +10 -0
  15. data/lib/itamae-spec/generators/templates/cookbook/attributes/.keep +0 -0
  16. data/lib/itamae-spec/generators/templates/cookbook/recipes/default.rb +0 -0
  17. data/lib/itamae-spec/generators/templates/cookbook/recipes/files/.keep +0 -0
  18. data/lib/itamae-spec/generators/templates/cookbook/recipes/templates/.keep +0 -0
  19. data/lib/itamae-spec/generators/templates/cookbook/spec/default_spec.rb +0 -0
  20. data/lib/itamae-spec/generators/templates/project/.rspec +2 -0
  21. data/lib/itamae-spec/generators/templates/project/Gemfile +3 -0
  22. data/lib/itamae-spec/generators/templates/project/Project.json +1 -0
  23. data/lib/itamae-spec/generators/templates/project/Rakefile +9 -0
  24. data/lib/itamae-spec/generators/templates/project/cookbooks/sample/attributes/.keep +0 -0
  25. data/lib/itamae-spec/generators/templates/project/cookbooks/sample/attributes/default.json +5 -0
  26. data/lib/itamae-spec/generators/templates/project/cookbooks/sample/recipes/default.rb +7 -0
  27. data/lib/itamae-spec/generators/templates/project/cookbooks/sample/recipes/files/.keep +0 -0
  28. data/lib/itamae-spec/generators/templates/project/cookbooks/sample/recipes/templates/.keep +0 -0
  29. data/lib/itamae-spec/generators/templates/project/cookbooks/sample/spec/default_spec.rb +9 -0
  30. data/lib/itamae-spec/generators/templates/project/environments/.keep +0 -0
  31. data/lib/itamae-spec/generators/templates/project/environments/sample.json +7 -0
  32. data/lib/itamae-spec/generators/templates/project/keys/.keep +0 -0
  33. data/lib/itamae-spec/generators/templates/project/nodes/.keep +0 -0
  34. data/lib/itamae-spec/generators/templates/project/nodes/sample.json +10 -0
  35. data/lib/itamae-spec/generators/templates/project/roles/.keep +0 -0
  36. data/lib/itamae-spec/generators/templates/project/roles/sample.json +5 -0
  37. data/lib/itamae-spec/generators/templates/project/spec/spec_helper.rb +41 -0
  38. data/lib/itamae-spec/generators/templates/project/tmp-nodes/.keep +0 -0
  39. data/lib/itamae-spec/logger.rb +76 -0
  40. data/lib/itamae-spec/resource.rb +2 -0
  41. data/lib/itamae-spec/resource/http_request.rb +71 -0
  42. data/lib/itamae-spec/resource/s3_file.rb +31 -0
  43. data/lib/itamae-spec/task/base.rb +90 -0
  44. data/lib/itamae-spec/task/base_task.rb +148 -0
  45. data/lib/itamae-spec/task/itamae_task.rb +112 -0
  46. data/lib/itamae-spec/task/local_itamae_task.rb +84 -0
  47. data/lib/itamae-spec/task/local_serverspec_task.rb +125 -0
  48. data/lib/itamae-spec/task/serverspec_task.rb +111 -0
  49. data/lib/itamae-spec/version.rb +3 -0
  50. data/lib/itamae-spec/version.txt +1 -0
  51. data/spec/integration/Vagrantfile +35 -0
  52. data/spec/integration/default_spec.rb +226 -0
  53. data/spec/integration/recipes/default.rb +423 -0
  54. data/spec/integration/recipes/default2.rb +6 -0
  55. data/spec/integration/recipes/define/default.rb +6 -0
  56. data/spec/integration/recipes/define/files/remote_file_in_definition +1 -0
  57. data/spec/integration/recipes/dry_run.rb +6 -0
  58. data/spec/integration/recipes/files/remote_file_auto +1 -0
  59. data/spec/integration/recipes/hello.erb +6 -0
  60. data/spec/integration/recipes/hello.txt +1 -0
  61. data/spec/integration/recipes/included.rb +9 -0
  62. data/spec/integration/recipes/node.json +3 -0
  63. data/spec/integration/recipes/redefine.rb +20 -0
  64. data/spec/integration/recipes/templates/template_auto.erb +6 -0
  65. data/spec/integration/spec_helper.rb +42 -0
  66. data/spec/unit/lib/itamae/backend_spec.rb +95 -0
  67. data/spec/unit/lib/itamae/handler/base_spec.rb +34 -0
  68. data/spec/unit/lib/itamae/handler/fluentd_spec.rb +19 -0
  69. data/spec/unit/lib/itamae/handler_proxy_spec.rb +38 -0
  70. data/spec/unit/lib/itamae/handler_spec.rb +11 -0
  71. data/spec/unit/lib/itamae/node_spec.rb +14 -0
  72. data/spec/unit/lib/itamae/recipe_spec.rb +6 -0
  73. data/spec/unit/lib/itamae/resource/base_spec.rb +127 -0
  74. data/spec/unit/lib/itamae/resource_spec.rb +23 -0
  75. data/spec/unit/lib/itamae/runner_spec.rb +32 -0
  76. data/spec/unit/spec_helper.rb +23 -0
  77. metadata +315 -0
@@ -0,0 +1,423 @@
1
+ node.reverse_merge!({
2
+ message: "Hello, Itamae"
3
+ })
4
+
5
+ execute 'apt-get update'
6
+ execute 'deluser --remove-home itamae2' do
7
+ only_if "id itamae2"
8
+ end
9
+
10
+ include_recipe "./included.rb"
11
+ include_recipe "./included.rb" # including the same recipe is expected to be skipped.
12
+
13
+ user "create itamae user" do
14
+ uid 123
15
+ username "itamae"
16
+ password "$1$ltOY8bZv$iZ57f1KAp8jwKViNm3pze."
17
+ home '/home/foo'
18
+ shell '/bin/sh'
19
+ end
20
+
21
+ user "update itamae user" do
22
+ uid 1234
23
+ username "itamae"
24
+ password "$1$TQz9gPMl$nHYrsA5W2ZdZ0Yn021BQH1"
25
+ home '/home/itamae'
26
+ shell '/bin/dash'
27
+ end
28
+
29
+ directory "/home/itamae" do
30
+ mode "755"
31
+ owner "itamae"
32
+ group "itamae"
33
+ end
34
+
35
+ user "create itamae2 user with create home directory" do
36
+ username "itamae2"
37
+ create_home true
38
+ home "/home/itamae2"
39
+ shell "/bin/sh"
40
+ end
41
+
42
+ ######
43
+
44
+ package 'dstat' do
45
+ action :install
46
+ end
47
+
48
+ package 'sl' do
49
+ version '3.03-17'
50
+ end
51
+
52
+ package 'resolvconf' do
53
+ action :remove
54
+ end
55
+
56
+ ######
57
+
58
+ package "ruby"
59
+
60
+ gem_package 'tzinfo' do
61
+ version '1.1.0'
62
+ end
63
+
64
+ gem_package 'tzinfo' do
65
+ version '1.2.2'
66
+ end
67
+
68
+ gem_package 'bundler' do
69
+ options ['--no-ri', '--no-rdoc']
70
+ end
71
+
72
+ ######
73
+
74
+ execute "echo -n > /tmp/notifies"
75
+
76
+ execute "echo -n 1 >> /tmp/notifies" do
77
+ action :nothing
78
+ end
79
+
80
+ execute "echo -n 2 >> /tmp/notifies" do
81
+ notifies :run, "execute[echo -n 1 >> /tmp/notifies]"
82
+ end
83
+
84
+ execute "echo -n 3 >> /tmp/notifies" do
85
+ action :nothing
86
+ end
87
+
88
+ execute "echo -n 4 >> /tmp/notifies" do
89
+ notifies :run, "execute[echo -n 3 >> /tmp/notifies]", :immediately
90
+ end
91
+
92
+ ######
93
+
94
+ execute "echo -n > /tmp/subscribes"
95
+
96
+ execute "echo -n 1 >> /tmp/subscribes" do
97
+ action :nothing
98
+ subscribes :run, "execute[echo -n 2 >> /tmp/subscribes]"
99
+ end
100
+
101
+ execute "echo -n 2 >> /tmp/subscribes"
102
+
103
+ execute "echo -n 3 >> /tmp/subscribes" do
104
+ action :nothing
105
+ subscribes :run, "execute[echo -n 4 >> /tmp/subscribes]", :immediately
106
+ end
107
+
108
+ execute "echo -n 4 >> /tmp/subscribes"
109
+
110
+ ######
111
+
112
+ remote_file "/tmp/remote_file" do
113
+ source "hello.txt"
114
+ end
115
+
116
+ remote_file "/tmp/remote_file_auto" do
117
+ source :auto
118
+ end
119
+
120
+ ######
121
+
122
+ directory "/tmp/directory" do
123
+ mode "700"
124
+ owner "itamae"
125
+ group "itamae"
126
+ end
127
+
128
+ directory "/tmp/directory_never_exist1" do
129
+ action :create
130
+ end
131
+
132
+ directory "/tmp/directory_never_exist1" do
133
+ action :delete
134
+ end
135
+
136
+ template "/tmp/template" do
137
+ source "hello.erb"
138
+ variables goodbye: "Good bye"
139
+ end
140
+
141
+ template "/tmp/template_auto" do
142
+ source :auto
143
+ variables goodbye: "Good bye"
144
+ end
145
+
146
+ file "/tmp/file" do
147
+ content "Hello World"
148
+ mode "777"
149
+ end
150
+
151
+ execute "echo 'Hello Execute' > /tmp/execute"
152
+
153
+ file "/tmp/never_exist1" do
154
+ only_if "exit 1"
155
+ end
156
+
157
+ file "/tmp/never_exist2" do
158
+ not_if "exit 0"
159
+ end
160
+
161
+ ######
162
+
163
+ http_request "/tmp/http_request.html" do
164
+ url "https://httpbin.org/get?from=itamae"
165
+ end
166
+
167
+ http_request "/tmp/http_request_delete.html" do
168
+ action :delete
169
+ url "https://httpbin.org/delete?from=itamae"
170
+ end
171
+
172
+ http_request "/tmp/http_request_post.html" do
173
+ action :post
174
+ message "love=sushi"
175
+ url "https://httpbin.org/post?from=itamae"
176
+ end
177
+
178
+ http_request "/tmp/http_request_put.html" do
179
+ action :put
180
+ message "love=sushi"
181
+ url "https://httpbin.org/put?from=itamae"
182
+ end
183
+
184
+ http_request "/tmp/http_request_headers.html" do
185
+ headers "User-Agent" => "Itamae"
186
+ url "https://httpbin.org/get"
187
+ end
188
+
189
+ http_request "/tmp/http_request_redirect.html" do
190
+ redirect_limit 1
191
+ url "https://httpbin.org/redirect-to?url=https%3A%2F%2Fhttpbin.org%2Fget%3Ffrom%3Ditamae"
192
+ end
193
+
194
+ ######
195
+
196
+ service "cron" do
197
+ action :stop
198
+ end
199
+
200
+ execute "ps -C cron > /tmp/cron_stopped; true"
201
+
202
+ service "cron" do
203
+ action :start
204
+ end
205
+
206
+ execute "ps -C cron > /tmp/cron_running; true"
207
+
208
+ ######
209
+
210
+ package "nginx" do
211
+ options "--force-yes"
212
+ end
213
+
214
+ service "nginx" do
215
+ action [:enable, :start]
216
+ end
217
+
218
+ execute "test -f /etc/rc3.d/S20nginx" # test
219
+ execute "test $(ps h -C nginx | wc -l) -gt 0" # test
220
+
221
+ service "nginx" do
222
+ action [:disable, :stop]
223
+ end
224
+
225
+ execute "test ! -f /etc/rc3.d/S20nginx" # test
226
+ execute "test $(ps h -C nginx | wc -l) -eq 0" # test
227
+
228
+ ######
229
+
230
+ link "/tmp-link" do
231
+ to "/tmp"
232
+ end
233
+
234
+ execute "touch /tmp-link-force"
235
+ link "/tmp-link-force" do
236
+ to "/tmp"
237
+ force true
238
+ end
239
+
240
+ #####
241
+
242
+ local_ruby_block "greeting" do
243
+ block do
244
+ Itamae.logger.info "板前"
245
+ end
246
+ end
247
+
248
+ #####
249
+
250
+ package "git"
251
+
252
+ git "/tmp/git_repo" do
253
+ repository "https://github.com/ryotarai/infrataster.git"
254
+ revision "v0.1.0"
255
+ end
256
+
257
+ git "/tmp/git_repo_submodule" do
258
+ repository "https://github.com/mmasaki/fake_repo_including_submodule.git"
259
+ recursive true
260
+ end
261
+
262
+ #####
263
+
264
+ execute "echo -n \"$HOME\n$(pwd)\" > /tmp/created_by_itamae_user" do
265
+ user "itamae"
266
+ end
267
+
268
+ #####
269
+
270
+ execute "echo 'notify to resource in default2.rb'" do
271
+ notifies :create, "file[put file in default2.rb]"
272
+ end
273
+
274
+ #####
275
+
276
+ file "/tmp/never_exist3" do
277
+ action :create
278
+ end
279
+
280
+ file "/tmp/never_exist3" do
281
+ action :delete
282
+ end
283
+
284
+ #####
285
+
286
+ include_recipe "define/default.rb"
287
+
288
+ definition_example "name" do
289
+ key 'value'
290
+ end
291
+
292
+ #####
293
+
294
+ file "/tmp/never_exist4" do
295
+ action :nothing
296
+ end
297
+
298
+ file "/tmp/file1" do
299
+ content "Hello, World"
300
+ end
301
+
302
+ file "/tmp/file1" do
303
+ content "Hello, World"
304
+ notifies :create, "file[/tmp/never_exist4]"
305
+ end
306
+
307
+ #####
308
+
309
+ file "/tmp/file_create_without_content" do
310
+ content "Hello, World"
311
+ end
312
+
313
+ file "/tmp/file_create_without_content" do
314
+ owner "itamae"
315
+ group "itamae"
316
+ mode "600"
317
+ end
318
+
319
+ #####
320
+
321
+ execute 'true' do
322
+ verify 'true'
323
+ end
324
+
325
+ #####
326
+
327
+ execute 'echo 1 > /tmp/multi_delayed_notifies' do
328
+ notifies :run, "execute[echo 2 >> /tmp/multi_delayed_notifies]"
329
+ end
330
+
331
+ execute 'echo 2 >> /tmp/multi_delayed_notifies' do
332
+ action :nothing
333
+ notifies :run, "execute[echo 3 >> /tmp/multi_delayed_notifies]"
334
+ end
335
+
336
+ execute 'echo 3 >> /tmp/multi_delayed_notifies' do
337
+ action :nothing
338
+ notifies :run, "execute[echo 4 >> /tmp/multi_delayed_notifies]"
339
+ end
340
+
341
+ execute 'echo 4 >> /tmp/multi_delayed_notifies' do
342
+ action :nothing
343
+ end
344
+
345
+ #####
346
+
347
+ execute 'echo 1 > /tmp/multi_immediately_notifies' do
348
+ notifies :run, "execute[echo 2 >> /tmp/multi_immediately_notifies]", :immediately
349
+ end
350
+
351
+ execute 'echo 2 >> /tmp/multi_immediately_notifies' do
352
+ action :nothing
353
+ notifies :run, "execute[echo 3 >> /tmp/multi_immediately_notifies]", :immediately
354
+ end
355
+
356
+ execute 'echo 3 >> /tmp/multi_immediately_notifies' do
357
+ action :nothing
358
+ notifies :run, "execute[echo 4 >> /tmp/multi_immediately_notifies]", :immediately
359
+ end
360
+
361
+ execute 'echo 4 >> /tmp/multi_immediately_notifies' do
362
+ action :nothing
363
+ end
364
+
365
+ #####
366
+
367
+ file '/tmp/file_edit_sample' do
368
+ content 'Hello, world'
369
+ owner 'itamae'
370
+ group 'itamae'
371
+ mode '444'
372
+ end
373
+
374
+ file '/tmp/file_edit_sample' do
375
+ action :edit
376
+ owner 'itamae2'
377
+ group 'itamae2'
378
+ mode '400'
379
+ block do |content|
380
+ content.gsub!('world', 'Itamae')
381
+ end
382
+ notifies :run, "execute[echo -n 1 > /tmp/file_edit_notifies]"
383
+ end
384
+
385
+ execute 'echo -n 1 > /tmp/file_edit_notifies' do
386
+ action :nothing
387
+ end
388
+
389
+ ###
390
+
391
+ unless run_command("echo -n Hello").stdout == "Hello"
392
+ raise "run_command in a recipe failed"
393
+ end
394
+
395
+ define :run_command_in_definition do
396
+ unless run_command("echo -n Hello").stdout == "Hello"
397
+ raise "run_command in a definition failed"
398
+ end
399
+ end
400
+
401
+ execute "echo Hello" do
402
+ unless run_command("echo -n Hello").stdout == "Hello"
403
+ raise "run_command in a resource failed"
404
+ end
405
+ end
406
+
407
+ local_ruby_block 'execute run_command' do
408
+ block do
409
+ unless run_command("echo -n Hello").stdout == "Hello"
410
+ raise "run_command in local_ruby_block failed"
411
+ end
412
+ end
413
+ end
414
+
415
+ ###
416
+
417
+ v1 = node.memory.total
418
+ v2 = node[:memory][:total]
419
+ v3 = node['memory']['total']
420
+
421
+ unless v1 == v2 && v2 == v3 && v1 =~ /\A\d+kB\z/
422
+ raise "failed to fetch host inventory value (#{v1}, #{v2}, #{v3})"
423
+ end
@@ -0,0 +1,6 @@
1
+ file "put file in default2.rb" do
2
+ action :nothing
3
+ path "/tmp/created_in_default2"
4
+ content 'Hello'
5
+ end
6
+
@@ -0,0 +1,6 @@
1
+ define :definition_example, key: 'default' do
2
+ execute "echo 'name:#{params[:name]},key:#{params[:key]},message:#{node[:message]}' > /tmp/created_by_definition"
3
+
4
+ remote_file "/tmp/remote_file_in_definition"
5
+ end
6
+
@@ -0,0 +1,6 @@
1
+ file "/tmp/it_does_not_exist" do
2
+ action :edit
3
+ block do |content|
4
+ content.gsub!("foo", "bar")
5
+ end
6
+ end