knife-solo_data_bag 0.3.2 → 0.4.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.
data/CHANGELOG.md CHANGED
@@ -1,9 +1,13 @@
1
1
  ## head
2
2
 
3
- ## 0.3.2 (04/06/2012)
3
+ # 0.4.0 (05/30/2013)
4
+ * Add support for creating a data bag item from a json file (--json-file) ([@joeyates](https://github.com/joeyates))
5
+ * Add support for specifying the data bag path on the command line (--data-bag-path) ([@ToQoz](https://github.com/ToQoz))
6
+
7
+ ## 0.3.2 (04/06/2013)
4
8
  * Send warning about overriding secret in knife.rb to STDERR instead of STDOUT (props to BK Box @gondoi)
5
9
 
6
- ## 0.3.1 (01/11/2012)
10
+ ## 0.3.1 (01/11/2013)
7
11
  * Write pretty json to disk (addresses #1)
8
12
 
9
13
  ## 0.3.0 (11/08/2012)
@@ -20,4 +24,3 @@
20
24
 
21
25
  ## 0.1.0 (05/17/2012)
22
26
  * Initial release
23
-
data/README.md CHANGED
@@ -30,6 +30,10 @@ Create a data bag item with JSON from the command line (works with encryption)
30
30
 
31
31
  $ knife solo data bag create apps app_1 --json '{"id": "app_1", "username": "bob"}'
32
32
 
33
+ Create a data bag item from a json file
34
+
35
+ $ knife solo data bag create apps app_1 --json-file foo.json
36
+
33
37
  ### Edit
34
38
  Edit a plain text data bag
35
39
 
@@ -66,10 +70,13 @@ You can also display any of the above variations in JSON format with `-F json`
66
70
  $ knife solo data bag show apps app_1 -s secret_key -F json
67
71
 
68
72
  ## Notes
69
- This plugin will rely on the configured data_bag_path for placement of the data
70
- bags. This defaults to '/var/chef/data_bags', but can be overriden in your chef
71
- client config.
73
+ ### Data Bag Path
74
+ By default, this plugin will use the configured data_bag_path. This is
75
+ defaulted to `/var/chef/data_bags` by Chef. It is possible to override this
76
+ path in your Chef client config if desired. When using this plugin, it is also
77
+ possible to override the path using the `--data-bag-path` argument.
72
78
 
79
+ ### Encrypted Data Bag Secret
73
80
  This plugin respects the "encrypted_data_bag_secret" configuration option in
74
81
  knife.rb. Command line secret arguments (-s or --secret-file) will override the
75
82
  setting in knife.rb.
@@ -12,6 +12,10 @@ module KnifeSoloDataBag
12
12
  end
13
13
 
14
14
  def bags_path
15
+ if config[:data_bag_path]
16
+ Chef::Config[:data_bag_path] = config[:data_bag_path]
17
+ end
18
+
15
19
  Chef::Config[:data_bag_path]
16
20
  end
17
21
 
@@ -26,6 +26,14 @@ module KnifeSoloDataBag
26
26
  :long => '--json JSON_STRING',
27
27
  :description => 'The data bag json string that can be passed at the CLI'
28
28
 
29
+ option :json_file,
30
+ :long => '--json-file JSON_FILE',
31
+ :description => 'A file contining the data bag json string'
32
+
33
+ option :data_bag_path,
34
+ :long => '--data-bag-path DATA_BAG_PATH',
35
+ :description => 'The path to data bag'
36
+
29
37
  def run
30
38
  @bag_name, @item_name = @name_args
31
39
  ensure_valid_arguments
@@ -45,12 +53,16 @@ module KnifeSoloDataBag
45
53
 
46
54
  def create_item_object
47
55
  item = nil
48
- if config[:json_string].nil?
56
+ case
57
+ when config[:json_string]
58
+ item = Chef::DataBagItem.from_hash bag_item_content(convert_json_string)
59
+ when config[:json_file]
60
+ json_string = JSON.parse(File.read(config[:json_file]))
61
+ item = Chef::DataBagItem.from_hash bag_item_content(json_string)
62
+ else
49
63
  create_object({'id' => item_name}, "data_bag_item[#{item_name}]") do |output|
50
64
  item = Chef::DataBagItem.from_hash bag_item_content(output)
51
65
  end
52
- else
53
- item = Chef::DataBagItem.from_hash bag_item_content(convert_json_string)
54
66
  end
55
67
  item
56
68
  end
@@ -20,6 +20,10 @@ module KnifeSoloDataBag
20
20
  :long => '--secret-file SECRET_FILE',
21
21
  :description => 'A file containing the secret key to use to encrypt data bag item values'
22
22
 
23
+ option :data_bag_path,
24
+ :long => '--data-bag-path DATA_BAG_PATH',
25
+ :description => 'The path to data bag'
26
+
23
27
  def run
24
28
  Chef::Config[:solo] = true
25
29
  @bag_name, @item_name = @name_args
@@ -11,6 +11,10 @@ module KnifeSoloDataBag
11
11
 
12
12
  attr_reader :bag_name
13
13
 
14
+ option :data_bag_path,
15
+ :long => '--data-bag-path DATA_BAG_PATH',
16
+ :description => 'The path to data bag'
17
+
14
18
  def run
15
19
  ensure_valid_arguments
16
20
  output format_for_display(bags)
@@ -20,6 +20,10 @@ module KnifeSoloDataBag
20
20
  :long => '--secret-file SECRET_FILE',
21
21
  :description => 'A file containing the secret key to use to encrypt data bag item values'
22
22
 
23
+ option :data_bag_path,
24
+ :long => '--data-bag-path DATA_BAG_PATH',
25
+ :description => 'The path to data bag'
26
+
23
27
  def run
24
28
  Chef::Config[:solo] = true
25
29
  @bag_name, @item_name = @name_args
@@ -1,5 +1,5 @@
1
1
  module Knife
2
2
  module SoloDataBag
3
- VERSION = '0.3.2'
3
+ VERSION = '0.4.0'
4
4
  end
5
5
  end
@@ -49,6 +49,20 @@ describe KnifeSoloDataBag::SoloDataBagCreate do
49
49
  JSON.parse(File.read(@item_path)).raw_data.should == @input_data
50
50
  end
51
51
 
52
+ context 'with --data-bag-path' do
53
+ before do
54
+ @override_bags_path = '/opt/bags'
55
+ @override_bag_path = "#{@override_bags_path}/bag_1"
56
+ @knife.config[:data_bag_path] = @override_bags_path
57
+ FileUtils.mkdir_p @override_bags_path
58
+ end
59
+
60
+ it 'uses the data bag path from the override' do
61
+ @knife.run
62
+ File.directory?(@override_bag_path).should be_true
63
+ end
64
+ end
65
+
52
66
  context 'when encrypting with -s or --secret' do
53
67
  before do
54
68
  @knife.name_args << 'bar'
@@ -181,6 +195,22 @@ describe KnifeSoloDataBag::SoloDataBagCreate do
181
195
  end
182
196
  end
183
197
 
198
+ context 'when also specifying a json file' do
199
+ before do
200
+ @knife.name_args << 'bar'
201
+ @json_path = '/var/chef/my_bag.json'
202
+ @knife.config[:json_file] = @json_path
203
+ @input_data = {'id' => 'foo', 'sub' => {'key_1' => 'value_1', 'key_2' => 'value_2'}}
204
+ @item_path = "#{@bag_path}/bar.json"
205
+ File.open(@json_path, 'w') { |f| f.write @input_data.to_json }
206
+ end
207
+
208
+ it 'creates the data bag item' do
209
+ @knife.run
210
+ JSON.parse(File.read(@item_path)).raw_data.should == @input_data
211
+ end
212
+ end
213
+
184
214
  end
185
215
 
186
216
  end
@@ -72,6 +72,22 @@ describe KnifeSoloDataBag::SoloDataBagEdit do
72
72
  })
73
73
  end
74
74
 
75
+ context 'with --data-bag-path' do
76
+ before do
77
+ @override_bags_path = '/opt/bags'
78
+ @override_bag_path = "#{@override_bags_path}/bag_1"
79
+ @override_item_path = "#{@override_bag_path}/foo.json"
80
+ @knife.config[:data_bag_path] = @override_bags_path
81
+ FileUtils.mkdir_p @override_bag_path
82
+ end
83
+
84
+ it 'uses the data bag path from the override' do
85
+ @knife.run
86
+ data = JSON.parse(File.read(@override_item_path)).raw_data
87
+ data.should == @updated_data
88
+ end
89
+ end
90
+
75
91
  context 'when encrypting with -s or --secret' do
76
92
  before do
77
93
  @knife.config[:secret] = 'secret_key'
@@ -33,6 +33,22 @@ describe KnifeSoloDataBag::SoloDataBagList do
33
33
  @stdout.string.should match /bag_1/
34
34
  @stdout.string.should match /bag_2/
35
35
  end
36
+
37
+ context 'with --data-bag-path' do
38
+ before do
39
+ @bags_path = '/opt/bags'
40
+ FileUtils.mkdir_p @bags_path
41
+ @bags.each { |b| FileUtils.mkdir_p "#{@bags_path}/#{b}-opt" }
42
+ @knife.config[:data_bag_path] = @bags_path
43
+ end
44
+
45
+ it 'should list all of the data bags' do
46
+ @knife.run
47
+ @stdout.string.should match /bag_1-opt/
48
+ @stdout.string.should match /bag_2-opt/
49
+ end
50
+ end
51
+
36
52
  end
37
53
 
38
54
  end
@@ -43,6 +43,22 @@ describe KnifeSoloDataBag::SoloDataBagShow do
43
43
  @stdout.string.should match /foo/
44
44
  @stdout.string.should match /bar/
45
45
  end
46
+
47
+ context 'with --data-bag-path' do
48
+ before do
49
+ @bags_path = '/opt/bags'
50
+ @bag_path = "#{@bags_path}/bag_1"
51
+ FileUtils.mkdir_p @bag_path
52
+ @knife.config[:data_bag_path] = @bags_path
53
+ end
54
+
55
+ it 'uses the data bag path from the override' do
56
+ @knife.run
57
+ @stdout.string.should match /foo/
58
+ @stdout.string.should match /bar/
59
+ end
60
+ end
61
+
46
62
  end
47
63
 
48
64
  context 'when also specifying an item' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-solo_data_bag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-06 00:00:00.000000000Z
12
+ date: 2013-05-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chef
16
- requirement: &70207628947780 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 0.10.10
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70207628947780
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.10.10
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rake
27
- requirement: &70207628947360 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70207628947360
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rspec
38
- requirement: &70207628975220 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 2.10.0
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70207628975220
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.10.0
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: fakefs
49
- requirement: &70207628974720 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ~>
@@ -54,7 +69,12 @@ dependencies:
54
69
  version: 0.4.0
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70207628974720
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.4.0
58
78
  description: A knife plugin for working with data bags and chef solo
59
79
  email:
60
80
  - bishop.thomas@gmail.com
@@ -103,15 +123,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
123
  - - ! '>='
104
124
  - !ruby/object:Gem::Version
105
125
  version: '0'
126
+ segments:
127
+ - 0
128
+ hash: -422012811052713416
106
129
  required_rubygems_version: !ruby/object:Gem::Requirement
107
130
  none: false
108
131
  requirements:
109
132
  - - ! '>='
110
133
  - !ruby/object:Gem::Version
111
134
  version: '0'
135
+ segments:
136
+ - 0
137
+ hash: -422012811052713416
112
138
  requirements: []
113
139
  rubyforge_project:
114
- rubygems_version: 1.8.15
140
+ rubygems_version: 1.8.24
115
141
  signing_key:
116
142
  specification_version: 3
117
143
  summary: A knife plugin for working with data bags and chef solo