From 037cba64224536a09eddd622327fbf906d2b9c4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Fri, 25 Sep 2015 11:54:23 +0200 Subject: [PATCH 01/46] Enh #10: Partial tests for confignode and deploy types --- spec/unit/types/jboss_confignode_spec.rb | 61 ++++++++++++++++++++++++ spec/unit/types/jboss_deploy_spec.rb | 19 ++++++++ 2 files changed, 80 insertions(+) create mode 100644 spec/unit/types/jboss_confignode_spec.rb create mode 100644 spec/unit/types/jboss_deploy_spec.rb diff --git a/spec/unit/types/jboss_confignode_spec.rb b/spec/unit/types/jboss_confignode_spec.rb new file mode 100644 index 0000000..55e789c --- /dev/null +++ b/spec/unit/types/jboss_confignode_spec.rb @@ -0,0 +1,61 @@ +require 'spec_helper' + +describe 'jboss_confignode', :type => :type do + let(:described_class) { Puppet::Type.type(:jboss_confignode) } + subject { described_class } + let(:ex_class) { if Puppet.version > '3.0.0' then Puppet::ResourceError else Puppet::Error end } + + def extend_params(given) + { + :title => '/sybsystem=datasources' + }.merge(given) + end + + let(:type) { described_class.new(params) } + let(:params) { extend_params({}) } + describe 'new type with title == /sybsystem=datasources' do + it { expect(type).not_to be_nil } + describe 'controller == :undef' do + let(:params) { extend_params({ :controller => :undef }) } + it { expect { type }.to raise_error(ex_class, 'Parameter controller failed on Jboss_confignode[/sybsystem=datasources]: Domain controller must be provided') } + end + + describe 'properties' do + let(:params) { extend_params({ :properties => properties }) } + describe 'munge' do + context 'not respond_to? :[]' do + let(:properties) { false } + subject { type.property :properties } + its(:value) { is_expected.to eq({}) } + end + context 'respond_to? :[]' do + let(:properties) { {'example' => false} } + subject { type.property :properties } + its(:value) { is_expected.to eq(properties) } + end + end + + describe 'change_to_s' do + let(:properties) { false } + subject { type.property(:properties).change_to_s(from, to) } + context 'from :absent and to hash', :from => :absent, :to => { 'alice' => 'five', 'bob' => 'seven' } do + let(:from) { |expl| expl.metadata[:from] } + let(:to) { |expl| expl.metadata[:to] } + it { expect(subject).to eq("property 'alice' has been changed from nil to \"five\", property 'bob' has been changed from nil to \"seven\"") } + end + context 'from hash and to changed hash', :from => { 'alice' => 'five', 'bob' => 'nine' }, :to => { 'alice' => 'five', 'bob' => 'seven' } do + let(:from) { |expl| expl.metadata[:from] } + let(:to) { |expl| expl.metadata[:to] } + it { expect(subject).to eq("property 'bob' has been changed from \"nine\" to \"seven\"") } + end + context 'from hash and to :absent', :from => { 'alice' => 'five', 'bob' => 'nine' }, :to => :absent do + before { skip('FIXME: A proper message while executing change_to_s for :to == :absent, ref: coi-gov-pl/puppet-jboss#9')} + let(:from) { |expl| expl.metadata[:from] } + let(:to) { |expl| expl.metadata[:to] } + it { expect(subject).to eq('properties has been removed') } + end + end + end + end + +end diff --git a/spec/unit/types/jboss_deploy_spec.rb b/spec/unit/types/jboss_deploy_spec.rb new file mode 100644 index 0000000..be2dc21 --- /dev/null +++ b/spec/unit/types/jboss_deploy_spec.rb @@ -0,0 +1,19 @@ +require 'spec_helper' + +describe 'jboss_deploy', :type => :type do + let(:described_class) { Puppet::Type.type(:jboss_deploy) } + subject { described_class } + it { expect(subject).not_to be_nil } + let(:ex_class) { if Puppet.version > '3.0.0' then Puppet::ResourceError else Puppet::Error end } + + def extend_params(given) + { + :title => 'spec-artifact' + }.merge(given) + end + + let(:type) { described_class.new(params) } + let(:params) { extend_params({}) } + it { expect(type).not_to be_nil } + +end \ No newline at end of file From 966f4e5ab64d4b99f91f83a62f9120611bb8870c Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Thu, 17 Dec 2015 09:59:57 +0100 Subject: [PATCH 02/46] #10 jboss_resourceadapter spec --- spec/unit/types/jboss_resourceadapter_spec.rb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 spec/unit/types/jboss_resourceadapter_spec.rb diff --git a/spec/unit/types/jboss_resourceadapter_spec.rb b/spec/unit/types/jboss_resourceadapter_spec.rb new file mode 100644 index 0000000..ee25a55 --- /dev/null +++ b/spec/unit/types/jboss_resourceadapter_spec.rb @@ -0,0 +1,26 @@ +require "spec_helper" + +describe 'jboss_resourceadapter', :type => :type do + let(:described_class) { Puppet::Type.type(:jboss_resourceadapter) } + subject { described_class } + it { expect(subject).not_to be_nil } + let(:ex_class) { if Puppet.version > '3.0.0' then Puppet::ResourceError else Puppet::Error end } + + def extend_params(given) + { + :title => 'spec-resourceadapter_spec' + }.merge(given) + end + + let(:type) { described_class.new(params) } + + describe 'controler' do + context 'given :undef' do + let(:params) { extend_params({ :controller => :undef }) } + it do + expect { type }.to raise_error(ex_class, + 'Parameter controller failed on Jboss_resourceadapter[spec-resourceadapter_spec]: Domain controller must be provided') + end + end + end +end From 39f95a56f8dee1062318ec9dfd4d07e81a04295b Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Fri, 18 Dec 2015 13:13:33 +0100 Subject: [PATCH 03/46] #10 Tests for jmsqueue and security domain --- spec/unit/types/jboss_jmsqueue_spec.rb | 26 ++++++++++++++++++ spec/unit/types/jboss_securitydomain_spec.rb | 28 ++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 spec/unit/types/jboss_jmsqueue_spec.rb create mode 100644 spec/unit/types/jboss_securitydomain_spec.rb diff --git a/spec/unit/types/jboss_jmsqueue_spec.rb b/spec/unit/types/jboss_jmsqueue_spec.rb new file mode 100644 index 0000000..ddcef25 --- /dev/null +++ b/spec/unit/types/jboss_jmsqueue_spec.rb @@ -0,0 +1,26 @@ +require "spec_helper" + +describe 'jboss_jmsqueue', :type => :type do + let(:described_class) { Puppet::Type.type(:jboss_jmsqueue) } + subject { described_class } + it { expect(subject).not_to be_nil } + let(:ex_class) { if Puppet.version > '3.0.0' then Puppet::ResourceError else Puppet::Error end } + + def extend_params(given) + { + :title => 'spec-jmsqueue_spec' + }.merge(given) + end + + let(:type) { described_class.new(params) } + + describe 'controller' do + context 'given :undef' do + let(:params) { extend_params({ :controller => :undef }) } + it do + expect { type }.to raise_error(ex_class, + 'Parameter controller failed on Jboss_jmsqueue[spec-jmsqueue_spec]: Domain controller must be provided') + end + end + end +end diff --git a/spec/unit/types/jboss_securitydomain_spec.rb b/spec/unit/types/jboss_securitydomain_spec.rb new file mode 100644 index 0000000..684f757 --- /dev/null +++ b/spec/unit/types/jboss_securitydomain_spec.rb @@ -0,0 +1,28 @@ +require "spec_helper" + +describe 'jboss_securitydomain', :type => :type do + let(:described_class) { Puppet::Type.type(:jboss_securitydomain) } + subject { described_class } + it { expect(subject).not_to be_nil } + + + let(:ex_class) { if Puppet.version > '3.0.0' then Puppet::ResourceError else Puppet::Error end } + + def extend_params(given) + { + :title => 'spec-resourceadapter_spec' + }.merge(given) + end + + let(:type) { described_class.new(params) } + + describe 'controler' do + context 'given :undef' do + let(:params) { extend_params({ :controller => :undef }) } + it do + expect { type }.to raise_error(ex_class, + 'Parameter controller failed on Jboss_securitydomain[spec-resourceadapter_spec]: Domain controller must be provided') + end + end + end +end From ae7d8ec04a66a2a1a43b4c7cc794385d8b0785af Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Mon, 21 Dec 2015 15:29:48 +0100 Subject: [PATCH 04/46] #10 jboss_short_version number of arguments check and tests --- .../parser/functions/jboss_short_version.rb | 4 ++- spec/functions/jboss_short_version_spec.rb | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 spec/functions/jboss_short_version_spec.rb diff --git a/lib/puppet/parser/functions/jboss_short_version.rb b/lib/puppet/parser/functions/jboss_short_version.rb index 86487d0..5d0e9fc 100644 --- a/lib/puppet/parser/functions/jboss_short_version.rb +++ b/lib/puppet/parser/functions/jboss_short_version.rb @@ -6,9 +6,11 @@ # 'eap-6.2.0.GA' -> '6.2' module Puppet::Parser::Functions newfunction(:jboss_short_version, :type => :rvalue) do |args| + raise(Puppet::ParseError, "jboss_short_version(): Wrong number of arguments given (#{args.size} for 1)") if args.size != 1 + version = args[0] re = /^(?:[a-z]+-)?(\d+\.\d+)\.\d+(?:\.[A-Za-z]+)?$/ m = re.match(version) if m then m[1] else nil end end -end \ No newline at end of file +end diff --git a/spec/functions/jboss_short_version_spec.rb b/spec/functions/jboss_short_version_spec.rb new file mode 100644 index 0000000..e28400e --- /dev/null +++ b/spec/functions/jboss_short_version_spec.rb @@ -0,0 +1,33 @@ +require "spec_helper" + +describe 'jboss_short_version', :type => :puppet_function do + + describe 'with zero parameters given' do + it do + should run. + with_params().and_raise_error( + Puppet::ParseError, + 'jboss_short_version(): Wrong number of arguments given (0 for 1)' + ) + end + end + + describe 'with two parameters given' do + it do + should run. + with_params('as-7.1.1.Final', 'eap-6.2.0.GA').and_raise_error( + Puppet::ParseError, + 'jboss_short_version(): Wrong number of arguments given (2 for 1)' + ) + end + end + + describe 'with as-7.1.1.Final as input it should return 7.1' do + let(:args) { ['as-7.1.1.Final'] } + it { should run.with_params(args[0]).and_return '7.1' } + end + + describe 'with asd as input it should return nil' do + it { should run.with_params('asd').and_return nil } + end +end From bea75c540263c16f3d4fb15639bd0cd9257adf96 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Tue, 22 Dec 2015 08:42:11 +0100 Subject: [PATCH 05/46] #10 fixes for bug in jboss_basename and tests --- lib/puppet/parser/functions/jboss_basename.rb | 9 ++++---- spec/functions/jboss_basename_spec.rb | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 spec/functions/jboss_basename_spec.rb diff --git a/lib/puppet/parser/functions/jboss_basename.rb b/lib/puppet/parser/functions/jboss_basename.rb index 0d1f147..1ae209b 100644 --- a/lib/puppet/parser/functions/jboss_basename.rb +++ b/lib/puppet/parser/functions/jboss_basename.rb @@ -8,10 +8,11 @@ # local file system. module Puppet::Parser::Functions newfunction(:jboss_basename, :type => :rvalue) do |args| - if args[0].is_a?(Array) - args.collect do |a| File.basename(a) end + input = args[0] + if input.is_a?(Array) + input.collect do |a| File.basename(a) end else - File.basename(args[0]) + File.basename(input) end end -end \ No newline at end of file +end diff --git a/spec/functions/jboss_basename_spec.rb b/spec/functions/jboss_basename_spec.rb new file mode 100644 index 0000000..f95a5a2 --- /dev/null +++ b/spec/functions/jboss_basename_spec.rb @@ -0,0 +1,21 @@ +require "spec_helper" + +describe 'jboss_basename', :type => :puppet_function do + + describe 'input is a string and should return file' do + let(:input) { 'path/to/file' } + it do + should run. + with_params(input).and_return('file') + end + end + + describe 'input is an array and should return file and file2' do + let(:input) { ['path/to/file', 'path/to/file2'] } + it do + should run. + with_params(input).and_return(['file', 'file2']) + end + end + +end From 7b15dff9f09584f462ed1920f121c31ff0c4d7fe Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Tue, 22 Dec 2015 09:42:24 +0100 Subject: [PATCH 06/46] #10 logic of jboss_dirname now in puppet_x + tests --- lib/puppet/parser/functions/jboss_basename.rb | 9 ++---- .../coi/jboss/functions/jboss_basename.rb | 28 +++++++++++++++++++ spec/functions/jboss_basename_spec.rb | 10 ++----- 3 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 lib/puppet_x/coi/jboss/functions/jboss_basename.rb diff --git a/lib/puppet/parser/functions/jboss_basename.rb b/lib/puppet/parser/functions/jboss_basename.rb index 1ae209b..4f51f38 100644 --- a/lib/puppet/parser/functions/jboss_basename.rb +++ b/lib/puppet/parser/functions/jboss_basename.rb @@ -1,3 +1,5 @@ +require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_basename') + # Jboss AS private basename function # # jboss_basename(string) : string @@ -8,11 +10,6 @@ # local file system. module Puppet::Parser::Functions newfunction(:jboss_basename, :type => :rvalue) do |args| - input = args[0] - if input.is_a?(Array) - input.collect do |a| File.basename(a) end - else - File.basename(input) - end + Puppet_X::Coi::Jboss::Functions.jboss_basename args end end diff --git a/lib/puppet_x/coi/jboss/functions/jboss_basename.rb b/lib/puppet_x/coi/jboss/functions/jboss_basename.rb new file mode 100644 index 0000000..726b317 --- /dev/null +++ b/lib/puppet_x/coi/jboss/functions/jboss_basename.rb @@ -0,0 +1,28 @@ +# A puppet x module +module Puppet_X +# A COI puppet_x module +module Coi +# JBoss module +module Jboss +# A custom class that holds custom functions +class Functions + + class << self + # PRIVATE INTERNAL FUNCTION. Returns the last component of the filename given in file_name + # + # @param args [Array] should be only one argument in array + # @return [string|string[]] the file name(s) + def jboss_basename args + raise(Puppet::ParseError, "jboss_basename(): Wrong numbers of arguments given (#{args.size} for 1)") if args.size != 1 + input = args[0] + if input.is_a?(Array) + input.collect do |a| File.basename(a) end + else + File.basename(input) + end + end + end +end +end +end +end diff --git a/spec/functions/jboss_basename_spec.rb b/spec/functions/jboss_basename_spec.rb index f95a5a2..26e3c3a 100644 --- a/spec/functions/jboss_basename_spec.rb +++ b/spec/functions/jboss_basename_spec.rb @@ -2,20 +2,16 @@ describe 'jboss_basename', :type => :puppet_function do - describe 'input is a string and should return file' do let(:input) { 'path/to/file' } it do should run. with_params(input).and_return('file') end - end - describe 'input is an array and should return file and file2' do - let(:input) { ['path/to/file', 'path/to/file2'] } + let(:input2) { ['path/to/file', 'path/to/file2'] } it do should run. - with_params(input).and_return(['file', 'file2']) + with_params(input2).and_return(['file', 'file2']) end - end - + end From 7e7e577adcd7af8fae8480f97c31ceeb96bae77f Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Tue, 22 Dec 2015 10:59:15 +0100 Subject: [PATCH 07/46] #10 raise error if args.size != 3 and tests --- .../parser/functions/jboss_hash_setvalue.rb | 3 +- spec/functions/jboss_hash_setvalue_spec.rb | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 spec/functions/jboss_hash_setvalue_spec.rb diff --git a/lib/puppet/parser/functions/jboss_hash_setvalue.rb b/lib/puppet/parser/functions/jboss_hash_setvalue.rb index 4d36ad6..c66d8f5 100644 --- a/lib/puppet/parser/functions/jboss_hash_setvalue.rb +++ b/lib/puppet/parser/functions/jboss_hash_setvalue.rb @@ -5,7 +5,8 @@ # Sets value to Puppet hash module Puppet::Parser::Functions newfunction(:jboss_hash_setvalue) do |args| + raise(Puppet::ParseError, "jboss_hash_setvalue(): wrong lenght of input given (#{args.size} for 3)") if args.size != 3 hash, key, value = args hash[key] = value end -end \ No newline at end of file +end diff --git a/spec/functions/jboss_hash_setvalue_spec.rb b/spec/functions/jboss_hash_setvalue_spec.rb new file mode 100644 index 0000000..3d7af9c --- /dev/null +++ b/spec/functions/jboss_hash_setvalue_spec.rb @@ -0,0 +1,37 @@ +require "spec_helper" + +describe 'jboss_hash_setvalue', :type => :puppet_function do + + context 'given invalid number of arguments(4)' do + it do + should run. + with_params(1,2,1,1).and_raise_error( + Puppet::ParseError, + "jboss_hash_setvalue(): wrong lenght of input given (4 for 3)" + ) + end + end + + context 'given invalid number of arguments(2)' do + it do + should run. + with_params(1,2).and_raise_error( + Puppet::ParseError, + "jboss_hash_setvalue(): wrong lenght of input given (2 for 3)" + ) + end + end + + context "given input => { 'john' = 'cena' }, 'adam', 'smith' it should return => { john => 'cena', adam => 'smith' }" do + let(:input) { { 'john' => 'cena' } } + it do + should run. + with_params(input, 'adam', 'smith').and_return('smith') + end + + after(:each) do + expect(input).to include('adam' => 'smith') + expect(input).to include('john' => 'cena') + expect(input.size).to eq(2) + end +end From 62c9c249b1bd2657a57454424545fe162db40936 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Tue, 22 Dec 2015 11:07:03 +0100 Subject: [PATCH 08/46] #10 fix --- spec/functions/jboss_hash_setvalue_spec.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/functions/jboss_hash_setvalue_spec.rb b/spec/functions/jboss_hash_setvalue_spec.rb index 3d7af9c..49cd022 100644 --- a/spec/functions/jboss_hash_setvalue_spec.rb +++ b/spec/functions/jboss_hash_setvalue_spec.rb @@ -34,4 +34,5 @@ expect(input).to include('john' => 'cena') expect(input.size).to eq(2) end + end end From 0f60e62a7887963d9b927b897c0d8bb3a00bc995 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Tue, 22 Dec 2015 11:29:04 +0100 Subject: [PATCH 09/46] #10 jboss_type_version moved to puppet_x + tests --- .../parser/functions/jboss_type_version.rb | 9 +++--- .../coi/jboss/functions/jboss_type_version.rb | 26 ++++++++++++++++ spec/functions/jboss_type_version_spec.rb | 30 +++++++++++++++++++ 3 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 lib/puppet_x/coi/jboss/functions/jboss_type_version.rb create mode 100644 spec/functions/jboss_type_version_spec.rb diff --git a/lib/puppet/parser/functions/jboss_type_version.rb b/lib/puppet/parser/functions/jboss_type_version.rb index ad91f77..896569b 100644 --- a/lib/puppet/parser/functions/jboss_type_version.rb +++ b/lib/puppet/parser/functions/jboss_type_version.rb @@ -1,3 +1,5 @@ +require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_type_version') + # Jboss AS private type version function # # jboss_type_version(string) : string @@ -6,9 +8,6 @@ # 'eap-6.2.0.GA' -> 'eap' module Puppet::Parser::Functions newfunction(:jboss_type_version, :type => :rvalue) do |args| - version = args[0] - re = /^([a-z]+)-(?:\d+\.\d+)\.\d+(?:\.[A-Za-z]+)?$/ - m = re.match(version) - if m then m[1] else nil end + Puppet_X::Coi::Jboss::Functions.jboss_type_version args end -end \ No newline at end of file +end diff --git a/lib/puppet_x/coi/jboss/functions/jboss_type_version.rb b/lib/puppet_x/coi/jboss/functions/jboss_type_version.rb new file mode 100644 index 0000000..d236682 --- /dev/null +++ b/lib/puppet_x/coi/jboss/functions/jboss_type_version.rb @@ -0,0 +1,26 @@ +# A puppet x module +module Puppet_X +# A COI puppet_x module +module Coi +# JBoss module +module Jboss +# A custom class that holds custom functions +class Functions + + class << self + # PRIVATE INTERNAL FUNCTION. Return type of application server given as input + # + # @param args [Array] should be only one argument in array + # @return [string|string[]] the application server name + def jboss_type_version args + raise(Puppet::ParseError, "jboss_type_version(): Given invalid number of parameters(#{args.size} instead of 1)") if args.size != 1 + version = args[0] + re = /^([a-z]+)-(?:\d+\.\d+)\.\d+(?:\.[A-Za-z]+)?$/ + m = re.match(version) + if m then m[1] else nil end + end + end +end +end +end +end diff --git a/spec/functions/jboss_type_version_spec.rb b/spec/functions/jboss_type_version_spec.rb new file mode 100644 index 0000000..e3a378b --- /dev/null +++ b/spec/functions/jboss_type_version_spec.rb @@ -0,0 +1,30 @@ +require "spec_helper" + +describe 'jboss_type_version' do + + context 'given invalid number of parameters' do + it do + should run. + with_params().and_raise_error( + Puppet::ParseError, + 'jboss_type_version(): Given invalid number of parameters(0 instead of 1)' + ) + end + end + + context 'given as-7.1.1.Final it should return as' do + let(:input) { 'as-7.1.1.Final' } + it do + should run. + with_params(input).and_return('as') + end + end + + context 'given invalid input' do + let(:input) { 'asd' } + it do + should run. + with_params(input).and_return(nil) + end + end +end From fef96bf9d2fc0604133d4838df632959d16bdbd5 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Tue, 22 Dec 2015 12:15:08 +0100 Subject: [PATCH 10/46] #10 jboss_short_version tests --- .../parser/functions/jboss_short_version.rb | 9 +++---- .../jboss/functions/jboss_short_version.rb | 27 +++++++++++++++++++ spec/functions/jboss_hash_setvalue_spec.rb | 1 + 3 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 lib/puppet_x/coi/jboss/functions/jboss_short_version.rb diff --git a/lib/puppet/parser/functions/jboss_short_version.rb b/lib/puppet/parser/functions/jboss_short_version.rb index 5d0e9fc..1019104 100644 --- a/lib/puppet/parser/functions/jboss_short_version.rb +++ b/lib/puppet/parser/functions/jboss_short_version.rb @@ -1,3 +1,5 @@ +require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_short_version') + # Jboss AS private short version function # # jboss_short_version(string) : string @@ -6,11 +8,6 @@ # 'eap-6.2.0.GA' -> '6.2' module Puppet::Parser::Functions newfunction(:jboss_short_version, :type => :rvalue) do |args| - raise(Puppet::ParseError, "jboss_short_version(): Wrong number of arguments given (#{args.size} for 1)") if args.size != 1 - - version = args[0] - re = /^(?:[a-z]+-)?(\d+\.\d+)\.\d+(?:\.[A-Za-z]+)?$/ - m = re.match(version) - if m then m[1] else nil end + Puppet_X::Coi::Jboss::Functions.jboss_short_version args end end diff --git a/lib/puppet_x/coi/jboss/functions/jboss_short_version.rb b/lib/puppet_x/coi/jboss/functions/jboss_short_version.rb new file mode 100644 index 0000000..6afa2e5 --- /dev/null +++ b/lib/puppet_x/coi/jboss/functions/jboss_short_version.rb @@ -0,0 +1,27 @@ +# A puppet x module +module Puppet_X +# A COI puppet_x module +module Coi +# JBoss module +module Jboss +# A custom class that holds custom functions +class Functions + + class << self + # PRIVATE INTERNAL FUNCTION. Return the version of application server + # + # @param args [Array] should be only one argument in array + # @return [string|string[]] the application server name(s) + def jboss_short_version args + raise(Puppet::ParseError, "jboss_short_version(): Wrong number of arguments given (#{args.size} for 1)") if args.size != 1 + + version = args[0] + re = /^(?:[a-z]+-)?(\d+\.\d+)\.\d+(?:\.[A-Za-z]+)?$/ + m = re.match(version) + if m then m[1] else nil end + end + end +end +end +end +end diff --git a/spec/functions/jboss_hash_setvalue_spec.rb b/spec/functions/jboss_hash_setvalue_spec.rb index 49cd022..76807af 100644 --- a/spec/functions/jboss_hash_setvalue_spec.rb +++ b/spec/functions/jboss_hash_setvalue_spec.rb @@ -23,6 +23,7 @@ end context "given input => { 'john' = 'cena' }, 'adam', 'smith' it should return => { john => 'cena', adam => 'smith' }" do + before { skip('FIXME: Method should return hash not only last key, ref coi-gov-pl/puppet-jboss#28 ') } let(:input) { { 'john' => 'cena' } } it do should run. From 316b7c2072ebf62383026fa1ab5edd85dac06dfa Mon Sep 17 00:00:00 2001 From: Morga Cezary Date: Thu, 31 Dec 2015 14:18:10 +0100 Subject: [PATCH 11/46] #10 Tests for jboss_deploy and jboss_jmsqueue --- spec/unit/types/jboss_deploy_spec.rb | 19 ++++++++++++++++--- spec/unit/types/jboss_jmsqueue_spec.rb | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/spec/unit/types/jboss_deploy_spec.rb b/spec/unit/types/jboss_deploy_spec.rb index be2dc21..c8c2236 100644 --- a/spec/unit/types/jboss_deploy_spec.rb +++ b/spec/unit/types/jboss_deploy_spec.rb @@ -13,7 +13,20 @@ def extend_params(given) end let(:type) { described_class.new(params) } - let(:params) { extend_params({}) } - it { expect(type).not_to be_nil } -end \ No newline at end of file + context 'no parameters given' do + let(:params) { extend_params({}) } + it { expect(type).not_to be_nil } + end + + describe 'controler' do + context 'given :undef' do + let(:params) { extend_params({ :controller => :undef }) } + it do + expect { type }.to raise_error(ex_class, + 'Parameter controller failed on Jboss_deploy[spec-artifact]: Domain controller must be provided') + end + end + end + +end diff --git a/spec/unit/types/jboss_jmsqueue_spec.rb b/spec/unit/types/jboss_jmsqueue_spec.rb index ddcef25..5793d64 100644 --- a/spec/unit/types/jboss_jmsqueue_spec.rb +++ b/spec/unit/types/jboss_jmsqueue_spec.rb @@ -23,4 +23,23 @@ def extend_params(given) end end end + + describe 'entries' do + context 'is_to_s' do + let(:entries) { [ 'queue/app-mails', 'java:jboss/exported/jms/queue/app-mails'] } + let(:params) { extend_params({ :entries => entries }) } + let(:property) { type.property(:entries) } + it do + expect(property.is_to_s(entries)).to eq( "[\"queue/app-mails\", \"java:jboss/exported/jms/queue/app-mails\"]" ) + end + end + context 'should_to_s' do + let(:entries) { [ 'queue/app-mails', 'java:jboss/exported/jms/queue/app-mails'] } + let(:params) { extend_params({ :entries => entries }) } + let(:property) { type.property(:entries) } + it do + expect(property.should_to_s(entries)).to eq( "[\"queue/app-mails\", \"java:jboss/exported/jms/queue/app-mails\"]" ) + end + end + end end From e40b61c56bab8ac46c8382ce3c6b951239ad9fe8 Mon Sep 17 00:00:00 2001 From: kkozakowski Date: Mon, 4 Jan 2016 08:49:20 +0100 Subject: [PATCH 12/46] #10 tests for jboss_dirname --- lib/puppet/parser/functions/jboss_dirname.rb | 10 +++---- lib/puppet/type/jboss_confignode.rb | 28 +++++++++---------- lib/puppet/type/jboss_jmsqueue.rb | 8 +++--- .../coi/jboss/functions/jboss_dirname.rb | 27 ++++++++++++++++++ spec/functions/jboss_dirname_spec.rb | 16 +++++++++++ spec/unit/types/jboss_confignode_spec.rb | 3 +- 6 files changed, 67 insertions(+), 25 deletions(-) create mode 100644 lib/puppet_x/coi/jboss/functions/jboss_dirname.rb create mode 100644 spec/functions/jboss_dirname_spec.rb diff --git a/lib/puppet/parser/functions/jboss_dirname.rb b/lib/puppet/parser/functions/jboss_dirname.rb index a124580..3d1e506 100644 --- a/lib/puppet/parser/functions/jboss_dirname.rb +++ b/lib/puppet/parser/functions/jboss_dirname.rb @@ -1,3 +1,5 @@ +require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_dirname') + # Jboss AS private dirname function # # jboss_dirname(string) : string @@ -8,10 +10,6 @@ # local file system. module Puppet::Parser::Functions newfunction(:jboss_dirname, :type => :rvalue) do |args| - if args[0].is_a?(Array) - args.collect do |a| File.dirname(a) end - else - File.dirname(args[0]) - end + Puppet_X::Coi::Jboss::Functions.jboss_dirname args end -end \ No newline at end of file +end diff --git a/lib/puppet/type/jboss_confignode.rb b/lib/puppet/type/jboss_confignode.rb index 926704e..4598c1c 100644 --- a/lib/puppet/type/jboss_confignode.rb +++ b/lib/puppet/type/jboss_confignode.rb @@ -1,6 +1,6 @@ Puppet::Type.newtype(:jboss_confignode) do @doc = "Generic configuration entry for JBoss Application Sever" - + newproperty(:ensure) do desc "Whether a configuration node should be in one of `present`, `absent`, `running`, `stopped`, `disabled` or `enabled` state." @@ -9,16 +9,16 @@ aliasvalue(:true, :present) aliasvalue(:false, :absent) - end + end newparam(:name) do desc "The name of resource" end - + newparam(:path) do desc "The JBoss configuration path to be ensured" end - - newproperty(:properties) do + + newproperty(:properties) do desc "Additional properties for node" munge do |value| @@ -28,18 +28,18 @@ value end end - + def change_to_s(current, desire) changes = [] desire.each do |key, desired_value| current_value = current[key] message = "property '#{key}' has been changed from #{current_value.inspect} to #{desired_value.inspect}" - changes << message unless current_value == desired_value + changes << message unless current_value == desired_value end changes.join ', ' end end - + newparam(:profile) do desc "The JBoss profile name" defaultto "full" @@ -49,12 +49,12 @@ def change_to_s(current, desire) desc "Indicate that server is in domain mode" newvalues :true, :false defaultto :true - + munge do |val| val == :true or val == true end end - + newparam(:controller) do desc "Domain controller host:port address" validate do |value| @@ -63,7 +63,7 @@ def change_to_s(current, desire) end end end - + newparam :ctrluser do desc 'A user name to connect to controller' end @@ -81,6 +81,6 @@ def change_to_s(current, desire) desc "Retry timeout in seconds" defaultto 1 end - - -end \ No newline at end of file + + +end diff --git a/lib/puppet/type/jboss_jmsqueue.rb b/lib/puppet/type/jboss_jmsqueue.rb index 030f9ed..709fe5e 100644 --- a/lib/puppet/type/jboss_jmsqueue.rb +++ b/lib/puppet/type/jboss_jmsqueue.rb @@ -9,7 +9,7 @@ newproperty(:entries, :array_matching => :all) do desc "entries passed as array" - + def is_to_s is return is.inspect end @@ -23,7 +23,7 @@ def should_to_s should defaultto false desc "durable true/false" end - + newparam(:profile) do desc "The JBoss profile name" defaultto "full" @@ -33,7 +33,7 @@ def should_to_s should desc "Indicate that server is in domain mode" defaultto true end - + newparam(:controller) do desc "Domain controller host:port address" validate do |value| @@ -42,7 +42,7 @@ def should_to_s should end end end - + newparam :ctrluser do desc 'A user name to connect to controller' end diff --git a/lib/puppet_x/coi/jboss/functions/jboss_dirname.rb b/lib/puppet_x/coi/jboss/functions/jboss_dirname.rb new file mode 100644 index 0000000..06f0f62 --- /dev/null +++ b/lib/puppet_x/coi/jboss/functions/jboss_dirname.rb @@ -0,0 +1,27 @@ +# A puppet x module +module Puppet_X +# A COI puppet_x module +module Coi +# JBoss module +module Jboss +# A custom class that holds custom functions +class Functions + + class << self + # PRIVATE INTERNAL FUNCTION. Returns the forst component of the filename given in file_name + # + # @param args [Array] should be only one argument in array + # @return [string|string[]] the file path(s) + def jboss_dirname args + raise(Puppet::ParseError, "jboss_dirname(): Wrong numbers of arguments given (#{args.size} for 1)") if args.size != 1 + if args[0].is_a?(Array) + args[0].collect do |a| File.dirname(a) end + else + File.dirname(args[0]) + end + end + end +end +end +end +end diff --git a/spec/functions/jboss_dirname_spec.rb b/spec/functions/jboss_dirname_spec.rb new file mode 100644 index 0000000..dfbe144 --- /dev/null +++ b/spec/functions/jboss_dirname_spec.rb @@ -0,0 +1,16 @@ +require "spec_helper" + +describe 'jboss_dirname', :type => :puppet_function do + + let(:input) { 'path/to/file' } + it do + should run. + with_params(input).and_return('path/to') + end + + let(:input2) { ['path/to/file', 'path/to/file2'] } + it do + should run. + with_params(input2).and_return(['path/to', 'path/to']) + end +end diff --git a/spec/unit/types/jboss_confignode_spec.rb b/spec/unit/types/jboss_confignode_spec.rb index 55e789c..b4442ef 100644 --- a/spec/unit/types/jboss_confignode_spec.rb +++ b/spec/unit/types/jboss_confignode_spec.rb @@ -34,11 +34,12 @@ def extend_params(given) its(:value) { is_expected.to eq(properties) } end end - + describe 'change_to_s' do let(:properties) { false } subject { type.property(:properties).change_to_s(from, to) } context 'from :absent and to hash', :from => :absent, :to => { 'alice' => 'five', 'bob' => 'seven' } do + before { skip('FIXME: A proper message while executing change_to_s for :to == :absent, ref: coi-gov-pl/puppet-jboss#9')} let(:from) { |expl| expl.metadata[:from] } let(:to) { |expl| expl.metadata[:to] } it { expect(subject).to eq("property 'alice' has been changed from nil to \"five\", property 'bob' has been changed from nil to \"seven\"") } From ed5b8865a465de8b3c34e79ce7f29dd6bd3981b7 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Tue, 5 Jan 2016 12:21:51 +0100 Subject: [PATCH 13/46] #10 more tests for jboss_fullconfig --- lib/facter/jboss_fullconfig.rb | 22 ++---------- lib/puppet_x/coi/jboss/configuration.rb | 11 ++++-- lib/puppet_x/coi/jboss/facts.rb | 38 ++++++++++++++++++++ spec/unit/facter/jboss_fullconfig_spec.rb | 43 +++++++++++++++-------- 4 files changed, 76 insertions(+), 38 deletions(-) create mode 100644 lib/puppet_x/coi/jboss/facts.rb diff --git a/lib/facter/jboss_fullconfig.rb b/lib/facter/jboss_fullconfig.rb index f418a02..86e16ec 100644 --- a/lib/facter/jboss_fullconfig.rb +++ b/lib/facter/jboss_fullconfig.rb @@ -1,21 +1,3 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '../puppet_x/coi/jboss/configuration')) +require File.expand_path(File.join(File.dirname(__FILE__), '../puppet_x/coi/jboss/facts')) -config = Puppet_X::Coi::Jboss::Configuration::read -unless config.nil? - config.each do |key, value| - fact_symbol = "jboss_#{key}".to_sym - Facter.add(fact_symbol) do - setcode { value } - end - end - Facter.add(:jboss_fullconfig) do - setcode do - if RUBY_VERSION < '1.9.0' - class << config - define_method(:to_s, proc { self.inspect }) - end - end - config - end - end -end +Puppet_X::Coi::Jboss::Facts.define_fullconfig_fact diff --git a/lib/puppet_x/coi/jboss/configuration.rb b/lib/puppet_x/coi/jboss/configuration.rb index 0f537af..3be8f9a 100644 --- a/lib/puppet_x/coi/jboss/configuration.rb +++ b/lib/puppet_x/coi/jboss/configuration.rb @@ -7,9 +7,14 @@ module Jboss # A class for JBoss configuration class Configuration class << self - + @config = nil + # Test method that return current version(for comatability with ruby 1.8) + def ruby_version + RUBY_VERSION + end + # Gets the main config file def configfile content = self.read_raw_profile_d.chomp @@ -65,7 +70,7 @@ def reset_config(value = nil) @config = value nil end - + # Gets configuration value by its symbol # # @param key [Symbol] a key in hash @@ -90,4 +95,4 @@ def read_raw_profile_d end end -end \ No newline at end of file +end diff --git a/lib/puppet_x/coi/jboss/facts.rb b/lib/puppet_x/coi/jboss/facts.rb new file mode 100644 index 0000000..2e93b46 --- /dev/null +++ b/lib/puppet_x/coi/jboss/facts.rb @@ -0,0 +1,38 @@ +require File.expand_path(File.join(File.dirname(__FILE__), '/configuration')) + +# A puppet x module +module Puppet_X +# A COI puppet_x module +module Coi +# JBoss module +module Jboss +# A class for JBoss facts +class Facts + class << self + def define_fullconfig_fact + config = Puppet_X::Coi::Jboss::Configuration::read + unless config.nil? + config.each do |key, value| + fact_symbol = "jboss_#{key}".to_sym + Facter.add(fact_symbol) do + setcode { value } + end + end + Facter.add(:jboss_fullconfig) do + setcode do + if Puppet_X::Coi::Jboss::Configuration.ruby_version < '1.9.0' + class << config + define_method(:to_s, proc { self.inspect }) + end + end + config + end + end + end + end + end +end + +end +end +end diff --git a/spec/unit/facter/jboss_fullconfig_spec.rb b/spec/unit/facter/jboss_fullconfig_spec.rb index c89389b..e1d6ddb 100644 --- a/spec/unit/facter/jboss_fullconfig_spec.rb +++ b/spec/unit/facter/jboss_fullconfig_spec.rb @@ -2,6 +2,7 @@ require 'puppet_x/coi/jboss/configuration' describe 'Fact jboss_fullconfig', :type => :fact do + let(:sample_config) do t = Tempfile.new('rspec-jboss-fullconfig') path = t.path @@ -13,44 +14,44 @@ # The Jboss home directory. # JBOSS_HOME=/usr/lib/wildfly-12.2.0.Final - + # The JBoss product name. # JBOSS_PRODUCT=wildfly - + # The JBoss version. # JBOSS_VERSION=12.2.0.Final - + # The JBoss configuration file # JBOSS_CONFIG=standalone-full.xml - + # The username who should own the process. # JBOSS_USER=wildfly - + # The amount of time to wait for startup # # STARTUP_WAIT=30 - + # The amount of time to wait for shutdown # # SHUTDOWN_WAIT=30 - + # Location to keep the console log # JBOSS_CONSOLE_LOG=/var/log/wildfly/console.log - + # Runs JBoss in domain mode? JBOSS_RUNASDOMAIN=false - + # JBoss running mode: domain or standalone JBOSS_MODE=standalone - + # Default JBoss domain controller JBOSS_CONTROLLER=127.0.0.1:9990 - + # Default JBoss domain profile JBOSS_PROFILE=full eos @@ -89,13 +90,25 @@ File.unlink(sample_config) end subject { Facter.value(:jboss_fullconfig) } + shared_examples 'is not nill and empty' do + it { expect(subject).not_to be_nil } + it { expect(subject).not_to be_empty } + end context 'with sample config file for WildFly 8.2' do - context 'return value' do - it { expect(subject).not_to be_nil } - it { expect(subject).not_to be_empty } + context 'without mocking RUBY_VERSION' do + it_behaves_like 'is not nill and empty' it { expect(subject).to respond_to(:[]) } its(:size) { should eq(10) } it { expect(subject).to eq(expected_hash) } end + + context 'with mocking RUBY_VERSION to 1.8.7' do + before :each do + expect(Puppet_X::Coi::Jboss::Configuration).to receive(:ruby_version).once.and_return('1.8.7') + end + + # it_behaves_like 'is not nill and empty' + it { expect(subject.to_s).to eq("{\"home\"=>\"/usr/lib/wildfly-12.2.0.Final\", \"product\"=>\"wildfly\", \"version\"=>\"12.2.0.Final\", \"config\"=>\"standalone-full.xml\", \"user\"=>\"wildfly\", \"console_log\"=>\"/var/log/wildfly/console.log\", \"runasdomain\"=>false, \"mode\"=>\"standalone\", \"controller\"=>\"127.0.0.1:9990\", \"profile\"=>\"full\"}")} + end end -end \ No newline at end of file +end From 42849dfd8247542c7bbac77b8403ff3bc09ea8ed Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Tue, 5 Jan 2016 12:32:45 +0100 Subject: [PATCH 14/46] #10 fix message in jboss_fullconfig_spec --- spec/unit/facter/jboss_fullconfig_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/unit/facter/jboss_fullconfig_spec.rb b/spec/unit/facter/jboss_fullconfig_spec.rb index e1d6ddb..efc636c 100644 --- a/spec/unit/facter/jboss_fullconfig_spec.rb +++ b/spec/unit/facter/jboss_fullconfig_spec.rb @@ -108,7 +108,7 @@ end # it_behaves_like 'is not nill and empty' - it { expect(subject.to_s).to eq("{\"home\"=>\"/usr/lib/wildfly-12.2.0.Final\", \"product\"=>\"wildfly\", \"version\"=>\"12.2.0.Final\", \"config\"=>\"standalone-full.xml\", \"user\"=>\"wildfly\", \"console_log\"=>\"/var/log/wildfly/console.log\", \"runasdomain\"=>false, \"mode\"=>\"standalone\", \"controller\"=>\"127.0.0.1:9990\", \"profile\"=>\"full\"}")} + it { expect(subject.to_s).to eq("{\"mode\"=>\"standalone\", \"console_log\"=>\"/var/log/wildfly/console.log\", \"config\"=>\"standalone-full.xml\", \"profile\"=>\"full\", \"runasdomain\"=>false, \"user\"=>\"wildfly\", \"version\"=>\"12.2.0.Final\", \"home\"=>\"/usr/lib/wildfly-12.2.0.Final\", \"product\"=>\"wildfly\", \"controller\"=>\"127.0.0.1:9990\"}")} end end end From 698745602a8e7febdd81eca6885678b05a9aa516 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Tue, 5 Jan 2016 12:46:21 +0100 Subject: [PATCH 15/46] #10 workaround for ruby1.8 with hashes --- spec/unit/facter/jboss_fullconfig_spec.rb | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/spec/unit/facter/jboss_fullconfig_spec.rb b/spec/unit/facter/jboss_fullconfig_spec.rb index efc636c..2c3df9a 100644 --- a/spec/unit/facter/jboss_fullconfig_spec.rb +++ b/spec/unit/facter/jboss_fullconfig_spec.rb @@ -107,8 +107,21 @@ expect(Puppet_X::Coi::Jboss::Configuration).to receive(:ruby_version).once.and_return('1.8.7') end - # it_behaves_like 'is not nill and empty' - it { expect(subject.to_s).to eq("{\"mode\"=>\"standalone\", \"console_log\"=>\"/var/log/wildfly/console.log\", \"config\"=>\"standalone-full.xml\", \"profile\"=>\"full\", \"runasdomain\"=>false, \"user\"=>\"wildfly\", \"version\"=>\"12.2.0.Final\", \"home\"=>\"/usr/lib/wildfly-12.2.0.Final\", \"product\"=>\"wildfly\", \"controller\"=>\"127.0.0.1:9990\"}")} + it_behaves_like 'is not nill and empty' + let('subject_sorted') { eval(subject.to_s).to_a.sort } + let("expected_output") {[["config", "standalone-full.xml"], + ["console_log", "/var/log/wildfly/console.log"], + ["controller", "127.0.0.1:9990"], + ["home", "/usr/lib/wildfly-12.2.0.Final"], + ["mode", "standalone"], + ["product", "wildfly"], + ["profile", "full"], + ["runasdomain", false], + ["user", "wildfly"], + ["version", "12.2.0.Final"]] + } + + it { expect(subject_sorted).to eq(expected_output)} end end end From 606b41dcbf78899e0e930024057c6f814dc6a031 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Thu, 7 Jan 2016 11:08:07 +0100 Subject: [PATCH 16/46] #10 workaround for ruby1.8 with hashes, tests for securitydomain --- .../provider/jboss_securitydomain/jbosscli.rb | 19 +++-- .../jboss_datasource/jbosscli_spec.rb | 30 +++---- .../jboss_securitydomain/jbosscli_spec.rb | 79 +++++++++++++++++++ 3 files changed, 103 insertions(+), 25 deletions(-) create mode 100644 spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb diff --git a/lib/puppet/provider/jboss_securitydomain/jbosscli.rb b/lib/puppet/provider/jboss_securitydomain/jbosscli.rb index 25a1270..485d035 100644 --- a/lib/puppet/provider/jboss_securitydomain/jbosscli.rb +++ b/lib/puppet/provider/jboss_securitydomain/jbosscli.rb @@ -3,16 +3,15 @@ Puppet::Type.type(:jboss_securitydomain).provide(:jbosscli, :parent => Puppet::Provider::Jbosscli) do def create - cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:add(login-modules=[{code=>\"#{@resource[:code]}\",flag=>\"#{@resource[:codeflag]}\",module-options=>[" - @resource[:moduleoptions].each_with_index do |(key, value), index| + cmd = "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:add(login-modules=[{code=>\"#{@resource[:code]}\",flag=>\"#{@resource[:codeflag]}\",module-options=>[" + options = [] + @resource[:moduleoptions].keys.sort.each do |key| + value = @resource[:moduleoptions][key] val = value.to_s.gsub(/\n/, ' ').strip - cmd += '%s => "%s"' % [key, val] - if index == @resource[:moduleoptions].length - 1 - break - end - cmd += "," + options << '%s => "%s"' % [key, val] end - cmd += "]}])" + cmd += options.join(',') + "]}])" + cmd = compilecmd(cmd) cmd2 = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:add(cache-type=default)" bringUp('Security Domain Cache Type', cmd2)[:result] bringUp('Security Domain', cmd)[:result] @@ -48,7 +47,7 @@ def exists? givenhash["#{key}"] = value.to_s.gsub(/\n/, ' ').strip end end - + data['login-modules'][0]['module-options'].each do |key, value| existinghash[key.to_s] = value.to_s.gsub(/\n/, ' ').strip end @@ -63,5 +62,5 @@ def exists? end return true end - + end diff --git a/spec/unit/provider/jboss_datasource/jbosscli_spec.rb b/spec/unit/provider/jboss_datasource/jbosscli_spec.rb index 53a7bd3..83a40d0 100644 --- a/spec/unit/provider/jboss_datasource/jbosscli_spec.rb +++ b/spec/unit/provider/jboss_datasource/jbosscli_spec.rb @@ -1,5 +1,5 @@ -require 'spec_helper' -require 'puppet_x/coi/jboss/configuration' +require "spec_helper" +require "puppet_x/coi/jboss/configuration" context "While mocking facts :jboss_product => 'jboss-eap' and :jboss_version => '6.4.0.GA'" do @@ -14,7 +14,7 @@ before :each do Puppet_X::Coi::Jboss::Configuration.reset_config(mock_values) end - + after :each do Puppet_X::Coi::Jboss::Configuration.reset_config end @@ -32,21 +32,21 @@ :jdbcscheme => 'h2:mem', } end - + let(:resource) do raw = sample_repl.dup raw[:provider] = described_class.name Puppet::Type.type(:jboss_datasource).new(raw) end - + let(:provider) do resource.provider end - + before :each do allow(provider.class).to receive(:suitable?).and_return(true) end - + describe 'Result of self.instances()' do let(:xa_result) do <<-eos @@ -78,7 +78,7 @@ it { expect(provider.class.instances).not_to be_empty } context 'its size' do subject { provider.class.instances.size } - it { expect(subject).to eq(2) } + it { expect(subject).to eq(2) } end context 'for second result, parameter' do subject { provider.class.instances[1] } @@ -87,7 +87,7 @@ its(:xa) { should eq(false) } end end - + context 'Given `testing` Non-XA datasource using h2:mem' do let(:command) do '/subsystem=datasources/data-source=testing:read-resource(recursive=true)' @@ -96,7 +96,7 @@ let(:timeout) { 0 } let(:retry_count) { 0 } let(:ctrlcfg) do - { + { :controller => "127.0.0.1:9990", :ctrluser => nil, :ctrlpasswd => nil @@ -171,27 +171,27 @@ expect(Puppet::Provider::Jbosscli).to receive(:executeAndGet). with(command, runasdomain, ctrlcfg, retry_count, timeout).and_return(result) end - + describe 'result of dbname()' do subject { provider.dbname } it { expect(subject).not_to be_nil } it { expect(subject).not_to be_empty } it { expect(subject).to eq(expected_connection) } end - + describe 'result of host()' do subject { provider.host } it { expect(subject).not_to be_nil } it { expect(subject).to be_empty } it { expect(subject).to eq('') } end - + describe 'result of port()' do subject { provider.port } it { expect(subject).not_to be_nil } it { expect(subject).to eq(0) } end - + describe 'result of jdbcscheme()' do subject { provider.jdbcscheme } it { expect(subject).not_to be_nil } @@ -302,4 +302,4 @@ end end -end \ No newline at end of file +end diff --git a/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb b/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb new file mode 100644 index 0000000..96dc6af --- /dev/null +++ b/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb @@ -0,0 +1,79 @@ +require "spec_helper" + +context "mocking default values" do + + let(:mock_values) do + { + :product => 'jboss-eap', + :version => '6.4.0.GA', + :controller => '127.0.0.1:9999', + } + end + + before :each do + Puppet_X::Coi::Jboss::Configuration.reset_config(mock_values) + end + + after :each do + Puppet_X::Coi::Jboss::Configuration.reset_config + end + + describe 'Puppet::Type::Jboss_securitydomain::ProviderJbosscli' do + + let(:described_class) do + Puppet::Type.type(:jboss_securitydomain).provider(:jbosscli) + end + let(:sample_repl) do + { + :name => 'testing', + :code => 'Database', + :codeflag => 'true', + :moduleoptions => { + 'principalsQuery' => 'select \'password\' from users u where u.login = ?', + 'hashUserPassword' => false, + }, + } + end + + let(:resource) do + raw = sample_repl.dup + raw[:provider] = described_class.name + Puppet::Type.type(:jboss_securitydomain).new(raw) + end + + let(:provider) do + resource.provider + end + + before :each do + allow(provider.class).to receive(:suitable?).and_return(true) + end + + describe '#create' do + before :each do + moduleoptions = 'hashUserPassword => "false",principalsQuery => "select \'password\' from users u where u.login = ?"' + + cmd = "/subsystem=security/security-domain=#{resource[:name]}/authentication=classic:add(login-modules=[{code=>\"#{resource[:code]}\",flag=>\"#{resource[:codeflag]}\",module-options=>[#{moduleoptions}]}])" + compilecmd = "/profile=full-ha/#{cmd}" + + cmd2 = "/subsystem=security/security-domain=#{resource[:name]}:add(cache-type=default)" + compilecmd2 = "/profile=full-ha/#{cmd2}" + + expect(provider).to receive(:compilecmd).with(cmd).and_return(compilecmd) + expect(provider).to receive(:compilecmd).with(cmd2).and_return(compilecmd2) + + bringUpName = 'Security Domain Cache Type' + bringUpName2 = 'Security Domain' + expected_output = { :result => 'asdfhagfgaskfagbfjbgk' } + expected_output2 = { :result => 'dffghbdfnmkbsdkj' } + + + expect(provider).to receive(:bringUp).with(bringUpName, compilecmd2).and_return(expected_output) + expect(provider).to receive(:bringUp).with(bringUpName2, compilecmd).and_return(expected_output) + end + subject { provider.create } + it {expect(subject).to eq('asdfhagfgaskfagbfjbgk') } + end + + end +end From f1cf0253fcc4fc73af5847f3908519b88c5b6478 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Thu, 7 Jan 2016 13:01:27 +0100 Subject: [PATCH 17/46] #10 test for destroy method in securitydomain --- .../jboss_securitydomain/jbosscli_spec.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb b/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb index 96dc6af..2481da0 100644 --- a/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb +++ b/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb @@ -75,5 +75,24 @@ it {expect(subject).to eq('asdfhagfgaskfagbfjbgk') } end + describe '#destroy' do + before :each do + cmd = "/subsystem=security/security-domain=#{resource[:name]}:remove()" + compilecmd = "/profile=full-ha/#{cmd}" + + bringDownName = 'Security Domain' + expected_output = { :result => 'asda'} + + expect(provider).to receive(:compilecmd).with(cmd).and_return(compilecmd) + expect(provider).to receive(:bringDown).with(bringDownName, compilecmd).and_return(expected_output) + end + subject { provider.destroy } + it { expect(subject).to eq('asda') } + end + + describe '#preparelines' do + + end + end end From 46a9516b04de81ceda867eaeed1acab36a68b5f9 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Thu, 7 Jan 2016 15:33:43 +0100 Subject: [PATCH 18/46] #10 securitydomain in puppet_x --- .../provider/jboss_securitydomain/jbosscli.rb | 64 +-------------- .../coi/jboss/provider/securitydomain.rb | 77 +++++++++++++++++++ .../jboss_securitydomain/jbosscli_spec.rb | 5 -- 3 files changed, 79 insertions(+), 67 deletions(-) create mode 100644 lib/puppet_x/coi/jboss/provider/securitydomain.rb diff --git a/lib/puppet/provider/jboss_securitydomain/jbosscli.rb b/lib/puppet/provider/jboss_securitydomain/jbosscli.rb index 485d035..e4f03ea 100644 --- a/lib/puppet/provider/jboss_securitydomain/jbosscli.rb +++ b/lib/puppet/provider/jboss_securitydomain/jbosscli.rb @@ -1,66 +1,6 @@ require File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'jbosscli.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/provider/securitydomain.rb')) Puppet::Type.type(:jboss_securitydomain).provide(:jbosscli, :parent => Puppet::Provider::Jbosscli) do - - def create - cmd = "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:add(login-modules=[{code=>\"#{@resource[:code]}\",flag=>\"#{@resource[:codeflag]}\",module-options=>[" - options = [] - @resource[:moduleoptions].keys.sort.each do |key| - value = @resource[:moduleoptions][key] - val = value.to_s.gsub(/\n/, ' ').strip - options << '%s => "%s"' % [key, val] - end - cmd += options.join(',') + "]}])" - cmd = compilecmd(cmd) - cmd2 = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:add(cache-type=default)" - bringUp('Security Domain Cache Type', cmd2)[:result] - bringUp('Security Domain', cmd)[:result] - end - - def destroy - cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:remove()" - bringDown('Security Domain', cmd)[:result] - end - - def preparelines lines - lines.gsub(/\((\"[^\"]+\") => (\"[^\"]+\")\)/, '\1 => \2').gsub(/\[((?:[\n\s]*\"[^\"]+\" => \"[^\"]+\",?[\n\s]*)+)\]/m, '{\1}') - end - - # - def exists? - cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:read-resource()" - res = executeWithoutRetry cmd - if not res[:result] - Puppet.debug "Security Domain does NOT exist" - return false - end - undefined = nil - lines = preparelines res[:lines] - data = eval(lines)['result'] - Puppet.debug "Security Domain exists: #{data.inspect}" - - existinghash = Hash.new - givenhash = Hash.new - - if !@resource[:moduleoptions].nil? - @resource[:moduleoptions].each do |key, value| - givenhash["#{key}"] = value.to_s.gsub(/\n/, ' ').strip - end - end - - data['login-modules'][0]['module-options'].each do |key, value| - existinghash[key.to_s] = value.to_s.gsub(/\n/, ' ').strip - end - - if !existinghash.nil? && !givenhash.nil? && existinghash != givenhash - diff = givenhash.to_a - existinghash.to_a - Puppet.notice "Security domain should be recreated. Diff: #{diff.inspect}" - Puppet.debug "Security domain moduleoptions existing hash => #{existinghash.inspect}" - Puppet.debug "Security domain moduleoptions given hash => #{givenhash.inspect}" - destroy - return false - end - return true - end - + include Puppet_X::Coi::Jboss::Provider::SecurityDomain end diff --git a/lib/puppet_x/coi/jboss/provider/securitydomain.rb b/lib/puppet_x/coi/jboss/provider/securitydomain.rb new file mode 100644 index 0000000..1d7d60e --- /dev/null +++ b/lib/puppet_x/coi/jboss/provider/securitydomain.rb @@ -0,0 +1,77 @@ +# A puppet x module +module Puppet_X +# A COI puppet_x module +module Coi +# JBoss module +module Jboss + +module Provider +# A class for JBoss configuration +module SecurityDomain + def create + cmd = "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:add(login-modules=[{code=>\"#{@resource[:code]}\",flag=>\"#{@resource[:codeflag]}\",module-options=>[" + options = [] + @resource[:moduleoptions].keys.sort.each do |key| + value = @resource[:moduleoptions][key] + val = value.to_s.gsub(/\n/, ' ').strip + options << '%s => "%s"' % [key, val] + end + cmd += options.join(',') + "]}])" + cmd = compilecmd(cmd) + cmd2 = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:add(cache-type=default)" + bringUp('Security Domain Cache Type', cmd2)[:result] + bringUp('Security Domain', cmd)[:result] + end + + def destroy + cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:remove()" + bringDown('Security Domain', cmd)[:result] + end + + def exists? + cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:read-resource()" + res = executeWithoutRetry cmd + if not res[:result] + Puppet.debug "Security Domain does NOT exist" + return false + end + undefined = nil + lines = preparelines res[:lines] + data = eval(lines)['result'] + Puppet.debug "Security Domain exists: #{data.inspect}" + + existinghash = Hash.new + givenhash = Hash.new + + if !@resource[:moduleoptions].nil? + @resource[:moduleoptions].each do |key, value| + givenhash["#{key}"] = value.to_s.gsub(/\n/, ' ').strip + end + end + + data['login-modules'][0]['module-options'].each do |key, value| + existinghash[key.to_s] = value.to_s.gsub(/\n/, ' ').strip + end + + if !existinghash.nil? && !givenhash.nil? && existinghash != givenhash + diff = givenhash.to_a - existinghash.to_a + Puppet.notice "Security domain should be recreated. Diff: #{diff.inspect}" + Puppet.debug "Security domain moduleoptions existing hash => #{existinghash.inspect}" + Puppet.debug "Security domain moduleoptions given hash => #{givenhash.inspect}" + destroy + return false + end + return true + end + + private + def preparelines lines + lines.gsub(/\((\"[^\"]+\") => (\"[^\"]+\")\)/, '\1 => \2').gsub(/\[((?:[\n\s]*\"[^\"]+\" => \"[^\"]+\",?[\n\s]*)+)\]/m, '{\1}') + end + + + end +end +end +end +end diff --git a/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb b/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb index 2481da0..e037a1e 100644 --- a/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb +++ b/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb @@ -89,10 +89,5 @@ subject { provider.destroy } it { expect(subject).to eq('asda') } end - - describe '#preparelines' do - - end - end end From f3dda70024c8fa7261e07cc84a20d058a6251de2 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Mon, 11 Jan 2016 15:53:19 +0100 Subject: [PATCH 19/46] #10 tests for securitydomain cli --- .../coi/jboss/provider/securitydomain.rb | 100 +++++++++--------- .../jboss_securitydomain/jbosscli_spec.rb | 59 ++++++++++- 2 files changed, 107 insertions(+), 52 deletions(-) diff --git a/lib/puppet_x/coi/jboss/provider/securitydomain.rb b/lib/puppet_x/coi/jboss/provider/securitydomain.rb index 1d7d60e..2d59321 100644 --- a/lib/puppet_x/coi/jboss/provider/securitydomain.rb +++ b/lib/puppet_x/coi/jboss/provider/securitydomain.rb @@ -8,68 +8,66 @@ module Jboss module Provider # A class for JBoss configuration module SecurityDomain - def create - cmd = "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:add(login-modules=[{code=>\"#{@resource[:code]}\",flag=>\"#{@resource[:codeflag]}\",module-options=>[" - options = [] - @resource[:moduleoptions].keys.sort.each do |key| - value = @resource[:moduleoptions][key] - val = value.to_s.gsub(/\n/, ' ').strip - options << '%s => "%s"' % [key, val] - end - cmd += options.join(',') + "]}])" - cmd = compilecmd(cmd) - cmd2 = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:add(cache-type=default)" - bringUp('Security Domain Cache Type', cmd2)[:result] - bringUp('Security Domain', cmd)[:result] - end - - def destroy - cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:remove()" - bringDown('Security Domain', cmd)[:result] + def create + cmd = "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:add(login-modules=[{code=>\"#{@resource[:code]}\",flag=>\"#{@resource[:codeflag]}\",module-options=>[" + options = [] + @resource[:moduleoptions].keys.sort.each do |key| + value = @resource[:moduleoptions][key] + val = value.to_s.gsub(/\n/, ' ').strip + options << '%s => "%s"' % [key, val] end + cmd += options.join(',') + "]}])" + cmd = compilecmd(cmd) + cmd2 = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:add(cache-type=default)" + bringUp('Security Domain Cache Type', cmd2)[:result] + bringUp('Security Domain', cmd)[:result] + end - def exists? - cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:read-resource()" - res = executeWithoutRetry cmd - if not res[:result] - Puppet.debug "Security Domain does NOT exist" - return false - end - undefined = nil - lines = preparelines res[:lines] - data = eval(lines)['result'] - Puppet.debug "Security Domain exists: #{data.inspect}" - - existinghash = Hash.new - givenhash = Hash.new + def destroy + cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:remove()" + bringDown('Security Domain', cmd)[:result] + end - if !@resource[:moduleoptions].nil? - @resource[:moduleoptions].each do |key, value| - givenhash["#{key}"] = value.to_s.gsub(/\n/, ' ').strip - end - end + def exists? + cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:read-resource()" + res = executeWithoutRetry cmd + if not res[:result] + Puppet.debug "Security Domain does NOT exist" + return false + end + undefined = nil + lines = preparelines res[:lines] + data = eval(lines)['result'] + Puppet.debug "Security Domain exists: #{data.inspect}" - data['login-modules'][0]['module-options'].each do |key, value| - existinghash[key.to_s] = value.to_s.gsub(/\n/, ' ').strip - end + existinghash = Hash.new + givenhash = Hash.new - if !existinghash.nil? && !givenhash.nil? && existinghash != givenhash - diff = givenhash.to_a - existinghash.to_a - Puppet.notice "Security domain should be recreated. Diff: #{diff.inspect}" - Puppet.debug "Security domain moduleoptions existing hash => #{existinghash.inspect}" - Puppet.debug "Security domain moduleoptions given hash => #{givenhash.inspect}" - destroy - return false + unless @resource[:moduleoptions].nil? + @resource[:moduleoptions].each do |key, value| + givenhash["#{key}"] = value.to_s.gsub(/\n/, ' ').strip end - return true end - private - def preparelines lines - lines.gsub(/\((\"[^\"]+\") => (\"[^\"]+\")\)/, '\1 => \2').gsub(/\[((?:[\n\s]*\"[^\"]+\" => \"[^\"]+\",?[\n\s]*)+)\]/m, '{\1}') + data['login-modules'][0]['module-options'].each do |key, value| + existinghash[key.to_s] = value.to_s.gsub(/\n/, ' ').strip end + if !existinghash.nil? && !givenhash.nil? && existinghash != givenhash + diff = givenhash.to_a - existinghash.to_a + Puppet.notice "Security domain should be recreated. Diff: #{diff.inspect}" + Puppet.debug "Security domain moduleoptions existing hash => #{existinghash.inspect}" + Puppet.debug "Security domain moduleoptions given hash => #{givenhash.inspect}" + destroy + return false + end + return true + end + private + def preparelines lines + lines.gsub(/\((\"[^\"]+\") => (\"[^\"]+\")\)/, '\1 => \2').gsub(/\[((?:[\n\s]*\"[^\"]+\" => \"[^\"]+\",?[\n\s]*)+)\]/m, '{\1}') + end end end end diff --git a/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb b/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb index e037a1e..5a5f2c3 100644 --- a/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb +++ b/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb @@ -89,5 +89,62 @@ subject { provider.destroy } it { expect(subject).to eq('asda') } end - end + + describe '#exist?' do + before :each do + cmd = "/subsystem=security/security-domain=#{resource[:name]}/authentication=classic:read-resource()" + compilecmd = "/profile=full-ha/#{cmd}" + + lines = 'asd' + + bringDownName = 'Security Domain' + expected_lines = <<-eos + { + "outcome" => "success", + "result" => { + "login-modules" => [{ + "code" => "Database", + "flag" => "required", + "module" => undefined, + "module-options" => { + "rolesQuery" => "select r.name, 'Roles' from users u join user_roles ur on ur.user_id = u.id join roles r on r.id = ur.role_id where u.login = ?", + "hashStorePassword" => "false", + "principalsQuery" => "select 'haslo' from uzytkownik u where u.login = upper(?)", + "hashUserPassword" => "false", + "dsJndiName" => "java:jboss/datasources/datasources_auth" + } + }], + "login-module" => {"Database" => undefined} + } + } + eos + + expected_res = { + :cmd => compilecmd, + :result => res_result, + :lines => expected_lines + } + + expect(provider).to receive(:compilecmd).with(cmd).and_return(compilecmd) + expect(provider).to receive(:executeWithoutRetry).with(compilecmd).and_return(expected_res) + end + + subject { provider.exists? } + + context 'with res[:result] => true' do + let(:res_result) { true } + + before :each do + expect(provider).to receive(:destroy).and_return(nil) + end + + it { expect(subject).to eq(true) } + end + + context 'with [:result] => false' do + let(:res_result) { false } + it { expect(subject).to eq(false) } + end + end +end end From ced19fd600d5a946c460304a105689968f5e33c0 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Thu, 14 Jan 2016 14:56:20 +0100 Subject: [PATCH 20/46] #10 tests for securitydomain cli 2 --- .../coi/jboss/provider/securitydomain.rb | 2 +- .../jboss_securitydomain/jbosscli_spec.rb | 22 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/puppet_x/coi/jboss/provider/securitydomain.rb b/lib/puppet_x/coi/jboss/provider/securitydomain.rb index 2d59321..1badb8b 100644 --- a/lib/puppet_x/coi/jboss/provider/securitydomain.rb +++ b/lib/puppet_x/coi/jboss/provider/securitydomain.rb @@ -52,7 +52,7 @@ def exists? data['login-modules'][0]['module-options'].each do |key, value| existinghash[key.to_s] = value.to_s.gsub(/\n/, ' ').strip end - + if !existinghash.nil? && !givenhash.nil? && existinghash != givenhash diff = givenhash.to_a - existinghash.to_a Puppet.notice "Security domain should be recreated. Diff: #{diff.inspect}" diff --git a/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb b/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb index 5a5f2c3..f0d4bef 100644 --- a/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb +++ b/spec/unit/provider/jboss_securitydomain/jbosscli_spec.rb @@ -98,6 +98,16 @@ lines = 'asd' bringDownName = 'Security Domain' + content = <<-eos + { + "rolesQuery" => "select r.name, 'Roles' from users u join user_roles ur on ur.user_id = u.id join roles r on r.id = ur.role_id where u.login = ?", + "hashStorePassword" => "false", + "principalsQuery" => "select 'haslo' from uzytkownik u where u.login = upper(?)", + "hashUserPassword" => "false", + "dsJndiName" => "java:jboss/datasources/datasources_auth" + } + eos + expected_lines = <<-eos { "outcome" => "success", @@ -106,13 +116,7 @@ "code" => "Database", "flag" => "required", "module" => undefined, - "module-options" => { - "rolesQuery" => "select r.name, 'Roles' from users u join user_roles ur on ur.user_id = u.id join roles r on r.id = ur.role_id where u.login = ?", - "hashStorePassword" => "false", - "principalsQuery" => "select 'haslo' from uzytkownik u where u.login = upper(?)", - "hashUserPassword" => "false", - "dsJndiName" => "java:jboss/datasources/datasources_auth" - } + "module-options" => #{content} }], "login-module" => {"Database" => undefined} } @@ -131,14 +135,14 @@ subject { provider.exists? } - context 'with res[:result] => true' do + context 'with res[:result] => true and existinghash && givenhash are not nil' do let(:res_result) { true } before :each do expect(provider).to receive(:destroy).and_return(nil) end - it { expect(subject).to eq(true) } + it { expect(subject).to eq(false) } end context 'with [:result] => false' do From 1b6aaf01d7b027a84b995957813f0981a90c711a Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Fri, 15 Jan 2016 11:34:34 +0100 Subject: [PATCH 21/46] #10 jboss_deploy in puppet_x and tests for create and destroy --- lib/puppet/provider/jboss_deploy/jbosscli.rb | 97 +----------- .../coi/jboss/provider/jboss_deploy.rb | 109 ++++++++++++++ .../jboss_deploy/jboss_deploy_spec.rb | 139 ++++++++++++++++++ 3 files changed, 250 insertions(+), 95 deletions(-) create mode 100644 lib/puppet_x/coi/jboss/provider/jboss_deploy.rb create mode 100644 spec/unit/provider/jboss_deploy/jboss_deploy_spec.rb diff --git a/lib/puppet/provider/jboss_deploy/jbosscli.rb b/lib/puppet/provider/jboss_deploy/jbosscli.rb index 6e9b080..207396d 100644 --- a/lib/puppet/provider/jboss_deploy/jbosscli.rb +++ b/lib/puppet/provider/jboss_deploy/jbosscli.rb @@ -1,99 +1,6 @@ require File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'jbosscli.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/provider/jboss_deploy.rb')) Puppet::Type.type(:jboss_deploy).provide(:jbosscli, :parent => Puppet::Provider::Jbosscli) do - - def create - cmd = "deploy #{@resource[:source]} --name=#{@resource[:name]}" - if @resource[:runasdomain] - servergroups = @resource[:servergroups] - if servergroups.nil? or servergroups.empty? or servergroups == [''] - cmd = "#{cmd} --all-server-groups" - else - cmd = "#{cmd} --server-groups=#{servergroups.join(',')}" - end - end - if @resource[:redeploy] - cmd = "#{cmd} --force" - end - isprintinglog = 100 - bringUp 'Deployment', cmd - end - - def destroy - cmd = "undeploy #{@resource[:name]}" - if @resource[:runasdomain] - servergroups = @resource[:servergroups] - if servergroups.nil? or servergroups.empty? or servergroups == [''] - cmd = "#{cmd} --all-relevant-server-groups" - else - cmd = "#{cmd} --server-groups=#{@resource[:servergroup]}" - end - end - isprintinglog = 0 - bringDown 'Deployment', cmd - end - - def name_exists? - res = executeWithoutRetry "deployment-info --name=#{@resource[:name]}" - if res[:result] == false - return false - end - for line in res[:lines] - line.strip! - if line =~ /^#{@resource[:name]}[ ]+/ - Puppet.debug "Deployment found: #{line}" - return true - end - end - Puppet.debug "No deployment matching #{@resource[:name]} found." - return false - end - - def is_exact_deployment? - true - end - - def exists? - if name_exists? - is_exact_deployment? - else - false - end - end - - def servergroups - if not @resource[:runasdomain] - return @resource[:servergroups] - end - servergroups = @resource[:servergroups] - res = execute("deployment-info --name=#{@resource[:name]}") - if not res[:result] - return [] - end - groups = [] - for line in res[:lines] - line.strip! - depinf = line.split - if(depinf[1] == "enabled" || depinf[1] == "added") - groups.push(depinf[0]) - end - end - if servergroups.nil? or servergroups.empty? or servergroups == [''] - return servergroups - end - return groups - end - - def servergroups=(value) - if not @resource[:runasdomain] - return nil - end - current = servergroups() - Puppet.debug(current.inspect()) - Puppet.debug(value.inspect()) - - toset = value - current - cmd = "deploy --name=#{@resource[:name]} --server-groups=#{toset.join(',')}" - res = bringUp('Deployment', cmd) - end + include Puppet_X::Coi::Jboss::Provider::JbossDeploy end diff --git a/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb b/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb new file mode 100644 index 0000000..3d7ab7a --- /dev/null +++ b/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb @@ -0,0 +1,109 @@ +# A puppet x module +module Puppet_X +# A COI puppet_x module +module Coi +# JBoss module +module Jboss + +module Provider +# A class for JBoss deploy +module JbossDeploy + def create + cmd = "deploy #{@resource[:source]} --name=#{@resource[:name]}" + if @resource[:runasdomain] + servergroups = @resource[:servergroups] + if servergroups.nil? or servergroups.empty? or servergroups == [''] + cmd = "#{cmd} --all-server-groups" + else + cmd = "#{cmd} --server-groups=#{servergroups.join(',')}" + end + end + if @resource[:redeploy] + cmd = "#{cmd} --force" + end + isprintinglog = 100 + bringUp 'Deployment', cmd + end + + def destroy + cmd = "undeploy #{@resource[:name]}" + if @resource[:runasdomain] + servergroups = @resource[:servergroups] + if servergroups.nil? or servergroups.empty? or servergroups == [''] + cmd = "#{cmd} --all-relevant-server-groups" + else + cmd = "#{cmd} --server-groups=#{servergroups.join(',')}" + end + end + isprintinglog = 0 + bringDown 'Deployment', cmd + end + + def name_exists? + res = executeWithoutRetry "deployment-info --name=#{@resource[:name]}" + if res[:result] == false + return false + end + for line in res[:lines] + line.strip! + if line =~ /^#{@resource[:name]}[ ]+/ + Puppet.debug "Deployment found: #{line}" + return true + end + end + Puppet.debug "No deployment matching #{@resource[:name]} found." + return false + end + + def is_exact_deployment? + true + end + + def exists? + if name_exists? + is_exact_deployment? + else + false + end + end + + def servergroups + if not @resource[:runasdomain] + return @resource[:servergroups] + end + servergroups = @resource[:servergroups] + res = execute("deployment-info --name=#{@resource[:name]}") + if not res[:result] + return [] + end + groups = [] + for line in res[:lines] + line.strip! + depinf = line.split + if(depinf[1] == "enabled" || depinf[1] == "added") + groups.push(depinf[0]) + end + end + if servergroups.nil? or servergroups.empty? or servergroups == [''] + return servergroups + end + return groups + end + + def servergroups=(value) + if not @resource[:runasdomain] + return nil + end + current = servergroups() + Puppet.debug(current.inspect()) + Puppet.debug(value.inspect()) + + toset = value - current + cmd = "deploy --name=#{@resource[:name]} --server-groups=#{toset.join(',')}" + res = bringUp('Deployment', cmd) + end +end +end +end +end +end diff --git a/spec/unit/provider/jboss_deploy/jboss_deploy_spec.rb b/spec/unit/provider/jboss_deploy/jboss_deploy_spec.rb new file mode 100644 index 0000000..98caabc --- /dev/null +++ b/spec/unit/provider/jboss_deploy/jboss_deploy_spec.rb @@ -0,0 +1,139 @@ +require "spec_helper" + +context "mocking default values" do + + let(:mock_values) do + { + :product => 'jboss-eap', + :version => '6.4.0.GA', + :controller => '127.0.0.1:9999', + } + end + + before :each do + Puppet_X::Coi::Jboss::Configuration.reset_config(mock_values) + end + + after :each do + Puppet_X::Coi::Jboss::Configuration.reset_config + end + + describe 'Puppet::Type::Jboss_deploy::ProviderJbosscli' do + + let(:described_class) do + Puppet::Type.type(:jboss_deploy).provider(:jbosscli) + end + let(:sample_repl) do + { + :name => 'super-crm-1.1.0', + :source => '/usr/src/super-crm-1.1.0.war', + } + end + + let(:extended_repl) do + {} + end + + let(:resource) do + raw = sample_repl.merge(extended_repl) + raw[:provider] = described_class.name + + Puppet::Type.type(:jboss_deploy).new(raw) + end + + let(:provider) do + resource.provider + end + + before :each do + allow(provider.class).to receive(:suitable?).and_return(true) + end + + describe '#create with servergroups nill' do + before :each do + bringDownName = 'Deployment' + cmd = 'deploy /usr/src/super-crm-1.1.0.war --name=super-crm-1.1.0 --all-server-groups' + expect(provider).to receive(:bringUp).with(bringDownName, cmd ).and_return('asd') + end + subject { provider.create } + it { expect(subject).to eq('asd') } + end + + describe '#create wit servergroups not nill' do + before :each do + bringDownName = 'Deployment' + cmd = 'deploy /usr/src/super-crm-1.1.0.war --name=super-crm-1.1.0 --server-groups=crm-servers' + + expect(provider).to receive(:bringUp).with(bringDownName, cmd ).and_return('asd') + end + + let(:extended_repl) { { + :servergroups => ['crm-servers'], + } } + subject { provider.create } + + it { expect(subject).to eq('asd') } + end + + describe '#create with redeploy' do + before :each do + bringDownName = 'Deployment' + cmd = 'deploy /usr/src/super-crm-1.1.0.war --name=super-crm-1.1.0 --all-server-groups --force' + + expect(provider).to receive(:bringUp).with(bringDownName, cmd ).and_return('asd') + end + let(:extended_repl) { { + :redeploy => true, + } } + subject { provider.create } + it { expect(subject).to eq('asd') } + end + + describe '#destroy with runasdomain => true' do + before :each do + bringDownName = 'Deployment' + cmd = 'undeploy super-crm-1.1.0 --all-relevant-server-groups' + + expect(provider).to receive(:bringDown).with(bringDownName, cmd).and_return('asd') + end + let(:extended_repl) { { + :runasdomain => true + } } + + subject { provider.destroy } + it { expect(subject).to eq('asd') } + end + + describe '#destroy with servergroups nill' do + before :each do + bringDownName = 'Deployment' + cmd = 'undeploy super-crm-1.1.0 --all-relevant-server-groups' + expect(provider).to receive(:bringDown).with(bringDownName, cmd).and_return('asd') + end + + let(:extended_repl) { { + :runasdomain => true + } } + + subject { provider.destroy } + it { expect(subject).to eq('asd') } + end + + describe '#destroy with servergroups not nill' do + before :each do + bringDownName = 'Deployment' + cmd = 'undeploy super-crm-1.1.0 --server-groups=crm-servers' + expect(provider).to receive(:bringDown).with(bringDownName, cmd).and_return('asd') + end + + let(:extended_repl) { { + :runasdomain => true, + :servergroups => ['crm-servers'], + } } + + subject { provider.destroy } + it { expect(subject).to eq('asd') } + end + +end +end From a5f3300f574df60183073c425ffd10255087ab5b Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Mon, 18 Jan 2016 11:56:21 +0100 Subject: [PATCH 22/46] #10 jboss_deploy tests --- .../coi/jboss/provider/jboss_deploy.rb | 52 +++--- .../jboss_deploy/jboss_deploy_spec.rb | 157 ++++++++++++++++++ 2 files changed, 183 insertions(+), 26 deletions(-) diff --git a/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb b/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb index 3d7ab7a..727fbf9 100644 --- a/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb +++ b/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb @@ -11,11 +11,11 @@ module JbossDeploy def create cmd = "deploy #{@resource[:source]} --name=#{@resource[:name]}" if @resource[:runasdomain] - servergroups = @resource[:servergroups] - if servergroups.nil? or servergroups.empty? or servergroups == [''] + groups = @resource[:servergroups] + if groups.nil? or groups.empty? or groups == [''] cmd = "#{cmd} --all-server-groups" else - cmd = "#{cmd} --server-groups=#{servergroups.join(',')}" + cmd = "#{cmd} --server-groups=#{groups.join(',')}" end end if @resource[:redeploy] @@ -28,37 +28,17 @@ def create def destroy cmd = "undeploy #{@resource[:name]}" if @resource[:runasdomain] - servergroups = @resource[:servergroups] - if servergroups.nil? or servergroups.empty? or servergroups == [''] + groups = @resource[:servergroups] + if groups.nil? or groups.empty? or groups == [''] cmd = "#{cmd} --all-relevant-server-groups" else - cmd = "#{cmd} --server-groups=#{servergroups.join(',')}" + cmd = "#{cmd} --server-groups=#{groups.join(',')}" end end isprintinglog = 0 bringDown 'Deployment', cmd end - def name_exists? - res = executeWithoutRetry "deployment-info --name=#{@resource[:name]}" - if res[:result] == false - return false - end - for line in res[:lines] - line.strip! - if line =~ /^#{@resource[:name]}[ ]+/ - Puppet.debug "Deployment found: #{line}" - return true - end - end - Puppet.debug "No deployment matching #{@resource[:name]} found." - return false - end - - def is_exact_deployment? - true - end - def exists? if name_exists? is_exact_deployment? @@ -99,9 +79,29 @@ def servergroups=(value) Puppet.debug(value.inspect()) toset = value - current + binding.pry cmd = "deploy --name=#{@resource[:name]} --server-groups=#{toset.join(',')}" res = bringUp('Deployment', cmd) end + + private + def name_exists? + res = executeWithoutRetry "/deployment=#{@resource[:name]}:read-resource()" + if res[:outcome] == 'failed' + return false + end + unless res[:name].nil? + Puppet.debug "Deployment found: #{res[:name]}" + return true + end + Puppet.debug "No deployment matching #{@resource[:name]} found." + return false + end + + def is_exact_deployment? + true + end + end end end diff --git a/spec/unit/provider/jboss_deploy/jboss_deploy_spec.rb b/spec/unit/provider/jboss_deploy/jboss_deploy_spec.rb index 98caabc..e972eb7 100644 --- a/spec/unit/provider/jboss_deploy/jboss_deploy_spec.rb +++ b/spec/unit/provider/jboss_deploy/jboss_deploy_spec.rb @@ -135,5 +135,162 @@ it { expect(subject).to eq('asd') } end + describe '#exist? with tests for name_exists?' do + before :each do + allow(provider).to receive(:is_exact_deployment?).and_return(:expected_mocked_output) + end + describe '#name_exists? and outcome => failed' do + before :each do + cmd = "/deployment=super-crm-1.1.0:read-resource()" + expected_output = { :outcome => 'failed'} + + expect(provider).to receive(:executeWithoutRetry).with(cmd).and_return(expected_output) + end + + subject { provider.exists? } + it { expect(subject).to eq(false) } + end + + describe '#exists? and :outcome => success and :name => asd' do + before :each do + cmd = "/deployment=super-crm-1.1.0:read-resource()" + expected_output = { + :outcome => 'success', + :name => 'asd', + } + + expect(provider).to receive(:executeWithoutRetry).with(cmd).and_return(expected_output) + end + + subject { provider.exists? } + it { expect(subject).to eq(:expected_mocked_output) } + end + + describe '#name_exists? and :outcome => success and :name => nil' do + before :each do + cmd = "/deployment=super-crm-1.1.0:read-resource()" + expected_output = { + :outcome => 'success', + } + + expect(provider).to receive(:executeWithoutRetry).with(cmd).and_return(expected_output) + end + + subject { provider.exists? } + it { expect(subject).to eq(false) } + end + end + + describe '#servergroups with runasdomain => false' do + before :each do + end + + let(:extended_repl) { { + :runasdomain => false, + :servergroups => ['crm-servers'], + } } + + subject { provider.servergroups } + it { expect(subject).to eq(['crm-servers']) } + end + + describe '#servergroups with runasdomain => true and :result => false' do + before :each do + + expected_output = { + :result => false, + :name => 'asd', + } + + cmd = "deployment-info --name=#{resource[:name]}" + + expect(provider).to receive(:execute).with(cmd).and_return(expected_output) + end + + let(:extended_repl) { { + :runasdomain => true, + } } + + subject { provider.servergroups } + it { expect(subject).to eq([]) } + end + + describe '#servergroups with runasdomain => true and :result => true and lines => added and :servergroups => not nil' do + before :each do + + content = <<-eos + NAME RUNTIME-NAME + super-crm super-crm + + SERVER-GROUP STATE + app-group added + eos + + lines = content.split("\n") + + expected_output = { + :result => true, + :name => 'asd', + :lines => lines, + } + + cmd = "deployment-info --name=#{resource[:name]}" + + expect(provider).to receive(:execute).with(cmd).and_return(expected_output) + end + + let(:extended_repl) { { + :runasdomain => true, + :servergroups => 'crm-servers', + } } + + subject { provider.servergroups } + it { expect(subject).to eq(['app-group']) } + end + + describe '#servergroups with runasdomain => true and :result => true and lines => added and :servergroups => nil' do + before :each do + + content = <<-eos + NAME RUNTIME-NAME + super-crm super-crm + + SERVER-GROUP STATE + app-group added + eos + + lines = content.split("\n") + + expected_output = { + :result => true, + :name => 'asd', + :lines => lines, + } + + cmd = "deployment-info --name=#{resource[:name]}" + + expect(provider).to receive(:execute).with(cmd).and_return(expected_output) + end + + let(:extended_repl) { { + :runasdomain => true, + } } + + subject { provider.servergroups } + it { expect(subject).to eq(nil) } + end + + describe '#servergroups with value' do + before :each do + cmd = "deploy --name=#{resource[:name]} --server-groups=super-crm-1" + + expect(provider).to receive(:servergroups).and_return(['super-crm']) + expect(provider).to receive(:bringUp).with('Deployment', cmd).and_return('asd') + end + + subject { provider.servergroups = ['super-crm', 'super-crm-1'] } + it { expect(subject).to eq(["super-crm", "super-crm-1"]) } + end + end end From c2aadbd45d73c0a215d542fbab5d0e8492d6c0f4 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Mon, 18 Jan 2016 12:24:59 +0100 Subject: [PATCH 23/46] #10 delete pry binding in code --- lib/puppet_x/coi/jboss/provider/jboss_deploy.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb b/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb index 727fbf9..7ce6b83 100644 --- a/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb +++ b/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb @@ -79,7 +79,6 @@ def servergroups=(value) Puppet.debug(value.inspect()) toset = value - current - binding.pry cmd = "deploy --name=#{@resource[:name]} --server-groups=#{toset.join(',')}" res = bringUp('Deployment', cmd) end From 7b326432fdb0fea080d03658fb9dee5b43483c26 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Mon, 18 Jan 2016 15:45:32 +0100 Subject: [PATCH 24/46] #10 jboss_confignode in puppet_x --- .../provider/jboss_confignode/jbosscli.rb | 297 +---------------- lib/puppet_x/coi/jboss/provider/confignode.rb | 306 ++++++++++++++++++ .../jboss_confignode/confignode_spec.rb | 81 +++++ tests/clientry.pp | 8 + 4 files changed, 397 insertions(+), 295 deletions(-) create mode 100644 lib/puppet_x/coi/jboss/provider/confignode.rb create mode 100644 spec/unit/provider/jboss_confignode/confignode_spec.rb create mode 100644 tests/clientry.pp diff --git a/lib/puppet/provider/jboss_confignode/jbosscli.rb b/lib/puppet/provider/jboss_confignode/jbosscli.rb index 6e5f33b..82fcd02 100644 --- a/lib/puppet/provider/jboss_confignode/jbosscli.rb +++ b/lib/puppet/provider/jboss_confignode/jbosscli.rb @@ -1,301 +1,8 @@ require File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'jbosscli.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/provider/confignode.rb')) Puppet::Type.type(:jboss_confignode).provide(:jbosscli, :parent => Puppet::Provider::Jbosscli) do - desc "JBoss CLI configuration node provider" - @clean = false @data = nil - - def create - trace 'create' - if exists? - return - end - ret = bringUp 'Configuration node', "#{compiledpath}:add(#{compileprops})" - invalidate - return ret - end - - def destroy - trace 'destroy' - if not exists? - return - end - if status == :running - doStop - end - ret = bringDown 'Configuration node', "#{compiledpath}:remove()" - invalidate - return ret - end - - def exists? - trace 'exists?' - - if @clean - return (not @data.nil?) - end - if @resource[:path].nil? - @resource[:path] = @resource[:name] - end - @resource[:properties] = {} if @resource[:properties].nil? - @resource[:properties].each do |key, value| - if value == "undef" or value == :undef - @resource[:properties][key] = nil - end - end - - res = executeAndGet "#{compiledpath}:read-resource(include-runtime=true, include-defaults=false)" - if res[:result] - @data = {} - res[:data].each do |key, value| - props = @resource[:properties] - @data[key] = value - if not @property_hash.key? :properties - @property_hash[:properties] = {} - end - if props.key? key - @property_hash[:properties][key] = value - end - end - @clean = true - traceout 'status()', true - return true - end - @clean = true - @data = nil - traceout 'status()', false - return false - end - - def status - trace 'status' - meth = self.method 'ensure' - ret = meth.call - traceout 'status()', ret - return ret - end - - def ensure - trace 'ensure' - - exists? - if @data.nil? - @property_hash[:ensure] = :absent - traceout 'ensure()', :absent - return :absent - end - if not @data['status'].nil? - st = @data['status'].upcase - if st == 'DISABLED' - @property_hash[:ensure] = :disabled - traceout 'ensure()', :disabled - return :disabled - end - if ['RUNNING', 'STARTED'].include? st - @property_hash[:ensure] = :running - traceout 'ensure()', :running - return :running - else - @property_hash[:ensure] = :stopped - traceout 'ensure()', :stopped - return :stopped - end - end - if not @data['enabled'].nil? - if @data['enabled'] - @property_hash[:ensure] = :enabled - traceout 'ensure()', :enabled - return :enabled - else - @property_hash[:ensure] = :disabled - traceout 'ensure()', :disabled - return :disabled - end - end - if @data.length > 0 - @property_hash[:ensure] = :present - traceout 'ensure()', :present - return :present - end - end - - def ensure= value - trace 'ensure=(%s)' % [ value.inspect ] - case value - when :present then create - when :absent then destroy - when :running then doStart - when :stopped then doStop - when :enabled then doEnable - when :disabled then doDisable - end - traceout 'ensure=(%s)' % value.inspect, value.inspect - return value - end - - def enabled? - trace 'enabled?' - - return status == :running - end - - def stopped? - trace 'stopped?' - - return status == :stopped - end - - def enabled? - trace 'enabled?' - - return status == :enabled - end - - def disabled? - trace 'disabled?' - - return status == :disabled - end - - def present? - trace 'present?' - - return status == :present - end - - def absent? - trace 'absent?' - - return status == :absent - end - - def properties - trace 'properties()' - - if @data.nil? - traceout 'properties()', {} - return {} - else - hash = {} - @property_hash[:properties] = {} if @property_hash[:properties].nil? - @property_hash[:properties].each do |k, v| - if v.nil? or !!v == v or v.is_a? Numeric or v.is_a? Hash or v.is_a? Array - hash[k.to_s] = v - else - hash[k.to_s] = v.to_s - end - end - traceout 'properties()', hash - return hash - end - end - - def properties= newprops - trace 'properties=(%s)' % newprops.inspect - - # Sorting by value to process `nil` values first - sorted = newprops.sort do |a, b| - if a[1] == b[1] - 0 - elsif a[1].nil? and not b[1].nil? - -1 - elsif not a[1].nil? and b[1].nil? - 1 - else - 0 - end - end - sorted.each do |arr| - key, value = arr - if not @data.key? key or @data[key] != value - writekey key, value - Puppet.notice "JBoss::Property: Key `#{key}` with value `#{value.inspect}` for path `#{compiledpath}` has been set." - end - end - end - - private - - def doStart - trace 'doStart' - - if status == :absent - create - end - ret = bringUp 'Configuration node START', "#{compiledpath}:start(blocking=true)" - invalidate - traceout 'doStart', ret - return ret - end - - def doStop - trace 'doStop' - - if status == :absent - create - end - ret = bringDown 'Configuration node STOP', "#{compiledpath}:stop(blocking=true)" - invalidate - return ret - end - - def doEnable - trace 'doEnable' - - if status == :absent - create - end - ret = bringUp 'Configuration node ENABLE', "#{compiledpath}:enable()" - invalidate - return ret - end - - def doDisable - trace 'doDisable' - - if status == :absent - create - end - ret = bringDown 'Configuration node DISABLE', "#{compiledpath}:disable()" - invalidate - return ret - end - - def invalidate - trace 'invalidate' - - @clean = false - end - - def writekey key, value - trace 'writekey(%s,%s)' % [key.inspect, value.inspect] - - invalidate - if value.nil? - bringDown 'Configuration node property', "#{compiledpath}:undefine-attribute(name=#{key})" - else - preparedval = escape value - bringUp 'Configuration node property', "#{compiledpath}:write-attribute(name=#{key}, value=#{preparedval})" - end - end - - def compiledpath - trace 'compiledpath' - - path = @resource[:path] - cmd = compilecmd path - end - - def compileprops - trace 'compileprops' - - props = @resource[:properties] - arr = [] - props.each do |key, value| - preparedval = escape value - arr.push "#{key}=#{preparedval}" - end - arr.join ', ' - end + include Puppet_X::Coi::Jboss::Provider::ConfigNode end diff --git a/lib/puppet_x/coi/jboss/provider/confignode.rb b/lib/puppet_x/coi/jboss/provider/confignode.rb new file mode 100644 index 0000000..19d7031 --- /dev/null +++ b/lib/puppet_x/coi/jboss/provider/confignode.rb @@ -0,0 +1,306 @@ +# A puppet x module +module Puppet_X +# A COI puppet_x module +module Coi +# JBoss module +module Jboss + +module Provider +# A class for ConfigNode +module ConfigNode + + def create + trace 'create' + if exists? + return + end + ret = bringUp 'Configuration node', "#{compiledpath}:add(#{compileprops})" + invalidate + return ret + end + + def destroy + trace 'destroy' + if not exists? + return + end + if status == :running + doStop + end + ret = bringDown 'Configuration node', "#{compiledpath}:remove()" + invalidate + return ret + end + + def exists? + trace 'exists?' + if @clean + return (not @data.nil?) + end + # TODO: This line is probably useless, resource path cannot be nil (at lesat when creating type with Puppet::Type.type(:jboss_confignode).new(raw) ) + @resource[:path] = @resource[:name] if @resource[:path].nil? + @resource[:properties] = {} if @resource[:properties].nil? + @resource[:properties].each do |key, value| + if value == "undef" or value == :undef + @resource[:properties][key] = nil + end + end + + res = executeAndGet "#{compiledpath}:read-resource(include-runtime=true, include-defaults=false)" + if res[:result] + @data = {} + res[:data].each do |key, value| + props = @resource[:properties] + @data[key] = value + if not @property_hash.key? :properties + @property_hash[:properties] = {} + end + if props.key? key + @property_hash[:properties][key] = value + end + end + @clean = true + traceout 'status()', true + return true + end + @clean = true + @data = nil + traceout 'status()', false + return false + end + + def status + trace 'status' + meth = self.method 'ensure' + ret = meth.call + traceout 'status()', ret + return ret + end + + def ensure + trace 'ensure' + + exists? + if @data.nil? + @property_hash[:ensure] = :absent + traceout 'ensure()', :absent + return :absent + end + if not @data['status'].nil? + st = @data['status'].upcase + if st == 'DISABLED' + @property_hash[:ensure] = :disabled + traceout 'ensure()', :disabled + return :disabled + end + if ['RUNNING', 'STARTED'].include? st + @property_hash[:ensure] = :running + traceout 'ensure()', :running + return :running + else + @property_hash[:ensure] = :stopped + traceout 'ensure()', :stopped + return :stopped + end + end + if not @data['enabled'].nil? + if @data['enabled'] + @property_hash[:ensure] = :enabled + traceout 'ensure()', :enabled + return :enabled + else + @property_hash[:ensure] = :disabled + traceout 'ensure()', :disabled + return :disabled + end + end + if @data.length > 0 + @property_hash[:ensure] = :present + traceout 'ensure()', :present + return :present + end + end + + def ensure= value + trace 'ensure=(%s)' % [ value.inspect ] + case value + when :present then create + when :absent then destroy + when :running then doStart + when :stopped then doStop + when :enabled then doEnable + when :disabled then doDisable + end + traceout 'ensure=(%s)' % value.inspect, value.inspect + return value + end + + def enabled? + trace 'enabled?' + + return status == :running + end + + def stopped? + trace 'stopped?' + + return status == :stopped + end + + def enabled? + trace 'enabled?' + + return status == :enabled + end + + def disabled? + trace 'disabled?' + + return status == :disabled + end + + def present? + trace 'present?' + + return status == :present + end + + def absent? + trace 'absent?' + + return status == :absent + end + + def properties + trace 'properties()' + + if @data.nil? + traceout 'properties()', {} + return {} + else + hash = {} + @property_hash[:properties] = {} if @property_hash[:properties].nil? + @property_hash[:properties].each do |k, v| + if v.nil? or !!v == v or v.is_a? Numeric or v.is_a? Hash or v.is_a? Array + hash[k.to_s] = v + else + hash[k.to_s] = v.to_s + end + end + traceout 'properties()', hash + return hash + end + end + + def properties= newprops + trace 'properties=(%s)' % newprops.inspect + + # Sorting by value to process `nil` values first + sorted = newprops.sort do |a, b| + if a[1] == b[1] + 0 + elsif a[1].nil? and not b[1].nil? + -1 + elsif not a[1].nil? and b[1].nil? + 1 + else + 0 + end + end + sorted.each do |arr| + key, value = arr + if not @data.key? key or @data[key] != value + writekey key, value + Puppet.notice "JBoss::Property: Key `#{key}` with value `#{value.inspect}` for path `#{compiledpath}` has been set." + end + end + end + + private + + def doStart + trace 'doStart' + + if status == :absent + create + end + ret = bringUp 'Configuration node START', "#{compiledpath}:start(blocking=true)" + invalidate + traceout 'doStart', ret + return ret + end + + def doStop + trace 'doStop' + + if status == :absent + create + end + ret = bringDown 'Configuration node STOP', "#{compiledpath}:stop(blocking=true)" + invalidate + return ret + end + + def doEnable + trace 'doEnable' + + if status == :absent + create + end + ret = bringUp 'Configuration node ENABLE', "#{compiledpath}:enable()" + invalidate + return ret + end + + def doDisable + trace 'doDisable' + + if status == :absent + create + end + ret = bringDown 'Configuration node DISABLE', "#{compiledpath}:disable()" + invalidate + return ret + end + + def invalidate + trace 'invalidate' + + @clean = false + end + + def writekey key, value + trace 'writekey(%s,%s)' % [key.inspect, value.inspect] + + invalidate + if value.nil? + bringDown 'Configuration node property', "#{compiledpath}:undefine-attribute(name=#{key})" + else + preparedval = escape value + bringUp 'Configuration node property', "#{compiledpath}:write-attribute(name=#{key}, value=#{preparedval})" + end + end + + def compiledpath + trace 'compiledpath' + + path = @resource[:path] + cmd = compilecmd path + end + + def compileprops + trace 'compileprops' + + props = @resource[:properties] + arr = [] + props.each do |key, value| + preparedval = escape value + arr.push "#{key}=#{preparedval}" + end + arr.join ', ' + end +end +end +end +end +end diff --git a/spec/unit/provider/jboss_confignode/confignode_spec.rb b/spec/unit/provider/jboss_confignode/confignode_spec.rb new file mode 100644 index 0000000..2c5c11e --- /dev/null +++ b/spec/unit/provider/jboss_confignode/confignode_spec.rb @@ -0,0 +1,81 @@ +require "spec_helper" + +context "mocking default values" do + + let(:mock_values) do + { + :product => 'jboss-eap', + :version => '6.4.0.GA', + :controller => '127.0.0.1:9999', + } + end + + before :each do + Puppet_X::Coi::Jboss::Configuration.reset_config(mock_values) + end + + after :each do + Puppet_X::Coi::Jboss::Configuration.reset_config + end + + describe 'Puppet::Type::Confignode::ProviderJbosscli' do + + let(:described_class) do + Puppet::Type.type(:jboss_confignode).provider(:jbosscli) + end + let(:sample_repl) do + { + :name => '/subsystem=messaging/hornetq-server=default', + :path => '/subsystem=messaging/hornetq-server=default', + :ensure => 'present', + :properties => { + 'security-enabled' => false, + } + } + end + + let(:extended_repl) do + {} + end + + let(:resource) do + raw = sample_repl.merge(extended_repl) + raw[:provider] = described_class.name + + Puppet::Type.type(:jboss_confignode).new(raw) + end + + let(:provider) do + resource.provider + end + + before :each do + allow(provider.class).to receive(:suitable?).and_return(true) + end + + describe '#exists? with clean => true' do + before :each do + provider.instance_variable_set(:@clean, true) + end + + subject { provider.exists? } + it { expect(subject).to eq(false) } + end + + describe '#exists? with clean => false [wrong context]' do + before :each do + provider.instance_variable_set(:@clean, false) + + end + + let(:extended_repl) { { + :path => :undef, + } } + + subject { provider.exists? } + it { expect(subject).to eq(false) } + end + + +end +end diff --git a/tests/clientry.pp b/tests/clientry.pp new file mode 100644 index 0000000..9e20391 --- /dev/null +++ b/tests/clientry.pp @@ -0,0 +1,8 @@ +include jboss + +jboss::clientry { '/subsystem=messaging/hornetq-server=default': + ensure => 'present', + properties => { + 'security-enabled' => false, + } +} From 3032a8261bc7395cf7e1e85b7806e856dea2de6b Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Wed, 20 Jan 2016 11:10:29 +0100 Subject: [PATCH 25/46] #10 enhancement in contribution guidelines --- CONTRIBUTING.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b4a8f51..ab580eb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -79,10 +79,12 @@ with: bundle exec rake acceptance -This will run the tests on an Ubuntu 14.04 virtual machine. You can also -run the integration tests against Centos 6.5 with. +This will run the tests on an Centos 6.5 docker container. You can also +run the integration tests against any other configuration specified in directory `spec/acceptance/nodesets`. For example for Ubuntu 14.04 running on virtualbox via Vagrant you should run: - RS_SET=centos-65-x64-docker bundle exec rake acceptance + RS_SET=ubuntu-14.04-x86_64-vagrant bundle exec rake acceptance + +**Caution!** To run Vagrant boxes when you have installed Vagrant in version 1.5 or above, you need to have `bundler` in version range: >= 1.5.2 <= 1.10.5. This is due to fact of invalid version in vagrant-wrapper gem package. If you don't want to have to recreate the virtual machine every time you can use `BEAKER_DESTROY=no` and `BEAKER_PROVISION=no`. On the first run you will From 8355b4a9d8722f15fea3f64af92017b75d6f51b7 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Wed, 20 Jan 2016 11:10:43 +0100 Subject: [PATCH 26/46] #10 configcode tests --- .../jboss_confignode/confignode_spec.rb | 253 +++++++++++++++++- 1 file changed, 247 insertions(+), 6 deletions(-) diff --git a/spec/unit/provider/jboss_confignode/confignode_spec.rb b/spec/unit/provider/jboss_confignode/confignode_spec.rb index 2c5c11e..1a50e1d 100644 --- a/spec/unit/provider/jboss_confignode/confignode_spec.rb +++ b/spec/unit/provider/jboss_confignode/confignode_spec.rb @@ -53,29 +53,270 @@ allow(provider.class).to receive(:suitable?).and_return(true) end - describe '#exists? with clean => true' do + describe '#exists? with clean => true and result => false' do before :each do - provider.instance_variable_set(:@clean, true) + provider.instance_variable_set(:@clean, false) + + cmd = + '/profile=full/subsystem=messaging/hornetq-server=default:read-resource(include-runtime=true, include-defaults=false)' + + expected_output = { + :result => false, + } + + expect(provider).to receive(:executeAndGet).with(cmd).and_return(expected_output) end subject { provider.exists? } it { expect(subject).to eq(false) } end - describe '#exists? with clean => false [wrong context]' do + describe '#exists? with clean => true and result => true' do before :each do provider.instance_variable_set(:@clean, false) + cmd = + '/profile=full/subsystem=messaging/hornetq-server=default:read-resource(include-runtime=true, include-defaults=false)' + + expected_output = { + :result => true, + :data => { + :includeruntime => true, + :includedefaults => false, + } + } + + expect(provider).to receive(:executeAndGet).with(cmd).and_return(expected_output) end - let(:extended_repl) { { - :path => :undef, - } } + subject { provider.exists? } + it { expect(subject).to eq(true) } + end + + describe '#exists? with clean => false [wrong context]' do + before :each do + provider.instance_variable_set(:@clean, true) + end subject { provider.exists? } it { expect(subject).to eq(false) } end + describe '#destroy with exists? => false' do + before :each do + expect(provider).to receive(:exists?).and_return(false) + end + + subject { provider.destroy } + it { expect(subject).to eq(nil) } + end + + describe '#destroy with exists? => true and status :running => nil' do + before :each do + + bringDownName = 'Configuration node' + cmd = '/profile=full/subsystem=messaging/hornetq-server=default:remove()' + + expect(provider).to receive(:bringDown).with(bringDownName, cmd).and_return(true) + expect(provider).to receive(:exists?).and_return(true, true) + end + + + subject { provider.destroy } + it { expect(subject).to eq(true) } + end + + describe "#create with exists? => true" do + before :each do + expect(provider).to receive(:exists?).and_return(true) + end + + subject { provider.create } + it { expect(subject).to eq(nil) } + end + + + describe "#create with exists? => false" do + before :each do + + bringUpName = 'Configuration node' + cmd = '/profile=full/subsystem=messaging/hornetq-server=default:add(security-enabled=false)' + + expect(provider).to receive(:exists?).and_return(false) + expect(provider).to receive(:bringUp).with(bringUpName, cmd).and_return(true) + end + + subject { provider.create } + it { expect(subject).to eq(true) } + end + + describe '#ensure no specific value' do + before :each do + data = { + :status => 'true', + } + + provider.instance_variable_set(:@data, data) + + expect(provider).to receive(:exists?).and_return(true) + end + + subject { provider.ensure } + it { expect(subject).to eq(:present) } + end + + describe '#ensure with status => disabled' do + before :each do + data = { + 'status' => 'disabled', + } + + provider.instance_variable_set(:@data, data) + + expect(provider).to receive(:exists?).and_return(true) + end + + subject { provider.ensure } + it { expect(subject).to eq(:disabled) } + end + + describe '#ensure with status => RUNNING' do + before :each do + data = { + 'status' => 'RUNNING', + } + + provider.instance_variable_set(:@data, data) + + expect(provider).to receive(:exists?).and_return(true) + end + + subject { provider.ensure } + it { expect(subject).to eq(:running) } + end + + describe '#ensure with status => else' do + before :each do + data = { + 'status' => 'else', + } + + provider.instance_variable_set(:@data, data) + + expect(provider).to receive(:exists?).and_return(true) + end + + subject { provider.ensure } + it { expect(subject).to eq(:stopped) } + end + + describe '#ensure with enabled => true' do + before :each do + data = { + 'enabled' => true, + } + + provider.instance_variable_set(:@data, data) + + expect(provider).to receive(:exists?).and_return(true) + end + + subject { provider.ensure } + it { expect(subject).to eq(:enabled) } + end + + describe '#ensure with enabled => else' do + before :each do + data = { + 'enabled' => false, + } + + provider.instance_variable_set(:@data, data) + + expect(provider).to receive(:exists?).and_return(true) + end + + subject { provider.ensure } + it { expect(subject).to eq(:disabled) } + end + + describe '#ensure :asd' do + before :each do + end + + subject { provider.ensure = 'asd' } + it { expect(subject).to eq('asd') } + end + + describe '#ensure :present' do + before :each do + end + + subject { provider.ensure = 'asd' } + it { expect(subject).to eq('asd') } + end + + describe '#ensure :present' do + before :each do + + expect(provider).to receive(:create).and_return(true) + end + + subject { provider.ensure = :present } + it { expect(subject).to eq(:present) } + end + + describe '#ensure :absent' do + before :each do + + expect(provider).to receive(:destroy).and_return(true) + end + + subject { provider.ensure = :absent } + it { expect(subject).to eq(:absent) } + end + + describe '#ensure :running' do + before :each do + + expect(provider).to receive(:doStart).and_return(true) + end + + subject { provider.ensure = :running } + it { expect(subject).to eq(:running) } + end + + describe '#ensure :stopped' do + before :each do + + expect(provider).to receive(:doStop).and_return(true) + end + + subject { provider.ensure = :stopped } + it { expect(subject).to eq(:stopped) } + end + + describe '#ensure :enabled' do + before :each do + + expect(provider).to receive(:doEnable).and_return(true) + end + + subject { provider.ensure = :enabled } + it { expect(subject).to eq(:enabled) } + end + + describe '#ensure :disabled' do + before :each do + + expect(provider).to receive(:doDisable).and_return(true) + end + + subject { provider.ensure = :disabled } + it { expect(subject).to eq(:disabled) } + end + + end end From d4674c566ad9b9cb1c2a03a8536d35c33a117ab7 Mon Sep 17 00:00:00 2001 From: Cosaquee Date: Wed, 20 Jan 2016 12:01:55 +0100 Subject: [PATCH 27/46] #10 test will pass on osx machines --- spec/unit/provider/jboss_datasource/jbosscli_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/unit/provider/jboss_datasource/jbosscli_spec.rb b/spec/unit/provider/jboss_datasource/jbosscli_spec.rb index 83a40d0..9d8dff1 100644 --- a/spec/unit/provider/jboss_datasource/jbosscli_spec.rb +++ b/spec/unit/provider/jboss_datasource/jbosscli_spec.rb @@ -69,7 +69,7 @@ end let(:status) { double(:exitstatus => 0) } before :each do - re = /.*bin\/jboss-cli.sh --timeout=50000 --connect --file=\/tmp\/jbosscli.* --controller=127.0.0.1:9999/ + re = /.*bin\/jboss-cli.sh --timeout=50000 --connect --file=.+jbosscli.* --controller=127.0.0.1:9999/ expect(Puppet::Provider::Jbosscli).to receive(:last_execute_status). at_least(:once).and_return(status) expect(Puppet::Provider::Jbosscli).to receive(:execshell). From 704437b0b8a54158ca39e1df2f7f9ec7f9ecb7b4 Mon Sep 17 00:00:00 2001 From: Cosaquee Date: Wed, 20 Jan 2016 14:45:32 +0100 Subject: [PATCH 28/46] delete unused methods --- lib/puppet_x/coi/jboss/provider/confignode.rb | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/lib/puppet_x/coi/jboss/provider/confignode.rb b/lib/puppet_x/coi/jboss/provider/confignode.rb index 19d7031..74785cd 100644 --- a/lib/puppet_x/coi/jboss/provider/confignode.rb +++ b/lib/puppet_x/coi/jboss/provider/confignode.rb @@ -135,42 +135,6 @@ def ensure= value return value end - def enabled? - trace 'enabled?' - - return status == :running - end - - def stopped? - trace 'stopped?' - - return status == :stopped - end - - def enabled? - trace 'enabled?' - - return status == :enabled - end - - def disabled? - trace 'disabled?' - - return status == :disabled - end - - def present? - trace 'present?' - - return status == :present - end - - def absent? - trace 'absent?' - - return status == :absent - end - def properties trace 'properties()' From a6f936e6e05a73ed256b207a19bbae1ff8384de6 Mon Sep 17 00:00:00 2001 From: Cosaquee Date: Wed, 20 Jan 2016 16:04:40 +0100 Subject: [PATCH 29/46] #10 tests for security node --- .../jboss_confignode/confignode_spec.rb | 148 +++++++++++++++++- 1 file changed, 146 insertions(+), 2 deletions(-) diff --git a/spec/unit/provider/jboss_confignode/confignode_spec.rb b/spec/unit/provider/jboss_confignode/confignode_spec.rb index 1a50e1d..249406e 100644 --- a/spec/unit/provider/jboss_confignode/confignode_spec.rb +++ b/spec/unit/provider/jboss_confignode/confignode_spec.rb @@ -111,6 +111,26 @@ it { expect(subject).to eq(nil) } end + describe '#destroy with status == :running and later on :ensure' do + before :each do + + bringDownName = 'Configuration node STOP' + cmd = '/profile=full/subsystem=messaging/hornetq-server=default:stop(blocking=true)' + + bringDownNameDestroy = 'Configuration node' + cmdDestroy = '/profile=full/subsystem=messaging/hornetq-server=default:remove()' + + expect(provider).to receive(:exists?).and_return(true) + expect(provider).to receive(:status).and_return(:running) + expect(provider).to receive(:status).and_return(:ensure) + expect(provider).to receive(:bringDown).with(bringDownName, cmd).and_return(true) + expect(provider).to receive(:bringDown).with(bringDownNameDestroy, cmdDestroy).and_return(true) + end + + subject { provider.destroy } + it { expect(subject).to eq(true) } + end + describe '#destroy with exists? => true and status :running => nil' do before :each do @@ -296,16 +316,48 @@ it { expect(subject).to eq(:stopped) } end - describe '#ensure :enabled' do + describe '#ensure :enabled with status :ensure' do before :each do - expect(provider).to receive(:doEnable).and_return(true) + bringUpName = 'Configuration node ENABLE' + cmd = '/profile=full/subsystem=messaging/hornetq-server=default:enable()' + + expect(provider).to receive(:status).and_return(:ensure) + expect(provider).to receive(:bringUp).with(bringUpName, cmd).and_return(true) end subject { provider.ensure = :enabled } it { expect(subject).to eq(:enabled) } end + describe '#ensure :enabled with status :absent' do + before :each do + + bringUpName = 'Configuration node ENABLE' + cmd = '/profile=full/subsystem=messaging/hornetq-server=default:enable()' + + expect(provider).to receive(:status).and_return(:ensure) + expect(provider).to receive(:bringUp).with(bringUpName, cmd).and_return(true) + end + + subject { provider.ensure = :enabled } + it { expect(subject).to eq(:enabled) } + end + + describe '#ensure= value with value => :running' do + before :each do + bringUpName = 'Configuration node START' + cmd = '/profile=full/subsystem=messaging/hornetq-server=default:start(blocking=true)' + + expect(provider).to receive(:status).and_return(:absent) + expect(provider).to receive(:create).and_return(true) + expect(provider).to receive(:bringUp).with(bringUpName, cmd).and_return(true) + end + + subject {provider.ensure= :running} + it { expect(subject).to eq(:running) } + end + describe '#ensure :disabled' do before :each do @@ -316,7 +368,99 @@ it { expect(subject).to eq(:disabled) } end + describe '#ensure= value with value => :stopped' do + before :each do + bringUpName = 'Configuration node STOP' + cmd = '/profile=full/subsystem=messaging/hornetq-server=default:stop(blocking=true)' + + expect(provider).to receive(:status).and_return(:absent) + expect(provider).to receive(:create).and_return(true) + expect(provider).to receive(:bringDown).with(bringUpName, cmd).and_return(true) + end + + subject {provider.ensure= :stopped} + it { expect(subject).to eq(:stopped) } + end + + describe '#ensure= value with value => :enabled' do + before :each do + bringUpName = 'Configuration node ENABLE' + cmd = '/profile=full/subsystem=messaging/hornetq-server=default:enable()' + + expect(provider).to receive(:status).and_return(:absent) + expect(provider).to receive(:create).and_return(true) + expect(provider).to receive(:bringUp).with(bringUpName, cmd).and_return(true) + end + + subject {provider.ensure= :enabled} + it { expect(subject).to eq(:enabled) } + end + + describe '#ensure= value with value => :disabled' do + before :each do + bringUpName = 'Configuration node DISABLE' + cmd = '/profile=full/subsystem=messaging/hornetq-server=default:disable()' + + expect(provider).to receive(:status).and_return(:absent) + expect(provider).to receive(:create).and_return(true) + expect(provider).to receive(:bringDown).with(bringUpName, cmd).and_return(true) + end + + subject {provider.ensure= :disabled} + it { expect(subject).to eq(:disabled) } + end + + describe '#properties and @data => nil' do + before :each do + provider.instance_variable_set(:@data, nil) + end + + subject { provider.properties } + it { expect(subject).to eq({}) } + end + describe '#properties and @data => asd ' do + before :each do + property_hash = { :properties => { + 'security-enabled' => false, + }} + provider.instance_variable_set(:@data, 'asd') + provider.instance_variable_set(:@property_hash, property_hash) + end + subject { provider.properties } + it { expect(subject).to eq({"security-enabled"=>false}) } + end + + describe '#properties and @data => asd and value is keyword' do + before :each do + property_hash = { :properties => { + 'security-enabled' => :false, + }} + provider.instance_variable_set(:@data, 'asd') + provider.instance_variable_set(:@property_hash, property_hash) + end + + subject { provider.properties } + it { expect(subject).to eq({"security-enabled"=>"false"}) } + end + + describe '#properties' do + before :each do + data = { :aaa => :bbb} + provider.instance_variable_set(:@data, data) + + bringUpName = 'Configuration node property' + cmd = '/profile=full/subsystem=messaging/hornetq-server=default:write-attribute(name=security-enabled, value=:false)' + + expect(provider).to receive(:bringUp).with(bringUpName, cmd).and_return(true) + end + + props = { + 'security-enabled' => :false, + } + subject { provider.properties = props } + it { expect(subject).to eq({"security-enabled"=>:false}) } + end end end From c6e0a6831696e240e2d271e65186a1f4dbe49fee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Tue, 19 Jan 2016 15:20:44 +0100 Subject: [PATCH 30/46] #10 Editor config for various IDEs --- .editorconfig | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..eb67838 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file, indent by 2 spaces +[*] +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 From 480619216810c9d792c7c847548ec758b5520eb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Wed, 20 Jan 2016 15:19:14 +0100 Subject: [PATCH 31/46] Enh #10: Use central package module structure --- lib/facter/jboss_configfile.rb | 4 +- lib/facter/jboss_fullconfig.rb | 2 +- lib/puppet/parser/functions/jboss_basename.rb | 2 +- lib/puppet/parser/functions/jboss_dirname.rb | 2 +- .../parser/functions/jboss_short_version.rb | 2 +- lib/puppet/parser/functions/jboss_to_bool.rb | 4 +- lib/puppet/parser/functions/jboss_to_i.rb | 4 +- lib/puppet/parser/functions/jboss_to_s.rb | 4 +- .../parser/functions/jboss_type_version.rb | 2 +- .../provider/jboss_confignode/jbosscli.rb | 10 +- .../provider/jboss_datasource/jbosscli.rb | 558 +----------------- lib/puppet/provider/jboss_deploy/jbosscli.rb | 8 +- .../provider/jboss_jdbcdriver/jbosscli.rb | 37 +- .../provider/jboss_jmsqueue/jbosscli.rb | 22 +- .../jboss_resourceadapter/jbosscli.rb | 70 +-- .../provider/jboss_securitydomain/jbosscli.rb | 6 +- lib/puppet_x/coi/jboss.rb | 47 ++ lib/puppet_x/coi/jboss/configuration.rb | 12 +- lib/puppet_x/coi/jboss/facts.rb | 14 +- .../coi/jboss/functions/jboss_basename.rb | 11 +- .../coi/jboss/functions/jboss_dirname.rb | 11 +- .../jboss/functions/jboss_short_version.rb | 11 +- .../coi/jboss/functions/jboss_to_bool.rb | 17 +- .../coi/jboss/functions/jboss_to_i.rb | 11 +- .../coi/jboss/functions/jboss_to_s.rb | 11 +- .../coi/jboss/functions/jboss_type_version.rb | 11 +- .../coi/jboss/provider/abstract_jboss_cli.rb} | 86 ++- lib/puppet_x/coi/jboss/provider/datasource.rb | 506 ++++++++++++++++ .../datasource/post_wildfly_provider.rb | 19 +- .../datasource/pre_wildfly_provider.rb | 19 +- .../coi/jboss/provider/datasource/static.rb | 50 ++ .../provider/{jboss_deploy.rb => deploy.rb} | 14 +- .../coi/jboss/provider/securitydomain.rb | 120 ++-- spec/spec_helper.rb | 2 + spec/unit/facter/jboss_fullconfig_spec.rb | 1 - .../datasource/post_wildfly_provider_spec.rb | 3 +- .../datasource/pre_wildfly_provider_spec.rb | 3 +- .../jboss_datasource/jbosscli_spec.rb | 6 +- 38 files changed, 828 insertions(+), 894 deletions(-) create mode 100644 lib/puppet_x/coi/jboss.rb rename lib/{puppet/provider/jbosscli.rb => puppet_x/coi/jboss/provider/abstract_jboss_cli.rb} (85%) create mode 100644 lib/puppet_x/coi/jboss/provider/datasource.rb create mode 100644 lib/puppet_x/coi/jboss/provider/datasource/static.rb rename lib/puppet_x/coi/jboss/provider/{jboss_deploy.rb => deploy.rb} (93%) diff --git a/lib/facter/jboss_configfile.rb b/lib/facter/jboss_configfile.rb index b0a28b4..5ea5b95 100644 --- a/lib/facter/jboss_configfile.rb +++ b/lib/facter/jboss_configfile.rb @@ -1,5 +1,5 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '../puppet_x/coi/jboss/configuration')) +require File.expand_path(File.join(File.dirname(__FILE__), '../puppet_x/coi/jboss')) Facter.add(:jboss_configfile) do setcode { Puppet_X::Coi::Jboss::Configuration::configfile } -end \ No newline at end of file +end diff --git a/lib/facter/jboss_fullconfig.rb b/lib/facter/jboss_fullconfig.rb index 86e16ec..a75c20f 100644 --- a/lib/facter/jboss_fullconfig.rb +++ b/lib/facter/jboss_fullconfig.rb @@ -1,3 +1,3 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '../puppet_x/coi/jboss/facts')) +require File.expand_path(File.join(File.dirname(__FILE__), '../puppet_x/coi/jboss')) Puppet_X::Coi::Jboss::Facts.define_fullconfig_fact diff --git a/lib/puppet/parser/functions/jboss_basename.rb b/lib/puppet/parser/functions/jboss_basename.rb index 4f51f38..1dfcd62 100644 --- a/lib/puppet/parser/functions/jboss_basename.rb +++ b/lib/puppet/parser/functions/jboss_basename.rb @@ -1,4 +1,4 @@ -require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_basename') +require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss') # Jboss AS private basename function # diff --git a/lib/puppet/parser/functions/jboss_dirname.rb b/lib/puppet/parser/functions/jboss_dirname.rb index 3d1e506..71fcc92 100644 --- a/lib/puppet/parser/functions/jboss_dirname.rb +++ b/lib/puppet/parser/functions/jboss_dirname.rb @@ -1,4 +1,4 @@ -require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_dirname') +require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss') # Jboss AS private dirname function # diff --git a/lib/puppet/parser/functions/jboss_short_version.rb b/lib/puppet/parser/functions/jboss_short_version.rb index 1019104..6e09ed6 100644 --- a/lib/puppet/parser/functions/jboss_short_version.rb +++ b/lib/puppet/parser/functions/jboss_short_version.rb @@ -1,4 +1,4 @@ -require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_short_version') +require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss') # Jboss AS private short version function # diff --git a/lib/puppet/parser/functions/jboss_to_bool.rb b/lib/puppet/parser/functions/jboss_to_bool.rb index 852bceb..9c94b29 100644 --- a/lib/puppet/parser/functions/jboss_to_bool.rb +++ b/lib/puppet/parser/functions/jboss_to_bool.rb @@ -1,4 +1,4 @@ -require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_to_bool') +require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss') # Jboss AS private to_bool function # @@ -9,4 +9,4 @@ module Puppet::Parser::Functions newfunction(:jboss_to_bool, :type => :rvalue) do |args| Puppet_X::Coi::Jboss::Functions.jboss_to_bool args end -end \ No newline at end of file +end diff --git a/lib/puppet/parser/functions/jboss_to_i.rb b/lib/puppet/parser/functions/jboss_to_i.rb index 5791c3b..a874079 100644 --- a/lib/puppet/parser/functions/jboss_to_i.rb +++ b/lib/puppet/parser/functions/jboss_to_i.rb @@ -1,4 +1,4 @@ -require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_to_i') +require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss') # Jboss AS private to_i function # @@ -9,4 +9,4 @@ module Puppet::Parser::Functions newfunction(:jboss_to_i, :type => :rvalue) do |args| Puppet_X::Coi::Jboss::Functions.jboss_to_i args end -end \ No newline at end of file +end diff --git a/lib/puppet/parser/functions/jboss_to_s.rb b/lib/puppet/parser/functions/jboss_to_s.rb index e0938b0..ce3fe86 100644 --- a/lib/puppet/parser/functions/jboss_to_s.rb +++ b/lib/puppet/parser/functions/jboss_to_s.rb @@ -1,4 +1,4 @@ -require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_to_s') +require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss') # Jboss AS private to_s function # @@ -9,4 +9,4 @@ module Puppet::Parser::Functions newfunction(:jboss_to_s, :type => :rvalue) do |args| Puppet_X::Coi::Jboss::Functions.jboss_to_s args end -end \ No newline at end of file +end diff --git a/lib/puppet/parser/functions/jboss_type_version.rb b/lib/puppet/parser/functions/jboss_type_version.rb index 896569b..fa01b57 100644 --- a/lib/puppet/parser/functions/jboss_type_version.rb +++ b/lib/puppet/parser/functions/jboss_type_version.rb @@ -1,4 +1,4 @@ -require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_type_version') +require File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss') # Jboss AS private type version function # diff --git a/lib/puppet/provider/jboss_confignode/jbosscli.rb b/lib/puppet/provider/jboss_confignode/jbosscli.rb index 82fcd02..0c798d5 100644 --- a/lib/puppet/provider/jboss_confignode/jbosscli.rb +++ b/lib/puppet/provider/jboss_confignode/jbosscli.rb @@ -1,8 +1,12 @@ -require File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'jbosscli.rb')) -require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/provider/confignode.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss')) + +Puppet::Type.type(:jboss_confignode).provide(:jbosscli, + :parent => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli) do + + desc 'JBoss CLI configuration node provider' -Puppet::Type.type(:jboss_confignode).provide(:jbosscli, :parent => Puppet::Provider::Jbosscli) do @clean = false @data = nil + include Puppet_X::Coi::Jboss::Provider::ConfigNode end diff --git a/lib/puppet/provider/jboss_datasource/jbosscli.rb b/lib/puppet/provider/jboss_datasource/jbosscli.rb index 06dfd98..70f25ac 100644 --- a/lib/puppet/provider/jboss_datasource/jbosscli.rb +++ b/lib/puppet/provider/jboss_datasource/jbosscli.rb @@ -1,556 +1,18 @@ -require File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'jbosscli.rb')) -require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/configuration')) -require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/provider/datasource/pre_wildfly_provider')) -require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/provider/datasource/post_wildfly_provider')) +require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss')) require 'uri' -Puppet::Type.type(:jboss_datasource).provide(:jbosscli, :parent => Puppet::Provider::Jbosscli) do - desc "JBoss CLI datasource provider" +Puppet::Type.type(:jboss_datasource).provide(:jbosscli, + :parent => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli) do - @data = nil - @readed = false - @impl = nil - - def create - cmd = [ "#{create_delete_cmd} add --name=#{@resource[:name]}" ] - jta_opt(cmd) - cmd.push "--jndi-name=#{@resource[:jndiname].inspect}" - cmd.push "--driver-name=#{@resource[:drivername].inspect}" - cmd.push "--min-pool-size=#{@resource[:minpoolsize].inspect}" - cmd.push "--max-pool-size=#{@resource[:maxpoolsize].inspect}" - cmd.push "--user-name=#{@resource[:username].inspect}" - cmd.push "--password=#{@resource[:password].inspect}" - if @resource[:xa] - xa_properties = xa_datasource_properties_wrapper(createXaProperties) - cmd.push "--xa-datasource-properties=#{xa_properties}" - else - cmd.push "--connection-url=#{connectionUrl.inspect}" - end - @resource[:options].each do |attribute, value| - cmd.push "--#{attribute}=#{value.inspect}" - end - - bringUp 'Datasource', cmd.join(' ') - setenabled true - end - - def destroy - cmd = "#{create_delete_cmd} remove --name=#{@resource[:name]}" - bringDown 'Datasource', cmd - end - - def self.instances - runasdomain = self.config_runasdomain - profile = self.config_profile - controller = self.config_controller - ctrlconfig = self.controllerConfig({ :controller => controller }) - list = [] - cmd = self.compilecmd runasdomain, profile, "/subsystem=datasources:read-children-names(child-type=#{self.datasource_type true})" - res = self.executeAndGet cmd, runasdomain, ctrlconfig, 0, 0 - if res[:result] - res[:data].each do |name| - inst = self.create_rubyobject name, true, runasdomain, profile, controller - list.push inst - end - end - cmd = self.compilecmd runasdomain, profile, "/subsystem=datasources:read-children-names(child-type=#{self.datasource_type false})" - res = self.executeAndGet cmd, runasdomain, ctrlconfig, 0, 0 - if res[:result] - res[:data].each do |name| - inst = self.create_rubyobject name, false, runasdomain, profile, controller - list.push inst - end - end - return list - end - - def setenabled setting - Puppet.debug "setenabled #{setting.inspect}" - cmd = compilecmd "#{datasource_path}:read-attribute(name=enabled)" - res = executeAndGet cmd - enabled = res[:data] - Puppet.debug "Enabling datasource #{@resource[:name]} = #{enabled}: #{setting}" - if enabled != setting - if setting - cmd = compilecmd "#{datasource_path}:enable(persistent=true)" - else - cmd = compilecmd "#{datasource_path}:disable(persistent=true)" - end - bringUp "Datasource enable set to #{setting.to_s}", cmd - end - end - - def prepare_resource - if @resource.nil? - @resource = {} - end - if @resource[:name].nil? - @resource[:name] = @property_hash[:name] - end - if @resource[:controller].nil? - @resource[:controller] = controller - end - if @resource[:runasdomain].nil? - @resource[:runasdomain] = runasdomain - end - if @resource[:profile].nil? - @resource[:profile] = profile - end - if @resource[:xa].nil? - @resource[:xa] = xa - end - end - - def exists? - prepare_resource - if @resource[:dbname].nil? - @resource[:dbname] = @resource[:name] - end - @data = nil - cmd = compilecmd "#{datasource_path}:read-resource(recursive=true)" - res = executeAndGet cmd - if(res[:result] == false) - Puppet.debug "Datasorce (xa: #{xa?}) `#{@resource[:name]}` does NOT exist" - return false - end - Puppet.debug "Datasorce (xa: #{xa?}) `#{@resource[:name]}` exists: #{res[:data].inspect}" - @data = res[:data] - return true - end - - def name - @property_hash[:name] - end - - def getproperty name, default=nil - if @property_hash.nil? or (@property_hash.respond_to? :key? and not @property_hash.key? name) or @property_hash[name].nil? - return default - end - return @property_hash[name] - end - def xa - setting = getproperty :xa, nil - if not setting.nil? - return setting - else - return xa? - end - end - def xa= value - actual = getproperty :xa, false - if actual.to_s != value.to_s - destroy - create - end - end - def controller - getproperty :controller - end - def profile - getproperty :profile, default_profile - end - def runasdomain - getproperty :runasdomain - end - - def jndiname - getattrib 'jndi-name' - end - - def jndiname= value - setattrib 'jndi-name', value - end - - def drivername - getattrib 'driver-name' - end - - def drivername= value - setattrib 'driver-name', value - end - - def minpoolsize - getattrib('min-pool-size').to_s - end - - def minpoolsize= value - setattrib 'min-pool-size', value - end - - def maxpoolsize - getattrib('max-pool-size').to_s - end - - def maxpoolsize= value - setattrib 'max-pool-size', value - end - - def username - getattrib('user-name') - end - - def username= value - setattrib 'user-name', value - end - - def password - getattrib('password') - end - - def password= value - setattrib 'password', value - end - - def options - managed_fetched_options - end - - def options= value - managed_fetched_options.each do |key, fetched_value| - expected_value = value[key] - setattrib(key, expected_value) if expected_value != fetched_value - end - end - - def enabled - getattrib('enabled').to_s - end - - def enabled= value - Puppet.debug "Enabling datasource #{@resource[:name]} to #{value}" - setenabled value - end - - def jdbcscheme - connectionHash()[:Scheme] - end - - def jdbcscheme= value - writeConnection :Scheme, value - end - - def host - connectionHash()[:ServerName].to_s - end - - def host= value - writeConnection :ServerName, value - end - - def port - connectionHash()[:PortNumber].to_i - end - - def port= value - writeConnection :PortNumber, value - end - - def dbname - connectionHash()[:DatabaseName] - end - - def dbname= value - writeConnection :DatabaseName, value - end - - def getattrib name, default=nil - if not @readed - exists? - @readed = true - end - if not @data.nil? and @data.key? name - return @data[name] - end - return default - end - - def setattrib name, value - setattribute datasource_path, name, value - @data[name] = value - end - - def jta - provider_impl.jta - end - - def jta= value - provider_impl.jta = value - end - - def xa? - if not @resource[:xa].nil? - return @resource[:xa] - else - return false - end - end - - def xa_datasource_properties_wrapper(parameters) - provider_impl.xa_datasource_properties_wrapper(parameters) - end - - def jta_opt(cmd) - provider_impl.jta_opt(cmd) - end - - protected - - def default_profile - 'full' - end + desc 'JBoss CLI datasource provider' - private - - def provider_impl - if @impl.nil? - if Puppet_X::Coi::Jboss::Configuration::is_pre_wildfly? - @impl = Puppet_X::Coi::Jboss::Provider::Datasource::PreWildFlyProvider.new(self) - else - @impl = Puppet_X::Coi::Jboss::Provider::Datasource::PostWildFlyProvider.new(self) - end - end - @impl - end + @data = nil + @readed = false + @impl = nil - def managed_fetched_options - fetched = {} - @resource[:options].each do |k, v| - fetched[k] = getattrib(k) - end - fetched - end - - def self.create_rubyobject name, xa, runasdomain, profile, controller - props = { - :name => name, - :ensure => :present, - :provider => :jbosscli, - :xa => xa, - :runasdomain => runasdomain, - :profile => profile, - :controller => controller - } - obj = new(props) - return obj - end + include Puppet_X::Coi::Jboss::Provider::Datasource - def createXaProperties - if @resource[:drivername] == 'h2' - "URL=#{connectionUrl.inspect}" - else - out = [] - props = [:ServerName, :PortNumber, :DatabaseName] - props.each do |prop| - value = @resource[getPuppetKey prop] - out.push "#{prop.to_s}=#{value.inspect}" - end - if oracle? - out.push 'DriverType="thin"' - end - out.join ',' - end - end - - def writeConnection property, value - if xa? - if h2? - writeXaProperty 'URL', connectionUrl - else - writeXaProperty property, value - end - else - readed = getattrib('connection-url') - url = connectionUrl - if readed.nil? or readed != url - setattrib 'connection-url', url - end - end - end - - def getPuppetKey property - case property - when :Scheme - return :jdbcscheme - when :ServerName - return :host - when :PortNumber - return :port - when :DatabaseName - return :dbname - else - raise 'Unknown property: ' + property - end - end - - def writeXaProperty property, value - if property == :Scheme - getattrib('xa-datasource-properties')[property.to_s]['value'] = value - return - end - cmd = compilecmd "#{datasource_path}/xa-datasource-properties=#{property.to_s}:read-resource()" - if execute(cmd)[:result] - cmd = compilecmd "#{datasource_path}/xa-datasource-properties=#{property.to_s}:remove()" - bringDown "XA Datasource Property " + property.to_s, cmd - end - cmd = compilecmd "#{datasource_path}/xa-datasource-properties=#{property.to_s}:add(value=#{escape value})" - bringUp "XA Datasource Property set " + property.to_s, cmd - props = getattrib 'xa-datasource-properties' - props = {} if props.nil? - props[property.to_s] = {} if props[property.to_s].nil? - props[property.to_s]['value'] = value - end - - def readXaProperty property - if property == :Scheme - key = getPuppetKey property - scheme = @resource[key] - if getattrib('xa-datasource-properties')[property.to_s].nil? - getattrib('xa-datasource-properties')[property.to_s] = {} - end - getattrib('xa-datasource-properties')[property.to_s]['value'] = scheme - return scheme - end - readed = getattrib('xa-datasource-properties') - key = property.to_s - if readed.nil? or readed[key].nil? or readed[key]['value'].blank? - name = @resource[:name] - cmd = compilecmd "#{datasource_path}/xa-datasource-properties=#{key}:read-attribute(name=value)" - result = executeAndGet cmd - readed[key]['value'] = result[:data] - end - return readed[key]['value'] - end - - def connectionHashFromXa - if h2? - parseConnectionUrl(readXaProperty 'URL') - else - props = [:Scheme, :ServerName, :PortNumber, :DatabaseName] - out = {} - props.each do |sym| - property = readXaProperty sym - out[sym] = property - end - out - end - end - - def connectionHashFromStd - parseConnectionUrl getattrib('connection-url').to_s - end - - def connectionHash - empty = { - :Scheme => nil, - :ServerName => nil, - :PortNumber => nil, - :DatabaseName => nil, - } - begin - if xa? then connectionHashFromXa else connectionHashFromStd end - rescue ArgumentError => e - Puppet.debug e - return empty - end - end - - def oracle? - scheme = @resource[:jdbcscheme] - scheme[0, 6] == 'oracle' - end - - def h2? - scheme = @resource[:jdbcscheme] - scheme[0, 2] == 'h2' - end - - def create_delete_cmd - cmd = "data-source" - if xa? - cmd = "xa-#{cmd}" - end - if @resource[:runasdomain] - cmd = "#{cmd} --profile=#{@resource[:profile]}" - end - return cmd - end - - def datasource_type - if xa? - "xa-data-source" - else - "data-source" - end - end - - def self.datasource_type xa - if xa - "xa-data-source" - else - "data-source" - end - end - - def datasource_path - "/subsystem=datasources/#{datasource_type}=#{@resource[:name]}" - end - - def parseOracleConnectionUrl(url) - splited = url.split '@' - scheme = splited[0].sub 'jdbc:', '' - host, port, dbname = splited[1].split ':' - return { - :Scheme => scheme, - :ServerName => host, - :PortNumber => port.to_i, - :DatabaseName => dbname, - } - end - - def parseH2ConnectionUrl(url) - repl = url.sub('h2:', 'h2-') - parsed = parseOtherDbConnectionUrl(repl) - parsed[:Scheme] = parsed[:Scheme].sub('h2-', 'h2:') - parsed - end - - def parseOtherDbConnectionUrl(url) - uri = URI(url.sub('jdbc:', '')) - return { - :Scheme => uri.scheme, - :ServerName => uri.host, - :PortNumber => uri.port, - :DatabaseName => uri.path[1..-1], - } - end - - def parseConnectionUrl url - begin - if oracle? - parseOracleConnectionUrl(url) - elsif h2? - parseH2ConnectionUrl(url) - else - parseOtherDbConnectionUrl(url) - end - rescue NoMethodError, ArgumentError, RuntimeError => e - raise ArgumentError, "Invalid connection url: #{url}: #{e}" - end - end - - def connectionUrl - scheme = @resource[:jdbcscheme] - host = @resource[:host] - port = @resource[:port] - dbname = @resource[:dbname] - if oracle? - port = 1521 if port <= 0 - url = "#{scheme}@#{host}:#{port}:#{dbname}" - else - port_with_colon = if port > 0 then ":#{port}" else '' end - url = "#{scheme}://#{host}#{port_with_colon}/#{dbname}" - end - return "jdbc:#{url}" + class << self + include Puppet_X::Coi::Jboss::Provider::Datasource::Static end - end diff --git a/lib/puppet/provider/jboss_deploy/jbosscli.rb b/lib/puppet/provider/jboss_deploy/jbosscli.rb index 207396d..4c66c87 100644 --- a/lib/puppet/provider/jboss_deploy/jbosscli.rb +++ b/lib/puppet/provider/jboss_deploy/jbosscli.rb @@ -1,6 +1,6 @@ -require File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'jbosscli.rb')) -require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/provider/jboss_deploy.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss')) -Puppet::Type.type(:jboss_deploy).provide(:jbosscli, :parent => Puppet::Provider::Jbosscli) do - include Puppet_X::Coi::Jboss::Provider::JbossDeploy +Puppet::Type.type(:jboss_deploy).provide(:jbosscli, + :parent => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli) do + include Puppet_X::Coi::Jboss::Provider::Deploy end diff --git a/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb b/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb index 3ab499e..af826e0 100644 --- a/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb +++ b/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb @@ -1,13 +1,14 @@ -require File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'jbosscli.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss')) + +Puppet::Type.type(:jboss_jdbcdriver).provide(:jbosscli, + :parent => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli) do -Puppet::Type.type(:jboss_jdbcdriver).provide(:jbosscli, :parent => Puppet::Provider::Jbosscli) do - @data = {} def create name = @resource[:name] map = get_attribs_map - + cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{name}:add(#{cmdlize_attribs_map map})" bringUp 'JDBC-Driver', cmd end @@ -16,7 +17,7 @@ def destroy cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{@resource[:name]}:remove" bringDown 'JDBC-Driver', cmd end - + def exists? @data = {} cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{@resource[:name]}:read-resource(recursive=true)" @@ -29,7 +30,7 @@ def exists? @data = res[:data] return true end - + def setattrib name, value Puppet.debug(name + ' setting to ' + value) cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{@resource[:name]}:write-attribute(name=#{name}, value=#{value})" @@ -39,42 +40,42 @@ def setattrib name, value raise "Cannot set #{name}: #{res[:data]}" end @data[name] = value - end - + end + def classname @data['driver-class-name'] end - + def classname= value setattrib 'driver-class-name', value end - + def modulename @data['driver-module-name'] end - + def modulename= value setattrib 'driver-module-name', value end - + def datasourceclassname @data['driver-datasource-class-name'] end - + def datasourceclassname= value setattrib 'driver-datasource-class-name', value end - + def xadatasourceclassname @data['driver-xa-datasource-class-name'] end - + def xadatasourceclassname= value setattrib 'driver-xa-datasource-class-name', value end - + private - + def get_attribs_map name = @resource[:name] modulename = @resource[:modulename] @@ -90,7 +91,7 @@ def get_attribs_map map['driver-class-name'] = classname if classname map end - + def cmdlize_attribs_map input list = [] input.each do |key, value| diff --git a/lib/puppet/provider/jboss_jmsqueue/jbosscli.rb b/lib/puppet/provider/jboss_jmsqueue/jbosscli.rb index ddb3152..bbe3465 100644 --- a/lib/puppet/provider/jboss_jmsqueue/jbosscli.rb +++ b/lib/puppet/provider/jboss_jmsqueue/jbosscli.rb @@ -1,6 +1,8 @@ -require File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'jbosscli.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss')) + +Puppet::Type.type(:jboss_jmsqueue).provide(:jbosscli, + :parent => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli) do -Puppet::Type.type(:jboss_jmsqueue).provide(:jbosscli, :parent => Puppet::Provider::Jbosscli) do def create if runasdomain? profile = "--profile=#{@resource[:profile]}" @@ -53,23 +55,23 @@ def exists? $data = res[:data] return true end - + def durable trace 'durable' Puppet.debug "Durable given: #{@resource[:durable].inspect}" $data['durable'].to_bool.to_s end - + def durable= value trace 'durable= %s' % value.to_s setattr 'durable', ('"%s"' % value.to_bool) end - + def entries trace 'entries' $data['entries'] end - + def entries= value trace 'entries= %s' % value.inspect entries = value.join '", "' @@ -78,11 +80,11 @@ def entries= value else raise "Array of entries can not be empty" end - setattr 'entries', entries + setattr 'entries', entries end - - private - + + private + def setattr name, value setattribute_raw "/subsystem=messaging/hornetq-server=default/jms-queue=#{@resource[:name]}", name, value end diff --git a/lib/puppet/provider/jboss_resourceadapter/jbosscli.rb b/lib/puppet/provider/jboss_resourceadapter/jbosscli.rb index c6679ea..c167b65 100644 --- a/lib/puppet/provider/jboss_resourceadapter/jbosscli.rb +++ b/lib/puppet/provider/jboss_resourceadapter/jbosscli.rb @@ -1,8 +1,8 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/functions/jboss_to_bool')) -require File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'jbosscli.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss')) + +Puppet::Type.type(:jboss_resourceadapter).provide(:jbosscli, + :parent => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli) do -Puppet::Type.type(:jboss_resourceadapter).provide(:jbosscli, :parent => Puppet::Provider::Jbosscli) do - def create name = @resource[:name] jndiname = @resource[:jndiname] @@ -17,7 +17,7 @@ def destroy cmd = compilecmd "/subsystem=resource-adapters/resource-adapter=#{@resource[:name]}:remove()" bringDown "Resource adapter", cmd end - + def exists? $data = nil cmd = compilecmd "/subsystem=resource-adapters/resource-adapter=#{@resource[:name]}:read-resource(recursive=true)" @@ -29,23 +29,23 @@ def exists? $data = res[:data] return true end - + def archive $data['archive'] end - + def archive= value - setbasicattr 'archive', value + setbasicattr 'archive', value end - + def transactionsupport $data['transaction-support'] end - + def transactionsupport= value - setbasicattr 'transaction-support', value + setbasicattr 'transaction-support', value end - + def jndiname jndis = [] if $data['connection-definitions'].nil? @@ -62,7 +62,7 @@ def jndiname Puppet.debug "JNDI getter -------- POST! => #{jndis.inspect}" return jndis end - + def jndiname= value Puppet.debug "JNDI setter -------- PRE!" names = jndiname @@ -71,7 +71,7 @@ def jndiname= value toadd = value - names # New array minus existing provides array to be added trace 'jndiname=(%s) :: toadd=%s' % [value.inspect, toadd.inspect] toremove.each do |jndi| - destroyconn jndi + destroyconn jndi end toadd.each do |jndi| config = prepareconfig() @@ -79,23 +79,23 @@ def jndiname= value end exists? # Re read configuration end - + def classname getconnectionattr 'class-name' end - + def classname= value setconnectionattr 'class-name', value end - + def backgroundvalidation getconnectionattr 'background-validation' end - + def backgroundvalidation= value setconnectionattr 'background-validation', value end - + def security if Puppet_X::Coi::Jboss::Functions.jboss_to_bool(getconnectionattr 'security-application') return 'application' @@ -108,7 +108,7 @@ def security end return nil end - + def security= value if value == 'application' setconnectionattr 'security-application', true @@ -126,9 +126,9 @@ def security= value raise "Invalid value for security: #{value}. Supported values are: application, domain-and-application, domain" end end - + protected - + def createConnections if $data.nil? exists? # Re read configuration @@ -139,7 +139,7 @@ def createConnections end end end - + def connExists? jndi if $data['connection-definitions'].nil? $data['connection-definitions'] = {} @@ -156,7 +156,7 @@ def connExists? jndi end return res[:result] end - + def createconn jndi, config name = @resource[:name] connectionParams = makejbprops config @@ -164,19 +164,19 @@ def createconn jndi, config cmd = compilecmd "/subsystem=resource-adapters/resource-adapter=#{name}/connection-definitions=#{connectionName}:add(#{connectionParams})" bringUp "Resource adapter connection-definition", cmd end - + def destroyconn jndi name = @resource[:name] connectionName = escapeforjbname jndi cmd = compilecmd "/subsystem=resource-adapters/resource-adapter=#{name}/connection-definitions=#{connectionName}:remove()" bringDown "Resource adapter connection-definition", cmd end - + def prepareconfig params = { :basics => { 'archive' => @resource[:archive], - 'transaction-support' => @resource[:transactionsupport], + 'transaction-support' => @resource[:transactionsupport], }, :connections => {}, } @@ -206,15 +206,15 @@ def prepareconfig end return params end - + def escapeforjbname input input.gsub(/([^\\])\//, '\1\\/').gsub(/([^\\]):/, '\1\\:') end - + def unescapeforjbname input input.gsub(/\\\//, '/').gsub(/\\:/, ':') end - + def makejbprops input inp = {} input.each do |k, v| @@ -224,12 +224,12 @@ def makejbprops input end inp.inspect.gsub('=>', '=').gsub(/[\{\}]/, '').gsub(/\"([^\"]+)\"=/,'\1=') end - + def setbasicattr name, value setattribute "/subsystem=resource-adapters/resource-adapter=#{@resource[:name]}", name, value $data[name] = value end - + def setconnectionattr name, value prepareconfig()[:connections].each do |jndi, config| if not connExists? jndi @@ -246,7 +246,7 @@ def setconnectionattr name, value $data['connection-definitions'][jndi][name] = value end end - + def getconnectionattr name prepareconfig()[:connections].each do |jndi, config| if not connExists? jndi @@ -258,5 +258,5 @@ def getconnectionattr name return $data['connection-definitions'][jndi][name] end end - -end \ No newline at end of file + +end diff --git a/lib/puppet/provider/jboss_securitydomain/jbosscli.rb b/lib/puppet/provider/jboss_securitydomain/jbosscli.rb index e4f03ea..4ecba57 100644 --- a/lib/puppet/provider/jboss_securitydomain/jbosscli.rb +++ b/lib/puppet/provider/jboss_securitydomain/jbosscli.rb @@ -1,6 +1,6 @@ -require File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'jbosscli.rb')) -require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss/provider/securitydomain.rb')) +require File.expand_path(File.join(File.dirname(__FILE__), '../../../puppet_x/coi/jboss')) -Puppet::Type.type(:jboss_securitydomain).provide(:jbosscli, :parent => Puppet::Provider::Jbosscli) do +Puppet::Type.type(:jboss_securitydomain).provide(:jbosscli, + :parent => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli) do include Puppet_X::Coi::Jboss::Provider::SecurityDomain end diff --git a/lib/puppet_x/coi/jboss.rb b/lib/puppet_x/coi/jboss.rb new file mode 100644 index 0000000..bdd6760 --- /dev/null +++ b/lib/puppet_x/coi/jboss.rb @@ -0,0 +1,47 @@ +# A puppet x module +module Puppet_X + # A COI puppet_x module + module Coi + # Require relative kernel-like method + def self.require_relative(relative_path, lvl = 0) + stack = Kernel.caller + file, = stack[lvl].split(':') + file = './' if ['(eval)', '(pry)', ''].include?(file) + file = File.dirname(file) + path = File.expand_path(File.join(file, relative_path)) + Kernel.require(path) + end + + # JBoss module + module Jboss + # JBoss provider module + module Provider + + end + end + end +end + +# Ruby default kernel module +module Kernel + define_method(:require_relative) { |rel| Puppet_X::Coi::require_relative(rel, lvl = 1) } unless Kernel.respond_to? :require_relative +end + +require_relative 'jboss/configuration' +require_relative 'jboss/facts' + +require_relative 'jboss/functions/jboss_basename' +require_relative 'jboss/functions/jboss_dirname' +require_relative 'jboss/functions/jboss_short_version' +require_relative 'jboss/functions/jboss_to_bool' +require_relative 'jboss/functions/jboss_to_i' +require_relative 'jboss/functions/jboss_to_s' +require_relative 'jboss/functions/jboss_type_version' + +require_relative 'jboss/provider/abstract_jboss_cli' +require_relative 'jboss/provider/datasource' +require_relative 'jboss/provider/datasource/post_wildfly_provider' +require_relative 'jboss/provider/datasource/pre_wildfly_provider' +require_relative 'jboss/provider/datasource/static' +require_relative 'jboss/provider/deploy' +require_relative 'jboss/provider/securitydomain' diff --git a/lib/puppet_x/coi/jboss/configuration.rb b/lib/puppet_x/coi/jboss/configuration.rb index 3be8f9a..2fc0456 100644 --- a/lib/puppet_x/coi/jboss/configuration.rb +++ b/lib/puppet_x/coi/jboss/configuration.rb @@ -1,11 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss # A class for JBoss configuration -class Configuration +class Puppet_X::Coi::Jboss::Configuration class << self @config = nil @@ -92,7 +86,3 @@ def read_raw_profile_d end end - -end -end -end diff --git a/lib/puppet_x/coi/jboss/facts.rb b/lib/puppet_x/coi/jboss/facts.rb index 2e93b46..509c101 100644 --- a/lib/puppet_x/coi/jboss/facts.rb +++ b/lib/puppet_x/coi/jboss/facts.rb @@ -1,13 +1,7 @@ -require File.expand_path(File.join(File.dirname(__FILE__), '/configuration')) +require_relative 'configuration' -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss # A class for JBoss facts -class Facts +class Puppet_X::Coi::Jboss::Facts class << self def define_fullconfig_fact config = Puppet_X::Coi::Jboss::Configuration::read @@ -32,7 +26,3 @@ class << config end end end - -end -end -end diff --git a/lib/puppet_x/coi/jboss/functions/jboss_basename.rb b/lib/puppet_x/coi/jboss/functions/jboss_basename.rb index 726b317..e93f876 100644 --- a/lib/puppet_x/coi/jboss/functions/jboss_basename.rb +++ b/lib/puppet_x/coi/jboss/functions/jboss_basename.rb @@ -1,11 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss # A custom class that holds custom functions -class Functions +class Puppet_X::Coi::Jboss::Functions class << self # PRIVATE INTERNAL FUNCTION. Returns the last component of the filename given in file_name @@ -23,6 +17,3 @@ def jboss_basename args end end end -end -end -end diff --git a/lib/puppet_x/coi/jboss/functions/jboss_dirname.rb b/lib/puppet_x/coi/jboss/functions/jboss_dirname.rb index 06f0f62..355526d 100644 --- a/lib/puppet_x/coi/jboss/functions/jboss_dirname.rb +++ b/lib/puppet_x/coi/jboss/functions/jboss_dirname.rb @@ -1,11 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss # A custom class that holds custom functions -class Functions +class Puppet_X::Coi::Jboss::Functions class << self # PRIVATE INTERNAL FUNCTION. Returns the forst component of the filename given in file_name @@ -22,6 +16,3 @@ def jboss_dirname args end end end -end -end -end diff --git a/lib/puppet_x/coi/jboss/functions/jboss_short_version.rb b/lib/puppet_x/coi/jboss/functions/jboss_short_version.rb index 6afa2e5..3566a6f 100644 --- a/lib/puppet_x/coi/jboss/functions/jboss_short_version.rb +++ b/lib/puppet_x/coi/jboss/functions/jboss_short_version.rb @@ -1,11 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss # A custom class that holds custom functions -class Functions +class Puppet_X::Coi::Jboss::Functions class << self # PRIVATE INTERNAL FUNCTION. Return the version of application server @@ -22,6 +16,3 @@ def jboss_short_version args end end end -end -end -end diff --git a/lib/puppet_x/coi/jboss/functions/jboss_to_bool.rb b/lib/puppet_x/coi/jboss/functions/jboss_to_bool.rb index 7611d76..490cd52 100644 --- a/lib/puppet_x/coi/jboss/functions/jboss_to_bool.rb +++ b/lib/puppet_x/coi/jboss/functions/jboss_to_bool.rb @@ -1,11 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss # A custom class that holds custom functions -class Functions +class Puppet_X::Coi::Jboss::Functions class << self # PRIVATE INTERNAL FUNCTION. Casts any value to boolean @@ -22,8 +16,8 @@ def jboss_to_bool args return string end string = string.to_s if string.is_a?(Symbol) - string = string.inspect unless string.is_a?(String) - + string = string.inspect unless string.is_a?(String) + # We consider all the yes, no, y, n and so on too ... result = case string # @@ -37,11 +31,8 @@ def jboss_to_bool args else false end - + return result end end end -end -end -end \ No newline at end of file diff --git a/lib/puppet_x/coi/jboss/functions/jboss_to_i.rb b/lib/puppet_x/coi/jboss/functions/jboss_to_i.rb index f2f168a..b7ff51a 100644 --- a/lib/puppet_x/coi/jboss/functions/jboss_to_i.rb +++ b/lib/puppet_x/coi/jboss/functions/jboss_to_i.rb @@ -1,11 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss # A custom class that holds custom functions -class Functions +class Puppet_X::Coi::Jboss::Functions class << self # PRIVATE INTERNAL FUNCTION. Casts any value to integer @@ -20,6 +14,3 @@ def jboss_to_i args end end end -end -end -end \ No newline at end of file diff --git a/lib/puppet_x/coi/jboss/functions/jboss_to_s.rb b/lib/puppet_x/coi/jboss/functions/jboss_to_s.rb index d627eb8..01ac98c 100644 --- a/lib/puppet_x/coi/jboss/functions/jboss_to_s.rb +++ b/lib/puppet_x/coi/jboss/functions/jboss_to_s.rb @@ -1,11 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss # A custom class that holds custom functions -class Functions +class Puppet_X::Coi::Jboss::Functions class << self # PRIVATE INTERNAL FUNCTION. Casts any value to string @@ -20,6 +14,3 @@ def jboss_to_s args end end end -end -end -end \ No newline at end of file diff --git a/lib/puppet_x/coi/jboss/functions/jboss_type_version.rb b/lib/puppet_x/coi/jboss/functions/jboss_type_version.rb index d236682..8f676f9 100644 --- a/lib/puppet_x/coi/jboss/functions/jboss_type_version.rb +++ b/lib/puppet_x/coi/jboss/functions/jboss_type_version.rb @@ -1,11 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss # A custom class that holds custom functions -class Functions +class Puppet_X::Coi::Jboss::Functions class << self # PRIVATE INTERNAL FUNCTION. Return type of application server given as input @@ -21,6 +15,3 @@ def jboss_type_version args end end end -end -end -end diff --git a/lib/puppet/provider/jbosscli.rb b/lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb similarity index 85% rename from lib/puppet/provider/jbosscli.rb rename to lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb index f32c2c0..95ae01d 100644 --- a/lib/puppet/provider/jbosscli.rb +++ b/lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -require File.expand_path(File.join(File.dirname(__FILE__), '../../puppet_x/coi/jboss/configuration')) +require_relative '../configuration' require 'tempfile' class Object @@ -7,7 +6,7 @@ def blank? return true if self.nil? self.respond_to?(:empty?) ? self.empty? : !self end - + def to_bool if self.respond_to?(:empty?) str = self @@ -25,16 +24,16 @@ def to_bool class Hash def hashbackmap result = {} - + self.each do |key, val| result[key] = yield val end - + result end end -class Puppet::Provider::Jbosscli < Puppet::Provider +class Puppet_X::Coi::Jboss::Provider::AbstractJbossCli < Puppet::Provider @@bin = "bin/jboss-cli.sh" @@contents = nil @@ -45,23 +44,23 @@ def jbossclibin path = "#{home}/#{@@bin}" return path end - + def jbosshome Puppet_X::Coi::Jboss::Configuration::config_value :home end - + def jbosslog Puppet_X::Coi::Jboss::Configuration::config_value :console_log end - + def config_runasdomain Puppet_X::Coi::Jboss::Configuration::config_value :runasdomain end - + def config_controller Puppet_X::Coi::Jboss::Configuration::config_value :controller end - + def config_profile Puppet_X::Coi::Jboss::Configuration::config_value :profile end @@ -69,35 +68,35 @@ def config_profile end # TODO: Uncomment for defered provider confinment after droping support for Puppet < 3.0 - # commands :jbosscli => Puppet::Provider::Jbosscli.jbossclibin + # commands :jbosscli => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.jbossclibin def runasdomain? @resource[:runasdomain] end - + def getlog(lines) last_lines = `tail -n #{lines} #{jbosslog}` end - + def printlog(lines) - return " ---\n JBoss AS log (last #{lines} lines): \n#{getlog lines}" + return " ---\n JBoss AS log (last #{lines} lines): \n#{getlog lines}" end def execute jbosscmd retry_count = @resource[:retry] retry_timeout = @resource[:retry_timeout] - ctrlcfg = Puppet::Provider::Jbosscli.controllerConfig @resource - return Puppet::Provider::Jbosscli.execute jbosscmd, runasdomain?, ctrlcfg, retry_count, retry_timeout + ctrlcfg = Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.controllerConfig @resource + return Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.execute jbosscmd, runasdomain?, ctrlcfg, retry_count, retry_timeout end def executeWithoutRetry jbosscmd - ctrlcfg = Puppet::Provider::Jbosscli.controllerConfig @resource - return Puppet::Provider::Jbosscli.execute jbosscmd, runasdomain?, ctrlcfg, 0, 0 + ctrlcfg = Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.controllerConfig @resource + return Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.execute jbosscmd, runasdomain?, ctrlcfg, 0, 0 end def executeAndGet jbosscmd - ctrlcfg = Puppet::Provider::Jbosscli.controllerConfig @resource - return Puppet::Provider::Jbosscli.executeAndGet jbosscmd, runasdomain?, ctrlcfg, 0, 0 + ctrlcfg = Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.controllerConfig @resource + return Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.executeAndGet jbosscmd, runasdomain?, ctrlcfg, 0, 0 end def self.controllerConfig resource @@ -108,19 +107,19 @@ def self.controllerConfig resource } return conf end - + def self.last_execute_status $? end - + def self.execshell(cmd) `#{cmd}` end - + def self.jbossas? Facter.value(:jboss_product) == 'jboss-as' end - + def self.timeout_cli '--timeout=50000' unless jbossas? end @@ -142,12 +141,12 @@ def self.execute jbosscmd, runasdomain, ctrlcfg, retry_count, retry_timeout ENV['__PASSWD'] = ctrlcfg[:ctrlpasswd] cmd += " --password=$__PASSWD" end - + retries = 0 result = '' lines = '' begin - if retries > 0 + if retries > 0 Puppet.warning "JBoss CLI command failed, try #{retries}/#{retry_count}, last status: #{result.exitstatus.to_s}, message: #{lines}" sleep retry_timeout.to_i end @@ -165,11 +164,11 @@ def self.execute jbosscmd, runasdomain, ctrlcfg, retry_count, retry_timeout :lines => lines } end - + def setattribute(path, name, value) setattribute_raw path, name, escape(value) end - + def setattribute_raw(path, name, value) Puppet.debug "#{name.inspect} setting to #{value.inspect} for path: #{path}" cmd = "#{path}:write-attribute(name=\"#{name.to_s}\", value=#{value})" @@ -183,29 +182,29 @@ def setattribute_raw(path, name, value) end @property_hash[name] = value end - + def bringUp(typename, args) return executeWithFail(typename, args, 'to create') end - + def bringDown(typename, args) return executeWithFail(typename, args, 'to remove') end - + $add_log = nil - + def isprintinglog=(setting) $add_log = setting end - + def trace method Puppet.debug '%s[%s] > IN > %s' % [self.class, @resource[:name], method] end - + def traceout method, retval Puppet.debug '%s[%s] > OUT > %s: %s' % [self.class, @resource[:name], method, retval.inspect] end - + def self.escape value if value.respond_to? :to_str str = value.gsub(/([^\\])\"/, '\1\\"') @@ -214,27 +213,27 @@ def self.escape value end return str.inspect end - + def escape value - Puppet::Provider::Jbosscli.escape value + Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.escape value end - + def executeWithFail(typename, passed_args, way) executed = execute(passed_args) if not executed[:result] ex = "\n#{typename} failed #{way}:\n[CLI command]: #{executed[:cmd]}\n[Error message]: #{executed[:lines]}" if not $add_log.nil? and $add_log > 0 ex = "#{ex}\n#{printlog $add_log}" - end + end raise ex end return executed end - + def compilecmd cmd - Puppet::Provider::Jbosscli.compilecmd @resource[:runasdomain], @resource[:profile], cmd + Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.compilecmd @resource[:runasdomain], @resource[:profile], cmd end - + def self.compilecmd runasdomain, profile, cmd out = cmd.to_s asdomain = runasdomain.to_bool @@ -272,6 +271,5 @@ def self.executeAndGet cmd, runasdomain, ctrlcfg, retry_count, retry_timeout } end end - end diff --git a/lib/puppet_x/coi/jboss/provider/datasource.rb b/lib/puppet_x/coi/jboss/provider/datasource.rb new file mode 100644 index 0000000..4d43a27 --- /dev/null +++ b/lib/puppet_x/coi/jboss/provider/datasource.rb @@ -0,0 +1,506 @@ +require_relative '../configuration' + +# A class for JBoss datasource provider +module Puppet_X::Coi::Jboss::Provider::Datasource + + def create + cmd = [ "#{create_delete_cmd} add --name=#{@resource[:name]}" ] + jta_opt(cmd) + cmd.push "--jndi-name=#{@resource[:jndiname].inspect}" + cmd.push "--driver-name=#{@resource[:drivername].inspect}" + cmd.push "--min-pool-size=#{@resource[:minpoolsize].inspect}" + cmd.push "--max-pool-size=#{@resource[:maxpoolsize].inspect}" + cmd.push "--user-name=#{@resource[:username].inspect}" + cmd.push "--password=#{@resource[:password].inspect}" + if @resource[:xa] + xa_properties = xa_datasource_properties_wrapper(createXaProperties) + cmd.push "--xa-datasource-properties=#{xa_properties}" + else + cmd.push "--connection-url=#{connectionUrl.inspect}" + end + @resource[:options].each do |attribute, value| + cmd.push "--#{attribute}=#{value.inspect}" + end + + bringUp 'Datasource', cmd.join(' ') + setenabled true + end + + def destroy + cmd = "#{create_delete_cmd} remove --name=#{@resource[:name]}" + bringDown 'Datasource', cmd + end + + + + def setenabled setting + Puppet.debug "setenabled #{setting.inspect}" + cmd = compilecmd "#{datasource_path}:read-attribute(name=enabled)" + res = executeAndGet cmd + enabled = res[:data] + Puppet.debug "Enabling datasource #{@resource[:name]} = #{enabled}: #{setting}" + if enabled != setting + if setting + cmd = compilecmd "#{datasource_path}:enable(persistent=true)" + else + cmd = compilecmd "#{datasource_path}:disable(persistent=true)" + end + bringUp "Datasource enable set to #{setting.to_s}", cmd + end + end + + def prepare_resource + if @resource.nil? + @resource = {} + end + if @resource[:name].nil? + @resource[:name] = @property_hash[:name] + end + if @resource[:controller].nil? + @resource[:controller] = controller + end + if @resource[:runasdomain].nil? + @resource[:runasdomain] = runasdomain + end + if @resource[:profile].nil? + @resource[:profile] = profile + end + if @resource[:xa].nil? + @resource[:xa] = xa + end + end + + def exists? + prepare_resource + if @resource[:dbname].nil? + @resource[:dbname] = @resource[:name] + end + @data = nil + cmd = compilecmd "#{datasource_path}:read-resource(recursive=true)" + res = executeAndGet cmd + if(res[:result] == false) + Puppet.debug "Datasorce (xa: #{xa?}) `#{@resource[:name]}` does NOT exist" + return false + end + Puppet.debug "Datasorce (xa: #{xa?}) `#{@resource[:name]}` exists: #{res[:data].inspect}" + @data = res[:data] + return true + end + + def name + @property_hash[:name] + end + + def getproperty name, default=nil + if @property_hash.nil? or (@property_hash.respond_to? :key? and not @property_hash.key? name) or @property_hash[name].nil? + return default + end + return @property_hash[name] + end + def xa + setting = getproperty :xa, nil + if not setting.nil? + return setting + else + return xa? + end + end + def xa= value + actual = getproperty :xa, false + if actual.to_s != value.to_s + destroy + create + end + end + def controller + getproperty :controller + end + def profile + getproperty :profile, default_profile + end + def runasdomain + getproperty :runasdomain + end + + def jndiname + getattrib 'jndi-name' + end + + def jndiname= value + setattrib 'jndi-name', value + end + + def drivername + getattrib 'driver-name' + end + + def drivername= value + setattrib 'driver-name', value + end + + def minpoolsize + getattrib('min-pool-size').to_s + end + + def minpoolsize= value + setattrib 'min-pool-size', value + end + + def maxpoolsize + getattrib('max-pool-size').to_s + end + + def maxpoolsize= value + setattrib 'max-pool-size', value + end + + def username + getattrib('user-name') + end + + def username= value + setattrib 'user-name', value + end + + def password + getattrib('password') + end + + def password= value + setattrib 'password', value + end + + def options + managed_fetched_options + end + + def options= value + managed_fetched_options.each do |key, fetched_value| + expected_value = value[key] + setattrib(key, expected_value) if expected_value != fetched_value + end + end + + def enabled + getattrib('enabled').to_s + end + + def enabled= value + Puppet.debug "Enabling datasource #{@resource[:name]} to #{value}" + setenabled value + end + + def jdbcscheme + connectionHash()[:Scheme] + end + + def jdbcscheme= value + writeConnection :Scheme, value + end + + def host + connectionHash()[:ServerName].to_s + end + + def host= value + writeConnection :ServerName, value + end + + def port + connectionHash()[:PortNumber].to_i + end + + def port= value + writeConnection :PortNumber, value + end + + def dbname + connectionHash()[:DatabaseName] + end + + def dbname= value + writeConnection :DatabaseName, value + end + + def getattrib name, default=nil + if not @readed + exists? + @readed = true + end + if not @data.nil? and @data.key? name + return @data[name] + end + return default + end + + def setattrib name, value + setattribute datasource_path, name, value + @data[name] = value + end + + def jta + provider_impl.jta + end + + def jta= value + provider_impl.jta = value + end + + def xa? + if not @resource[:xa].nil? + return @resource[:xa] + else + return false + end + end + + def xa_datasource_properties_wrapper(parameters) + provider_impl.xa_datasource_properties_wrapper(parameters) + end + + def jta_opt(cmd) + provider_impl.jta_opt(cmd) + end + + protected + + def default_profile + 'full' + end + + private + + def provider_impl + require_relative 'datasource/pre_wildfly_provider' + require_relative 'datasource/post_wildfly_provider' + + if @impl.nil? + if Puppet_X::Coi::Jboss::Configuration::is_pre_wildfly? + @impl = Puppet_X::Coi::Jboss::Provider::Datasource::PreWildFlyProvider.new(self) + else + @impl = Puppet_X::Coi::Jboss::Provider::Datasource::PostWildFlyProvider.new(self) + end + end + @impl + end + + def managed_fetched_options + fetched = {} + @resource[:options].each do |k, v| + fetched[k] = getattrib(k) + end + fetched + end + + def createXaProperties + if @resource[:drivername] == 'h2' + "URL=#{connectionUrl.inspect}" + else + out = [] + props = [:ServerName, :PortNumber, :DatabaseName] + props.each do |prop| + value = @resource[getPuppetKey prop] + out.push "#{prop.to_s}=#{value.inspect}" + end + if oracle? + out.push 'DriverType="thin"' + end + out.join ',' + end + end + + def writeConnection property, value + if xa? + if h2? + writeXaProperty 'URL', connectionUrl + else + writeXaProperty property, value + end + else + readed = getattrib('connection-url') + url = connectionUrl + if readed.nil? or readed != url + setattrib 'connection-url', url + end + end + end + + def getPuppetKey property + case property + when :Scheme + return :jdbcscheme + when :ServerName + return :host + when :PortNumber + return :port + when :DatabaseName + return :dbname + else + raise 'Unknown property: ' + property + end + end + + def writeXaProperty property, value + if property == :Scheme + getattrib('xa-datasource-properties')[property.to_s]['value'] = value + return + end + cmd = compilecmd "#{datasource_path}/xa-datasource-properties=#{property.to_s}:read-resource()" + if execute(cmd)[:result] + cmd = compilecmd "#{datasource_path}/xa-datasource-properties=#{property.to_s}:remove()" + bringDown "XA Datasource Property " + property.to_s, cmd + end + cmd = compilecmd "#{datasource_path}/xa-datasource-properties=#{property.to_s}:add(value=#{escape value})" + bringUp "XA Datasource Property set " + property.to_s, cmd + props = getattrib 'xa-datasource-properties' + props = {} if props.nil? + props[property.to_s] = {} if props[property.to_s].nil? + props[property.to_s]['value'] = value + end + + def readXaProperty property + if property == :Scheme + key = getPuppetKey property + scheme = @resource[key] + if getattrib('xa-datasource-properties')[property.to_s].nil? + getattrib('xa-datasource-properties')[property.to_s] = {} + end + getattrib('xa-datasource-properties')[property.to_s]['value'] = scheme + return scheme + end + readed = getattrib('xa-datasource-properties') + key = property.to_s + if readed.nil? or readed[key].nil? or readed[key]['value'].blank? + name = @resource[:name] + cmd = compilecmd "#{datasource_path}/xa-datasource-properties=#{key}:read-attribute(name=value)" + result = executeAndGet cmd + readed[key]['value'] = result[:data] + end + return readed[key]['value'] + end + + def connectionHashFromXa + if h2? + parseConnectionUrl(readXaProperty 'URL') + else + props = [:Scheme, :ServerName, :PortNumber, :DatabaseName] + out = {} + props.each do |sym| + property = readXaProperty sym + out[sym] = property + end + out + end + end + + def connectionHashFromStd + parseConnectionUrl getattrib('connection-url').to_s + end + + def connectionHash + empty = { + :Scheme => nil, + :ServerName => nil, + :PortNumber => nil, + :DatabaseName => nil, + } + begin + if xa? then connectionHashFromXa else connectionHashFromStd end + rescue ArgumentError => e + Puppet.debug e + return empty + end + end + + def oracle? + scheme = @resource[:jdbcscheme] + scheme[0, 6] == 'oracle' + end + + def h2? + scheme = @resource[:jdbcscheme] + scheme[0, 2] == 'h2' + end + + def create_delete_cmd + cmd = "data-source" + if xa? + cmd = "xa-#{cmd}" + end + if @resource[:runasdomain] + cmd = "#{cmd} --profile=#{@resource[:profile]}" + end + return cmd + end + + def datasource_type + if xa? + "xa-data-source" + else + "data-source" + end + end + + def datasource_path + "/subsystem=datasources/#{datasource_type}=#{@resource[:name]}" + end + + def parseOracleConnectionUrl(url) + splited = url.split '@' + scheme = splited[0].sub 'jdbc:', '' + host, port, dbname = splited[1].split ':' + return { + :Scheme => scheme, + :ServerName => host, + :PortNumber => port.to_i, + :DatabaseName => dbname, + } + end + + def parseH2ConnectionUrl(url) + repl = url.sub('h2:', 'h2-') + parsed = parseOtherDbConnectionUrl(repl) + parsed[:Scheme] = parsed[:Scheme].sub('h2-', 'h2:') + parsed + end + + def parseOtherDbConnectionUrl(url) + uri = URI(url.sub('jdbc:', '')) + return { + :Scheme => uri.scheme, + :ServerName => uri.host, + :PortNumber => uri.port, + :DatabaseName => uri.path[1..-1], + } + end + + def parseConnectionUrl url + begin + if oracle? + parseOracleConnectionUrl(url) + elsif h2? + parseH2ConnectionUrl(url) + else + parseOtherDbConnectionUrl(url) + end + rescue NoMethodError, ArgumentError, RuntimeError => e + raise ArgumentError, "Invalid connection url: #{url}: #{e}" + end + end + + def connectionUrl + scheme = @resource[:jdbcscheme] + host = @resource[:host] + port = @resource[:port] + dbname = @resource[:dbname] + if oracle? + port = 1521 if port <= 0 + url = "#{scheme}@#{host}:#{port}:#{dbname}" + else + port_with_colon = if port > 0 then ":#{port}" else '' end + url = "#{scheme}://#{host}#{port_with_colon}/#{dbname}" + end + return "jdbc:#{url}" + end + +end diff --git a/lib/puppet_x/coi/jboss/provider/datasource/post_wildfly_provider.rb b/lib/puppet_x/coi/jboss/provider/datasource/post_wildfly_provider.rb index 59b10f5..8448c32 100644 --- a/lib/puppet_x/coi/jboss/provider/datasource/post_wildfly_provider.rb +++ b/lib/puppet_x/coi/jboss/provider/datasource/post_wildfly_provider.rb @@ -1,16 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss -# JBoss provider module -module Provider -# JBoss datasource provider module -module Datasource - # A class for JBoss post WildFly datasource provider -class PostWildFlyProvider +class Puppet_X::Coi::Jboss::Provider::Datasource::PostWildFlyProvider def initialize(provider) @provider = provider end @@ -35,9 +24,3 @@ def jta_opt(cmd) cmd.push "--jta=#{@provider.resource[:jta].inspect}" unless @provider.xa? end end - -end -end -end -end -end \ No newline at end of file diff --git a/lib/puppet_x/coi/jboss/provider/datasource/pre_wildfly_provider.rb b/lib/puppet_x/coi/jboss/provider/datasource/pre_wildfly_provider.rb index 421288c..e0a05ce 100644 --- a/lib/puppet_x/coi/jboss/provider/datasource/pre_wildfly_provider.rb +++ b/lib/puppet_x/coi/jboss/provider/datasource/pre_wildfly_provider.rb @@ -1,16 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss -# JBoss provider module -module Provider -# JBoss datasource provider module -module Datasource - # A class for JBoss pre WildFly datasource provider -class PreWildFlyProvider +class Puppet_X::Coi::Jboss::Provider::Datasource::PreWildFlyProvider def initialize(provider) @provider = provider end @@ -31,9 +20,3 @@ def jta_opt(cmd) cmd.push "--jta=#{@provider.resource[:jta].inspect}" end end - -end -end -end -end -end \ No newline at end of file diff --git a/lib/puppet_x/coi/jboss/provider/datasource/static.rb b/lib/puppet_x/coi/jboss/provider/datasource/static.rb new file mode 100644 index 0000000..f109564 --- /dev/null +++ b/lib/puppet_x/coi/jboss/provider/datasource/static.rb @@ -0,0 +1,50 @@ +# A module that holds JBoss datasource provider static metod +module Puppet_X::Coi::Jboss::Provider::Datasource::Static + + def instances + runasdomain = self.config_runasdomain + profile = self.config_profile + controller = self.config_controller + ctrlconfig = self.controllerConfig({ :controller => controller }) + list = [] + cmd = self.compilecmd runasdomain, profile, "/subsystem=datasources:read-children-names(child-type=#{self.datasource_type true})" + res = self.executeAndGet cmd, runasdomain, ctrlconfig, 0, 0 + if res[:result] + res[:data].each do |name| + inst = self.create_rubyobject name, true, runasdomain, profile, controller + list.push inst + end + end + cmd = self.compilecmd runasdomain, profile, "/subsystem=datasources:read-children-names(child-type=#{self.datasource_type false})" + res = self.executeAndGet cmd, runasdomain, ctrlconfig, 0, 0 + if res[:result] + res[:data].each do |name| + inst = self.create_rubyobject name, false, runasdomain, profile, controller + list.push inst + end + end + return list + end + + def create_rubyobject(name, xa, runasdomain, profile, controller) + props = { + :name => name, + :ensure => :present, + :provider => :jbosscli, + :xa => xa, + :runasdomain => runasdomain, + :profile => profile, + :controller => controller + } + obj = new(props) + return obj + end + + def datasource_type(xa) + if xa + "xa-data-source" + else + "data-source" + end + end +end diff --git a/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb b/lib/puppet_x/coi/jboss/provider/deploy.rb similarity index 93% rename from lib/puppet_x/coi/jboss/provider/jboss_deploy.rb rename to lib/puppet_x/coi/jboss/provider/deploy.rb index 7ce6b83..3992917 100644 --- a/lib/puppet_x/coi/jboss/provider/jboss_deploy.rb +++ b/lib/puppet_x/coi/jboss/provider/deploy.rb @@ -1,13 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss - -module Provider # A class for JBoss deploy -module JbossDeploy +module Puppet_X::Coi::Jboss::Provider::Deploy def create cmd = "deploy #{@resource[:source]} --name=#{@resource[:name]}" if @resource[:runasdomain] @@ -102,7 +94,3 @@ def is_exact_deployment? end end -end -end -end -end diff --git a/lib/puppet_x/coi/jboss/provider/securitydomain.rb b/lib/puppet_x/coi/jboss/provider/securitydomain.rb index 1badb8b..353c8fb 100644 --- a/lib/puppet_x/coi/jboss/provider/securitydomain.rb +++ b/lib/puppet_x/coi/jboss/provider/securitydomain.rb @@ -1,75 +1,69 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss - -module Provider -# A class for JBoss configuration -module SecurityDomain - def create - cmd = "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:add(login-modules=[{code=>\"#{@resource[:code]}\",flag=>\"#{@resource[:codeflag]}\",module-options=>[" - options = [] - @resource[:moduleoptions].keys.sort.each do |key| - value = @resource[:moduleoptions][key] - val = value.to_s.gsub(/\n/, ' ').strip - options << '%s => "%s"' % [key, val] - end - cmd += options.join(',') + "]}])" - cmd = compilecmd(cmd) - cmd2 = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:add(cache-type=default)" - bringUp('Security Domain Cache Type', cmd2)[:result] - bringUp('Security Domain', cmd)[:result] +# A class for JBoss security domain provider +module Puppet_X::Coi::Jboss::Provider::SecurityDomain + def create + cmd = "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:add(login-modules=[{code=>\"#{@resource[:code]}\",flag=>\"#{@resource[:codeflag]}\",module-options=>[" + options = [] + @resource[:moduleoptions].keys.sort.each do |key| + value = @resource[:moduleoptions][key] + val = value.to_s.gsub(/\n/, ' ').strip + options << '%s => "%s"' % [key, val] end + cmd += options.join(',') + "]}])" + cmd = compilecmd(cmd) + cmd2 = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:add(cache-type=default)" + bringUp('Security Domain Cache Type', cmd2)[:result] + bringUp('Security Domain', cmd)[:result] + end - def destroy - cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:remove()" - bringDown('Security Domain', cmd)[:result] - end + def destroy + cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}:remove()" + bringDown('Security Domain', cmd)[:result] + end - def exists? - cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:read-resource()" - res = executeWithoutRetry cmd - if not res[:result] - Puppet.debug "Security Domain does NOT exist" - return false - end - undefined = nil - lines = preparelines res[:lines] - data = eval(lines)['result'] - Puppet.debug "Security Domain exists: #{data.inspect}" + def exists? + cmd = compilecmd "/subsystem=security/security-domain=#{@resource[:name]}/authentication=classic:read-resource()" + res = executeWithoutRetry cmd + if not res[:result] + Puppet.debug "Security Domain does NOT exist" + return false + end + undefined = nil + lines = preparelines res[:lines] + data = eval(lines)['result'] + Puppet.debug "Security Domain exists: #{data.inspect}" - existinghash = Hash.new - givenhash = Hash.new + existinghash = Hash.new + givenhash = Hash.new - unless @resource[:moduleoptions].nil? - @resource[:moduleoptions].each do |key, value| - givenhash["#{key}"] = value.to_s.gsub(/\n/, ' ').strip - end + unless @resource[:moduleoptions].nil? + @resource[:moduleoptions].each do |key, value| + givenhash["#{key}"] = value.to_s.gsub(/\n/, ' ').strip end + end - data['login-modules'][0]['module-options'].each do |key, value| - existinghash[key.to_s] = value.to_s.gsub(/\n/, ' ').strip - end - - if !existinghash.nil? && !givenhash.nil? && existinghash != givenhash - diff = givenhash.to_a - existinghash.to_a - Puppet.notice "Security domain should be recreated. Diff: #{diff.inspect}" - Puppet.debug "Security domain moduleoptions existing hash => #{existinghash.inspect}" - Puppet.debug "Security domain moduleoptions given hash => #{givenhash.inspect}" - destroy - return false - end - return true + data['login-modules'][0]['module-options'].each do |key, value| + existinghash[key.to_s] = value.to_s.gsub(/\n/, ' ').strip end - private - def preparelines lines - lines.gsub(/\((\"[^\"]+\") => (\"[^\"]+\")\)/, '\1 => \2').gsub(/\[((?:[\n\s]*\"[^\"]+\" => \"[^\"]+\",?[\n\s]*)+)\]/m, '{\1}') + if !existinghash.nil? && !givenhash.nil? && existinghash != givenhash + diff = givenhash.to_a - existinghash.to_a + Puppet.notice "Security domain should be recreated. Diff: #{diff.inspect}" + Puppet.debug "Security domain moduleoptions existing hash => #{existinghash.inspect}" + Puppet.debug "Security domain moduleoptions given hash => #{givenhash.inspect}" + destroy + return false end + return true + end + + private + + # Method prepares lines outputed by JBoss CLI tool, changing output to be readable in Ruby + # + # @param {string[]} lines + def preparelines lines + lines. + gsub(/\((\"[^\"]+\") => (\"[^\"]+\")\)/, '\1 => \2'). + gsub(/\[((?:[\n\s]*\"[^\"]+\" => \"[^\"]+\",?[\n\s]*)+)\]/m, '{\1}') end -end -end -end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 86d6702..cadf4b8 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -67,3 +67,5 @@ PuppetlabsSpec::Files.cleanup end end + +require 'puppet_x/coi/jboss' diff --git a/spec/unit/facter/jboss_fullconfig_spec.rb b/spec/unit/facter/jboss_fullconfig_spec.rb index 2c3df9a..9100056 100644 --- a/spec/unit/facter/jboss_fullconfig_spec.rb +++ b/spec/unit/facter/jboss_fullconfig_spec.rb @@ -1,5 +1,4 @@ require 'spec_helper' -require 'puppet_x/coi/jboss/configuration' describe 'Fact jboss_fullconfig', :type => :fact do diff --git a/spec/unit/lib/provider/datasource/post_wildfly_provider_spec.rb b/spec/unit/lib/provider/datasource/post_wildfly_provider_spec.rb index 10007d7..ec865b8 100644 --- a/spec/unit/lib/provider/datasource/post_wildfly_provider_spec.rb +++ b/spec/unit/lib/provider/datasource/post_wildfly_provider_spec.rb @@ -1,5 +1,4 @@ require 'spec_helper' -require 'puppet_x/coi/jboss/provider/datasource/post_wildfly_provider' describe Puppet_X::Coi::Jboss::Provider::Datasource::PostWildFlyProvider do @@ -22,4 +21,4 @@ subject { target.jta } it { expect(subject).to eq('true') } end -end \ No newline at end of file +end diff --git a/spec/unit/lib/provider/datasource/pre_wildfly_provider_spec.rb b/spec/unit/lib/provider/datasource/pre_wildfly_provider_spec.rb index f640c81..3d3a014 100644 --- a/spec/unit/lib/provider/datasource/pre_wildfly_provider_spec.rb +++ b/spec/unit/lib/provider/datasource/pre_wildfly_provider_spec.rb @@ -1,5 +1,4 @@ require 'spec_helper' -require 'puppet_x/coi/jboss/provider/datasource/pre_wildfly_provider' describe Puppet_X::Coi::Jboss::Provider::Datasource::PreWildFlyProvider do @@ -10,4 +9,4 @@ subject { target.xa_datasource_properties_wrapper(parameters) } it { expect(subject).to eq('[david=one,martha=tree]') } end -end \ No newline at end of file +end diff --git a/spec/unit/provider/jboss_datasource/jbosscli_spec.rb b/spec/unit/provider/jboss_datasource/jbosscli_spec.rb index 9d8dff1..8e73bf3 100644 --- a/spec/unit/provider/jboss_datasource/jbosscli_spec.rb +++ b/spec/unit/provider/jboss_datasource/jbosscli_spec.rb @@ -70,9 +70,9 @@ let(:status) { double(:exitstatus => 0) } before :each do re = /.*bin\/jboss-cli.sh --timeout=50000 --connect --file=.+jbosscli.* --controller=127.0.0.1:9999/ - expect(Puppet::Provider::Jbosscli).to receive(:last_execute_status). + expect(Puppet_X::Coi::Jboss::Provider::AbstractJbossCli).to receive(:last_execute_status). at_least(:once).and_return(status) - expect(Puppet::Provider::Jbosscli).to receive(:execshell). + expect(Puppet_X::Coi::Jboss::Provider::AbstractJbossCli).to receive(:execshell). at_least(:once).with(re).and_return(xa_result, nonxa_result) end it { expect(provider.class.instances).not_to be_empty } @@ -168,7 +168,7 @@ "testing;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE" end before :each do - expect(Puppet::Provider::Jbosscli).to receive(:executeAndGet). + expect(Puppet_X::Coi::Jboss::Provider::AbstractJbossCli).to receive(:executeAndGet). with(command, runasdomain, ctrlcfg, retry_count, timeout).and_return(result) end From 7482004ce58b91106f84cb9334d2aef8e436bde7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Wed, 20 Jan 2016 16:09:11 +0100 Subject: [PATCH 32/46] Enh #10: Test for relative_require --- lib/puppet_x/coi/jboss.rb | 2 +- spec/functions/jboss_basename_spec.rb | 21 +++++++++++---------- spec/unit/lib/coi_require_relative_spec.rb | 15 +++++++++++++++ spec/unit/lib/mocked/file.rb | 5 +++++ 4 files changed, 32 insertions(+), 11 deletions(-) create mode 100644 spec/unit/lib/coi_require_relative_spec.rb create mode 100644 spec/unit/lib/mocked/file.rb diff --git a/lib/puppet_x/coi/jboss.rb b/lib/puppet_x/coi/jboss.rb index bdd6760..b0f3f9b 100644 --- a/lib/puppet_x/coi/jboss.rb +++ b/lib/puppet_x/coi/jboss.rb @@ -5,7 +5,7 @@ module Coi # Require relative kernel-like method def self.require_relative(relative_path, lvl = 0) stack = Kernel.caller - file, = stack[lvl].split(':') + file = stack[lvl].split(/:\d/,2).first file = './' if ['(eval)', '(pry)', ''].include?(file) file = File.dirname(file) path = File.expand_path(File.join(file, relative_path)) diff --git a/spec/functions/jboss_basename_spec.rb b/spec/functions/jboss_basename_spec.rb index 26e3c3a..ab790f8 100644 --- a/spec/functions/jboss_basename_spec.rb +++ b/spec/functions/jboss_basename_spec.rb @@ -2,16 +2,17 @@ describe 'jboss_basename', :type => :puppet_function do - let(:input) { 'path/to/file' } - it do - should run. - with_params(input).and_return('file') - end + let(:input) { 'path/to/file' } + it do + is_expected.to run. + with_params(input).and_return('file') + end - let(:input2) { ['path/to/file', 'path/to/file2'] } - it do - should run. - with_params(input2).and_return(['file', 'file2']) - end + let(:input2) { ['path/to/file', 'path/to/file2'] } + it do + is_expected.to run. + with_params(input2). + and_return(['file', 'file2']) + end end diff --git a/spec/unit/lib/coi_require_relative_spec.rb b/spec/unit/lib/coi_require_relative_spec.rb new file mode 100644 index 0000000..b0f87da --- /dev/null +++ b/spec/unit/lib/coi_require_relative_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe Puppet_X::Coi do + describe '#require_relative' do + let(:target) { 'mocked/file' } + subject { Puppet_X::Coi::require_relative(target) } + let(:test_stmt) do + subject + NonExistentInAnyContextClassUsedOnlyForTesting.new.test + end + + it { expect { subject }.not_to raise_error } + it { expect(test_stmt).to eq(42) } + end +end diff --git a/spec/unit/lib/mocked/file.rb b/spec/unit/lib/mocked/file.rb new file mode 100644 index 0000000..d5dfcdd --- /dev/null +++ b/spec/unit/lib/mocked/file.rb @@ -0,0 +1,5 @@ +class NonExistentInAnyContextClassUsedOnlyForTesting + def test + 42 + end +end From 60c8efe32b0556c1034a996b5449183e8f18f9a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Wed, 20 Jan 2016 16:21:03 +0100 Subject: [PATCH 33/46] Changes after rebase --- lib/puppet_x/coi/jboss.rb | 1 + lib/puppet_x/coi/jboss/provider/confignode.rb | 16 ++-------------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/lib/puppet_x/coi/jboss.rb b/lib/puppet_x/coi/jboss.rb index b0f3f9b..3b282ed 100644 --- a/lib/puppet_x/coi/jboss.rb +++ b/lib/puppet_x/coi/jboss.rb @@ -43,5 +43,6 @@ module Kernel require_relative 'jboss/provider/datasource/post_wildfly_provider' require_relative 'jboss/provider/datasource/pre_wildfly_provider' require_relative 'jboss/provider/datasource/static' +require_relative 'jboss/provider/confignode' require_relative 'jboss/provider/deploy' require_relative 'jboss/provider/securitydomain' diff --git a/lib/puppet_x/coi/jboss/provider/confignode.rb b/lib/puppet_x/coi/jboss/provider/confignode.rb index 74785cd..ee47eda 100644 --- a/lib/puppet_x/coi/jboss/provider/confignode.rb +++ b/lib/puppet_x/coi/jboss/provider/confignode.rb @@ -1,13 +1,5 @@ -# A puppet x module -module Puppet_X -# A COI puppet_x module -module Coi -# JBoss module -module Jboss - -module Provider -# A class for ConfigNode -module ConfigNode +# A module for ConfigNode +module Puppet_X::Coi::Jboss::Provider::ConfigNode def create trace 'create' @@ -264,7 +256,3 @@ def compileprops arr.join ', ' end end -end -end -end -end From 1e8c1dd8ec049008449ec20b4cfe824098431efa Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Fri, 22 Jan 2016 10:49:42 +0100 Subject: [PATCH 34/46] #10 jmsqueue in puppet_x and tests for create and destroy --- .../provider/jboss_jmsqueue/jbosscli.rb | 87 +----------- lib/puppet_x/coi/jboss.rb | 1 + lib/puppet_x/coi/jboss/provider/jmsqueue.rb | 88 ++++++++++++ .../provider/jboss_jmsqueue/jbosscli_spec.rb | 129 ++++++++++++++++++ 4 files changed, 219 insertions(+), 86 deletions(-) create mode 100644 lib/puppet_x/coi/jboss/provider/jmsqueue.rb create mode 100644 spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb diff --git a/lib/puppet/provider/jboss_jmsqueue/jbosscli.rb b/lib/puppet/provider/jboss_jmsqueue/jbosscli.rb index bbe3465..17a39d0 100644 --- a/lib/puppet/provider/jboss_jmsqueue/jbosscli.rb +++ b/lib/puppet/provider/jboss_jmsqueue/jbosscli.rb @@ -2,90 +2,5 @@ Puppet::Type.type(:jboss_jmsqueue).provide(:jbosscli, :parent => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli) do - - def create - if runasdomain? - profile = "--profile=#{@resource[:profile]}" - else - profile = '' - end - entries = @resource[:entries].join '", "' - if not entries.empty? - entries = '["%s"]' % entries - else - raise "Array of entries can not be empty" - end - durable = @resource[:durable].to_bool - extcmd = "/extension=org.jboss.as.messaging" - if not execute("#{extcmd}:read-resource()")[:result] - bringUp "Extension - messaging", "#{extcmd}:add()" - end - syscmd = compilecmd "/subsystem=messaging" - if not execute("#{syscmd}:read-resource()")[:result] - bringUp "Subsystem - messaging", "#{syscmd}:add()" - end - hornetcmd = compilecmd "/subsystem=messaging/hornetq-server=default" - if not execute("#{hornetcmd}:read-resource()")[:result] - bringUp "Default HornetQ", "#{hornetcmd}:add()" - end - cmd = "jms-queue #{profile} add --queue-address=#{@resource[:name]} --entries=#{entries} --durable=\"#{durable.to_s}\"" - bringUp "JMS Queue", cmd - end - - def destroy - if runasdomain? - profile = "--profile=#{@resource[:profile]}" - else - profile = '' - end - cmd = "jms-queue #{profile} remove --queue-address=#{@resource[:name]}" - bringDown "JMS Queue", cmd - end - - # - def exists? - $data = nil - cmd = compilecmd "/subsystem=messaging/hornetq-server=default/jms-queue=#{@resource[:name]}:read-resource()" - res = executeAndGet cmd - - if not res[:result] - Puppet.debug "JMS Queue do not exists" - return false - end - $data = res[:data] - return true - end - - def durable - trace 'durable' - Puppet.debug "Durable given: #{@resource[:durable].inspect}" - $data['durable'].to_bool.to_s - end - - def durable= value - trace 'durable= %s' % value.to_s - setattr 'durable', ('"%s"' % value.to_bool) - end - - def entries - trace 'entries' - $data['entries'] - end - - def entries= value - trace 'entries= %s' % value.inspect - entries = value.join '", "' - if not entries.empty? - entries = '["%s"]' % entries - else - raise "Array of entries can not be empty" - end - setattr 'entries', entries - end - - private - - def setattr name, value - setattribute_raw "/subsystem=messaging/hornetq-server=default/jms-queue=#{@resource[:name]}", name, value - end + include Puppet_X::Coi::Jboss::Provider::Jmsqueue end diff --git a/lib/puppet_x/coi/jboss.rb b/lib/puppet_x/coi/jboss.rb index 3b282ed..7e3987d 100644 --- a/lib/puppet_x/coi/jboss.rb +++ b/lib/puppet_x/coi/jboss.rb @@ -46,3 +46,4 @@ module Kernel require_relative 'jboss/provider/confignode' require_relative 'jboss/provider/deploy' require_relative 'jboss/provider/securitydomain' +require_relative 'jboss/provider/jmsqueue' diff --git a/lib/puppet_x/coi/jboss/provider/jmsqueue.rb b/lib/puppet_x/coi/jboss/provider/jmsqueue.rb new file mode 100644 index 0000000..1db8e6d --- /dev/null +++ b/lib/puppet_x/coi/jboss/provider/jmsqueue.rb @@ -0,0 +1,88 @@ +# A module for Jmsqueue +module Puppet_X::Coi::Jboss::Provider::Jmsqueue + def create + if runasdomain? + profile = "--profile=#{@resource[:profile]}" + else + profile = '' + end + entries = @resource[:entries].join '", "' + if not entries.empty? + entries = '["%s"]' % entries + else + raise "Array of entries can not be empty" + end + durable = @resource[:durable].to_bool + extcmd = "/extension=org.jboss.as.messaging" + if not execute("#{extcmd}:read-resource()")[:result] + bringUp "Extension - messaging", "#{extcmd}:add()" + end + syscmd = compilecmd "/subsystem=messaging" + if not execute("#{syscmd}:read-resource()")[:result] + bringUp "Subsystem - messaging", "#{syscmd}:add()" + end + hornetcmd = compilecmd "/subsystem=messaging/hornetq-server=default" + if not execute("#{hornetcmd}:read-resource()")[:result] + bringUp "Default HornetQ", "#{hornetcmd}:add()" + end + cmd = "jms-queue #{profile} add --queue-address=#{@resource[:name]} --entries=#{entries} --durable=\"#{durable.to_s}\"" + bringUp "JMS Queue", cmd + end + + def destroy + if runasdomain? + profile = "--profile=#{@resource[:profile]}" + else + profile = '' + end + cmd = "jms-queue #{profile} remove --queue-address=#{@resource[:name]}" + bringDown "JMS Queue", cmd + end + + # + def exists? + $data = nil + cmd = compilecmd "/subsystem=messaging/hornetq-server=default/jms-queue=#{@resource[:name]}:read-resource()" + res = executeAndGet cmd + + if not res[:result] + Puppet.debug "JMS Queue do not exists" + return false + end + $data = res[:data] + return true + end + + def durable + trace 'durable' + Puppet.debug "Durable given: #{@resource[:durable].inspect}" + $data['durable'].to_bool.to_s + end + + def durable= value + trace 'durable= %s' % value.to_s + setattr 'durable', ('"%s"' % value.to_bool) + end + + def entries + trace 'entries' + $data['entries'] + end + + def entries= value + trace 'entries= %s' % value.inspect + entries = value.join '", "' + if not entries.empty? + entries = '["%s"]' % entries + else + raise "Array of entries can not be empty" + end + setattr 'entries', entries + end + + private + + def setattr name, value + setattribute_raw "/subsystem=messaging/hornetq-server=default/jms-queue=#{@resource[:name]}", name, value + end +end diff --git a/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb b/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb new file mode 100644 index 0000000..3382b84 --- /dev/null +++ b/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb @@ -0,0 +1,129 @@ +require "spec_helper" + +context "mocking default values" do + + let(:mock_values) do + { + :product => 'jboss-eap', + :version => '6.4.0.GA', + :controller => '127.0.0.1:9999', + } + end + + before :each do + Puppet_X::Coi::Jboss::Configuration.reset_config(mock_values) + end + + after :each do + Puppet_X::Coi::Jboss::Configuration.reset_config + end + + describe 'Puppet::Type::Confignode::ProviderJbosscli' do + + let(:described_class) do + Puppet::Type.type(:jboss_jmsqueue).provider(:jbosscli) + end + let(:sample_repl) do + { + :name => 'app-mails', + :durable => true, + :ensure => 'present', + :entries => [ + 'queue/app-mails', + 'java:jboss/exported/jms/queue/app-mails', + ], + :profile => 'full-ha' + } + end + + let(:extended_repl) do + {} + end + + let(:resource) do + raw = sample_repl.merge(extended_repl) + raw[:provider] = described_class.name + + Puppet::Type.type(:jboss_jmsqueue).new(raw) + end + + let(:provider) do + resource.provider + end + + before :each do + allow(provider.class).to receive(:suitable?).and_return(true) + end + + describe '#create wth runasdomain? => true' do + before :each do + + + bringUpName = 'Extension - messaging' + bringUpNameSubsytem = 'Subsystem - messaging' + profile = resource[:profile] + cmd = "/extension=org.jboss.as.messaging:add()" + cmd2 = + execCMD = '/extension=org.jboss.as.messaging:read-resource()' + execCMD_expected_output = { + :result => false, + } + execCMD2 = '/extension=org.jboss.as.messaging:add()' + + # line 4 + expect(provider).to receive(:runasdomain?).and_return(true) + + # line 17 + expect(provider).to receive(:execute).with(execCMD).and_return(execCMD_expected_output) + + # line 18 + expect(provider).to receive(:bringUp).with(bringUpName, execCMD2).and_return(true) + + # line 20 + cmdCompile = '/subsystem=messaging' + compiledCMDSubsystem = '/profile/full-ha/subsystem=messaging' + expect(provider).to receive(:compilecmd).with(cmdCompile).and_return(compiledCMDSubsystem) + + # line 21 + execCMDSubsystem = "#{compiledCMDSubsystem}:read-resource()" + expect(provider).to receive(:execute).with(execCMDSubsystem).and_return(execCMD_expected_output) + + # line 22 + cmdSubsystem = "#{compiledCMDSubsystem}:add()" + expect(provider).to receive(:bringUp).with(bringUpNameSubsytem, cmdSubsystem).and_return(true) + + # line 24 + hornetCMD = '/subsystem=messaging/hornetq-server=default' + compiledHornetCMD = "/profile/full-ha/#{hornetCMD}" + execHornetCMD = "#{compiledHornetCMD}:read-resource()" + hornetBringUpName = 'Default HornetQ' + horneBringUpCMD = "#{compiledHornetCMD}:add()" + + expect(provider).to receive(:compilecmd).with(hornetCMD).and_return(compiledHornetCMD) + expect(provider).to receive(:execute).with(execHornetCMD).and_return(execCMD_expected_output) + expect(provider).to receive(:bringUp).with(hornetBringUpName, horneBringUpCMD).and_return(true) + + # line 28 + finalCMD = "jms-queue --profile=full-ha add --queue-address=#{resource[:name]} --entries=#{resource[:entries]} --durable=\"#{resource[:durable].to_s}\"" + finalBringUpName = 'JMS Queue' + expect(provider).to receive(:bringUp).with(finalBringUpName, finalCMD).and_return(true) + + end + + subject { provider.create } + it {expect(subject).to eq(true)} + end + + describe '#destroy' do + before :each do + expect(provider).to receive(:runasdomain?).and_return(true) + cmd = "jms-queue --profile=#{resource[:profile]} remove --queue-address=#{resource[:name]}" + bringDownName = 'JMS Queue' + expect(provider).to receive(:bringDown).with(bringDownName, cmd).and_return(true) + end + + subject { provider.destroy } + it { expect(subject).to eq(true) } + end +end +end From 35811dd22f162dd21c4dc277cd5909862a39a82c Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Fri, 22 Jan 2016 11:19:23 +0100 Subject: [PATCH 35/46] test for exists? in jmsqueue --- .../provider/jboss_jmsqueue/jbosscli_spec.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb b/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb index 3382b84..407e9e6 100644 --- a/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb +++ b/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb @@ -125,5 +125,24 @@ subject { provider.destroy } it { expect(subject).to eq(true) } end + + describe '#exists?' do + before :each do + $data = nil + cmd = "/subsystem=messaging/hornetq-server=default/jms-queue=#{resource[:name]}:read-resource()" + compiledCMD = "/profile=full-ha#{cmd}" + + expected_output = { + :result => true, + :data => 'asd', + } + + expect(provider).to receive(:compilecmd).with(cmd).and_return(compiledCMD) + expect(provider).to receive(:executeAndGet).with(compiledCMD).and_return(expected_output) + end + + subject { provider.exists? } + it { expect(subject).to eq(true) } + end end end From ed5af800ea954405a1d3363bcb4d50ad8c325ca1 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Fri, 22 Jan 2016 13:28:45 +0100 Subject: [PATCH 36/46] #10 tests for jmsqueue --- lib/puppet_x/coi/jboss/provider/jmsqueue.rb | 1 + .../provider/jboss_jmsqueue/jbosscli_spec.rb | 59 ++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/lib/puppet_x/coi/jboss/provider/jmsqueue.rb b/lib/puppet_x/coi/jboss/provider/jmsqueue.rb index 1db8e6d..d7053a9 100644 --- a/lib/puppet_x/coi/jboss/provider/jmsqueue.rb +++ b/lib/puppet_x/coi/jboss/provider/jmsqueue.rb @@ -56,6 +56,7 @@ def exists? def durable trace 'durable' Puppet.debug "Durable given: #{@resource[:durable].inspect}" + # normalization $data['durable'].to_bool.to_s end diff --git a/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb b/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb index 407e9e6..980f260 100644 --- a/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb +++ b/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb @@ -126,7 +126,7 @@ it { expect(subject).to eq(true) } end - describe '#exists?' do + describe '#exists? with result => true' do before :each do $data = nil cmd = "/subsystem=messaging/hornetq-server=default/jms-queue=#{resource[:name]}:read-resource()" @@ -144,5 +144,62 @@ subject { provider.exists? } it { expect(subject).to eq(true) } end + + describe '#exists? with result => false' do + before :each do + $data = nil + cmd = "/subsystem=messaging/hornetq-server=default/jms-queue=#{resource[:name]}:read-resource()" + compiledCMD = "/profile=full-ha#{cmd}" + + expected_output = { + :result => false, + :data => 'asd', + } + + expect(provider).to receive(:compilecmd).with(cmd).and_return(compiledCMD) + expect(provider).to receive(:executeAndGet).with(compiledCMD).and_return(expected_output) + end + + subject { provider.exists? } + it { expect(subject).to eq(false) } + end + + describe '#durable' do + before :each do + $data = { + 'durable' => 'true', + } + end + subject { provider.durable } + it { expect(subject).to eq("true") } + end + + describe '#durable = true' do + before :each do + expect(provider).to receive(:setattr).with('durable', "\"true\"").and_return(true) + end + subject { provider.durable = "true" } + it { expect(subject).to eq("true") } + end + + describe '#entries' do + before :each do + $data = { + 'entries' => 'asd', + } + end + subject { provider.entries } + it { expect(subject).to eq('asd') } + end + + describe "#entries with true" do + before :each do + entries = "[\"true\"]" + expect(provider).to receive(:setattr).with('entries', entries).and_return("true") + end + + subject { provider.entries= ['true'] } + it { expect(subject).to eq (["true"]) } + end end end From 26fb95482c05f7bdf9304184bf4bb7cc2304813a Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Fri, 22 Jan 2016 15:19:25 +0100 Subject: [PATCH 37/46] jdbc driver in puppet_x and tests --- .../provider/jboss_jdbcdriver/jbosscli.rb | 99 +------------------ lib/puppet_x/coi/jboss.rb | 1 + 2 files changed, 2 insertions(+), 98 deletions(-) diff --git a/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb b/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb index af826e0..a81c77a 100644 --- a/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb +++ b/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb @@ -2,102 +2,5 @@ Puppet::Type.type(:jboss_jdbcdriver).provide(:jbosscli, :parent => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli) do - - @data = {} - - def create - name = @resource[:name] - map = get_attribs_map - - cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{name}:add(#{cmdlize_attribs_map map})" - bringUp 'JDBC-Driver', cmd - end - - def destroy - cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{@resource[:name]}:remove" - bringDown 'JDBC-Driver', cmd - end - - def exists? - @data = {} - cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{@resource[:name]}:read-resource(recursive=true)" - res = executeAndGet cmd - if(res[:result] == false) - Puppet.debug("JDBC Driver #{@resource[:name]} does NOT exist") - return false - end - Puppet.debug("JDBC Driver exists: #{res[:data].inspect}") - @data = res[:data] - return true - end - - def setattrib name, value - Puppet.debug(name + ' setting to ' + value) - cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{@resource[:name]}:write-attribute(name=#{name}, value=#{value})" - res = executeAndGet cmd - Puppet.debug res.inspect - if not res[:result] - raise "Cannot set #{name}: #{res[:data]}" - end - @data[name] = value - end - - def classname - @data['driver-class-name'] - end - - def classname= value - setattrib 'driver-class-name', value - end - - def modulename - @data['driver-module-name'] - end - - def modulename= value - setattrib 'driver-module-name', value - end - - def datasourceclassname - @data['driver-datasource-class-name'] - end - - def datasourceclassname= value - setattrib 'driver-datasource-class-name', value - end - - def xadatasourceclassname - @data['driver-xa-datasource-class-name'] - end - - def xadatasourceclassname= value - setattrib 'driver-xa-datasource-class-name', value - end - - private - - def get_attribs_map - name = @resource[:name] - modulename = @resource[:modulename] - datasourceclassname = @resource[:datasourceclassname] - xadatasourceclassname = @resource[:xadatasourceclassname] - classname = @resource[:classname] - map = { - 'driver-name' => name, - 'driver-module-name' => modulename - } - map['driver-datasource-class-name'] = datasourceclassname if datasourceclassname - map['driver-xa-datasource-class-name'] = xadatasourceclassname if xadatasourceclassname - map['driver-class-name'] = classname if classname - map - end - - def cmdlize_attribs_map input - list = [] - input.each do |key, value| - list.push "#{key}=#{value.inspect}" - end - list.join ',' - end - + include Puppet_X::Coi::Jboss::Provider::Jdbcdriver end diff --git a/lib/puppet_x/coi/jboss.rb b/lib/puppet_x/coi/jboss.rb index 7e3987d..e64e60a 100644 --- a/lib/puppet_x/coi/jboss.rb +++ b/lib/puppet_x/coi/jboss.rb @@ -47,3 +47,4 @@ module Kernel require_relative 'jboss/provider/deploy' require_relative 'jboss/provider/securitydomain' require_relative 'jboss/provider/jmsqueue' +require_relative 'jboss/provider/jdbcdriver' From 8960d3fb6beb339c25151f63dd279ac0ef7a899b Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Fri, 22 Jan 2016 15:22:46 +0100 Subject: [PATCH 38/46] #10 correct files --- lib/puppet_x/coi/jboss/provider/jdbcdriver.rb | 100 +++++++++++++++++ .../jboss_jdbcdriver/jbosscli_spec.rb | 105 ++++++++++++++++++ 2 files changed, 205 insertions(+) create mode 100644 lib/puppet_x/coi/jboss/provider/jdbcdriver.rb create mode 100644 spec/unit/provider/jboss_jdbcdriver/jbosscli_spec.rb diff --git a/lib/puppet_x/coi/jboss/provider/jdbcdriver.rb b/lib/puppet_x/coi/jboss/provider/jdbcdriver.rb new file mode 100644 index 0000000..5d87f1f --- /dev/null +++ b/lib/puppet_x/coi/jboss/provider/jdbcdriver.rb @@ -0,0 +1,100 @@ +# A module for Jdbcdriver +module Puppet_X::Coi::Jboss::Provider::Jdbcdriver + @data = {} + + def create + name = @resource[:name] + map = get_attribs_map + + cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{name}:add(#{cmdlize_attribs_map map})" + bringUp 'JDBC-Driver', cmd + end + + def destroy + cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{@resource[:name]}:remove" + bringDown 'JDBC-Driver', cmd + end + + def exists? + @data = {} + cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{@resource[:name]}:read-resource(recursive=true)" + res = executeAndGet cmd + if(res[:result] == false) + Puppet.debug("JDBC Driver #{@resource[:name]} does NOT exist") + return false + end + Puppet.debug("JDBC Driver exists: #{res[:data].inspect}") + @data = res[:data] + return true + end + + def setattrib name, value + Puppet.debug(name + ' setting to ' + value) + cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{@resource[:name]}:write-attribute(name=#{name}, value=#{value})" + res = executeAndGet cmd + Puppet.debug res.inspect + if not res[:result] + raise "Cannot set #{name}: #{res[:data]}" + end + @data[name] = value + end + + def classname + @data['driver-class-name'] + end + + def classname= value + setattrib 'driver-class-name', value + end + + def modulename + @data['driver-module-name'] + end + + def modulename= value + setattrib 'driver-module-name', value + end + + def datasourceclassname + @data['driver-datasource-class-name'] + end + + def datasourceclassname= value + setattrib 'driver-datasource-class-name', value + end + + def xadatasourceclassname + @data['driver-xa-datasource-class-name'] + end + + def xadatasourceclassname= value + setattrib 'driver-xa-datasource-class-name', value + end + + private + + def get_attribs_map + name = @resource[:name] + modulename = @resource[:modulename] + datasourceclassname = @resource[:datasourceclassname] + xadatasourceclassname = @resource[:xadatasourceclassname] + classname = @resource[:classname] + map = { + 'driver-name' => name, + 'driver-module-name' => modulename + } + map['driver-datasource-class-name'] = datasourceclassname if datasourceclassname + map['driver-xa-datasource-class-name'] = xadatasourceclassname if xadatasourceclassname + map['driver-class-name'] = classname if classname + map + end + + def cmdlize_attribs_map input + list = [] + input.each do |key, value| + list.push "#{key}=#{value.inspect}" + end + list.join ',' + end + +end diff --git a/spec/unit/provider/jboss_jdbcdriver/jbosscli_spec.rb b/spec/unit/provider/jboss_jdbcdriver/jbosscli_spec.rb new file mode 100644 index 0000000..8491910 --- /dev/null +++ b/spec/unit/provider/jboss_jdbcdriver/jbosscli_spec.rb @@ -0,0 +1,105 @@ +require "spec_helper" + +context "mocking default values" do + + let(:mock_values) do + { + :product => 'jboss-eap', + :version => '6.4.0.GA', + :controller => '127.0.0.1:9999', + } + end + + before :each do + Puppet_X::Coi::Jboss::Configuration.reset_config(mock_values) + end + + after :each do + Puppet_X::Coi::Jboss::Configuration.reset_config + end + + describe 'Puppet::Type::Confignode::ProviderJbosscli' do + + let(:described_class) do + Puppet::Type.type(:jboss_jdbcdriver).provider(:jbosscli) + end + let(:sample_repl) do + { + :name => 'app-mails', + :modulename => 'super-crm', + :datasourceclassname => 'datasourceclassname', + :xadatasourceclassname => 'xadsname', + :classname => 'driverclasname', + } + end + + let(:extended_repl) do + {} + end + + let(:resource) do + raw = sample_repl.merge(extended_repl) + raw[:provider] = described_class.name + + Puppet::Type.type(:jboss_jdbcdriver).new(raw) + end + + let(:provider) do + resource.provider + end + + before :each do + allow(provider.class).to receive(:suitable?).and_return(true) + end + + describe '#create' do + before :each do + + cmdlizedMap = "driver-name=\"app-mails\",driver-module-name=\"super-crm\",driver-datasource-class-name=\"datasourceclassname\",driver-xa-datasource-class-name=\"xadsname\",driver-class-name=\"driverclasname\"" + + + cmd = "/subsystem=datasources/jdbc-driver=app-mails:add(#{cmdlizedMap})" + compiledcmd = "profile/full-ha/#{cmd}" + bringUpName = 'JDBC-Driver' + expect(provider).to receive(:compilecmd).with(cmd).and_return(compiledcmd) + + expect(provider).to receive(:bringUp).with(bringUpName, compiledcmd).and_return(true) + end + + subject { provider.create } + it { expect(subject).to eq(true) } + end + + describe '#destroy' do + before :each do + + cmd = "/subsystem=datasources/jdbc-driver=#{resource[:name]}:remove" + compiledcmd = "profile/full-ha/#{cmd}" + bringDownName = 'JDBC-Driver' + + expect(provider).to receive(:compilecmd).with(cmd).and_return(compiledcmd) + expect(provider).to receive(:bringDown).with(bringDownName, compiledcmd).and_return(true) + end + + subject { provider.destroy } + it { expect(subject).to eq(true) } + end + + describe 'exists?' do + before :each do + cmd = "/subsystem=datasources/jdbc-driver=#{resource[:name]}:read-resource(recursive=true)" + compiledcmd = "profile/full-ha/#{cmd}" + expected_output = { + :result => true, + } + + expect(provider).to receive(:compilecmd).with(cmd).and_return(compiledcmd) + expect(provider).to receive(:executeAndGet).with(compiledcmd).and_return(expected_output) + end + + subject { provider.exists? } + it { expect(subject).to eq(true)} + end + +end +end From 139db380e71f1703b1ac948aeb13e13dd13d982f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Fri, 22 Jan 2016 19:27:41 +0100 Subject: [PATCH 39/46] Enh #10: Fixes for Ruby 1.8 Also fixing couple of errors and copy-pastes by mister @Cosaquee :-P --- lib/puppet/provider/jboss_deploy/jbosscli.rb | 3 +++ lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb | 5 +++++ lib/puppet_x/coi/jboss/provider/jdbcdriver.rb | 6 +++--- lib/puppet_x/coi/jboss/provider/jmsqueue.rb | 2 +- .../provider/jboss_confignode/confignode_spec.rb | 2 +- .../provider/jboss_jdbcdriver/jbosscli_spec.rb | 10 +++++----- spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb | 14 +++++++------- 7 files changed, 25 insertions(+), 17 deletions(-) diff --git a/lib/puppet/provider/jboss_deploy/jbosscli.rb b/lib/puppet/provider/jboss_deploy/jbosscli.rb index 4c66c87..207c0e7 100644 --- a/lib/puppet/provider/jboss_deploy/jbosscli.rb +++ b/lib/puppet/provider/jboss_deploy/jbosscli.rb @@ -2,5 +2,8 @@ Puppet::Type.type(:jboss_deploy).provide(:jbosscli, :parent => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli) do + + desc 'JBoss CLI deploy provider' + include Puppet_X::Coi::Jboss::Provider::Deploy end diff --git a/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb b/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb index a81c77a..9a37d6b 100644 --- a/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb +++ b/lib/puppet/provider/jboss_jdbcdriver/jbosscli.rb @@ -2,5 +2,10 @@ Puppet::Type.type(:jboss_jdbcdriver).provide(:jbosscli, :parent => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli) do + + desc 'JBoss CLI JDBC driver provider' + + @data = {} + include Puppet_X::Coi::Jboss::Provider::Jdbcdriver end diff --git a/lib/puppet_x/coi/jboss/provider/jdbcdriver.rb b/lib/puppet_x/coi/jboss/provider/jdbcdriver.rb index 5d87f1f..482568e 100644 --- a/lib/puppet_x/coi/jboss/provider/jdbcdriver.rb +++ b/lib/puppet_x/coi/jboss/provider/jdbcdriver.rb @@ -1,11 +1,10 @@ # A module for Jdbcdriver module Puppet_X::Coi::Jboss::Provider::Jdbcdriver - @data = {} def create name = @resource[:name] map = get_attribs_map - + cmd = compilecmd "/subsystem=datasources/jdbc-driver=#{name}:add(#{cmdlize_attribs_map map})" bringUp 'JDBC-Driver', cmd end @@ -91,7 +90,8 @@ def get_attribs_map def cmdlize_attribs_map input list = [] - input.each do |key, value| + input.keys.sort.each do |key| + value = input[key] list.push "#{key}=#{value.inspect}" end list.join ',' diff --git a/lib/puppet_x/coi/jboss/provider/jmsqueue.rb b/lib/puppet_x/coi/jboss/provider/jmsqueue.rb index d7053a9..e13ab93 100644 --- a/lib/puppet_x/coi/jboss/provider/jmsqueue.rb +++ b/lib/puppet_x/coi/jboss/provider/jmsqueue.rb @@ -25,7 +25,7 @@ def create if not execute("#{hornetcmd}:read-resource()")[:result] bringUp "Default HornetQ", "#{hornetcmd}:add()" end - cmd = "jms-queue #{profile} add --queue-address=#{@resource[:name]} --entries=#{entries} --durable=\"#{durable.to_s}\"" + cmd = "jms-queue #{profile} add --queue-address=#{@resource[:name]} --entries=#{entries} --durable=#{durable.to_s}" bringUp "JMS Queue", cmd end diff --git a/spec/unit/provider/jboss_confignode/confignode_spec.rb b/spec/unit/provider/jboss_confignode/confignode_spec.rb index 249406e..761c46f 100644 --- a/spec/unit/provider/jboss_confignode/confignode_spec.rb +++ b/spec/unit/provider/jboss_confignode/confignode_spec.rb @@ -18,7 +18,7 @@ Puppet_X::Coi::Jboss::Configuration.reset_config end - describe 'Puppet::Type::Confignode::ProviderJbosscli' do + describe 'Puppet::Type::Jboss_confignode::ProviderJbosscli' do let(:described_class) do Puppet::Type.type(:jboss_confignode).provider(:jbosscli) diff --git a/spec/unit/provider/jboss_jdbcdriver/jbosscli_spec.rb b/spec/unit/provider/jboss_jdbcdriver/jbosscli_spec.rb index 8491910..a6e0bb7 100644 --- a/spec/unit/provider/jboss_jdbcdriver/jbosscli_spec.rb +++ b/spec/unit/provider/jboss_jdbcdriver/jbosscli_spec.rb @@ -18,7 +18,7 @@ Puppet_X::Coi::Jboss::Configuration.reset_config end - describe 'Puppet::Type::Confignode::ProviderJbosscli' do + describe 'Puppet::Type::Jboss_jdbcdriver::ProviderJbosscli' do let(:described_class) do Puppet::Type.type(:jboss_jdbcdriver).provider(:jbosscli) @@ -55,11 +55,11 @@ describe '#create' do before :each do - cmdlizedMap = "driver-name=\"app-mails\",driver-module-name=\"super-crm\",driver-datasource-class-name=\"datasourceclassname\",driver-xa-datasource-class-name=\"xadsname\",driver-class-name=\"driverclasname\"" + cmdlizedMap = 'driver-class-name="driverclasname",driver-datasource-class-name="datasourceclassname",driver-module-name="super-crm",driver-name="app-mails",driver-xa-datasource-class-name="xadsname"' cmd = "/subsystem=datasources/jdbc-driver=app-mails:add(#{cmdlizedMap})" - compiledcmd = "profile/full-ha/#{cmd}" + compiledcmd = "/profile=full-ha/#{cmd}" bringUpName = 'JDBC-Driver' expect(provider).to receive(:compilecmd).with(cmd).and_return(compiledcmd) @@ -74,7 +74,7 @@ before :each do cmd = "/subsystem=datasources/jdbc-driver=#{resource[:name]}:remove" - compiledcmd = "profile/full-ha/#{cmd}" + compiledcmd = "/profile=full-ha/#{cmd}" bringDownName = 'JDBC-Driver' expect(provider).to receive(:compilecmd).with(cmd).and_return(compiledcmd) @@ -88,7 +88,7 @@ describe 'exists?' do before :each do cmd = "/subsystem=datasources/jdbc-driver=#{resource[:name]}:read-resource(recursive=true)" - compiledcmd = "profile/full-ha/#{cmd}" + compiledcmd = "/profile=full-ha/#{cmd}" expected_output = { :result => true, } diff --git a/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb b/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb index 980f260..d3bfb2b 100644 --- a/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb +++ b/spec/unit/provider/jboss_jmsqueue/jbosscli_spec.rb @@ -18,7 +18,7 @@ Puppet_X::Coi::Jboss::Configuration.reset_config end - describe 'Puppet::Type::Confignode::ProviderJbosscli' do + describe 'Puppet::Type::JBoss_jmsqueue::ProviderJbosscli' do let(:described_class) do Puppet::Type.type(:jboss_jmsqueue).provider(:jbosscli) @@ -81,7 +81,7 @@ # line 20 cmdCompile = '/subsystem=messaging' - compiledCMDSubsystem = '/profile/full-ha/subsystem=messaging' + compiledCMDSubsystem = '/profile=full-ha/subsystem=messaging' expect(provider).to receive(:compilecmd).with(cmdCompile).and_return(compiledCMDSubsystem) # line 21 @@ -94,7 +94,7 @@ # line 24 hornetCMD = '/subsystem=messaging/hornetq-server=default' - compiledHornetCMD = "/profile/full-ha/#{hornetCMD}" + compiledHornetCMD = "/profile=full-ha/#{hornetCMD}" execHornetCMD = "#{compiledHornetCMD}:read-resource()" hornetBringUpName = 'Default HornetQ' horneBringUpCMD = "#{compiledHornetCMD}:add()" @@ -104,7 +104,7 @@ expect(provider).to receive(:bringUp).with(hornetBringUpName, horneBringUpCMD).and_return(true) # line 28 - finalCMD = "jms-queue --profile=full-ha add --queue-address=#{resource[:name]} --entries=#{resource[:entries]} --durable=\"#{resource[:durable].to_s}\"" + finalCMD = 'jms-queue --profile=full-ha add --queue-address=app-mails --entries=["queue/app-mails", "java:jboss/exported/jms/queue/app-mails"] --durable=true' finalBringUpName = 'JMS Queue' expect(provider).to receive(:bringUp).with(finalBringUpName, finalCMD).and_return(true) @@ -194,12 +194,12 @@ describe "#entries with true" do before :each do - entries = "[\"true\"]" + entries = "[\"true\", \"false\"]" expect(provider).to receive(:setattr).with('entries', entries).and_return("true") end - subject { provider.entries= ['true'] } - it { expect(subject).to eq (["true"]) } + subject { provider.entries = ['true', 'false'] } + it { expect(subject).to eq (['true', 'false']) } end end end From 94cccf368b2e6503434db782f76efd9e53e6e412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Suszy=C5=84ski?= Date: Fri, 22 Jan 2016 22:48:24 +0100 Subject: [PATCH 40/46] Enh #10: Fix for datasource options munging, bug from #43 and #9 --- lib/puppet/type/jboss_datasource.rb | 11 ++++++++++- spec/unit/types/jboss_datasource_spec.rb | 19 ++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/puppet/type/jboss_datasource.rb b/lib/puppet/type/jboss_datasource.rb index 1bc8739..c954eeb 100644 --- a/lib/puppet/type/jboss_datasource.rb +++ b/lib/puppet/type/jboss_datasource.rb @@ -78,7 +78,16 @@ def change_to_s from, to end munge do |value| - if %w{absent undef}.include?(value) then value.to_sym else value end + hashlike = (value.respond_to? :[] and value.respond_to? :each and not value.is_a? String and not value.is_a? Symbol) + absentlike = [:absent, :undef, nil] + absentlike.concat(absentlike.map {|v| v.to_s}) + ret = if %w{absent undef}.include?(value) then value.to_sym else value end + if hashlike + value.each do |k, v| + ret[k] = absentlike.include?(v) ? nil : v + end + end + ret end def change_to_s(current, desire) diff --git a/spec/unit/types/jboss_datasource_spec.rb b/spec/unit/types/jboss_datasource_spec.rb index 329aab9..01d1906 100644 --- a/spec/unit/types/jboss_datasource_spec.rb +++ b/spec/unit/types/jboss_datasource_spec.rb @@ -159,7 +159,7 @@ def extend_params(given) 'Parameter options failed on Jboss_datasource[spec-datasource]: You can pass only hash-like objects or absent and undef values, given true') end end - context 'given' do + context 'display changes via change_to_s(from, to) using' do let(:options) { {} } subject { type.property(:options).change_to_s(from, to) } context 'from :absent and to hash', :from => :absent, :to => { 'alice' => 'five', 'bob' => 'seven' } do @@ -178,6 +178,23 @@ def extend_params(given) it { expect(subject).to eq('option \'alice\' was "five" and has been removed, option \'bob\' was "nine" and has been removed') } end end + + context 'munge new values using' do + let(:options) { {} } + subject { type.property(:options).munge(new_values) } + context 'regular hash' do + let(:new_values) { { 'alice' => 'five', 'bob' => 'seven' } } + it { expect(subject).to eq({ 'alice' => 'five', 'bob' => 'seven' }) } + end + context 'hash with :undef\'s' do + let(:new_values) { { 'alice' => :undef, 'bob' => 'seven' } } + it { expect(subject).to eq({ 'alice' => nil, 'bob' => 'seven' }) } + end + context 'an :undef\'s' do + let(:new_values) { :undef } + it { expect(subject).to eq(:undef) } + end + end end end From 66f0f9a098e2287cc904e47936db4ca442421b8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Tue, 26 Jan 2016 15:27:33 +0100 Subject: [PATCH 41/46] Fighting with various technical dept issues and correct way to use absent-like and hashlike values for #10 --- lib/puppet/type/jboss_confignode.rb | 6 ++- lib/puppet/type/jboss_datasource.rb | 45 ++++++++-------- lib/puppet_x/coi/jboss.rb | 2 + lib/puppet_x/coi/jboss/buildins_utils.rb | 53 +++++++++++++++++++ lib/puppet_x/coi/jboss/constants.rb | 9 ++++ .../coi/jboss/provider/abstract_jboss_cli.rb | 36 ++----------- lib/puppet_x/coi/jboss/provider/datasource.rb | 9 ++-- lib/puppet_x/coi/jboss/provider/jmsqueue.rb | 7 +-- tests/init.pp | 2 +- 9 files changed, 102 insertions(+), 67 deletions(-) create mode 100644 lib/puppet_x/coi/jboss/buildins_utils.rb create mode 100644 lib/puppet_x/coi/jboss/constants.rb diff --git a/lib/puppet/type/jboss_confignode.rb b/lib/puppet/type/jboss_confignode.rb index e9e1f1b..0c23157 100644 --- a/lib/puppet/type/jboss_confignode.rb +++ b/lib/puppet/type/jboss_confignode.rb @@ -1,4 +1,7 @@ +require File.expand_path(File.join(File.dirname(__FILE__), '../../puppet_x/coi/jboss')) + Puppet::Type.newtype(:jboss_confignode) do + @doc = "Generic configuration entry for JBoss Application Sever" newproperty(:ensure) do @@ -35,9 +38,8 @@ end def change_to_s(current, desire) + absentlike = Puppet_X::Coi::Jboss::Constants::ABSENTLIKE_WITH_S changes = [] - absentlike = [:absent, :undef, nil] - absentlike.concat(absentlike.map {|v| v.to_s}) keys = [] keys.concat(desire.keys) unless absentlike.include?(desire) keys.concat(current.keys) unless absentlike.include?(current) diff --git a/lib/puppet/type/jboss_datasource.rb b/lib/puppet/type/jboss_datasource.rb index c954eeb..96c8844 100644 --- a/lib/puppet/type/jboss_datasource.rb +++ b/lib/puppet/type/jboss_datasource.rb @@ -1,4 +1,7 @@ +require File.expand_path(File.join(File.dirname(__FILE__), '../../puppet_x/coi/jboss')) + Puppet::Type.newtype(:jboss_datasource) do + @doc = "Data sources configuration for JBoss Application Sever" ensurable @@ -6,7 +9,7 @@ desc "Name of type resource" isnamevar end - + newproperty(:xa) do desc "Is it XA Datasource?" newvalues :true, :false @@ -15,15 +18,15 @@ value == :true or value == true end end - + newproperty(:dbname) do desc "The database's name" end - + newproperty(:jndiname) do desc "jndi-name" end - + newproperty(:jta) do desc "jta" newvalues :true, :false @@ -67,33 +70,28 @@ def change_to_s from, to newproperty(:options) do desc "Extra options for datasource or xa-datasource" - + validate do |value| - absentlike = [:absent, :undef, nil] - absentlike.concat(absentlike.map {|v| v.to_s}) - hashlike = (value.respond_to? :[] and value.respond_to? :each and not value.is_a? String and not value.is_a? Symbol) - unless absentlike.include?(value) or hashlike + matcher = Puppet_X::Coi::Jboss::BuildinsUtils::HashlikeMatcher.new(value) + unless Puppet_X::Coi::Jboss::Constants::ABSENTLIKE_WITH_S.include?(value) or matcher.hashlike? fail "You can pass only hash-like objects or absent and undef values, given #{value.inspect}" end end munge do |value| - hashlike = (value.respond_to? :[] and value.respond_to? :each and not value.is_a? String and not value.is_a? Symbol) - absentlike = [:absent, :undef, nil] - absentlike.concat(absentlike.map {|v| v.to_s}) + matcher = Puppet_X::Coi::Jboss::BuildinsUtils::HashlikeMatcher.new(value) ret = if %w{absent undef}.include?(value) then value.to_sym else value end - if hashlike + if matcher.hashlike? value.each do |k, v| - ret[k] = absentlike.include?(v) ? nil : v + ret[k] = Puppet_X::Coi::Jboss::Constants::ABSENTLIKE_WITH_S.include?(v) ? nil : v end end ret end def change_to_s(current, desire) + absentlike = Puppet_X::Coi::Jboss::Constants::ABSENTLIKE_WITH_S changes = [] - absentlike = [:absent, :undef, nil] - absentlike.concat(absentlike.map {|v| v.to_s}) keys = [] keys.concat(desire.keys) unless absentlike.include?(desire) keys.concat(current.keys) unless absentlike.include?(current) @@ -112,7 +110,7 @@ def change_to_s(current, desire) changes.join ', ' end end - + newproperty(:enabled) do desc "Is datasource enabled?" newvalues :true, :false @@ -133,7 +131,7 @@ def change_to_s(current, desire) end end end - + newproperty(:port) do desc "port to connect" isrequired @@ -141,12 +139,12 @@ def change_to_s(current, desire) unless value == '' or /^\d+$/.match(value.to_s) raise ArgumentError, "Datasource port is invalid, given #{value.inspect}" end - end + end munge do |value| - if value == '' then 0 else Integer(value) end + if value == '' then 0 else Integer(value) end end end - + newproperty(:jdbcscheme) do desc "jdbcscheme to be used" isrequired @@ -161,7 +159,7 @@ def change_to_s(current, desire) desc "Indicate that server is in domain mode" defaultto true end - + newparam(:controller) do desc "Domain controller host:port address" # Default is set to support listing of datasources without parameters (for easy use) @@ -172,7 +170,7 @@ def change_to_s(current, desire) end end end - + newparam :ctrluser do desc 'A user name to connect to controller' end @@ -192,4 +190,3 @@ def change_to_s(current, desire) end end - diff --git a/lib/puppet_x/coi/jboss.rb b/lib/puppet_x/coi/jboss.rb index e64e60a..2124137 100644 --- a/lib/puppet_x/coi/jboss.rb +++ b/lib/puppet_x/coi/jboss.rb @@ -27,6 +27,8 @@ module Kernel define_method(:require_relative) { |rel| Puppet_X::Coi::require_relative(rel, lvl = 1) } unless Kernel.respond_to? :require_relative end +require_relative 'jboss/constants' +require_relative 'jboss/buildins_utils' require_relative 'jboss/configuration' require_relative 'jboss/facts' diff --git a/lib/puppet_x/coi/jboss/buildins_utils.rb b/lib/puppet_x/coi/jboss/buildins_utils.rb new file mode 100644 index 0000000..b2551e0 --- /dev/null +++ b/lib/puppet_x/coi/jboss/buildins_utils.rb @@ -0,0 +1,53 @@ +# This module contains vaious utility functions for Ruby buildins types +module Puppet_X::Coi::Jboss::BuildinsUtils + # Matcher for hash-like objects + class HashlikeMatcher + # Constructor + # @param {Object} target to be tested + def initialize(target) + @target = target + end + # Method returns true if passed object is a hashlike object, but not String or Symbol + def hashlike? + @target.respond_to? :[] and @target.respond_to? :each and not @target.is_a? String and not @target.is_a? Symbol + end + end + + # Matcher for blank objects (empty collections or false objects) + class BlankMatcher + # Constructor + # @param {Object} target to be tested + def initialize(target) + @target = target + end + # Method returns true if passed object is a hashlike object, but not String or Symbol + def blank? + return true if @target.nil? + @target.respond_to?(:empty?) ? @target.empty? : !@target + end + end + + # Thsi class handles convertion from various types to boolean + class ToBooleanConverter + # Constructor + # @param {Object} target to be converted + def initialize(target) + @target = target + end + # Converts given value to boolean value + def to_bool + if @target.respond_to?(:empty?) + str = @target + else + str = @target.to_s + end + if @target.is_a? Numeric + return @target != 0 + end + return true if @target == true || str =~ (/(true|t|yes|y)$/i) + bm = BlankMatcher.new(@target) + return false if @target == false || bm.blank? || str =~ (/(false|f|no|n)$/i) + raise ArgumentError.new("invalid value for Boolean: \"#{@target}\"") + end + end +end diff --git a/lib/puppet_x/coi/jboss/constants.rb b/lib/puppet_x/coi/jboss/constants.rb new file mode 100644 index 0000000..c63bac9 --- /dev/null +++ b/lib/puppet_x/coi/jboss/constants.rb @@ -0,0 +1,9 @@ +# Constants for COI's JBoss module +module Puppet_X::Coi::Jboss::Constants + ABSENTLIKE = [:absent, :undef, nil].freeze + ABSENTLIKE_WITH_S = (Proc.new do + # Proc scope not to leave any helper variables inside the context + stringified = ABSENTLIKE.reject { |v| v.nil? }.map { |v| v.to_s } + (ABSENTLIKE + stringified).freeze + end).call +end diff --git a/lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb b/lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb index c57790d..5d6efa2 100644 --- a/lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb +++ b/lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb @@ -2,38 +2,7 @@ require_relative '../configuration' require 'tempfile' -class Object - def blank? - return true if self.nil? - self.respond_to?(:empty?) ? self.empty? : !self - end - - def to_bool - if self.respond_to?(:empty?) - str = self - else - str = self.to_s - end - if self.is_a? Numeric - return self != 0 - end - return true if self == true || str =~ (/(true|t|yes|y)$/i) - return false if self == false || self.blank? || str =~ (/(false|f|no|n)$/i) - raise ArgumentError.new("invalid value for Boolean: \"#{self}\"") - end -end -class Hash - def hashbackmap - result = {} - - self.each do |key, val| - result[key] = yield val - end - - result - end -end - +# Base class for all JBoss providers class Puppet_X::Coi::Jboss::Provider::AbstractJbossCli < Puppet::Provider @@bin = "bin/jboss-cli.sh" @@ -242,7 +211,8 @@ def compilecmd cmd def self.compilecmd runasdomain, profile, cmd out = cmd.to_s - asdomain = runasdomain.to_bool + convr = Puppet_X::Coi::Jboss::BuildinsUtils::ToBooleanConverter.new(runasdomain) + asdomain = convr.to_bool if asdomain && out[0..9] == '/subsystem' out = "/profile=#{profile}#{out}" end diff --git a/lib/puppet_x/coi/jboss/provider/datasource.rb b/lib/puppet_x/coi/jboss/provider/datasource.rb index 4b17d45..b05088c 100644 --- a/lib/puppet_x/coi/jboss/provider/datasource.rb +++ b/lib/puppet_x/coi/jboss/provider/datasource.rb @@ -2,7 +2,8 @@ # A class for JBoss datasource provider module Puppet_X::Coi::Jboss::Provider::Datasource - + include Puppet_X::Coi::Jboss::Constants + include Puppet_X::Coi::Jboss::BuildinsUtils def create cmd = [ "#{create_delete_cmd} add --name=#{@resource[:name]}" ] jta_opt(cmd) @@ -175,9 +176,8 @@ def options end def options= value - absentlike = [:absent, :undef, nil] managed_fetched_options.each do |key, fetched_value| - if absentlike.include?(value) + if ABSENTLIKE.include?(value) expected_value = nil else expected_value = value[key] @@ -377,7 +377,8 @@ def readXaProperty property end readed = getattrib('xa-datasource-properties') key = property.to_s - if readed.nil? or readed[key].nil? or readed[key]['value'].blank? + bm = BlankMatcher.new(readed[key]['value']) + if readed.nil? or readed[key].nil? or bm.blank? name = @resource[:name] cmd = compilecmd "#{datasource_path}/xa-datasource-properties=#{key}:read-attribute(name=value)" result = executeAndGet cmd diff --git a/lib/puppet_x/coi/jboss/provider/jmsqueue.rb b/lib/puppet_x/coi/jboss/provider/jmsqueue.rb index e13ab93..b3397e4 100644 --- a/lib/puppet_x/coi/jboss/provider/jmsqueue.rb +++ b/lib/puppet_x/coi/jboss/provider/jmsqueue.rb @@ -1,5 +1,6 @@ # A module for Jmsqueue module Puppet_X::Coi::Jboss::Provider::Jmsqueue + include Puppet_X::Coi::Jboss::BuildinsUtils def create if runasdomain? profile = "--profile=#{@resource[:profile]}" @@ -12,7 +13,7 @@ def create else raise "Array of entries can not be empty" end - durable = @resource[:durable].to_bool + durable = ToBooleanConverter.new(@resource[:durable]).to_bool extcmd = "/extension=org.jboss.as.messaging" if not execute("#{extcmd}:read-resource()")[:result] bringUp "Extension - messaging", "#{extcmd}:add()" @@ -57,12 +58,12 @@ def durable trace 'durable' Puppet.debug "Durable given: #{@resource[:durable].inspect}" # normalization - $data['durable'].to_bool.to_s + ToBooleanConverter.new($data['durable']).to_bool.to_s end def durable= value trace 'durable= %s' % value.to_s - setattr 'durable', ('"%s"' % value.to_bool) + setattr 'durable', ('"%s"' % ToBooleanConverter.new(value).to_bool) end def entries diff --git a/tests/init.pp b/tests/init.pp index de68dcc..af29d14 100644 --- a/tests/init.pp +++ b/tests/init.pp @@ -1 +1 @@ -class { 'jboss': } +include jboss From d7f8567ce6081692aee9ab65e9c157ca378ae7c2 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Tue, 26 Jan 2016 20:54:16 +0100 Subject: [PATCH 42/46] #10 minor changes is tests directory --- tests/README.md | 10 ++++++++++ tests/{ => examples}/deploy.pp | 0 tests/{ => examples}/resourceadapter.pp | 6 +++--- tests/interface.pp | 6 +++--- 4 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 tests/README.md rename tests/{ => examples}/deploy.pp (100%) rename tests/{ => examples}/resourceadapter.pp (75%) diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..06ca814 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,10 @@ +# Puppet smoke tests folder + +This folder contains standard Puppet smoke tests that can be run with + +``` +puppet apply tests/nameoffile.pp --noop +``` + +All files should execute without any problems, except for those in folder `tests/examples/`. +Examples in that folder require additional resources such as files or wars and we consider that placing them in repository is bad habit. If you want to run tests provide files via for example wget or some other technique. diff --git a/tests/deploy.pp b/tests/examples/deploy.pp similarity index 100% rename from tests/deploy.pp rename to tests/examples/deploy.pp diff --git a/tests/resourceadapter.pp b/tests/examples/resourceadapter.pp similarity index 75% rename from tests/resourceadapter.pp rename to tests/examples/resourceadapter.pp index 94556a1..ceffa73 100644 --- a/tests/resourceadapter.pp +++ b/tests/examples/resourceadapter.pp @@ -1,7 +1,8 @@ include jboss jboss::deploy { 'jca-filestore.rar': - path => '/usr/src/jca-filestore.rar', + path => '/usr/src/jca-filestore.rar', + require => JBoss::Resourceadapter['jca-filestore.rar'], } jboss::resourceadapter { 'jca-filestore.rar': @@ -9,5 +10,4 @@ transactionsupport => 'LocalTransaction', classname => 'org.example.jca.FileSystemConnectionFactory', jndiname => 'java:/jboss/jca/photos', - require => JBoss::Deploy['jca-filestore.rar'], -} \ No newline at end of file +} diff --git a/tests/interface.pp b/tests/interface.pp index 57d30ea..a806efd 100644 --- a/tests/interface.pp +++ b/tests/interface.pp @@ -1,6 +1,6 @@ include jboss -jboss::interface { 'public': +jboss::interface { 'public-additional': ensure => 'present', - inet_address => '192.168.5.33', -} \ No newline at end of file + inet_address => $::ipaddresss, +} From 8f06566399de0f7fb94cb4358e1bf3e11eabbcc0 Mon Sep 17 00:00:00 2001 From: Kozakowski Karol Date: Thu, 28 Jan 2016 08:49:03 +0100 Subject: [PATCH 43/46] rejects nil values --- lib/puppet_x/coi/jboss/provider/confignode.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/puppet_x/coi/jboss/provider/confignode.rb b/lib/puppet_x/coi/jboss/provider/confignode.rb index ee47eda..c7081d3 100644 --- a/lib/puppet_x/coi/jboss/provider/confignode.rb +++ b/lib/puppet_x/coi/jboss/provider/confignode.rb @@ -249,7 +249,7 @@ def compileprops props = @resource[:properties] arr = [] - props.each do |key, value| + props.reject { |k,v| v.nil? }.each do |key, value| preparedval = escape value arr.push "#{key}=#{preparedval}" end From b280c3734fd4af8ff9cbb0e558e51ee7d9e44779 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Fri, 29 Jan 2016 09:48:18 +0100 Subject: [PATCH 44/46] Typo misled @Cosaquee and resulted in incorrect bug report #50 --- tests/interface.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/interface.pp b/tests/interface.pp index a806efd..b7797d2 100644 --- a/tests/interface.pp +++ b/tests/interface.pp @@ -2,5 +2,5 @@ jboss::interface { 'public-additional': ensure => 'present', - inet_address => $::ipaddresss, + inet_address => $::ipaddress, } From 92e9c7cc4485cf80ad0df1b8bebeca0e520d67bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Fri, 29 Jan 2016 09:48:58 +0100 Subject: [PATCH 45/46] Test to reproduce #50 case --- spec/unit/provider/jboss_confignode/confignode_spec.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/unit/provider/jboss_confignode/confignode_spec.rb b/spec/unit/provider/jboss_confignode/confignode_spec.rb index 761c46f..12bae4a 100644 --- a/spec/unit/provider/jboss_confignode/confignode_spec.rb +++ b/spec/unit/provider/jboss_confignode/confignode_spec.rb @@ -30,6 +30,7 @@ :ensure => 'present', :properties => { 'security-enabled' => false, + 'some-other-prop' => nil } } end From 6a170bea332b7b7eaf143cea240062bdf9b63484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Fri, 29 Jan 2016 09:49:31 +0100 Subject: [PATCH 46/46] Last minor minor fixes to #10 --- lib/puppet/type/jboss_confignode.rb | 4 ++-- lib/puppet_x/coi/jboss/provider/confignode.rb | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/puppet/type/jboss_confignode.rb b/lib/puppet/type/jboss_confignode.rb index 0c23157..29daa8a 100644 --- a/lib/puppet/type/jboss_confignode.rb +++ b/lib/puppet/type/jboss_confignode.rb @@ -28,8 +28,8 @@ if %w{absent undef}.include?(value) value.to_sym else - hashlike = (value.respond_to? :[] and value.respond_to? :each and not value.is_a? String and not value.is_a? Symbol) - unless hashlike + matcher = Puppet_X::Coi::Jboss::BuildinsUtils::HashlikeMatcher.new(value) + unless matcher.hashlike? {} else value diff --git a/lib/puppet_x/coi/jboss/provider/confignode.rb b/lib/puppet_x/coi/jboss/provider/confignode.rb index c7081d3..1365477 100644 --- a/lib/puppet_x/coi/jboss/provider/confignode.rb +++ b/lib/puppet_x/coi/jboss/provider/confignode.rb @@ -248,6 +248,7 @@ def compileprops trace 'compileprops' props = @resource[:properties] + Puppet.debug("Properties to be compiled: #{props.inspect}") arr = [] props.reject { |k,v| v.nil? }.each do |key, value| preparedval = escape value