diff --git a/examples/database_full.pp b/examples/database_full.pp index 5ef06890..8a49b040 100644 --- a/examples/database_full.pp +++ b/examples/database_full.pp @@ -1,4 +1,8 @@ -mssql::database{ 'testdb_full': +sqlserver::config{ 'MSSQLSERVER': + admin_user => 'sa', + admin_pass => 'Pupp3t1@', +} +sqlserver::database{ 'testdb_full': instance => 'MSSQLSERVER', containment => 'PARTIAL', compatibility => 110, diff --git a/examples/init.pp b/examples/init.pp index 38e1a2a2..0cf0f62b 100644 --- a/examples/init.pp +++ b/examples/init.pp @@ -12,7 +12,7 @@ $sapwd = 'Pupp3t1@' $instance_name = 'MSSQLSERVER' -mssql_instance{ $instance_name: +sqlserver_instance{ $instance_name: source => 'E:/', security_mode => 'SQL', sa_pwd => $sapwd, @@ -20,13 +20,13 @@ sql_sysadmin_accounts => ['vagrant'], } -mssql::config{ 'MSSQLSERVER': +sqlserver::config{ 'MSSQLSERVER': admin_user => 'sa', admin_pass => 'Pupp3t1@', require => Mssql_instance[$instance_name], } -mssql::login{ 'padmin': + +sqlserver::login{ 'padmin': password => 'PadminP@ssw0rd1', instance => $instance_name, - require => Mssql::Config[$instance_name], } diff --git a/examples/sp_configure.pp b/examples/sp_configure.pp index 4f2b376f..8be85060 100644 --- a/examples/sp_configure.pp +++ b/examples/sp_configure.pp @@ -1,3 +1,8 @@ +sqlserver::config{ 'MSSQLSERVER': + admin_user => 'sa', + admin_pass => 'Pupp3t1@', + require => Mssql_instance[$instance_name], +} #Enable Filestream access on server mssql::sp_configure{ 'filestream access level': value => 1, diff --git a/files/install_dot_net_35.ps1 b/files/install_dot_net_35.ps1 deleted file mode 100644 index 8def9789..00000000 --- a/files/install_dot_net_35.ps1 +++ /dev/null @@ -1,15 +0,0 @@ - - -Install-WindowsFeature NET-Framework-Core - -Write-Host "Installing .Net Framework 3.5, do not close this prompt..." -DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:$LocalSource | Out-Null -$Result = Dism /online /Get-featureinfo /featurename:NetFx3 -If($Result -contains "State : Enabled") -{ - Write-Host "Install .Net Framework 3.5 successfully." -} -Else -{ - Write-Host "Failed to install Install .Net Framework 3.5,please make sure the local source is correct." -} diff --git a/files/run_discovery.ps1 b/files/run_discovery.ps1 deleted file mode 100644 index fdee6470..00000000 --- a/files/run_discovery.ps1 +++ /dev/null @@ -1,34 +0,0 @@ -if(Test-Path 'C:\Program Files\Microsoft SQL Server\120\Setup Bootstrap\SQLServer2014\setup.exe'){ - pushd 'C:\Program Files\Microsoft SQL Server\120\Setup Bootstrap\SQLServer2014\' - Start-Process -FilePath .\setup.exe -ArgumentList @("/Action=RunDiscovery","/q") -Wait -WindowStyle Hidden - popd -}elseif(Test-Path 'C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\SQLServer2012\setup.exe'){ - pushd 'C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\SQLServer2012\' - Start-Process -FilePath .\setup.exe -ArgumentList @("/Action=RunDiscovery","/q") -Wait -WindowStyle Hidden - popd -} - -$file = gci 'C:\Program Files\Microsoft SQL Server\*\Setup Bootstrap\Log\*\SqlDiscoveryReport.xml' -ErrorAction Ignore | sort -Descending | select -First 1 -if($file -ne $null) { - [xml] $xml = cat $file - $json = $xml.ArrayOfDiscoveryInformation.DiscoveryInformation - $hash = @{"instances" = @();"TimeStamp"= ("{0:yyyy-MM-dd HH:mm:ss}" -f $file.CreationTime)} - foreach($instance in ($json | % { $_.Instance } | Get-Unique )){ - $features = @() - $json | %{ - if($_.instance -eq $instance){ - $features += $_.feature - } - } - if($instance -eq "" ){ - $hash.Add("Generic Features",$features) - }else{ - $hash["instances"] += $instance - $hash.Add($instance,@{"features"=$features}) - } - } - $file.Directory.Delete($true) - Write-Host (ConvertTo-Json $hash) -}else{ - Write-host ("{}") -} diff --git a/files/sqlserver_management.psm1 b/files/sqlserver_management.psm1 deleted file mode 100644 index b0455e1d..00000000 --- a/files/sqlserver_management.psm1 +++ /dev/null @@ -1 +0,0 @@ -Import-Module sqlps -DisableNameChecking diff --git a/lib/puppet/parser/functions/mssql_is_domain_user.rb b/lib/puppet/parser/functions/mssql_is_domain_user.rb deleted file mode 100644 index 4af4a7b8..00000000 --- a/lib/puppet/parser/functions/mssql_is_domain_user.rb +++ /dev/null @@ -1,10 +0,0 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'lib/puppet_x/mssql/server_helper')) - -module Puppet::Parser::Functions - newfunction(:mssql_is_domain_user, :type => :rvalue) do |args| - if args.length != 1 - raise Puppet::ParseError, ("is_domain_user(): requires exactly 1 argument, you provided #{args.length}") - end - PuppetX::Mssql::ServerHelper.is_domain_user?(args[0], Facter.value(:hostname)) - end -end diff --git a/lib/puppet/parser/functions/sqlserver_is_domain_or_local_user.rb b/lib/puppet/parser/functions/sqlserver_is_domain_or_local_user.rb new file mode 100644 index 00000000..5671d9ed --- /dev/null +++ b/lib/puppet/parser/functions/sqlserver_is_domain_or_local_user.rb @@ -0,0 +1,10 @@ +require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'lib/puppet_x/sqlserver/server_helper')) + +module Puppet::Parser::Functions + newfunction(:sqlserver_is_domain_or_local_user, :type => :rvalue) do |args| + if args.length != 1 + raise Puppet::ParseError, ("is_domain_or_local_user(): requires exactly 1 argument, you provided #{args.length}") + end + PuppetX::Sqlserver::ServerHelper.is_domain_or_local_user?(args[0], Facter.value(:hostname)) + end +end diff --git a/lib/puppet/parser/functions/mssql_validate_instance_name.rb b/lib/puppet/parser/functions/sqlserver_validate_instance_name.rb similarity index 95% rename from lib/puppet/parser/functions/mssql_validate_instance_name.rb rename to lib/puppet/parser/functions/sqlserver_validate_instance_name.rb index 61420391..74991c77 100644 --- a/lib/puppet/parser/functions/mssql_validate_instance_name.rb +++ b/lib/puppet/parser/functions/sqlserver_validate_instance_name.rb @@ -11,7 +11,7 @@ # @raise [Puppet::ParserError] Instance name can not start or end with underscore (_) # module Puppet::Parser::Functions - newfunction(:mssql_validate_instance_name, :docs => < < 4) then raise Puppet::ParseError, ("validate_range(): wrong number of arguments (#{args.length}; must be 3)") end diff --git a/lib/puppet/parser/functions/mssql_validate_size.rb b/lib/puppet/parser/functions/sqlserver_validate_size.rb similarity index 92% rename from lib/puppet/parser/functions/mssql_validate_size.rb rename to lib/puppet/parser/functions/sqlserver_validate_size.rb index 425958db..ea50f881 100644 --- a/lib/puppet/parser/functions/mssql_validate_size.rb +++ b/lib/puppet/parser/functions/sqlserver_validate_size.rb @@ -1,5 +1,5 @@ module Puppet::Parser::Functions - newfunction(:mssql_validate_size) do |args| + newfunction(:sqlserver_validate_size) do |args| if args.length != 1 raise(Puppet::ParseError, "mssql_validate_size(): requires exactly 1 argument, you provided #{args.length}") end diff --git a/lib/puppet/parser/functions/mssql_validate_svrroles_hash.rb b/lib/puppet/parser/functions/sqlserver_validate_svrroles_hash.rb similarity index 78% rename from lib/puppet/parser/functions/mssql_validate_svrroles_hash.rb rename to lib/puppet/parser/functions/sqlserver_validate_svrroles_hash.rb index 14483a5e..ff4e414a 100644 --- a/lib/puppet/parser/functions/mssql_validate_svrroles_hash.rb +++ b/lib/puppet/parser/functions/sqlserver_validate_svrroles_hash.rb @@ -1,7 +1,7 @@ module Puppet::Parser::Functions - newfunction(:mssql_validate_svrroles_hash) do |args| + newfunction(:sqlserver_validate_svrroles_hash) do |args| if args.length != 1 then - raise Puppet::ParseError, ("mssql_validate_svcrole_hash(): wrong number of arguments (#{args.length}; must be 1)") + raise Puppet::ParseError, ("sqlserver_validate_svcrole_hash(): wrong number of arguments (#{args.length}; must be 1)") end value = args[0] diff --git a/lib/puppet/property/login.rb b/lib/puppet/property/login.rb index 43df4760..528905e5 100644 --- a/lib/puppet/property/login.rb +++ b/lib/puppet/property/login.rb @@ -1,6 +1,6 @@ require 'puppet/property' -class Puppet::Property::MssqlLogin < Puppet::Property +class Puppet::Property::SqlserverLogin < Puppet::Property desc 'A MS SQL Login, possible to be domain or local account' validate do |value| # @todo diff --git a/lib/puppet/provider/mssql.rb b/lib/puppet/provider/mssql.rb deleted file mode 100644 index 74d5a0ea..00000000 --- a/lib/puppet/provider/mssql.rb +++ /dev/null @@ -1,79 +0,0 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'lib/puppet_x/mssql/server_helper')) -require File.expand_path(File.join(File.dirname(__FILE__), 'mssql')) -require 'tempfile' - -class Puppet::Provider::Mssql < Puppet::Provider - - initvars - - commands :powershell => - if File.exists?("#{ENV['SYSTEMROOT']}\\sysnative\\WindowsPowershell\\v1.0\\powershell.exe") - "#{ENV['SYSTEMROOT']}\\sysnative\\WindowsPowershell\\v1.0\\powershell.exe" - elsif File.exists?("#{ENV['SYSTEMROOT']}\\system32\\WindowsPowershell\\v1.0\\powershell.exe") - "#{ENV['SYSTEMROOT']}\\system32\\WindowsPowershell\\v1.0\\powershell.exe" - else - 'powershell.exe' - end - - def try_execute(command, msg = nil) - begin - execute(command.compact) - rescue Puppet::ExecutionFailure => error - msg = "Failure occured when trying to install SQL Server #{@resource[:name]}" if msg.nil? - raise Puppet::Error, "#{msg} \n #{error}" - end - end - - ## - # Used by tsql provider - ## - def self.run_authenticated_sqlcmd(query, opts) - b = binding - @sql_instance_config = "C:/Program Files/Microsoft SQL Server/.puppet/.#{opts[:instance_name]}.cfg" - if File.exists?(@sql_instance_config) - @sql_instance_config = native_path(@sql_instance_config) - else - raise Puppet::ParseError, "Config file does not exist" - end - temp = Tempfile.new(['puppet', '.sql']) - begin - temp.write(query) - temp.flush - temp.close - #input file is used in the authenticated_query.ps1.erb template - input_file = native_path(temp.path) - @instance = opts[:instance_name] - erb_template = File.join(template_path, 'authenticated_query.ps1.erb') - ps1 = ERB.new(File.new(erb_template).read, nil, '-') - temp_ps1 = Tempfile.new(['puppet', '.ps1']) - begin - temp_ps1.write(ps1.result(b)) - temp_ps1.flush - temp_ps1.close - result = Puppet::Util::Execution.execute(['powershell.exe', '-noprofile', '-executionpolicy', 'unrestricted', temp_ps1.path], {:failonfail => false}) #We expect some things to fail in order to run as an only if - debug("Return result #{result.exitstatus}") - return result - ensure - temp_ps1.close - temp_ps1.unlink - end - ensure - temp.close - temp.unlink - end - return result - end - - private - def self.native_path(path) - path.gsub(File::SEPARATOR, File::ALT_SEPARATOR) - end - - def self.template_path - return File.expand_path('../../templates', __FILE__) - end - - def not_nil_and_not_empty?(obj) - !obj.nil? and !obj.empty? - end -end diff --git a/lib/puppet/provider/sqlserver.rb b/lib/puppet/provider/sqlserver.rb new file mode 100644 index 00000000..213079d7 --- /dev/null +++ b/lib/puppet/provider/sqlserver.rb @@ -0,0 +1,140 @@ +require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'lib/puppet_x/sqlserver/server_helper')) +require File.expand_path(File.join(File.dirname(__FILE__), 'sqlserver')) +require 'tempfile' + +class Puppet::Provider::Sqlserver < Puppet::Provider + confine :operatingsystem => :windows + + initvars + + commands :powershell => + if File.exists?("#{ENV['SYSTEMROOT']}\\sysnative\\WindowsPowershell\\v1.0\\powershell.exe") + "#{ENV['SYSTEMROOT']}\\sysnative\\WindowsPowershell\\v1.0\\powershell.exe" + elsif File.exists?("#{ENV['SYSTEMROOT']}\\system32\\WindowsPowershell\\v1.0\\powershell.exe") + "#{ENV['SYSTEMROOT']}\\system32\\WindowsPowershell\\v1.0\\powershell.exe" + else + 'powershell.exe' + end + + def try_execute(command, msg = nil) + begin + execute(command.compact) + rescue Puppet::ExecutionFailure => error + msg = "Failure occured when trying to install SQL Server #{@resource[:name]}" if msg.nil? + raise Puppet::Error, "#{msg} \n #{error}" + end + end + + ## + # Used by tsql provider + ## + def self.run_authenticated_sqlcmd(query, opts) + b = binding + @sql_instance_config = "C:/Program Files/Microsoft SQL Server/.puppet/.#{opts[:instance_name]}.cfg" + if File.exists?(@sql_instance_config) + @sql_instance_config = native_path(@sql_instance_config) + else + raise Puppet::ParseError, "Config file does not exist" + end + temp = Tempfile.new(['puppet', '.sql']) + begin + temp.write(query) + temp.flush + temp.close + #input file is used in the authenticated_query.ps1.erb template + input_file = native_path(temp.path) + @instance = opts[:instance_name] + erb_template = File.join(template_path, 'authenticated_query.ps1.erb') + ps1 = ERB.new(File.new(erb_template).read, nil, '-') + temp_ps1 = Tempfile.new(['puppet', '.ps1']) + begin + temp_ps1.write(ps1.result(b)) + temp_ps1.flush + temp_ps1.close + result = Puppet::Util::Execution.execute(['powershell.exe', '-noprofile', '-executionpolicy', 'unrestricted', temp_ps1.path], {:failonfail => false}) #We expect some things to fail in order to run as an only if + debug("Return result #{result.exitstatus}") + return result + ensure + temp_ps1.close + temp_ps1.unlink + end + ensure + temp.close + temp.unlink + end + return result + end + + private + def self.native_path(path) + path.gsub(File::SEPARATOR, File::ALT_SEPARATOR) + end + + def self.template_path + return File.expand_path(File.join(File.dirname(__FILE__), '../templates')) + end + + def not_nil_and_not_empty?(obj) + !obj.nil? and !obj.empty? + end + + def self.run_discovery_script + discovery = <<-DISCOVERY + if(Test-Path 'C:\\Program Files\\Microsoft SQL Server\\120\\Setup Bootstrap\\SQLServer2014\\setup.exe'){ + pushd 'C:\\Program Files\\Microsoft SQL Server\\120\\Setup Bootstrap\\SQLServer2014\\' + Start-Process -FilePath .\\setup.exe -ArgumentList @("/Action=RunDiscovery","/q") -Wait -WindowStyle Hidden + popd +}elseif(Test-Path 'C:\\Program Files\\Microsoft SQL Server\\110\\Setup Bootstrap\\SQLServer2012\\setup.exe'){ + pushd 'C:\\Program Files\\Microsoft SQL Server\\110\\Setup Bootstrap\\SQLServer2012\\' + Start-Process -FilePath .\\setup.exe -ArgumentList @("/Action=RunDiscovery","/q") -Wait -WindowStyle Hidden + popd +} + +$file = gci 'C:\\Program Files\\Microsoft SQL Server\\*\\Setup Bootstrap\\Log\\*\\SqlDiscoveryReport.xml' -ErrorAction Ignore | sort -Descending | select -First 1 +if($file -ne $null) { + [xml] $xml = cat $file + $json = $xml.ArrayOfDiscoveryInformation.DiscoveryInformation + $hash = @{"instances" = @();"TimeStamp"= ("{0:yyyy-MM-dd HH:mm:ss}" -f $file.CreationTime)} + foreach($instance in ($json | % { $_.Instance } | Get-Unique )){ + $features = @() + $json | %{ + if($_.instance -eq $instance){ + $features += $_.feature + } + } + if($instance -eq "" ){ + $hash.Add("Generic Features",$features) + }else{ + $hash["instances"] += $instance + $hash.Add($instance,@{"features"=$features}) + } + } + $file.Directory.Delete($true) + Write-Host (ConvertTo-Json $hash) +}else{ + Write-host ("{}") +} + DISCOVERY + result = powershell([discovery]) + JSON.parse(result) + end + + def self.run_install_dot_net + install_dot_net = <<-DOTNET +Install-WindowsFeature NET-Framework-Core + +Write-Host "Installing .Net Framework 3.5, do not close this prompt..." +DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:$LocalSource | Out-Null +$Result = Dism /online /Get-featureinfo /featurename:NetFx3 +If($Result -contains "State : Enabled") +{ + Write-Host "Install .Net Framework 3.5 successfully." +} +Else +{ + Write-Host "Failed to install Install .Net Framework 3.5,please make sure the local source is correct." +} + DOTNET + powershell([install_dot_net]) + end +end diff --git a/lib/puppet/provider/sqlserver_features/mssql.rb b/lib/puppet/provider/sqlserver_features/mssql.rb index f4283430..3002b94c 100644 --- a/lib/puppet/provider/sqlserver_features/mssql.rb +++ b/lib/puppet/provider/sqlserver_features/mssql.rb @@ -1,19 +1,17 @@ require 'json' -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'mssql')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'sqlserver')) -Puppet::Type::type(:sqlserver_features).provide(:mssql, :parent => Puppet::Provider::Mssql) do +Puppet::Type::type(:sqlserver_features).provide(:mssql, :parent => Puppet::Provider::Sqlserver) do def self.instances instances = [] - discovery = File.readlines(File.expand_path(File.join(File.dirname(__FILE__), '../../../../files/run_discovery.ps1'))) - result = powershell([discovery]) - jsonResult = JSON.parse(result) + jsonResult = Puppet::Provider::Sqlserver.run_discovery_script debug "Parsing json result #{jsonResult}" if jsonResult.has_key?('Generic Features') existing_instance = {:name => "Generic Features", :ensure => :present, :features => - PuppetX::Mssql::ServerHelper.translate_features( + PuppetX::Sqlserver::ServerHelper.translate_features( jsonResult['Generic Features']).sort! } debug "Parsed features = #{existing_instance[:features]}" @@ -66,8 +64,7 @@ def modify_features(action, features) end def installNet35 - discovery = File.readlines(File.expand_path(File.join(File.dirname(__FILE__), '../../../../files/install_dot_net_35.ps1'))) - result = powershell([discovery]) + result = Puppet::Provider::Sqlserver.run_install_dot_net end def create diff --git a/lib/puppet/provider/sqlserver_instance/mssql.rb b/lib/puppet/provider/sqlserver_instance/mssql.rb index c2fcda75..906f9ea8 100644 --- a/lib/puppet/provider/sqlserver_instance/mssql.rb +++ b/lib/puppet/provider/sqlserver_instance/mssql.rb @@ -1,20 +1,18 @@ require 'json' -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'mssql')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'sqlserver')) -Puppet::Type::type(:sqlserver_instance).provide(:mssql, :parent => Puppet::Provider::Mssql) do +Puppet::Type::type(:sqlserver_instance).provide(:mssql, :parent => Puppet::Provider::Sqlserver) do def self.instances instances = [] - discovery = File.readlines(File.expand_path(File.join(File.dirname(__FILE__), '../../../../files/run_discovery.ps1'))) - result = powershell([discovery]) - jsonResult = JSON.parse(result) + jsonResult = Puppet::Provider::Sqlserver.run_discovery_script debug "Parsing json result #{jsonResult}" if jsonResult.has_key?('instances') jsonResult['instances'].each do |instance_name| existing_instance = {:name => instance_name, :ensure => :present, :features => - PuppetX::Mssql::ServerHelper.translate_features( + PuppetX::Sqlserver::ServerHelper.translate_features( jsonResult[instance_name]['features']).sort! } instance = new(existing_instance) @@ -49,8 +47,7 @@ def modify_features(features, action) end def installNet35 - discovery = File.readlines(File.expand_path(File.join(File.dirname(__FILE__), '../../../../files/install_dot_net_35.ps1'))) - result = powershell([discovery]) + result = Puppet::Provider::Sqlserver.run_install_dot_net end def create diff --git a/lib/puppet/provider/sqlserver_tsql/mssql.rb b/lib/puppet/provider/sqlserver_tsql/mssql.rb index 7d82a7d9..f7fafbc1 100644 --- a/lib/puppet/provider/sqlserver_tsql/mssql.rb +++ b/lib/puppet/provider/sqlserver_tsql/mssql.rb @@ -1,10 +1,10 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'mssql')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'sqlserver')) -Puppet::Type::type(:sqlserver_tsql).provide(:mssql, :parent => Puppet::Provider::Mssql) do +Puppet::Type::type(:sqlserver_tsql).provide(:mssql, :parent => Puppet::Provider::Sqlserver) do def run(query) debug("Running resource #{query} against #{resource[:instance]}") - result = Puppet::Provider::Mssql.run_authenticated_sqlcmd(query, {:instance_name => resource[:instance]}) + result = Puppet::Provider::Sqlserver.run_authenticated_sqlcmd(query, {:instance_name => resource[:instance]}) return result end diff --git a/lib/puppet/type/sqlserver_features.rb b/lib/puppet/type/sqlserver_features.rb index f72f095f..a58b3c83 100644 --- a/lib/puppet/type/sqlserver_features.rb +++ b/lib/puppet/type/sqlserver_features.rb @@ -1,5 +1,5 @@ -require 'puppet/property/login' -require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'puppet_x/mssql/server_helper')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'property/login')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'puppet_x/sqlserver/server_helper')) Puppet::Type::newtype(:sqlserver_features) do ensurable @@ -19,7 +19,7 @@ end - newparam(:is_svc_account, :parent => Puppet::Property::MssqlLogin) do + newparam(:is_svc_account, :parent => Puppet::Property::SqlserverLogin) do desc 'Either domain user name or system account. Defaults to "NT AUTHORITY\NETWORK SERVICE"' end @@ -35,8 +35,8 @@ Tools, Books online components, SQL Server Data Tools, and other shared components.' newvalues(:Tools, :BC, :Conn, :SSMS, :ADV_SSMS, :SDK, :IS, :MDS) munge do |value| - if PuppetX::Mssql::ServerHelper.is_super_feature(value) - PuppetX::Mssql::ServerHelper.get_sub_features(value).collect { |v| v.to_s } + if PuppetX::Sqlserver::ServerHelper.is_super_feature(value) + PuppetX::Sqlserver::ServerHelper.get_sub_features(value).collect { |v| v.to_s } else value end @@ -55,15 +55,15 @@ def validate end end - def is_domain_user?(user) - PuppetX::Mssql::ServerHelper.is_domain_user?(user, Facter.value(:hostname)) + def is_domain_or_local_user?(user) + PuppetX::Sqlserver::ServerHelper.is_domain_or_local_user?(user, Facter.value(:hostname)) end def validate_user_password_required(account, pass) if !(set?(account)) fail("User #{account} is required") end - if is_domain_user?(self[account]) && self[pass].nil? + if is_domain_or_local_user?(self[account]) && self[pass].nil? fail("#{pass} required when using domain account") end end diff --git a/lib/puppet/type/sqlserver_instance.rb b/lib/puppet/type/sqlserver_instance.rb index 18bbbace..58d19d34 100644 --- a/lib/puppet/type/sqlserver_instance.rb +++ b/lib/puppet/type/sqlserver_instance.rb @@ -1,5 +1,5 @@ -require 'puppet/property/login' -require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'puppet_x/mssql/server_helper')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'property/login')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'puppet_x/sqlserver/server_helper')) Puppet::Type::newtype(:sqlserver_instance) do ensurable @@ -24,8 +24,8 @@ Replication, Full-Text, and Data Quality Services (DQS) server.' newvalues(:SQL, :SQLEngine, :Replication, :FullText, :DQ, :AS, :RS) munge do |value| - if PuppetX::Mssql::ServerHelper.is_super_feature(value) - PuppetX::Mssql::ServerHelper.get_sub_features(value).collect { |v| v.to_s } + if PuppetX::Sqlserver::ServerHelper.is_super_feature(value) + PuppetX::Sqlserver::ServerHelper.get_sub_features(value).collect { |v| v.to_s } else value end @@ -42,7 +42,7 @@ newvalues(:automatic, :manual, :disable) end - newparam(:sql_svc_account, :parent => Puppet::Property::MssqlLogin) do + newparam(:sql_svc_account, :parent => Puppet::Property::SqlserverLogin) do desc 'Account for SQL Server service: Domain\User or system account.' # Default to "NT Service\SQLAGENT$#{instance_name}" @@ -58,7 +58,7 @@ end - newparam(:agt_svc_account, :parent => Puppet::Property::MssqlLogin) do + newparam(:agt_svc_account, :parent => Puppet::Property::SqlserverLogin) do desc 'Either domain user name or system account' end @@ -68,7 +68,7 @@ end - newparam(:as_svc_account, :parent => Puppet::Property::MssqlLogin) do + newparam(:as_svc_account, :parent => Puppet::Property::SqlserverLogin) do desc 'The account used by the Analysis Services service.' end @@ -82,7 +82,7 @@ desc 'Specifies the list of administrator accounts to provision.' end - newparam(:rs_svc_account, :parent => Puppet::Property::MssqlLogin) do + newparam(:rs_svc_account, :parent => Puppet::Property::SqlserverLogin) do desc 'Specify the service account of the report server. This value is required. If you omit this value, Setup will use the default built-in account for the current operating system (either NetworkService or LocalSystem). @@ -142,13 +142,13 @@ def validate_user_password_required(account, pass) if !(set?(account)) fail("User #{account} is required") end - if is_domain_user?(self[account]) && self[pass].nil? + if is_domain_or_local_user?(self[account]) && self[pass].nil? fail("#{pass} required when using domain account") end end - def is_domain_user?(user) - PuppetX::Mssql::ServerHelper.is_domain_user?(user, Facter.value(:hostname)) + def is_domain_or_local_user?(user) + PuppetX::Sqlserver::ServerHelper.is_domain_or_local_user?(user, Facter.value(:hostname)) end def is_strong_password?(key) diff --git a/lib/puppet/type/sqlserver_tsql.rb b/lib/puppet/type/sqlserver_tsql.rb index 317ba664..91873d81 100644 --- a/lib/puppet/type/sqlserver_tsql.rb +++ b/lib/puppet/type/sqlserver_tsql.rb @@ -1,5 +1,4 @@ require 'puppet' -require 'puppet/property/login' Puppet::Type::newtype(:sqlserver_tsql) do newparam :name, :namevar => true diff --git a/lib/puppet_x/mssql/server_helper.rb b/lib/puppet_x/sqlserver/server_helper.rb similarity index 95% rename from lib/puppet_x/mssql/server_helper.rb rename to lib/puppet_x/sqlserver/server_helper.rb index c30630e4..886bf674 100644 --- a/lib/puppet_x/mssql/server_helper.rb +++ b/lib/puppet_x/sqlserver/server_helper.rb @@ -1,5 +1,5 @@ module PuppetX - module Mssql + module Sqlserver class ServerHelper @features_hash = { :AS => 'Analysis Services', @@ -40,7 +40,7 @@ def self.is_super_feature(feature) @super_feature_hash.has_key?(feature.to_sym) end - def self.is_domain_user?(user, hostname) + def self.is_domain_or_local_user?(user, hostname) if /(^(((nt (authority|service))|#{hostname})\\\w+)$)|^(\w+)$/i.match(user) false else diff --git a/manifests/database.pp b/manifests/database.pp index 74a826c7..a2fcbd0b 100644 --- a/manifests/database.pp +++ b/manifests/database.pp @@ -118,25 +118,25 @@ # validate filespec _size and _maxsize ## if $filespec_size { - mssql_validate_size($filespec_size) + sqlserver_validate_size($filespec_size) } if $filespec_maxsize and $filespec_maxsize != 'UNLIMITED' { - mssql_validate_size($filespec_maxsize) + sqlserver_validate_size($filespec_maxsize) } if $filespec_filename or $filespec_name { validate_re($filespec_filename, '^.+$', 'filespec_filename must not be null if specifying filespec_name') validate_re($filespec_name, '^.+$', 'filespec_name must not be null if specifying filespec_filename') - mssql_validate_range($filespec_name, 1, 128, 'filespec_name can not be more than 128 characters and must be at least 1 character in length') + sqlserver_validate_range($filespec_name, 1, 128, 'filespec_name can not be more than 128 characters and must be at least 1 character in length') validate_absolute_path($filespec_filename) } if $log_filename { - mssql_validate_range($log_name, 1, 128, "${log_name} can not be more than 128 characters and must be at least 1 character in length") + sqlserver_validate_range($log_name, 1, 128, "${log_name} can not be more than 128 characters and must be at least 1 character in length") validate_absolute_path($log_filename) } - if $log_size { mssql_validate_size($log_size) } - if $log_maxsize { mssql_validate_size($log_maxsize) } + if $log_size { sqlserver_validate_size($log_size) } + if $log_maxsize { sqlserver_validate_size($log_maxsize) } if $log_filename or $log_filegrowth or $log_maxsize or $log_name or $log_size { - mssql_validate_range($filespec_filename, 1, 128, 'filespec_name and filespec_filename must be specified when specifying any log attributes') + sqlserver_validate_range($filespec_filename, 1, 128, 'filespec_name and filespec_filename must be specified when specifying any log attributes') validate_absolute_path($filespec_filename) } ## VALIDATE FILESTREAM @@ -150,17 +150,17 @@ "Filestream Directory Name should not be an absolute path but a directory name only, you provided ${filestream_directory_name}") } - mssql_validate_instance_name($instance) + sqlserver_validate_instance_name($instance) validate_re($containment, '^(PARTIAL|NONE)$', "Containment must be either PARTIAL or NONE, you provided ${containment}") ## Validate PARTIAL required variables switches if $containment == 'PARTIAL' { - if $db_chaining { mssql_validate_on_off($db_chaining) } - if $nested_triggers { mssql_validate_on_off($nested_triggers) } - if $transform_noise_words { mssql_validate_on_off($transform_noise_words) } - if $trustworthy { mssql_validate_on_off($trustworthy) } - mssql_validate_range($two_digit_year_cutoff, 1753, 9999, + if $db_chaining { sqlserver_validate_on_off($db_chaining) } + if $nested_triggers { sqlserver_validate_on_off($nested_triggers) } + if $transform_noise_words { sqlserver_validate_on_off($transform_noise_words) } + if $trustworthy { sqlserver_validate_on_off($trustworthy) } + sqlserver_validate_range($two_digit_year_cutoff, 1753, 9999, "Two digit year cutoff must be between 1753 and 9999, you provided ${two_digit_year_cutoff}") } diff --git a/manifests/login.pp b/manifests/login.pp index 5f253572..a05c98e4 100644 --- a/manifests/login.pp +++ b/manifests/login.pp @@ -40,7 +40,7 @@ # # [disabled] # Default value is false. Accepts [Boolean] values of true or false. -# @see Puppet::Parser::Fucntions#mssql_validate_instance_name +# @see Puppet::Parser::Fucntions#sqlserver_validate_instance_name # @see http://msdn.microsoft.com/en-us/library/ms186320(v=sql.110).aspx Server Role Members # @see http://technet.microsoft.com/en-us/library/ms189751(v=sql.110).aspx Create Login # @see http://technet.microsoft.com/en-us/library/ms189828(v=sql.110).aspx Alter Login @@ -59,7 +59,7 @@ $disabled = false, ) { - mssql_validate_instance_name($instance) + sqlserver_validate_instance_name($instance) validate_re($login_type,['^(SQL_LOGIN|WINDOWS_LOGIN)$']) diff --git a/manifests/sp_configure.pp b/manifests/sp_configure.pp index db96cc01..da734ef7 100644 --- a/manifests/sp_configure.pp +++ b/manifests/sp_configure.pp @@ -34,7 +34,7 @@ $with_override = false, $restart = false, ){ - mssql_validate_instance_name($instance) + sqlserver_validate_instance_name($instance) validate_re($config_name,'^\w+') validate_re($value,'^\d+$', "Value for ${config_name}, for instance ${instance}, must be a integer value, you provided ${value}") diff --git a/spec/defines/database_spec.rb b/spec/defines/database_spec.rb index 5a860f76..e4f26342 100644 --- a/spec/defines/database_spec.rb +++ b/spec/defines/database_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'sqlserver::database', :type => :define do include_context 'manifests' do let(:title) { 'myTitle' } - let(:mssql_tsql_title) { 'database-MSSQLSERVER-myTestDb' } + let(:sqlserver_tsql_title) { 'database-MSSQLSERVER-myTestDb' } let(:params) { { :db_name => 'myTestDb', :instance => 'MSSQLSERVER', @@ -12,7 +12,7 @@ end describe 'Minimal Params' do - it_behaves_like 'mssql_tsql command' + it_behaves_like 'sqlserver_tsql command' end describe 'Providing log filespec it should compile with valid log on params and' do @@ -34,7 +34,7 @@ let(:raise_error_check) { 'filespec_name can not be more than 128 characters' } end end - it_behaves_like 'mssql_tsql command' do + it_behaves_like 'sqlserver_tsql command' do let(:additional_params) { { :filespec_filename => 'c:/test/test.mdf', :filespec_name => 'myCreCre', :log_filename => "c:/test/logfile.ldf", :log_name => "myCrazyLog"} } @@ -49,8 +49,8 @@ /\-\-\s*UPDATE SECTION.*IF\ NOT\ EXISTS\(SELECT\ name\ FROM\ sys\.databases\ WHERE\ name\ =\ 'myTestDb'\ AND\ collation_name\ =\ 'SQL_Latin1_General_CP1_CI_AS'\)/m] } let(:should_contain_onlyif) { [ "IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'myTestDb' AND collation_name = 'SQL_Latin1_General_CP1_CI_AS')"] } - it_behaves_like 'mssql_tsql command' - it_behaves_like 'mssql_tsql onlyif' + it_behaves_like 'sqlserver_tsql command' + it_behaves_like 'sqlserver_tsql onlyif' end describe 'filestream failure' do let(:title) { 'myTitle' } @@ -61,7 +61,7 @@ it 'should not compile' do params.merge!({:filestream_directory_name => 'C:/TestDirectory'}) expect { - should contain_mssql_tsql('database-MSSQLSERVER-myTestDb') + should contain_sqlserver_tsql('database-MSSQLSERVER-myTestDb') }.to raise_error(Puppet::Error) end @@ -70,12 +70,12 @@ let(:additional_params) { {:filestream_non_transacted_access => 'FULL'} } let(:should_contain_command) { [/FILESTREAM\s+\(\s+NON_TRANSACTED_ACCESS\s+=\s+FULL/] } let(:should_not_contain_command) { [/WITH\s*,\s*FILESTREAM/] } - it_behaves_like 'mssql_tsql command' - it_behaves_like 'mssql_tsql without_command' + it_behaves_like 'sqlserver_tsql command' + it_behaves_like 'sqlserver_tsql without_command' end describe 'should not contain filestream by default' do let(:should_not_contain_command) { [/FILESTREAM/] } - it_behaves_like 'mssql_tsql without_command' + it_behaves_like 'sqlserver_tsql without_command' end describe 'when adding filestream_directory_name' do @@ -84,8 +84,8 @@ /FILESTREAM\s*\(/, /\(\s*DIRECTORY_NAME\s=\s'myDirName'/] } let(:should_not_contain_command) { [/NON_TRANSACTED_ACCESS/] } - it_behaves_like 'mssql_tsql command' - it_behaves_like 'mssql_tsql without_command' + it_behaves_like 'sqlserver_tsql command' + it_behaves_like 'sqlserver_tsql without_command' end describe 'partial parameters' do @@ -107,38 +107,38 @@ /FILESTREAM/, /TWO_DIGIT_YEAR_CUTOFF = 2049\s*,/ ] } - it_behaves_like 'mssql_tsql command' - it_behaves_like 'mssql_tsql without_command' + it_behaves_like 'sqlserver_tsql command' + it_behaves_like 'sqlserver_tsql without_command' end describe 'default_fulltext_language' do let(:additional_params) { {:containment => 'PARTIAL', :default_fulltext_language => 'us_english'} } let(:should_contain_command) { [/CONTAINMENT\s=\sPARTIAL/, /SET DEFAULT_FULLTEXT_LANGUAGE = \[us_english\]/, /,\s*DEFAULT_FULLTEXT_LANGUAGE=\[us_english\]/m] } - it_behaves_like 'mssql_tsql command' + it_behaves_like 'sqlserver_tsql command' end describe 'transform_noise_words ON' do let(:additional_params) { {:containment => 'PARTIAL', :transform_noise_words => 'ON'} } let(:should_contain_command) { [/CONTAINMENT\s=\sPARTIAL/, /,\s*TRANSFORM_NOISE_WORDS = ON/, /SET TRANSFORM_NOISE_WORDS = ON/, /is_transform_noise_words_on = 1/] } - it_behaves_like 'mssql_tsql command' + it_behaves_like 'sqlserver_tsql command' end describe 'transform_noise_words OFF' do let(:additional_params) { {:containment => 'PARTIAL', :transform_noise_words => 'OFF'} } let(:should_contain_command) { [/CONTAINMENT\s=\sPARTIAL/, /,\s*TRANSFORM_NOISE_WORDS = OFF/, /SET TRANSFORM_NOISE_WORDS = OFF/, /is_transform_noise_words_on = 0/] } - it_behaves_like 'mssql_tsql command' + it_behaves_like 'sqlserver_tsql command' end describe 'nested_triggers OFF' do let(:additional_params) { {:containment => 'PARTIAL', :nested_triggers => 'OFF'} } let(:should_contain_command) { [/CONTAINMENT\s=\sPARTIAL/, /NESTED_TRIGGERS = OFF/, /is_nested_triggers_on = 0/] } - it_behaves_like 'mssql_tsql command' + it_behaves_like 'sqlserver_tsql command' end describe 'nested_triggers ON' do let(:additional_params) { {:containment => 'PARTIAL', :nested_triggers => 'ON'} } let(:should_contain_command) { [/CONTAINMENT\s=\sPARTIAL/, /NESTED_TRIGGERS = ON/, /is_nested_triggers_on = 1/] } - it_behaves_like 'mssql_tsql command' + it_behaves_like 'sqlserver_tsql command' end describe 'trustworthy OFF' do let(:additional_params) { {:containment => 'PARTIAL', :trustworthy => 'OFF'} } let(:should_contain_command) { [/CONTAINMENT\s=\sPARTIAL/, /,\s*TRUSTWORTHY OFF/, /SET TRUSTWORTHY OFF/, /is_trustworthy_on = 0/] } - it_behaves_like 'mssql_tsql command' + it_behaves_like 'sqlserver_tsql command' end describe 'trustwothy ON' do let(:additional_params) { {:containment => 'PARTIAL', :trustworthy => 'ON'} } @@ -152,8 +152,8 @@ "IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'myTestDb' AND containment_desc = 'PARTIAL')", "IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'myTestDb' AND is_trustworthy_on = 1)" ] } - it_behaves_like 'mssql_tsql command' - it_behaves_like 'mssql_tsql onlyif' + it_behaves_like 'sqlserver_tsql command' + it_behaves_like 'sqlserver_tsql onlyif' end describe 'db_chainging ON' do let(:additional_params) { {:containment => 'PARTIAL', :db_chaining => 'ON'} } @@ -168,8 +168,8 @@ "IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'myTestDb' AND containment_desc = 'PARTIAL')", "IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'myTestDb' AND is_db_chaining_on = 1)" ] } - it_behaves_like 'mssql_tsql command' - it_behaves_like 'mssql_tsql onlyif' + it_behaves_like 'sqlserver_tsql command' + it_behaves_like 'sqlserver_tsql onlyif' end describe 'db_chainging OFF' do let(:additional_params) { {:containment => 'PARTIAL', :db_chaining => 'OFF'} } @@ -183,8 +183,8 @@ "IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'myTestDb' AND containment_desc = 'PARTIAL')", "IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'myTestDb' AND is_db_chaining_on = 0)" ] } - it_behaves_like 'mssql_tsql command' - it_behaves_like 'mssql_tsql onlyif' + it_behaves_like 'sqlserver_tsql command' + it_behaves_like 'sqlserver_tsql onlyif' end end end diff --git a/spec/defines/login_spec.rb b/spec/defines/login_spec.rb index 5aad545c..c126e01d 100644 --- a/spec/defines/login_spec.rb +++ b/spec/defines/login_spec.rb @@ -3,7 +3,7 @@ RSpec.describe 'sqlserver::login', :type => :define do include_context 'manifests' do - let(:mssql_tsql_title) { 'login-MSSQLSERVER-myTitle' } + let(:sqlserver_tsql_title) { 'login-MSSQLSERVER-myTitle' } let(:title) { 'myTitle' } let(:params) { { :login => 'myTitle', @@ -32,8 +32,8 @@ "@default_lang as varchar(50) = 'us_english'", "IF NOT EXISTS(SELECT name FROM sys.server_principals WHERE name = 'myTitle')" ] } - it_behaves_like 'mssql_tsql command' - it_behaves_like 'mssql_tsql onlyif' + it_behaves_like 'sqlserver_tsql command' + it_behaves_like 'sqlserver_tsql onlyif' end describe 'check_policy' do let(:additional_params) { {:check_policy => false, :check_expiration => true} } diff --git a/spec/defines/manifest_shared_examples.rb b/spec/defines/manifest_shared_examples.rb index b3403b84..1bc6fb5d 100644 --- a/spec/defines/manifest_shared_examples.rb +++ b/spec/defines/manifest_shared_examples.rb @@ -1,6 +1,6 @@ RSpec.shared_context 'manifests' do let(:title) { 'simple title' } - let(:mssql_tsql_title) {} + let(:sqlserver_tsql_title) {} let(:params) { {} } let(:additional_params) { {} } let(:should_contain_command) { [] } @@ -15,38 +15,38 @@ def convert_to_regexp(str) Regexp.new(Regexp.escape(str)) end - shared_examples 'mssql_tsql onlyif' do + shared_examples 'sqlserver_tsql onlyif' do it { params.merge!(additional_params) should_contain_onlyif.each do |check| - should contain_sqlserver_tsql(mssql_tsql_title).with_onlyif(convert_to_regexp(check)) + should contain_sqlserver_tsql(sqlserver_tsql_title).with_onlyif(convert_to_regexp(check)) end } end - shared_examples 'mssql_tsql without_onlyif' do + shared_examples 'sqlserver_tsql without_onlyif' do it { params.merge!(additional_params) should_not_contain_onlyif.each do |check| - should contain_sqlserver_tsql(mssql_tsql_title).with_onlyif(convert_to_regexp(check)) + should contain_sqlserver_tsql(sqlserver_tsql_title).with_onlyif(convert_to_regexp(check)) end } end - shared_examples 'mssql_tsql command' do + shared_examples 'sqlserver_tsql command' do it { params.merge!(additional_params) should_contain_command.each do |check| - should contain_sqlserver_tsql(mssql_tsql_title).with_command(convert_to_regexp(check)) + should contain_sqlserver_tsql(sqlserver_tsql_title).with_command(convert_to_regexp(check)) end } end - shared_examples 'mssql_tsql without_command' do + shared_examples 'sqlserver_tsql without_command' do it { params.merge!(additional_params) should_not_contain_command.each do |check| - should_not contain_sqlserver_tsql(mssql_tsql_title).with_command(convert_to_regexp(check)) + should_not contain_sqlserver_tsql(sqlserver_tsql_title).with_command(convert_to_regexp(check)) end } end diff --git a/spec/defines/sp_configure_spec.rb b/spec/defines/sp_configure_spec.rb index 1f16c3d7..2ebb4df2 100644 --- a/spec/defines/sp_configure_spec.rb +++ b/spec/defines/sp_configure_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'sqlserver::sp_configure', :type => :define do include_context 'manifests' do let(:title) { 'filestream access level' } - let(:mssql_tsql_title) { 'sp_configure-MSSQLSERVER-filestream access level' } + let(:sqlserver_tsql_title) { 'sp_configure-MSSQLSERVER-filestream access level' } let(:params) { { :config_name => 'filestream access level', :value => 1, @@ -22,8 +22,8 @@ "IF EXISTS(select * from @sp_conf where name = 'filestream access level' AND run_value != 1) THROW 51000, 'sp_configure `filestream access level` is not in the correct state', 10" ] } - it_behaves_like 'mssql_tsql command' - it_behaves_like 'mssql_tsql onlyif' + it_behaves_like 'sqlserver_tsql command' + it_behaves_like 'sqlserver_tsql onlyif' end describe 'reconfigure => false' do @@ -34,7 +34,7 @@ 'RECONFIGURE WITH OVERRIDE', 'RECONFIGURE' ] } - it_behaves_like 'mssql_tsql without_command' + it_behaves_like 'sqlserver_tsql without_command' end describe 'reconfigure => false' do @@ -45,8 +45,8 @@ 'RECONFIGURE WITH OVERRIDE', ] } let(:should_contain_command) { ['RECONFIGURE'] } - it_behaves_like 'mssql_tsql command' - it_behaves_like 'mssql_tsql without_command' + it_behaves_like 'sqlserver_tsql command' + it_behaves_like 'sqlserver_tsql without_command' end describe 'service' do diff --git a/spec/functions/mssql_validate_instance_name_spec.rb b/spec/functions/mssql_validate_instance_name_spec.rb deleted file mode 100644 index 27e7a763..00000000 --- a/spec/functions/mssql_validate_instance_name_spec.rb +++ /dev/null @@ -1,12 +0,0 @@ -require 'spec_helper' - -describe 'mssql_validate_instance_name function' do - let(:scope) { PuppetlabsSpec::PuppetInternals.scope } - it 'should exist' do - expect(Puppet::Parser::Functions.function("mssql_validate_instance_name")).to eq("function_mssql_validate_instance_name") - end - it 'should fail with over 16 characters' do - expect { scope.function_mssql_validate_instance_name('ABCDEFGHIJKLMNOPQRSTUVWXYZ') }.to raise_error - end - -end diff --git a/spec/functions/mssql_is_domain_user_spec.rb b/spec/functions/sqlserver_is_domain_user_spec.rb similarity index 84% rename from spec/functions/mssql_is_domain_user_spec.rb rename to spec/functions/sqlserver_is_domain_user_spec.rb index 2c0f89eb..f353448e 100644 --- a/spec/functions/mssql_is_domain_user_spec.rb +++ b/spec/functions/sqlserver_is_domain_user_spec.rb @@ -1,13 +1,12 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib/puppet_x/mssql/server_helper')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib/puppet_x/sqlserver/server_helper')) - -RSpec.describe 'mssql_is_domain_user' do +RSpec.describe 'sqlserver_is_domain_or_local_user?' do shared_examples 'return the value' do let(:scope) { PuppetlabsSpec::PuppetInternals.scope } it { Facter.stubs(:value).with(anything()) Facter.stubs(:value).with(:hostname).returns('mybox') - expect(scope.function_mssql_is_domain_user([user])).to eq(expected_value) + expect(scope.function_sqlserver_is_domain_or_local_user([user])).to eq(expected_value) } end diff --git a/spec/functions/sqlserver_validate_instance_name_spec.rb b/spec/functions/sqlserver_validate_instance_name_spec.rb new file mode 100644 index 00000000..5e180f03 --- /dev/null +++ b/spec/functions/sqlserver_validate_instance_name_spec.rb @@ -0,0 +1,12 @@ +require 'spec_helper' + +describe 'sqlserver_validate_instance_name function' do + let(:scope) { PuppetlabsSpec::PuppetInternals.scope } + it 'should exist' do + expect(Puppet::Parser::Functions.function("sqlserver_validate_instance_name")).to eq("function_sqlserver_validate_instance_name") + end + it 'should fail with over 16 characters' do + expect { scope.function_sqlserver_validate_instance_name('ABCDEFGHIJKLMNOPQRSTUVWXYZ') }.to raise_error + end + +end diff --git a/spec/functions/mssql_validate_size_spec.rb b/spec/functions/sqlserver_validate_size_spec.rb similarity index 68% rename from spec/functions/mssql_validate_size_spec.rb rename to spec/functions/sqlserver_validate_size_spec.rb index 990b2162..09b45dc3 100644 --- a/spec/functions/mssql_validate_size_spec.rb +++ b/spec/functions/sqlserver_validate_size_spec.rb @@ -1,29 +1,29 @@ require 'spec_helper' require 'puppet/error' -describe 'mssql_validate_size function' do +describe 'sqlserver_validate_size function' do let(:scope) { PuppetlabsSpec::PuppetInternals.scope } shared_examples 'should compile' do |value| it "with a value #{value}" do - scope.function_mssql_validate_size([value]) + scope.function_sqlserver_validate_size([value]) end end shared_examples 'should raise error' do |value, error_re| it { - expect { scope.function_mssql_validate_size([value]) }.to raise_error(Puppet::ParseError, error_re) + expect { scope.function_sqlserver_validate_size([value]) }.to raise_error(Puppet::ParseError, error_re) } end it 'should exist' do - expect(Puppet::Parser::Functions.function("mssql_validate_size")).to eq("function_mssql_validate_size") + expect(Puppet::Parser::Functions.function("sqlserver_validate_size")).to eq("function_sqlserver_validate_size") end describe 'should raise error when no arguments passed' do it { - expect { scope.function_mssql_validate_size([]) }.to raise_error(Puppet::ParseError, /requires exactly 1 argument/) + expect { scope.function_sqlserver_validate_size([]) }.to raise_error(Puppet::ParseError, /requires exactly 1 argument/) } end diff --git a/spec/functions/mssql_validate_svrroles_hash_spec.rb b/spec/functions/sqlserver_validate_svrroles_hash_spec.rb similarity index 73% rename from spec/functions/mssql_validate_svrroles_hash_spec.rb rename to spec/functions/sqlserver_validate_svrroles_hash_spec.rb index cf726371..c4015e5a 100644 --- a/spec/functions/mssql_validate_svrroles_hash_spec.rb +++ b/spec/functions/sqlserver_validate_svrroles_hash_spec.rb @@ -1,14 +1,14 @@ require 'spec_helper' require 'puppet/error' -RSpec.describe 'mssql_validate_svrroles_hash function' do +RSpec.describe 'sqlserver_validate_svrroles_hash function' do let(:scope) { PuppetlabsSpec::PuppetInternals.scope } possible_roles = %w(sysadmin serveradmin securityadmin processadmin setupadmin bulkadmin diskadmin dbcreator) shared_examples 'compile' do |value| it { - scope.function_mssql_validate_svrroles_hash([value]) + scope.function_sqlserver_validate_svrroles_hash([value]) } end @@ -29,7 +29,7 @@ let(:msg) { /svrrole requires a value of/ } it { expect { - scope.function_mssql_validate_svrroles_hash(arguments) + scope.function_sqlserver_validate_svrroles_hash(arguments) }.to raise_error(Puppet::Error, msg) } @@ -37,10 +37,10 @@ describe 'should fail with more than one parameter' do let(:arguments) { [{'sysadmin' => 1}, 'whoops'] } - let(:msg) { /mssql_validate_svcrole_hash\(\): wrong number of arguments/ } + let(:msg) { /sqlserver_validate_svcrole_hash\(\): wrong number of arguments/ } it { expect { - scope.function_mssql_validate_svrroles_hash(arguments) + scope.function_sqlserver_validate_svrroles_hash(arguments) }.to raise_error(Puppet::Error, msg) } end diff --git a/spec/unit/puppet/provider/sqlserver__instance_spec.rb b/spec/unit/puppet/provider/sqlserver__instance_spec.rb index e474b1fd..a9a6488e 100644 --- a/spec/unit/puppet/provider/sqlserver__instance_spec.rb +++ b/spec/unit/puppet/provider/sqlserver__instance_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'mssql_install_context.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'sqlserver_install_context.rb')) provider_class = Puppet::Type.type(:sqlserver_instance).provider(:mssql) diff --git a/spec/unit/puppet/provider/sqlserver_features_spec.rb b/spec/unit/puppet/provider/sqlserver_features_spec.rb index 4d65e4ef..e43e27a8 100644 --- a/spec/unit/puppet/provider/sqlserver_features_spec.rb +++ b/spec/unit/puppet/provider/sqlserver_features_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' require 'rspec' -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'mssql_spec_helper.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'sqlserver_spec_helper.rb')) provider_class = Puppet::Type.type(:sqlserver_features).provider(:mssql) @@ -48,9 +48,7 @@ @provider = provider_class.new(@resource) stub_powershell_call(subject) - stub_source_which_call args - if !feature_remove.empty? stub_remove_features(args, feature_remove) end diff --git a/spec/unit/puppet/mssql_install_context.rb b/spec/unit/puppet/sqlserver_install_context.rb similarity index 100% rename from spec/unit/puppet/mssql_install_context.rb rename to spec/unit/puppet/sqlserver_install_context.rb diff --git a/spec/unit/puppet/mssql_spec_helper.rb b/spec/unit/puppet/sqlserver_spec_helper.rb similarity index 93% rename from spec/unit/puppet/mssql_spec_helper.rb rename to spec/unit/puppet/sqlserver_spec_helper.rb index 9a10c74f..8cce4d0a 100644 --- a/spec/unit/puppet/mssql_spec_helper.rb +++ b/spec/unit/puppet/sqlserver_spec_helper.rb @@ -4,7 +4,7 @@ def stub_source_which_call(source) def stub_powershell_call(subject) Puppet::Util.stubs(:which).with('powershell.exe').returns('powershell.exe') - subject.expects(:powershell) + Puppet::Provider::Sqlserver.stubs(:run_install_dot_net).returns() end def stub_add_features(args, features) diff --git a/spec/unit/puppet/type/sqlserver_instance_spec.rb b/spec/unit/puppet/type/sqlserver_instance_spec.rb index 07c6f93e..dd8638a6 100644 --- a/spec/unit/puppet/type/sqlserver_instance_spec.rb +++ b/spec/unit/puppet/type/sqlserver_instance_spec.rb @@ -1,5 +1,5 @@ require 'spec_helper' -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'mssql_install_context.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'sqlserver_install_context.rb')) RSpec.describe Puppet::Type.type(:sqlserver_instance) do let(:error_class) { Puppet::Error } diff --git a/spec/unit/puppet_x/server_helper_spec.rb b/spec/unit/puppet_x/server_helper_spec.rb index 9246991f..2f1543ec 100644 --- a/spec/unit/puppet_x/server_helper_spec.rb +++ b/spec/unit/puppet_x/server_helper_spec.rb @@ -1,20 +1,20 @@ require 'rspec' require 'spec_helper' -require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'lib/puppet_x/mssql/server_helper')) +require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'lib/puppet_x/sqlserver/server_helper')) -RSpec.describe PuppetX::Mssql::ServerHelper do - let(:subject) { PuppetX::Mssql::ServerHelper } +RSpec.describe PuppetX::Sqlserver::ServerHelper do + let(:subject) { PuppetX::Sqlserver::ServerHelper } shared_examples 'when calling with' do |user, should_be_bool| it "with #{user} should return #{should_be_bool}" do subject.stubs(:lookupvar).with('hostname').returns('mybox') - subject.is_domain_user?(user, 'mybox').should(eq(should_be_bool)) + subject.is_domain_or_local_user?(user, 'mybox').should(eq(should_be_bool)) end end shared_examples 'translate_features' do it { - expect(PuppetX::Mssql::ServerHelper.translate_features(features)).to eq(translated) + expect(PuppetX::Sqlserver::ServerHelper.translate_features(features)).to eq(translated) } end