mirror of
https://github.com/inspec/inspec
synced 2025-02-17 06:28:40 +00:00
Merge pull request #62 from chef/oneget
Merged change 6ec36404-484f-4856-83cf-785c960634bc From review branch oneget into master Signed-off-by: drichter <drichter@chef.io>
This commit is contained in:
commit
0753cc5022
5 changed files with 59 additions and 5 deletions
|
@ -1,4 +1,5 @@
|
||||||
# encoding: utf-8
|
# encoding: utf-8
|
||||||
|
# author: Christoph Hartmann
|
||||||
|
|
||||||
# This resource talks with OneGet (https://github.com/OneGet/oneget)
|
# This resource talks with OneGet (https://github.com/OneGet/oneget)
|
||||||
# Its part of Windows Management Framework 5.0 and part of Windows 10
|
# Its part of Windows Management Framework 5.0 and part of Windows 10
|
||||||
|
@ -12,6 +13,9 @@ class OneGetPackage < Vulcano.resource(1)
|
||||||
|
|
||||||
def initialize(package_name)
|
def initialize(package_name)
|
||||||
@package_name = package_name
|
@package_name = package_name
|
||||||
|
|
||||||
|
# verify that this resource is only supported on Windows
|
||||||
|
return skip_resource 'The `oneget` resource is not supported on your OS.' if vulcano.os[:family] != 'windows'
|
||||||
end
|
end
|
||||||
|
|
||||||
def info
|
def info
|
||||||
|
@ -19,6 +23,7 @@ class OneGetPackage < Vulcano.resource(1)
|
||||||
|
|
||||||
@info = {}
|
@info = {}
|
||||||
@info[:type] = 'oneget'
|
@info[:type] = 'oneget'
|
||||||
|
@info[:installed] = false
|
||||||
|
|
||||||
cmd = vulcano.run_command("Get-Package -Name '#{@package_name}' | ConvertTo-Json")
|
cmd = vulcano.run_command("Get-Package -Name '#{@package_name}' | ConvertTo-Json")
|
||||||
# cannot rely on exit code for now, successful command returns exit code 1
|
# cannot rely on exit code for now, successful command returns exit code 1
|
||||||
|
@ -27,13 +32,19 @@ class OneGetPackage < Vulcano.resource(1)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
pkgs = JSON.parse(cmd.stdout)
|
pkgs = JSON.parse(cmd.stdout)
|
||||||
|
@info[:installed] = true
|
||||||
|
|
||||||
|
# sometimes we get multiple values
|
||||||
|
if pkgs.is_a?(Array)
|
||||||
|
# select the first entry
|
||||||
|
pkgs = pkgs.first
|
||||||
|
end
|
||||||
rescue JSON::ParserError => _e
|
rescue JSON::ParserError => _e
|
||||||
return @info
|
return @info
|
||||||
end
|
end
|
||||||
|
|
||||||
@info[:name] = pkgs['Name']
|
@info[:name] = pkgs['Name'] if pkgs.key?('Name')
|
||||||
@info[:version] = pkgs['Version']
|
@info[:version] = pkgs['Version'] if pkgs.key?('Version')
|
||||||
@info[:installed] = true
|
|
||||||
@info
|
@info
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,8 @@ class MockLoader
|
||||||
'gem list --local -a -q ^rubocop$' => cmd.call('gem-list-local-a-q-rubocop'),
|
'gem list --local -a -q ^rubocop$' => cmd.call('gem-list-local-a-q-rubocop'),
|
||||||
'npm ls -g --json bower' => cmd.call('npm-ls-g--json-bower'),
|
'npm ls -g --json bower' => cmd.call('npm-ls-g--json-bower'),
|
||||||
'pip show jinja2' => cmd.call('pip-show-jinja2'),
|
'pip show jinja2' => cmd.call('pip-show-jinja2'),
|
||||||
"Get-Package -Name 'Mozilla Firefox' | ConvertTo-Json" => cmd.call('get-package'),
|
"Get-Package -Name 'Mozilla Firefox' | ConvertTo-Json" => cmd.call('get-package-firefox'),
|
||||||
|
"Get-Package -Name 'Ruby 2.1.6-p336-x64' | ConvertTo-Json" => cmd.call('get-package-ruby'),
|
||||||
"New-Object -Type PSObject | Add-Member -MemberType NoteProperty -Name Service -Value (Get-Service -Name dhcp| Select-Object -Property Name, DisplayName, Status) -PassThru | Add-Member -MemberType NoteProperty -Name WMI -Value (Get-WmiObject -Class Win32_Service | Where-Object {$_.Name -eq 'dhcp' -or $_.DisplayName -eq 'dhcp'} | Select-Object -Property StartMode) -PassThru | ConvertTo-Json" => cmd.call('get-service-dhcp'),
|
"New-Object -Type PSObject | Add-Member -MemberType NoteProperty -Name Service -Value (Get-Service -Name dhcp| Select-Object -Property Name, DisplayName, Status) -PassThru | Add-Member -MemberType NoteProperty -Name WMI -Value (Get-WmiObject -Class Win32_Service | Where-Object {$_.Name -eq 'dhcp' -or $_.DisplayName -eq 'dhcp'} | Select-Object -Property StartMode) -PassThru | ConvertTo-Json" => cmd.call('get-service-dhcp'),
|
||||||
"Get-WindowsFeature | Where-Object {$_.Name -eq 'dhcp' -or $_.DisplayName -eq 'dhcp'} | Select-Object -Property Name,DisplayName,Description,Installed,InstallState | ConvertTo-Json" => cmd.call('get-windows-feature'),
|
"Get-WindowsFeature | Where-Object {$_.Name -eq 'dhcp' -or $_.DisplayName -eq 'dhcp'} | Select-Object -Property Name,DisplayName,Description,Installed,InstallState | ConvertTo-Json" => cmd.call('get-windows-feature'),
|
||||||
'lsmod' => cmd.call('lsmod'),
|
'lsmod' => cmd.call('lsmod'),
|
||||||
|
|
18
test/unit/mock/cmd/get-package-ruby
Normal file
18
test/unit/mock/cmd/get-package-ruby
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"ProviderName": "Programs",
|
||||||
|
"Status": "Installed",
|
||||||
|
"SearchKey": "Ruby 2.1.6-p336-x64",
|
||||||
|
"CanonicalId": "programs:Ruby 2.1.6-p336-x64/2.1.6-p336",
|
||||||
|
"Name": "Ruby 2.1.6-p336-x64",
|
||||||
|
"Version": "2.1.6-p336"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ProviderName": "Programs",
|
||||||
|
"Status": "Installed",
|
||||||
|
"SearchKey": "Ruby 2.1.6-p336-x64",
|
||||||
|
"CanonicalId": "programs:Ruby 2.1.6-p336-x64/2.1.6-p336",
|
||||||
|
"Name": "Ruby 2.1.6-p336-x64",
|
||||||
|
"Version": "2.1.6-p336"
|
||||||
|
}
|
||||||
|
]
|
|
@ -4,9 +4,9 @@ require 'helper'
|
||||||
require 'vulcano/resource'
|
require 'vulcano/resource'
|
||||||
|
|
||||||
describe 'Vulcano::Resources::Passwd' do
|
describe 'Vulcano::Resources::Passwd' do
|
||||||
let(:resource) { load_resource('oneget', 'Mozilla Firefox') }
|
|
||||||
|
|
||||||
it 'verify oneget package detail parsing' do
|
it 'verify oneget package detail parsing' do
|
||||||
|
resource = MockLoader.new(:windows).load_resource('oneget', 'Mozilla Firefox')
|
||||||
pkg = {
|
pkg = {
|
||||||
name: 'Mozilla Firefox 40.0.3 (x86 en-US)',
|
name: 'Mozilla Firefox 40.0.3 (x86 en-US)',
|
||||||
version: '40.0.3',
|
version: '40.0.3',
|
||||||
|
@ -14,6 +14,30 @@ describe 'Vulcano::Resources::Passwd' do
|
||||||
installed: true,
|
installed: true,
|
||||||
}
|
}
|
||||||
_(resource.installed?).must_equal true
|
_(resource.installed?).must_equal true
|
||||||
|
_(resource.version).must_equal '40.0.3'
|
||||||
|
_(resource.info).must_equal pkg
|
||||||
|
end
|
||||||
|
|
||||||
|
# catch cases where we recieve multiple return values
|
||||||
|
# eg. happens if you do 'choco install ruby'
|
||||||
|
it 'filter dups of Get-Package' do
|
||||||
|
resource = MockLoader.new(:windows).load_resource('oneget', 'Ruby 2.1.6-p336-x64')
|
||||||
|
pkg = {
|
||||||
|
name: 'Ruby 2.1.6-p336-x64',
|
||||||
|
version: '2.1.6-p336',
|
||||||
|
type: 'oneget',
|
||||||
|
installed: true,
|
||||||
|
}
|
||||||
|
_(resource.installed?).must_equal true
|
||||||
|
_(resource.version).must_equal '2.1.6-p336'
|
||||||
|
_(resource.info).must_equal pkg
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should skip on linux' do
|
||||||
|
resource = MockLoader.new(:centos7).load_resource('oneget', 'Not available')
|
||||||
|
pkg = { type: 'oneget', installed: false }
|
||||||
|
_(resource.installed?).must_equal false
|
||||||
|
_(resource.version).must_equal nil
|
||||||
_(resource.info).must_equal pkg
|
_(resource.info).must_equal pkg
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue