Skip to content

Commit 8d44d62

Browse files
Merge pull request #345 from david22swan/FM-8199
(FM-8199) - Port module to Litmus
2 parents 9f15449 + 67d7117 commit 8d44d62

30 files changed

+695
-967
lines changed

.fixtures.yml

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
fixtures:
22
repositories:
3-
"stdlib": "https://github.com/puppetlabs/puppetlabs-stdlib.git"
3+
facts: 'https://github.com/puppetlabs/puppetlabs-facts.git'
4+
puppet_agent: 'https://github.com/puppetlabs/puppetlabs-puppet_agent.git'
5+
provision: 'https://github.com/puppetlabs/provision.git'
6+
stdlib: 'https://github.com/puppetlabs/puppetlabs-stdlib.git'
47
symlinks:
58
sqlserver: "#{source_dir}"

.github/workflows/release.yml

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
2+
name: "release"
3+
4+
on:
5+
push:
6+
branches:
7+
- 'release'
8+
9+
jobs:
10+
LitmusAcceptance2012Sql:
11+
runs-on: self-hosted
12+
strategy:
13+
matrix:
14+
ruby_version: [2.5.x]
15+
puppet_gem_version: [~> 6.0]
16+
platform: [release_checks_sql_2012]
17+
agent_family: ['puppet5', 'puppet6']
18+
19+
steps:
20+
- uses: actions/checkout@v1
21+
- name: Litmus Parallel
22+
uses: puppetlabs/action-litmus_parallel@master
23+
with:
24+
platform: ${{ matrix.platform }}
25+
agent_family: ${{ matrix.agent_family }}
26+
additional_command: ${{ matrix.additional_command }}
27+
LitmusAcceptance2014Sql:
28+
runs-on: self-hosted
29+
strategy:
30+
matrix:
31+
ruby_version: [2.5.x]
32+
puppet_gem_version: [~> 6.0]
33+
platform: [release_checks_sql_2014]
34+
agent_family: ['puppet5', 'puppet6']
35+
36+
steps:
37+
- uses: actions/checkout@v1
38+
- name: Litmus Parallel
39+
uses: puppetlabs/action-litmus_parallel@master
40+
with:
41+
platform: ${{ matrix.platform }}
42+
agent_family: ${{ matrix.agent_family }}
43+
additional_command: ${{ matrix.additional_command }}
44+
LitmusAcceptance2016Sql:
45+
runs-on: self-hosted
46+
strategy:
47+
matrix:
48+
ruby_version: [2.5.x]
49+
puppet_gem_version: [~> 6.0]
50+
platform: [release_checks_sql_2016_parity]
51+
agent_family: ['puppet5', 'puppet6']
52+
additional_command: ['bundle exec rake litmus:add_feature[sqlversion_2016]']
53+
54+
steps:
55+
- uses: actions/checkout@v1
56+
- name: Litmus Parallel
57+
uses: puppetlabs/action-litmus_parallel@master
58+
with:
59+
platform: ${{ matrix.platform }}
60+
agent_family: ${{ matrix.agent_family }}
61+
additional_command: ${{ matrix.additional_command }}
62+
63+
Spec:
64+
runs-on: self-hosted
65+
strategy:
66+
matrix:
67+
check: [parallel_spec, 'syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop']
68+
ruby_version: [2.5.x]
69+
puppet_gem_version: [~> 5.0, ~> 6.0]
70+
exclude:
71+
- puppet_gem_version: ~> 5.0
72+
check: 'syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop'
73+
- ruby_version: 2.5.x
74+
puppet_gem_version: ~> 5.0
75+
steps:
76+
- uses: actions/checkout@v1
77+
- name: Spec Tests
78+
uses: puppetlabs/action-litmus_spec@master
79+
with:
80+
puppet_gem_version: ${{ matrix.puppet_gem_version }}
81+
check: ${{ matrix.check }}

.sync.yml

-14
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,6 @@ appveyor.yml:
3131
CHECK: parallel_spec
3232
simplecov: true
3333
Gemfile:
34-
required:
35-
":system_tests":
36-
- gem: puppet-module-posix-system-r#{minor_version}
37-
platforms: ruby
38-
- gem: puppet-module-win-system-r#{minor_version}
39-
platforms:
40-
- mswin
41-
- mingw
42-
- x64_mingw
43-
- gem: beaker-testmode_switcher
44-
version: "~> 0.4"
45-
- gem: master_manipulator
46-
- gem: puppet-blacksmith
47-
version: "~> 3.4"
4834
optional:
4935
":development":
5036
- gem: ruby-pwsh

Gemfile

-7
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,6 @@ group :development do
3131
gem "ruby-pwsh", require: false
3232
gem "github_changelog_generator", require: false, git: 'https://github.com/skywinder/github-changelog-generator', ref: '20ee04ba1234e9e83eb2ffb5056e23d641c7a018' if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.2.2')
3333
end
34-
group :system_tests do
35-
gem "puppet-module-posix-system-r#{minor_version}", require: false, platforms: [:ruby]
36-
gem "puppet-module-win-system-r#{minor_version}", require: false, platforms: [:mswin, :mingw, :x64_mingw]
37-
gem "beaker-testmode_switcher", '~> 0.4', require: false
38-
gem "master_manipulator", require: false
39-
gem "puppet-blacksmith", '~> 3.4', require: false
40-
end
4134

4235
puppet_version = ENV['PUPPET_GEM_VERSION']
4336
facter_version = ENV['FACTER_GEM_VERSION']
+88-86
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,112 @@
1-
module PuppetX::Sqlserver
2-
CONNECTION_CLOSED = 0
3-
4-
class SqlConnection # rubocop:disable Style/Documentation
5-
def open_and_run_command(query, config)
6-
begin
7-
open(config)
8-
execute(query)
9-
rescue win32_exception => e
10-
return ResultOutput.new(true, e.message, @connection)
11-
ensure
12-
close
1+
module PuppetX # rubocop:disable Style/ClassAndModuleChildren
2+
module Sqlserver
3+
CONNECTION_CLOSED = 0
4+
5+
class SqlConnection # rubocop:disable Style/Documentation
6+
def open_and_run_command(query, config)
7+
begin
8+
open(config)
9+
execute(query)
10+
rescue win32_exception => e
11+
return ResultOutput.new(true, e.message, @connection)
12+
ensure
13+
close
14+
end
15+
16+
ResultOutput.new(false, nil, @connection)
1317
end
1418

15-
ResultOutput.new(false, nil, @connection)
16-
end
17-
18-
private
19-
20-
def connection
21-
@connection ||= create_connection
22-
end
19+
private
2320

24-
def open(config)
25-
connection_string = get_connection_string(config)
26-
connection.Open(connection_string) if connection_closed?
27-
end
28-
29-
def get_connection_string(config)
30-
params = {
31-
'Provider' => 'SQLNCLI11',
32-
'Initial Catalog' => config[:database] || 'master',
33-
'Application Name' => 'Puppet',
34-
'Data Source' => '.',
35-
'DataTypeComptibility' => 80,
36-
}
37-
38-
admin_user = config[:admin_user] || ''
39-
admin_pass = config[:admin_pass] || ''
40-
41-
if config[:admin_login_type] == 'WINDOWS_LOGIN'
42-
# Windows based authentication
43-
raise ArgumentError, _('admin_user must be empty or nil') unless admin_user == ''
44-
raise ArgumentError, _('admin_pass must be empty or nil') unless admin_pass == ''
45-
params.store('Integrated Security', 'SSPI')
46-
else
47-
# SQL Server based authentication
48-
raise ArgumentError, _('admin_user must not be empty or nil') unless admin_user != ''
49-
raise ArgumentError, _('admin_pass must not be empty or nil') unless admin_pass != ''
50-
params.store('User ID', admin_user)
51-
params.store('Password', admin_pass)
21+
def connection
22+
@connection ||= create_connection
5223
end
5324

54-
if !config[:instance_name].nil? && config[:instance_name] !~ %r{^MSSQLSERVER$}
55-
params['Data Source'] = ".\\#{config[:instance_name]}"
25+
def open(config)
26+
connection_string = get_connection_string(config)
27+
connection.Open(connection_string) if connection_closed?
5628
end
5729

58-
params.map { |k, v| "#{k}=#{v}" }.join(';')
59-
end
30+
def get_connection_string(config)
31+
params = {
32+
'Provider' => 'SQLNCLI11',
33+
'Initial Catalog' => config[:database] || 'master',
34+
'Application Name' => 'Puppet',
35+
'Data Source' => '.',
36+
'DataTypeComptibility' => 80,
37+
}
38+
39+
admin_user = config[:admin_user] || ''
40+
admin_pass = config[:admin_pass] || ''
41+
42+
if config[:admin_login_type] == 'WINDOWS_LOGIN'
43+
# Windows based authentication
44+
raise ArgumentError, _('admin_user must be empty or nil') unless admin_user == ''
45+
raise ArgumentError, _('admin_pass must be empty or nil') unless admin_pass == ''
46+
params.store('Integrated Security', 'SSPI')
47+
else
48+
# SQL Server based authentication
49+
raise ArgumentError, _('admin_user must not be empty or nil') unless admin_user != ''
50+
raise ArgumentError, _('admin_pass must not be empty or nil') unless admin_pass != ''
51+
params.store('User ID', admin_user)
52+
params.store('Password', admin_pass)
53+
end
54+
55+
if !config[:instance_name].nil? && config[:instance_name] !~ %r{^MSSQLSERVER$}
56+
params['Data Source'] = ".\\#{config[:instance_name]}"
57+
end
58+
59+
params.map { |k, v| "#{k}=#{v}" }.join(';')
60+
end
6061

61-
def close
62-
connection.Close unless connection_closed?
63-
rescue win32_exception # rubocop:disable Lint/HandleExceptions
64-
end
62+
def close
63+
connection.Close unless connection_closed?
64+
rescue win32_exception # rubocop:disable Lint/HandleExceptions
65+
end
6566

66-
def connection_closed?
67-
connection.State == CONNECTION_CLOSED
68-
end
67+
def connection_closed?
68+
connection.State == CONNECTION_CLOSED
69+
end
6970

70-
def create_connection
71-
require 'win32ole'
72-
WIN32OLE.new('ADODB.Connection')
73-
end
71+
def create_connection
72+
require 'win32ole'
73+
WIN32OLE.new('ADODB.Connection')
74+
end
7475

75-
def execute(sql)
76-
connection.Execute(sql, nil, nil)
77-
end
76+
def execute(sql)
77+
connection.Execute(sql, nil, nil)
78+
end
7879

79-
def parse_column_names(result)
80-
result.Fields.extend(Enumerable).map(&:Name)
81-
end
80+
def parse_column_names(result)
81+
result.Fields.extend(Enumerable).map(&:Name)
82+
end
8283

83-
# having as a method instead of hard coded allows us to stub and test outside of Windows
84-
def win32_exception
85-
::WIN32OLERuntimeError
84+
# having as a method instead of hard coded allows us to stub and test outside of Windows
85+
def win32_exception
86+
::WIN32OLERuntimeError
87+
end
8688
end
87-
end
8889

89-
class ResultOutput # rubocop:disable Style/Documentation
90-
attr_reader :exitstatus, :error_message
90+
class ResultOutput # rubocop:disable Style/Documentation
91+
attr_reader :exitstatus, :error_message
9192

92-
def initialize(has_errors, error_message, connection)
93-
@exitstatus = has_errors ? 1 : 0
93+
def initialize(has_errors, error_message, connection)
94+
@exitstatus = has_errors ? 1 : 0
9495

95-
@error_message = extract_messages(connection) || error_message
96-
end
96+
@error_message = extract_messages(connection) || error_message
97+
end
9798

98-
def extract_messages(connection)
99-
return nil if connection.nil? || connection.Errors.count.zero?
99+
def extract_messages(connection)
100+
return nil if connection.nil? || connection.Errors.count.zero?
100101

101-
error_count = connection.Errors.count - 1
102+
error_count = connection.Errors.count - 1
102103

103-
((0..error_count).map { |i| connection.Errors(i).Description.to_s }).join("\n")
104-
end
104+
((0..error_count).map { |i| connection.Errors(i).Description.to_s }).join("\n")
105+
end
105106

106-
def has_errors # rubocop:disable Style/PredicateName
107-
@exitstatus != 0
107+
def has_errors # rubocop:disable Style/PredicateName
108+
@exitstatus != 0
109+
end
108110
end
109111
end
110112
end

provision.yaml

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
default:
2+
provisioner: vagrant
3+
images: ['gusztavvargadr/windows-server']
4+
release_checks_sql_2012:
5+
provisioner: vmpooler
6+
images: ['win-2012r2-x86_64']
7+
vars: 'sqlversion: sqlserver_2012'
8+
release_checks_sql_2014_parity:
9+
provisioner: vmpooler
10+
images: ['win-2012r2-x86_64']
11+
vars: 'sqlversion: sqlserver_2014'
12+
release_checks_sql_2014:
13+
provisioner: vmpooler
14+
images: ['win-2012r2-x86_64', 'win-2016-x86_64', 'win-2019-x86_64']
15+
vars: 'sqlversion: sqlserver_2014'
16+
release_checks_sql_2016_parity:
17+
provisioner: vmpooler
18+
images: ['win-2012r2-x86_64', 'win-2016-x86_64']
19+
vars: 'sqlversion: sqlserver_2016'
20+
release_checks_sql_2016:
21+
provisioner: vmpooler
22+
images: ['win-2012r2-x86_64', 'win-2016-x86_64', 'win-2019-x86_64']
23+
vars: 'sqlversion: sqlserver_2016'
24+
release_checks_sql_2017:
25+
provisioner: vmpooler
26+
images: ['win-2012r2-x86_64', 'win-2016-x86_64', 'win-2019-x86_64']
27+
vars: 'sqlversion: sqlserver_2017'
28+
release_checks_sql_2019:
29+
provisioner: vmpooler
30+
images: ['win-2012r2-x86_64', 'win-2016-x86_64', 'win-2019-x86_64']
31+
vars: 'sqlversion: sqlserver_2019'

spec/acceptance/nodesets/centos-7-x64.yml

-10
This file was deleted.

spec/acceptance/nodesets/debian-8-x64.yml

-10
This file was deleted.

spec/acceptance/nodesets/default.yml

-18
This file was deleted.

0 commit comments

Comments
 (0)