cheffish 0.1

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 (39) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/README.md +4 -0
  4. data/Rakefile +23 -0
  5. data/lib/chef/provider/chef_client.rb +44 -0
  6. data/lib/chef/provider/chef_data_bag.rb +50 -0
  7. data/lib/chef/provider/chef_data_bag_item.rb +273 -0
  8. data/lib/chef/provider/chef_environment.rb +78 -0
  9. data/lib/chef/provider/chef_node.rb +82 -0
  10. data/lib/chef/provider/chef_role.rb +79 -0
  11. data/lib/chef/provider/chef_user.rb +48 -0
  12. data/lib/chef/provider/private_key.rb +160 -0
  13. data/lib/chef/provider/public_key.rb +83 -0
  14. data/lib/chef/resource/chef_client.rb +44 -0
  15. data/lib/chef/resource/chef_data_bag.rb +18 -0
  16. data/lib/chef/resource/chef_data_bag_item.rb +114 -0
  17. data/lib/chef/resource/chef_environment.rb +71 -0
  18. data/lib/chef/resource/chef_node.rb +18 -0
  19. data/lib/chef/resource/chef_role.rb +104 -0
  20. data/lib/chef/resource/chef_user.rb +51 -0
  21. data/lib/chef/resource/in_parallel.rb +6 -0
  22. data/lib/chef/resource/private_key.rb +39 -0
  23. data/lib/chef/resource/public_key.rb +16 -0
  24. data/lib/cheffish.rb +245 -0
  25. data/lib/cheffish/actor_provider_base.rb +120 -0
  26. data/lib/cheffish/chef_provider_base.rb +222 -0
  27. data/lib/cheffish/cheffish_server_api.rb +21 -0
  28. data/lib/cheffish/inline_resource.rb +88 -0
  29. data/lib/cheffish/key_formatter.rb +93 -0
  30. data/lib/cheffish/recipe_dsl.rb +98 -0
  31. data/lib/cheffish/version.rb +4 -0
  32. data/spec/integration/chef_client_spec.rb +48 -0
  33. data/spec/integration/chef_node_spec.rb +75 -0
  34. data/spec/integration/chef_user_spec.rb +48 -0
  35. data/spec/integration/private_key_spec.rb +356 -0
  36. data/spec/integration/recipe_dsl_spec.rb +29 -0
  37. data/spec/support/key_support.rb +29 -0
  38. data/spec/support/spec_support.rb +148 -0
  39. metadata +124 -0
@@ -0,0 +1,29 @@
1
+ require 'support/spec_support'
2
+ require 'chef/resource/chef_node'
3
+ require 'chef/provider/chef_node'
4
+ require 'tmpdir'
5
+
6
+ describe 'Cheffish Recipe DSL' do
7
+ extend SpecSupport
8
+
9
+ context 'when we include with_chef_local_server' do
10
+ before :each do
11
+ @tmp_repo = tmp_repo = Dir.mktmpdir('chef_repo')
12
+ run_recipe do
13
+ with_chef_local_server :chef_repo_path => tmp_repo
14
+ end
15
+ end
16
+
17
+ after :each do
18
+ FileUtils.remove_entry_secure @tmp_repo
19
+ end
20
+
21
+ it 'chef_nodes get put into said server' do
22
+ run_recipe do
23
+ chef_node 'blah'
24
+ end
25
+ chef_run.should have_updated 'chef_node[blah]', :create
26
+ File.should exist("#{@tmp_repo}/nodes/blah.json")
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ RSpec::Matchers.define :be_public_key_for do |private_key, pass_phrase|
2
+ match do |public_key|
3
+ if public_key.is_a?(String)
4
+ public_key, public_key_format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(public_key)), pass_phrase, public_key)
5
+ end
6
+ if private_key.is_a?(String)
7
+ private_key, private_key_format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(private_key)), pass_phrase, private_key)
8
+ end
9
+
10
+ encrypted = public_key.public_encrypt('hi there')
11
+ private_key.private_decrypt(encrypted).should == 'hi there'
12
+ end
13
+ end
14
+
15
+ RSpec::Matchers.define :match_private_key do |expected, pass_phrase|
16
+ match do |actual|
17
+ if expected.is_a?(String)
18
+ expected, format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(expected)), pass_phrase, expected)
19
+ end
20
+ if actual.is_a?(String)
21
+ actual, format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(actual)), pass_phrase, actual)
22
+ end
23
+
24
+ encrypted = actual.public_encrypt('hi there')
25
+ expected.private_decrypt(encrypted).should == 'hi there'
26
+ encrypted = expected.public_encrypt('hi there')
27
+ actual.private_decrypt(encrypted).should == 'hi there'
28
+ end
29
+ end
@@ -0,0 +1,148 @@
1
+ require 'chef_zero/rspec'
2
+ require 'chef/recipe'
3
+ require 'chef/run_context'
4
+ require 'chef/event_dispatch/dispatcher'
5
+ require 'chef/cookbook/cookbook_collection'
6
+ require 'chef/runner'
7
+ require 'chef/server_api'
8
+ require 'cheffish'
9
+
10
+ module SpecSupport
11
+ include ChefZero::RSpec
12
+
13
+ def self.extended(klass)
14
+ klass.class_eval do
15
+ def get(*args)
16
+ Chef::ServerAPI.new.get(*args)
17
+ end
18
+
19
+ def chef_run
20
+ @event_sink.events
21
+ end
22
+
23
+ def run_recipe(&block)
24
+ node = Chef::Node.new
25
+ node.name 'test'
26
+ node.automatic[:platform] = 'test'
27
+ node.automatic[:platform_version] = 'test'
28
+ @event_sink ||= EventSink.new
29
+ run_context = Chef::RunContext.new(node, {}, Chef::EventDispatch::Dispatcher.new(@event_sink))
30
+ recipe = Chef::Recipe.new('test', 'test', run_context)
31
+ recipe.instance_eval(&block)
32
+ Chef::Runner.new(run_context).converge
33
+ end
34
+ end
35
+ end
36
+
37
+ def with_recipe(&block)
38
+ before :each do
39
+ run_recipe(&block)
40
+ end
41
+ end
42
+
43
+ class EventSink
44
+ def initialize
45
+ @events = []
46
+ end
47
+
48
+ attr_reader :events
49
+
50
+ def method_missing(method, *args)
51
+ @events << [ method, *args ]
52
+ end
53
+ end
54
+ end
55
+
56
+ RSpec::Matchers.define :have_updated do |resource_name, *expected_actions|
57
+ match do |actual|
58
+ actual_actions = actual.select { |event, resource, action| event == :resource_updated && resource.to_s == resource_name }.map { |event, resource, action| action }
59
+ actual_actions.should == expected_actions
60
+ end
61
+ failure_message_for_should do |actual|
62
+ updates = actual.select { |event, resource, action| event == :resource_updated }.to_a
63
+ result = "expected that the chef_run would #{expected_actions.join(',')} #{resource_name}."
64
+ if updates.size > 0
65
+ result << " Actual updates were #{updates.map { |event, resource, action| "#{resource.to_s} => #{action.inspect}" }.join(', ')}"
66
+ else
67
+ result << " Nothing was updated."
68
+ end
69
+ result
70
+ end
71
+ end
72
+
73
+ RSpec.configure do |config|
74
+ config.filter_run :focus => true
75
+ config.run_all_when_everything_filtered = true
76
+ config.treat_symbols_as_metadata_keys_with_true_values = true
77
+
78
+ config.before :each do
79
+ Chef::Config.reset
80
+ Cheffish.reset
81
+ end
82
+ end
83
+
84
+ # Stuff that should have been required in Chef, but wasn't (Chef will be fixed)
85
+ require 'chef/platform'
86
+
87
+ require 'chef/provider/service/simple'
88
+ require 'chef/provider/service/init'
89
+
90
+ require 'chef/provider/cron'
91
+ require 'chef/provider/cron/aix'
92
+ require 'chef/provider/cron/solaris'
93
+ require 'chef/provider/directory'
94
+ require 'chef/provider/env/windows'
95
+ require 'chef/provider/erl_call'
96
+ require 'chef/provider/execute'
97
+ require 'chef/provider/file'
98
+ require 'chef/provider/group/aix'
99
+ require 'chef/provider/group/dscl'
100
+ require 'chef/provider/group/gpasswd'
101
+ require 'chef/provider/group/groupmod'
102
+ require 'chef/provider/group/pw'
103
+ require 'chef/provider/group/suse'
104
+ require 'chef/provider/group/usermod'
105
+ require 'chef/provider/group/windows'
106
+ require 'chef/provider/http_request'
107
+ require 'chef/provider/ifconfig'
108
+ require 'chef/provider/ifconfig/aix'
109
+ require 'chef/provider/ifconfig/debian'
110
+ require 'chef/provider/ifconfig/redhat'
111
+ require 'chef/provider/link'
112
+ require 'chef/provider/log'
113
+ require 'chef/provider/mdadm'
114
+ require 'chef/provider/mount/aix'
115
+ require 'chef/provider/mount/mount'
116
+ require 'chef/provider/mount/windows'
117
+ require 'chef/provider/package/aix'
118
+ require 'chef/provider/package/apt'
119
+ require 'chef/provider/package/freebsd'
120
+ require 'chef/provider/package/ips'
121
+ require 'chef/provider/package/macports'
122
+ require 'chef/provider/package/pacman'
123
+ require 'chef/provider/package/portage'
124
+ require 'chef/provider/package/solaris'
125
+ require 'chef/provider/package/smartos'
126
+ require 'chef/provider/package/yum'
127
+ require 'chef/provider/package/zypper'
128
+ require 'chef/provider/remote_directory'
129
+ require 'chef/provider/route'
130
+ require 'chef/provider/ruby_block'
131
+ require 'chef/provider/script'
132
+ require 'chef/provider/service/arch'
133
+ require 'chef/provider/service/debian'
134
+ require 'chef/provider/service/freebsd'
135
+ require 'chef/provider/service/gentoo'
136
+ require 'chef/provider/service/init'
137
+ require 'chef/provider/service/insserv'
138
+ require 'chef/provider/service/macosx'
139
+ require 'chef/provider/service/redhat'
140
+ require 'chef/provider/service/solaris'
141
+ require 'chef/provider/service/upstart'
142
+ require 'chef/provider/service/windows'
143
+ require 'chef/provider/template'
144
+ require 'chef/provider/user/dscl'
145
+ require 'chef/provider/user/pw'
146
+ require 'chef/provider/user/useradd'
147
+ require 'chef/provider/user/solaris'
148
+ require 'chef/provider/user/windows'
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cheffish
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - John Keiser
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: chef
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: A library to manipulate Chef in Chef.
56
+ email: jkeiser@opscode.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files:
60
+ - README.md
61
+ - LICENSE
62
+ files:
63
+ - Rakefile
64
+ - LICENSE
65
+ - README.md
66
+ - lib/chef/provider/chef_client.rb
67
+ - lib/chef/provider/chef_data_bag.rb
68
+ - lib/chef/provider/chef_data_bag_item.rb
69
+ - lib/chef/provider/chef_environment.rb
70
+ - lib/chef/provider/chef_node.rb
71
+ - lib/chef/provider/chef_role.rb
72
+ - lib/chef/provider/chef_user.rb
73
+ - lib/chef/provider/private_key.rb
74
+ - lib/chef/provider/public_key.rb
75
+ - lib/chef/resource/chef_client.rb
76
+ - lib/chef/resource/chef_data_bag.rb
77
+ - lib/chef/resource/chef_data_bag_item.rb
78
+ - lib/chef/resource/chef_environment.rb
79
+ - lib/chef/resource/chef_node.rb
80
+ - lib/chef/resource/chef_role.rb
81
+ - lib/chef/resource/chef_user.rb
82
+ - lib/chef/resource/in_parallel.rb
83
+ - lib/chef/resource/private_key.rb
84
+ - lib/chef/resource/public_key.rb
85
+ - lib/cheffish/actor_provider_base.rb
86
+ - lib/cheffish/chef_provider_base.rb
87
+ - lib/cheffish/cheffish_server_api.rb
88
+ - lib/cheffish/inline_resource.rb
89
+ - lib/cheffish/key_formatter.rb
90
+ - lib/cheffish/recipe_dsl.rb
91
+ - lib/cheffish/version.rb
92
+ - lib/cheffish.rb
93
+ - spec/integration/chef_client_spec.rb
94
+ - spec/integration/chef_node_spec.rb
95
+ - spec/integration/chef_user_spec.rb
96
+ - spec/integration/private_key_spec.rb
97
+ - spec/integration/recipe_dsl_spec.rb
98
+ - spec/support/key_support.rb
99
+ - spec/support/spec_support.rb
100
+ homepage: http://wiki.opscode.com/display/chef
101
+ licenses: []
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.0.3
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: A library to manipulate Chef in Chef.
123
+ test_files: []
124
+ has_rdoc: