Skip to content

Commit 63e139c

Browse files
committed
(FM-2790) Return SQL installations as Facter facts
- Fact 'sqlserver_instances' contains all detailed instance information and is not segregated by SQL version given instance names are unique even in a side by side installation - Fact 'sqlserver_features' contains all shared features segregated by SQL version - run_discovery_script method has been completely removed in favor of leveraging Facts - note that to make the output compatible with Facter, the Ruby symbols used in the hashes returned from PuppetX::Sqlserver::Features have all been changed to bare strings
1 parent 65067c0 commit 63e139c

File tree

6 files changed

+46
-37
lines changed

6 files changed

+46
-37
lines changed

lib/facter/sqlserver_features.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'puppet_x/sqlserver/features'))
2+
3+
Facter.add(:sqlserver_features) do
4+
confine :osfamily => :windows
5+
6+
setcode do
7+
PuppetX::Sqlserver::Features.get_features
8+
end
9+
end

lib/facter/sqlserver_instances.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'puppet_x/sqlserver/features'))
2+
3+
Facter.add(:sqlserver_instances) do
4+
confine :osfamily => :windows
5+
6+
setcode do
7+
PuppetX::Sqlserver::Features.get_instances
8+
end
9+
end

lib/puppet/provider/sqlserver.rb

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,6 @@ def not_nil_and_not_empty?(obj)
3939
!obj.nil? and !obj.empty?
4040
end
4141

42-
def self.run_discovery_script
43-
features = PuppetX::Sqlserver::Features.get_features
44-
45-
instances = {
46-
# SQL instance names are unique over side-by-side installs
47-
:instances => PuppetX::Sqlserver::Features.get_instances.values.inject(:merge),
48-
# but features across versions are different
49-
:features => !features[SQL_2014].empty? ? features[SQL_2014] : features[SQL_2012]
50-
}
51-
end
52-
5342
def self.run_install_dot_net
5443
install_dot_net = <<-DOTNET
5544
Install-WindowsFeature NET-Framework-Core

lib/puppet/provider/sqlserver_features/mssql.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
Puppet::Type::type(:sqlserver_features).provide(:mssql, :parent => Puppet::Provider::Sqlserver) do
99
def self.instances
1010
instances = []
11-
result = Puppet::Provider::Sqlserver.run_discovery_script
11+
result = Facter.value(:sqlserver_features)
1212
debug "Parsing result #{result}"
13-
if !result[:features].empty?
13+
result = !result[SQL_2014].empty? ? result[SQL_2014] : result[SQL_2012]
14+
if !result.empty?
1415
existing_instance = {:name => "Generic Features",
1516
:ensure => :present,
1617
:features =>
1718
PuppetX::Sqlserver::ServerHelper.translate_features(
18-
result[:features]).sort!
19+
result).sort!
1920
}
2021
debug "Parsed features = #{existing_instance[:features]}"
2122

lib/puppet/provider/sqlserver_instance/mssql.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@
99
Puppet::Type::type(:sqlserver_instance).provide(:mssql, :parent => Puppet::Provider::Sqlserver) do
1010
def self.instances
1111
instances = []
12-
result = Puppet::Provider::Sqlserver.run_discovery_script
12+
result = Facter.value(:sqlserver_instances)
1313
debug "Parsing result #{result}"
14-
result[:instances].keys.each do |instance_name|
14+
result = result.inject(:merge)
15+
result.keys.each do |instance_name|
1516
existing_instance = {:name => instance_name,
1617
:ensure => :present,
1718
:features =>
1819
PuppetX::Sqlserver::ServerHelper.translate_features(
19-
result[:instances][instance_name][:features]).sort!
20+
result[instance_name]['features']).sort!
2021
}
2122
instance = new(existing_instance)
2223
instances << instance

lib/puppet_x/sqlserver/features.rb

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
SQL_2012 = 'SQL_2012'
2-
SQL_2014 = 'SQL_2014'
1+
SQL_2012 ||= 'SQL_2012'
2+
SQL_2014 ||= 'SQL_2014'
33

44
module PuppetX
55
module Sqlserver
66
# https://msdn.microsoft.com/en-us/library/ms143786.aspx basic feature docs
77
class Features
88
private
99

10-
SQL_WMI_PATH = {
10+
SQL_WMI_PATH ||= {
1111
SQL_2012 => 'ComputerManagement11',
1212
SQL_2014 => 'ComputerManagement12',
1313
}
1414

15-
SQL_REG_ROOT = 'Software\Microsoft\Microsoft SQL Server'
15+
SQL_REG_ROOT ||= 'Software\Microsoft\Microsoft SQL Server'
1616

1717
def self.connect(version)
1818
require 'win32ole'
@@ -96,11 +96,11 @@ def self.get_sql_property_values(version, instance_name, property_name)
9696

9797
def self.get_wmi_instance_info(version, instance_name)
9898
{
99-
:name => instance_name,
100-
:version_friendly => version,
101-
:version => get_sql_property_values(version, instance_name, 'VERSION').first,
99+
'name' => instance_name,
100+
'version_friendly' => version,
101+
'version' => get_sql_property_values(version, instance_name, 'VERSION').first,
102102
# typically Software\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER
103-
:reg_root => get_sql_property_values(version, instance_name, 'REGROOT').first,
103+
'reg_root' => get_sql_property_values(version, instance_name, 'REGROOT').first,
104104
}
105105
end
106106

@@ -160,11 +160,11 @@ def self.get_shared_features(version)
160160
# "SQL_2012" => {},
161161
# "SQL_2014" => {
162162
# "MSSQLSERVER" => {
163-
# :name => "MSSQLSERVER",
164-
# :version_friendly => "SQL_2014",
165-
# :version => "12.0.2000.8",
166-
# :reg_root => "Software\\Microsoft\\Microsoft SQL Server\\MSSQL12.MSSQLSERVER",
167-
# :features => [
163+
# "name" => "MSSQLSERVER",
164+
# "version_friendly" => "SQL_2014",
165+
# "version" => "12.0.2000.8",
166+
# "reg_root" => "Software\\Microsoft\\Microsoft SQL Server\\MSSQL12.MSSQLSERVER",
167+
# "features" => [
168168
# "SQL Server Replication",
169169
# "Database Engine Services",
170170
# "Full-Text and Semantic Extractions for Search",
@@ -203,11 +203,11 @@ def self.get_features
203203
# returns a hash containing instance details
204204
#
205205
# {
206-
# :name => "MSSQLSERVER2",
207-
# :version_friendly => "SQL_2014",
208-
# :version => "12.0.2000.8",
209-
# :reg_root => "Software\\Microsoft\\Microsoft SQL Server\\MSSQL12.MSSQLSERVER2",
210-
# :features => [
206+
# "name" => "MSSQLSERVER2",
207+
# "version_friendly" => "SQL_2014",
208+
# "version" => "12.0.2000.8",
209+
# "reg_root" => "Software\\Microsoft\\Microsoft SQL Server\\MSSQL12.MSSQLSERVER2",
210+
# "features" => [
211211
# "SQLServer Replication",
212212
# "Database Engine Services",
213213
# "Full-Text and Semantic Extractions for Search",
@@ -218,8 +218,8 @@ def self.get_features
218218
# }
219219
def self.get_instance_info(version = SQL_2014, instance_name)
220220
sql_instance = get_wmi_instance_info(version, instance_name)
221-
feats = get_instance_features(sql_instance[:reg_root], sql_instance[:name])
222-
sql_instance.merge({:features => feats})
221+
feats = get_instance_features(sql_instance['reg_root'], sql_instance['name'])
222+
sql_instance.merge({'features' => feats})
223223
end
224224
end
225225
end

0 commit comments

Comments
 (0)