Skip to content

Commit b2e989d

Browse files
committed
(FM-2790) Return SQL installations as Facter facts
- Fact 'sqlserver_installs' contains all detailed installation information - Fact 'sqlserver_instance_names' contains all instance names 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 837170f commit b2e989d

File tree

7 files changed

+46
-34
lines changed

7 files changed

+46
-34
lines changed

lib/facter/sqlserver_installs.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_installs) do
4+
confine :osfamily => :windows
5+
6+
setcode do
7+
PuppetX::Sqlserver::Features.get_installations
8+
end
9+
end
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_instance_names) do
4+
confine :osfamily => :windows
5+
6+
setcode do
7+
PuppetX::Sqlserver::Features.get_instance_names
8+
end
9+
end

lib/puppet/provider/sqlserver.rb

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +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-
installs = PuppetX::Sqlserver::Features.get_installations
44-
return installs[SQL_2014] if !installs[SQL_2014].empty?
45-
46-
installs[SQL_2012]
47-
end
48-
4942
def self.run_install_dot_net
5043
install_dot_net = <<-DOTNET
5144
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_installs)
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['features'].empty?
1415
existing_instance = {:name => "Generic Features",
1516
:ensure => :present,
1617
:features =>
1718
PuppetX::Sqlserver::ServerHelper.translate_features(
18-
result[:features]).sort!
19+
result['features']).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_installs)
1313
debug "Parsing result #{result}"
14-
result.keys.reject { |key| key == :features }.each do |instance_name|
14+
result = !result[SQL_2014].empty? ? result[SQL_2014] : result[SQL_2012]
15+
result.keys.reject { |key| key == 'features' }.each do |instance_name|
1516
existing_instance = {:name => instance_name,
1617
:ensure => :present,
1718
:features =>
1819
PuppetX::Sqlserver::ServerHelper.translate_features(
19-
result[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: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,11 @@ def self.get_sql_property_values(version, instance_name, property_name)
8989

9090
def self.get_wmi_instance_info(version, instance_name)
9191
{
92-
:name => instance_name,
93-
:version_friendly => version,
94-
:version => get_sql_property_values(version, instance_name, 'VERSION').first,
92+
'name' => instance_name,
93+
'version_friendly' => version,
94+
'version' => get_sql_property_values(version, instance_name, 'VERSION').first,
9595
# typically Software\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER
96-
:reg_root => get_sql_property_values(version, instance_name, 'REGROOT').first,
96+
'reg_root' => get_sql_property_values(version, instance_name, 'REGROOT').first,
9797
}
9898
end
9999

@@ -153,11 +153,11 @@ def self.get_shared_features(version, reg_root)
153153
# "SQL_2012" => {},
154154
# "SQL_2014" => {
155155
# "MSSQLSERVER" => {
156-
# :name => "MSSQLSERVER",
157-
# :version_friendly => "SQL_2014",
158-
# :version => "12.0.2000.8",
159-
# :reg_root => "Software\\Microsoft\\Microsoft SQL Server\\MSSQL12.MSSQLSERVER",
160-
# :features => [
156+
# "name" => "MSSQLSERVER",
157+
# "version_friendly" => "SQL_2014",
158+
# "version" => "12.0.2000.8",
159+
# "reg_root" => "Software\\Microsoft\\Microsoft SQL Server\\MSSQL12.MSSQLSERVER",
160+
# "features" => [
161161
# "SQL Server Replication",
162162
# "Database Engine Services",
163163
# "Full-Text and Semantic Extractions for Search",
@@ -166,7 +166,7 @@ def self.get_shared_features(version, reg_root)
166166
# "Reporting Services - Native"
167167
# ]
168168
# },
169-
# :features => [
169+
# "features" => [
170170
# "Client Tools Connectivity",
171171
# "Client Tools SDK",
172172
# "Master Data Services",
@@ -183,7 +183,7 @@ def self.get_installations
183183
instances = instance_names
184184
.map { |name| [ name, get_instance_info(version, name) ] }
185185

186-
instances.push([:features, get_shared_features(version, SQL_REG_ROOT)])
186+
instances.push(['features', get_shared_features(version, SQL_REG_ROOT)])
187187

188188
[ version, Hash[instances] ]
189189
end
@@ -207,11 +207,11 @@ def self.get_instance_names
207207
# returns a hash containing instance details
208208
#
209209
# {
210-
# :name => "MSSQLSERVER2",
211-
# :version_friendly => "SQL_2014",
212-
# :version => "12.0.2000.8",
213-
# :reg_root => "Software\\Microsoft\\Microsoft SQL Server\\MSSQL12.MSSQLSERVER2",
214-
# :features => [
210+
# "name" => "MSSQLSERVER2",
211+
# "version_friendly" => "SQL_2014",
212+
# "version" => "12.0.2000.8",
213+
# "reg_root" => "Software\\Microsoft\\Microsoft SQL Server\\MSSQL12.MSSQLSERVER2",
214+
# "features" => [
215215
# "SQLServer Replication",
216216
# "Database Engine Services",
217217
# "Full-Text and Semantic Extractions for Search",
@@ -222,8 +222,8 @@ def self.get_instance_names
222222
# }
223223
def self.get_instance_info(version = SQL_2012, instance_name)
224224
sql_instance = get_wmi_instance_info(version, instance_name)
225-
feats = get_instance_features(sql_instance[:reg_root], sql_instance[:name])
226-
sql_instance.merge({:features => feats})
225+
feats = get_instance_features(sql_instance['reg_root'], sql_instance['name'])
226+
sql_instance.merge({'features' => feats})
227227
end
228228
end
229229
end

spec/acceptance/sqlserver_features_spec.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,8 @@ def bind_and_apply_failing_manifest(host, features, ensure_val = 'present')
241241
features = ['Tools', 'BC', 'Conn', 'SSMS', 'ADV_SSMS', 'SDK', 'IS', 'MDS']
242242

243243
before(:all) do
244-
# this assumes that only default MSSQLSERVER has been installed so far
245-
# be careful about running tests out of sequence
246-
remove_sql_instances(host, {:version => version, :instance_names => ['MSSQLSERVER']})
244+
names = eval(fact_on(host, 'sqlserver_instance_names')).values.flatten
245+
remove_sql_instances(host, {:version => version, :instance_names => names})
247246
end
248247

249248
after(:all) do

0 commit comments

Comments
 (0)