Skip to content

Commit

Permalink
Merge pull request #59 from RoboticCheese/jdh-assorted-updates
Browse files Browse the repository at this point in the history
Update to Chef 12-style provider resolution
  • Loading branch information
hartmantis committed Jan 14, 2016
2 parents 8f7d694 + 809ba2f commit ae82f33
Show file tree
Hide file tree
Showing 14 changed files with 136 additions and 130 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ Chef-DK Cookbook CHANGELOG

v?.?.? (????-??-??)
-------------------
* Update to modern provider resolution (breaking compatibility with Chef < 12)

v3.1.0 (2015-06-03)
-------------------
Expand Down
2 changes: 2 additions & 0 deletions libraries/provider_chef_dk_debian.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ class ChefDk < Provider
#
# @author Jonathan Hartman <j@p4nt5.com>
class Debian < ChefDk
provides :chef_dk, platform_family: 'debian'

private

#
Expand Down
1 change: 1 addition & 0 deletions libraries/provider_chef_dk_fedora.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class ChefDk < Provider
#
# @author Jonathan Hartman <j@p4nt5.com>
class Fedora < ChefDk::Rhel
provides :chef_dk, platform: 'fedora'
end
end
end
Expand Down
2 changes: 2 additions & 0 deletions libraries/provider_chef_dk_mac_os_x.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ class ChefDk < Provider
#
# @author Jonathan Hartman <j@p4nt5.com>
class MacOsX < ChefDk
provides :chef_dk, platform_family: 'mac_os_x'

private

#
Expand Down
2 changes: 2 additions & 0 deletions libraries/provider_chef_dk_rhel.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ class ChefDk < Provider
#
# @author Jonathan Hartman <j@p4nt5.com>
class Rhel < ChefDk
provides :chef_dk, platform_family: 'rhel'

private

#
Expand Down
7 changes: 3 additions & 4 deletions libraries/provider_chef_dk_windows.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,7 @@
#

require 'chef/provider'
# Core Chef didn't get the windows_package resource until 11.12.0
if Gem::Version.new(Chef::VERSION) >= Gem::Version.new('11.12.0')
require 'chef/resource/windows_package'
end
require 'chef/resource/windows_package'
require_relative 'provider_chef_dk'
require_relative 'resource_chef_dk'

Expand All @@ -33,6 +30,8 @@ class ChefDk < Provider
#
# @author Jonathan Hartman <j@p4nt5.com>
class Windows < ChefDk
provides :chef_dk, platform_family: 'windows'

private

#
Expand Down
12 changes: 0 additions & 12 deletions libraries/resource_chef_dk.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ class ChefDk < Resource
def initialize(name, run_context = nil)
super
@resource_name = :chef_dk
@provider = determine_provider
@action = :install
@allowed_actions = [:install, :remove]

Expand Down Expand Up @@ -122,17 +121,6 @@ def global_shell_init(arg = nil)

private

#
# Determine what provider is to be used for this platform
#
# @return [Class]
#
def determine_provider
return nil unless node && node['platform_family']
Chef::Provider::ChefDk.const_get(node['platform_family'].split('_')
.map(&:capitalize).join)
end

#
# Determine whether string is a valid package version
#
Expand Down
2 changes: 1 addition & 1 deletion recipes/default.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# limitations under the License.
#

chef_dk 'chef_dk' do
Expand Down
37 changes: 24 additions & 13 deletions spec/libraries/provider_chef_dk_debian_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,31 @@
require_relative '../../libraries/provider_chef_dk_debian'

describe Chef::Provider::ChefDk::Debian do
let(:platform) { {} }
let(:chefdk_version) { nil }
let(:package_url) { nil }
let(:new_resource) do
double(name: 'my_chef_dk',
version: chefdk_version,
package_url: package_url)
end
let(:provider) { described_class.new(new_resource, nil) }
let(:name) { 'default' }
let(:run_context) { ChefSpec::SoloRunner.new.converge.run_context }
let(:new_resource) { Chef::Resource::ChefDk.new(name, run_context) }
let(:provider) { described_class.new(new_resource, run_context) }

describe '.provides?' do
let(:platform) { nil }
let(:node) { ChefSpec::Macros.stub_node('node.example', platform) }
let(:res) { described_class.provides?(node, new_resource) }

before(:each) do
allow_any_instance_of(described_class).to receive(:node).and_return(
Fauxhai.mock(platform).data
)
context 'Debian' do
let(:platform) { { platform: 'debian', version: '7.6' } }

it 'returns true' do
expect(res).to eq(true)
end
end

context 'Ubuntu' do
let(:platform) { { platform: 'ubuntu', version: '14.04' } }

it 'returns true' do
expect(res).to eq(true)
end
end
end

describe '#package_provider_class' do
Expand Down
37 changes: 24 additions & 13 deletions spec/libraries/provider_chef_dk_fedora_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,31 @@
require_relative '../../libraries/provider_chef_dk_fedora'

describe Chef::Provider::ChefDk::Fedora do
let(:platform) { {} }
let(:chefdk_version) { nil }
let(:package_url) { nil }
let(:new_resource) do
double(name: 'my_chef_dk',
version: chefdk_version,
package_url: package_url)
end
let(:provider) { described_class.new(new_resource, nil) }
let(:name) { 'default' }
let(:run_context) { ChefSpec::SoloRunner.new.converge.run_context }
let(:new_resource) { Chef::Resource::ChefDk.new(name, run_context) }
let(:provider) { described_class.new(new_resource, run_context) }

describe '.provides?' do
let(:platform) { nil }
let(:node) { ChefSpec::Macros.stub_node('node.example', platform) }
let(:res) { described_class.provides?(node, new_resource) }

before(:each) do
allow_any_instance_of(described_class).to receive(:node).and_return(
Fauxhai.mock(platform).data
)
context 'Fedora' do
let(:platform) { { platform: 'fedora', version: '22' } }

it 'returns true' do
expect(res).to eq(true)
end
end

context 'CentOS' do
let(:platform) { { platform: 'centos', version: '7.0' } }

it 'returns false' do
expect(res).to eq(false)
end
end
end

describe '#package_provider_class' do
Expand Down
45 changes: 28 additions & 17 deletions spec/libraries/provider_chef_dk_mac_os_x_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,42 @@
require_relative '../../libraries/provider_chef_dk_mac_os_x'

describe Chef::Provider::ChefDk::MacOsX do
let(:platform) { {} }
let(:chefdk_version) { nil }
let(:package_url) { nil }
let(:new_resource) do
double(name: 'my_chef_dk',
version: chefdk_version,
package_url: package_url)
end
let(:filename) { 'chefdk-0.2.2-1.dmg' }
let(:provider) { described_class.new(new_resource, nil) }

before(:each) do
allow_any_instance_of(described_class).to receive(:node)
.and_return(Fauxhai.mock(platform).data)
allow_any_instance_of(described_class).to receive(:filename)
.and_return(filename)
let(:name) { 'default' }
let(:run_context) { ChefSpec::SoloRunner.new.converge.run_context }
let(:new_resource) { Chef::Resource::ChefDk.new(name, run_context) }
let(:provider) { described_class.new(new_resource, run_context) }

describe '.provides?' do
let(:platform) { nil }
let(:node) { ChefSpec::Macros.stub_node('node.example', platform) }
let(:res) { described_class.provides?(node, new_resource) }

context 'Mac OS X' do
let(:platform) { { platform: 'mac_os_x', version: '10.10' } }

it 'returns true' do
expect(res).to eq(true)
end
end

context 'Ubuntu' do
let(:platform) { { platform: 'ubuntu', version: '14.04' } }

it 'returns false' do
expect(res).to eq(false)
end
end
end

describe '#tailor_package_resource_to_platform' do
let(:filename) { 'chefdk-0.2.2-1.dmg' }
let(:package) do
double(app: true,
volumes_dir: true,
source: true,
type: true,
package_id: true)
end

let(:provider) do
p = described_class.new(new_resource, nil)
p.instance_variable_set(:@package, package)
Expand All @@ -39,6 +48,8 @@
let(:res) { provider.send(:tailor_package_resource_to_platform) }

before(:each) do
allow_any_instance_of(described_class).to receive(:filename)
.and_return(filename)
allow_any_instance_of(described_class).to receive(:download_path)
.and_return('/tmp/blah.pkg')
end
Expand Down
37 changes: 24 additions & 13 deletions spec/libraries/provider_chef_dk_rhel_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,31 @@
require_relative '../../libraries/provider_chef_dk_rhel'

describe Chef::Provider::ChefDk::Rhel do
let(:platform) { {} }
let(:chefdk_version) { nil }
let(:package_url) { nil }
let(:new_resource) do
double(name: 'my_chef_dk',
version: chefdk_version,
package_url: package_url)
end
let(:provider) { described_class.new(new_resource, nil) }
let(:name) { 'default' }
let(:run_context) { ChefSpec::SoloRunner.new.converge.run_context }
let(:new_resource) { Chef::Resource::ChefDk.new(name, run_context) }
let(:provider) { described_class.new(new_resource, run_context) }

describe '.provides?' do
let(:platform) { nil }
let(:node) { ChefSpec::Macros.stub_node('node.example', platform) }
let(:res) { described_class.provides?(node, new_resource) }

before(:each) do
allow_any_instance_of(described_class).to receive(:node).and_return(
Fauxhai.mock(platform).data
)
context 'Red Hat' do
let(:platform) { { platform: 'redhat', version: '7.0' } }

it 'returns true' do
expect(res).to eq(true)
end
end

context 'CentOS' do
let(:platform) { { platform: 'centos', version: '7.0' } }

it 'returns true' do
expect(res).to eq(true)
end
end
end

describe '#package_provider_class' do
Expand Down
38 changes: 24 additions & 14 deletions spec/libraries/provider_chef_dk_windows_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,31 @@
require_relative '../../libraries/provider_chef_dk_windows'

describe Chef::Provider::ChefDk::Windows do
let(:platform) { {} }
let(:chefdk_version) { nil }
let(:package_url) { nil }
let(:new_resource) do
double(name: 'my_chef_dk',
version: chefdk_version,
package_url: package_url)
end
let(:provider) { described_class.new(new_resource, nil) }
let(:name) { 'default' }
let(:run_context) { ChefSpec::SoloRunner.new.converge.run_context }
let(:new_resource) { Chef::Resource::ChefDk.new(name, run_context) }
let(:provider) { described_class.new(new_resource, run_context) }

describe '.provides?' do
let(:platform) { nil }
let(:node) { ChefSpec::Macros.stub_node('node.example', platform) }
let(:res) { described_class.provides?(node, new_resource) }

before(:each) do
allow_any_instance_of(described_class).to receive(:node).and_return(
Fauxhai.mock(platform).data
)
stub_const('::File::ALT_SEPARATOR', '\\')
context 'Windows' do
let(:platform) { { platform: 'windows', version: '2012R2' } }

it 'returns true' do
expect(res).to eq(true)
end
end

context 'Ubuntu' do
let(:platform) { { platform: 'ubuntu', version: '14.04' } }

it 'returns false' do
expect(res).to eq(false)
end
end
end

describe '#tailor_package_resource_to_platform' do
Expand Down

0 comments on commit ae82f33

Please sign in to comment.