knife-solo_data_bag 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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