itamae 1.1.19 → 1.1.20

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5bc2771249661bde6dc39318b631d963a7697ebc
4
- data.tar.gz: e0daf9fcefe8de50700be1bd21a5e6d2713a514a
3
+ metadata.gz: 6ca9a458f030e2ec5d60c1bc8bd01d328a38203d
4
+ data.tar.gz: 69040c5649fe0ed36b626e51aca7bd936d2e66e0
5
5
  SHA512:
6
- metadata.gz: 554595b1b3c7a10964e2d087d3b1a8194f1baab016fd4e6408dea6ab920d671d64744b1a19f2ec488e835d9072eb980dca6b24677c3c99bae1a5c55162dd9d44
7
- data.tar.gz: 7b245129c145755de0ff1751c9fe275be4bb30532540269be2c6e0300d376af02fc3b1ef063153b9a32b08f409ada0228a3c21705c4ceef13b6777e827745d5a
6
+ metadata.gz: c5f30b1edb852c3835a93da78fe30414de0f29e526d1418c3404c022adc3ded024ec25d08d0967ae614e2c6eedd980e6db28fb7a3a917ea40bb404d0f2dc52b5
7
+ data.tar.gz: 324f116bd8332b90e5157456d888822e096df35c668dae41eec01f29ba96bb50370edf5b1276bc169b2624de639f32b4d27a190576602cab1d1df3f293587beb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## v1.1.20
2
+
3
+ Features
4
+
5
+ - `source :auto` of remote_file and template resources.
6
+ - details: https://github.com/itamae-kitchen/itamae/issues/94
7
+
1
8
  ## v1.1.19
2
9
 
3
10
  Features
data/lib/itamae/recipe.rb CHANGED
@@ -32,6 +32,10 @@ module Itamae
32
32
  @children = RecipeChildren.new
33
33
  end
34
34
 
35
+ def dir
36
+ ::File.dirname(@path)
37
+ end
38
+
35
39
  def load
36
40
  EvalContext.new(self)
37
41
  end
@@ -6,15 +6,14 @@ module Itamae
6
6
  define_attribute :action, default: :create
7
7
  define_attribute :path, type: String, default_name: true
8
8
  define_attribute :content, type: String, default: ''
9
- define_attribute :content_file, type: String
10
9
  define_attribute :mode, type: String
11
10
  define_attribute :owner, type: String
12
11
  define_attribute :group, type: String
13
12
 
14
13
  def pre_action
15
14
  begin
16
- src = if attributes.content_file
17
- ::File.expand_path(attributes.content_file, ::File.dirname(@recipe.path))
15
+ src = if content_file
16
+ content_file
18
17
  else
19
18
  f = Tempfile.open('itamae')
20
19
  f.write(attributes.content)
@@ -107,6 +106,11 @@ module Itamae
107
106
  end
108
107
  end
109
108
  end
109
+
110
+ # will be overridden
111
+ def content_file
112
+ nil
113
+ end
110
114
  end
111
115
  end
112
116
  end
@@ -3,13 +3,48 @@ require 'itamae'
3
3
  module Itamae
4
4
  module Resource
5
5
  class RemoteFile < File
6
- define_attribute :source, type: String, required: true
6
+ SourceNotFoundError = Class.new(StandardError)
7
7
 
8
- def pre_action
9
- attributes.content_file =
10
- ::File.expand_path(attributes.source, ::File.dirname(@recipe.path))
8
+ define_attribute :source, type: [String, Symbol], default: :auto
11
9
 
12
- super
10
+ private
11
+
12
+ def content_file
13
+ source_file
14
+ end
15
+
16
+ def source_file
17
+ @source_file ||= find_source_file
18
+ end
19
+
20
+ def find_source_file
21
+ if attributes.source == :auto
22
+ dirs = attributes.path.split(::File::SEPARATOR)
23
+ dirs.shift if dirs.first == ""
24
+
25
+ searched_paths = []
26
+ dirs.size.times do |i|
27
+ path = ::File.join(@recipe.dir, source_file_dir, "#{dirs[i..-1].join("/")}#{source_file_ext}")
28
+ if ::File.exist?(path)
29
+ Logger.debug "#{path} is used as a source file."
30
+ return path
31
+ else
32
+ searched_paths << path
33
+ end
34
+ end
35
+
36
+ raise SourceNotFoundError, "source file is not found (searched paths: #{searched_paths.join(', ')})"
37
+ else
38
+ ::File.expand_path(attributes.source, @recipe.dir)
39
+ end
40
+ end
41
+
42
+ def source_file_dir
43
+ "files"
44
+ end
45
+
46
+ def source_file_ext
47
+ ""
13
48
  end
14
49
  end
15
50
  end
@@ -4,17 +4,29 @@ require 'tempfile'
4
4
 
5
5
  module Itamae
6
6
  module Resource
7
- class Template < File
8
- define_attribute :source, type: String, required: true
7
+ class Template < RemoteFile
9
8
  define_attribute :variables, type: Hash, default: {}
10
9
 
11
10
  def pre_action
12
- src = ::File.expand_path(attributes.source, ::File.dirname(@recipe.path))
13
- attributes.content = RenderContext.new(self).render_file(src)
11
+ attributes.content = RenderContext.new(self).render_file(source_file)
14
12
 
15
13
  super
16
14
  end
17
15
 
16
+ private
17
+
18
+ def content_file
19
+ nil
20
+ end
21
+
22
+ def source_file_dir
23
+ "templates"
24
+ end
25
+
26
+ def source_file_ext
27
+ ".erb"
28
+ end
29
+
18
30
  class RenderContext
19
31
  def initialize(resource)
20
32
  @resource = resource
@@ -1 +1 @@
1
- 1.1.19
1
+ 1.1.20
@@ -22,9 +22,11 @@ describe package('resolvconf') do
22
22
  it { should_not be_installed }
23
23
  end
24
24
 
25
- describe file('/tmp/remote_file') do
26
- it { should be_file }
27
- its(:content) { should match(/Hello Itamae/) }
25
+ %w!/tmp/remote_file /tmp/remote_file_auto!.each do |f|
26
+ describe file(f) do
27
+ it { should be_file }
28
+ its(:content) { should match(/Hello Itamae/) }
29
+ end
28
30
  end
29
31
 
30
32
  describe file('/tmp/directory') do
@@ -34,12 +36,14 @@ describe file('/tmp/directory') do
34
36
  it { should be_grouped_into "itamae" }
35
37
  end
36
38
 
37
- describe file('/tmp/template') do
38
- it { should be_file }
39
- its(:content) { should match(/Hello/) }
40
- its(:content) { should match(/Good bye/) }
41
- its(:content) { should match(/^total memory: \d+kB$/) }
42
- its(:content) { should match(/^uninitialized node key: $/) }
39
+ %w!/tmp/template /tmp/template_auto!.each do |f|
40
+ describe file(f) do
41
+ it { should be_file }
42
+ its(:content) { should match(/Hello/) }
43
+ its(:content) { should match(/Good bye/) }
44
+ its(:content) { should match(/^total memory: \d+kB$/) }
45
+ its(:content) { should match(/^uninitialized node key: $/) }
46
+ end
43
47
  end
44
48
 
45
49
  describe file('/tmp/file') do
@@ -85,6 +85,12 @@ remote_file "/tmp/remote_file" do
85
85
  source "hello.txt"
86
86
  end
87
87
 
88
+ remote_file "/tmp/remote_file_auto" do
89
+ source :auto
90
+ end
91
+
92
+ ######
93
+
88
94
  directory "/tmp/directory" do
89
95
  mode "700"
90
96
  owner "itamae"
@@ -96,6 +102,11 @@ template "/tmp/template" do
96
102
  variables(goodbye: "Good bye")
97
103
  end
98
104
 
105
+ template "/tmp/template_auto" do
106
+ source :auto
107
+ variables(goodbye: "Good bye")
108
+ end
109
+
99
110
  file "/tmp/file" do
100
111
  content "Hello World"
101
112
  mode "777"
@@ -0,0 +1 @@
1
+ Hello Itamae
@@ -0,0 +1,6 @@
1
+ <%= node['greeting'] %>
2
+ <%= @goodbye %>
3
+
4
+ total memory: <%= node['memory']['total'] %>
5
+
6
+ uninitialized node key: <%= node['un-initialized'] %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itamae
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.19
4
+ version: 1.1.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryota Arai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-09 00:00:00.000000000 Z
11
+ date: 2015-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -189,11 +189,13 @@ files:
189
189
  - spec/integration/default_spec.rb
190
190
  - spec/integration/recipes/default.rb
191
191
  - spec/integration/recipes/default2.rb
192
+ - spec/integration/recipes/files/remote_file_auto
192
193
  - spec/integration/recipes/hello.erb
193
194
  - spec/integration/recipes/hello.txt
194
195
  - spec/integration/recipes/included.rb
195
196
  - spec/integration/recipes/node.json
196
197
  - spec/integration/recipes/redefine.rb
198
+ - spec/integration/recipes/templates/template_auto.erb
197
199
  - spec/integration/spec_helper.rb
198
200
  - spec/unit/lib/itamae/config_spec.rb
199
201
  - spec/unit/lib/itamae/logger_spec.rb
@@ -233,11 +235,13 @@ test_files:
233
235
  - spec/integration/default_spec.rb
234
236
  - spec/integration/recipes/default.rb
235
237
  - spec/integration/recipes/default2.rb
238
+ - spec/integration/recipes/files/remote_file_auto
236
239
  - spec/integration/recipes/hello.erb
237
240
  - spec/integration/recipes/hello.txt
238
241
  - spec/integration/recipes/included.rb
239
242
  - spec/integration/recipes/node.json
240
243
  - spec/integration/recipes/redefine.rb
244
+ - spec/integration/recipes/templates/template_auto.erb
241
245
  - spec/integration/spec_helper.rb
242
246
  - spec/unit/lib/itamae/config_spec.rb
243
247
  - spec/unit/lib/itamae/logger_spec.rb