Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Possible layering for subscription rules #43

Merged
merged 40 commits into from
Jan 23, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
7194ba8
Upload of a possibile solution for issue #5 #17 #20 #21 #22
mossicrue Oct 26, 2018
2bc4713
make the api object global
evgeni Oct 31, 2018
9057771
always use the host_subscriptions api
evgeni Oct 31, 2018
8b9248c
drop support for old :systems api endpoint
evgeni Oct 31, 2018
bb21b1a
drop registered_by support
evgeni Oct 31, 2018
a91d2eb
move fetching of results into a helper function
evgeni Oct 31, 2018
a53c244
page is not needed anymore here
evgeni Oct 31, 2018
d04c4d8
update code as request by Evgeni in #26
mossicrue Nov 8, 2018
10733de
update code as request by Evgeni in #26, added a possible solution fo…
mossicrue Nov 23, 2018
91ae83b
Upload of a possibile solution for issue #5 #17 #20 #21 #22
mossicrue Oct 26, 2018
e6a24d3
update code as request by Evgeni in #26
mossicrue Nov 8, 2018
f535e55
update code as request by Evgeni in #26, added a possible solution fo…
mossicrue Nov 23, 2018
584a7a8
Merge branch 'master' of https://github.com/mossicrue/katello-attach-…
mossicrue Nov 30, 2018
888c865
Update code as requested by evgeni on 11/30
mossicrue Dec 3, 2018
9d653c6
Updated code as requested by Evgeni on 12/03
mossicrue Dec 6, 2018
96042f3
Fixed output string for subscription report
mossicrue Dec 7, 2018
e356773
Merge branch 'master' of https://github.com/RedHatSatellite/katello-a…
mossicrue Dec 7, 2018
d71d703
possible solution for fact matcher
mossicrue Dec 7, 2018
dd3d38b
Merge remote-tracking branch 'upstream/master'
mossicrue Dec 21, 2018
212a60b
Revert "possible solution for fact matcher"
mossicrue Dec 21, 2018
f932a7a
Merge remote-tracking branch 'upstream/master'
mossicrue Dec 21, 2018
b7e8bce
fixed and clean some of some code after test, add facter test for mul…
mossicrue Dec 21, 2018
6a08da7
fixed gathering host type with fact_analyzer
mossicrue Dec 21, 2018
99e4dcf
Merge branch 'master' into master
mossicrue Dec 21, 2018
d69d61a
update code as requested by Evgeni
mossicrue Dec 21, 2018
99fcae2
Merge branch 'master' of https://github.com/mossicrue/katello-attach-…
mossicrue Dec 21, 2018
93f0959
Added possible layering for sub
mossicrue Dec 24, 2018
d7e8262
Fixed some error for sub_layer and merge.subs utils function
mossicrue Dec 28, 2018
8eb24fd
Merge branch 'master' into sub_merger_test
mossicrue Jan 14, 2019
be82327
Merge branch 'master' into sub_merger_test
mossicrue Jan 14, 2019
13313dc
make test changes requested by evgeni
mossicrue Jan 18, 2019
e0e6509
fixed hash
mossicrue Jan 18, 2019
8996163
another fix on test
mossicrue Jan 18, 2019
c3195b5
make some change as requested by evgeni
mossicrue Jan 21, 2019
083b801
Fixed for test
mossicrue Jan 23, 2019
7e63d23
Change from clone to dub
mossicrue Jan 23, 2019
c2d933f
updated test code
mossicrue Jan 23, 2019
aeebad9
Update sub_merger_test.rb
mossicrue Jan 23, 2019
dde54dd
remove if sub.has_key?('facts')
mossicrue Jan 23, 2019
e77e57a
revert search_args change
evgeni Jan 23, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions katello-attach-subscription
Original file line number Diff line number Diff line change
Expand Up @@ -1093,11 +1093,15 @@ def vdcupdate()
puts " DEBUG: System '#{system['name']}' in scope, proceeding with assignment of variables"
end
# set the desidered subscription to be associated
sub_layer = sub['sub_layer'] || "stop_parsing"
if @options[:debug]
puts " DEBUG: Sub Layer of this sub entry: #{sub_layer}"
end
if sub.has_key?('sub_parsed')
if has_derived_sub
desired_sub_hash = derived_sub
desired_sub_hash = KatelloAttachSubscription::Utils.merge_subs(desired_sub_hash, derived_sub, sub_layer)
else
desired_sub_hash = sub['sub_parsed']
desired_sub_hash = KatelloAttachSubscription::Utils.merge_subs(desired_sub_hash, sub['sub_parsed'], sub_layer)
end
end
# if "remove_other" has been set, set the flag
Expand All @@ -1121,8 +1125,10 @@ def vdcupdate()
keep_virt_only = sub['keep_virt_only']
end

# if the system is found, stop cyclyng over yaml,
break
# if the system is found and sub_layer is "stop_parsing", stop cyclyng over yaml
evgeni marked this conversation as resolved.
Show resolved Hide resolved
if sub_layer == "stop_parsing"
break
end

end
if skip_host
Expand Down
15 changes: 14 additions & 1 deletion lib/katello_attach_subscription/utils.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,19 @@ def self.search_args(search)
search
end
end

def self.merge_subs(current_sub, sub_to_merge, command)
evgeni marked this conversation as resolved.
Show resolved Hide resolved
case command
when "override"
merged_sub = sub_to_merge.dup
else
if current_sub.nil?
merged_sub = sub_to_merge.dup
else
merged_sub = current_sub.merge(sub_to_merge)
end
end
return merged_sub
end
end
end

109 changes: 109 additions & 0 deletions test/fixtures/merge_sub_file.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
subs:
-
hostname: .*
type: Hypervisor
facts:
-
name: hypervisor::cluster
value: example_cluster
matcher: regexp
sub:
rhel:
- name: "Red Hat Enterprise Linux for Virtual Datacenters, Premium"
- name: "Red Hat Enterprise Linux for Virtual Datacenters, Standard"
els:
- name: "Red Hat Enterprise Linux Extended Life Cycle Support (Unlimited Guests)"
smartmanagement:
- name: "Smart Management for Unlimited Guests"
sub_parsed:
rhel:
- d2e16e6ef52a45b7468f1da56bba1953
- e78f5438b48b39bcbdea61b73679449d
- a98931d104a7fb8f30450547d97e7ca5
els:
- 7f9a983a540e00931a69382161bdd265
smartmanagement:
- 439a7d9b0548adbedcce838e37e84ba1
-
hostname: .*
type: Hypervisor
sub:
rhel:
- name: "Red Hat Enterprise Linux for Virtual Datacenters, Premium"
- name: "Red Hat Enterprise Linux for Virtual Datacenters, Standard"
els:
- name: "Red Hat Enterprise Linux Extended Life Cycle Support (Unlimited Guests)"
smartmanagement:
- name: "Smart Management for Unlimited Guests"
sub_parsed:
rhel:
- d2e16e6ef52a45b7468f1da56bba1953
- e78f5438b48b39bcbdea61b73679449d
- a98931d104a7fb8f30450547d97e7ca5
els:
- 7f9a983a540e00931a69382161bdd265
smartmanagement:
- 439a7d9b0548adbedcce838e37e84ba1
-
hostname: .*
type: Physical
sub_layer: keep_parsing
facts:
-
name: distribution::name
value: Server
matcher: regexp
sub:
rhel:
- name: "Red Hat Enterprise Linux Server, Standard (Physical or Virtual Nodes)"
- name: "Red Hat Enterprise Linux Server, Premium (Physical or Virtual Nodes)"
smartmanagement:
- name: "Smart Management"
sub_parsed:
rhel:
- b1a5d251fa4fe598cb947ffc42b9cbed
- 1337d38747e659ed836548ae6cda7cc2
smartmanagement:
- f180623caa42379bc4518d06c9c9be05
-
hostname: .*
type: Physical
sub_layer: keep_parsing
facts:
-
name: distribution::name
value: Server
matcher: regexp
-
name: distribution::version
value: <6.0
matcher: version
sub:
els:
- name: "Red Hat Enterprise Linux Extended Life Cycle Support (Physical or Virtual Nodes)"
sub_parsed:
els:
- 523af537946b79c4f8369ed39ba78605
-
hostname: .*
type: Physical
sub_layer: override
facts:
-
name: distribution::name
value: Client|Workstation
matcher: regexp
sub:
rhel:
- name: "Red Hat Enterprise Linux Server for HPC Compute Node, Self-support (1-2 sockets) (Up to 1 guest)"
smartmanagement:
- name: "Smart Management for Red Hat Enterprise Linux Server for HPC Compute Node (Up to 1 guest)"
sub_parsed:
rhel:
- bb98d4e9c281b175ea84c517b59308ea
smartmanagement:
- af03af10d57b7b17f26a0130562d6b6e
-
hostname: .*
type: Guest
auto_attach: true
141 changes: 141 additions & 0 deletions test/sub_merger_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
require "test_helper"

class SubMergerTest < Minitest::Test

DUMMY_KEEP_PARSE = {
evgeni marked this conversation as resolved.
Show resolved Hide resolved
"type" => "Physical",
"name" => "physical_example",
"facts" => {
"distribution::name" => "Red Hat Server",
"distribution::version" => "6.1"
}

}

DUMMY_KEEP_PARSE_EXPECTED_SUB = {
"rhel"=> [
"b1a5d251fa4fe598cb947ffc42b9cbed",
"1337d38747e659ed836548ae6cda7cc2"
],
"smartmanagement"=> [
"f180623caa42379bc4518d06c9c9be05"
]
}


DUMMY_MERGE = {
"type" => "Physical",
"name" => "physical_example",
"facts" => {
"distribution::name" => "Red Hat Server",
"distribution::version" => "5.2"
}
}

DUMMY_MERGE_EXPECTED_SUB = {
"rhel"=> [
"b1a5d251fa4fe598cb947ffc42b9cbed",
"1337d38747e659ed836548ae6cda7cc2"
],
"smartmanagement"=> [
"f180623caa42379bc4518d06c9c9be05"
],
"els"=> [
"523af537946b79c4f8369ed39ba78605"
]
}


DUMMY_OVERRIDE = {
"type" => "Physical",
"name" => "physical_example",
"facts" => {
"distribution::name" => "Red Hat Client"
}
}

DUMMY_OVERRIDE_EXPECTED_SUB = {
"rhel"=> [
"bb98d4e9c281b175ea84c517b59308ea"
],
"smartmanagement"=> [
"af03af10d57b7b17f26a0130562d6b6e"
]
}


DUMMY_STOP = {
"type" => "Hypervisor",
"name" => "physical_example",
"facts" => {
"hypervisor::cluster" => "example_cluster"
}
}

DUMMY_STOP_EXPECTED_SUB = {
"rhel"=> [
"d2e16e6ef52a45b7468f1da56bba1953",
"e78f5438b48b39bcbdea61b73679449d",
"a98931d104a7fb8f30450547d97e7ca5"
],
"els"=> [
"7f9a983a540e00931a69382161bdd265"
],
"smartmanagement"=> [
"439a7d9b0548adbedcce838e37e84ba1"
]
}


DUMMY_NORMAL = {
"type" => "Hypervisor",
"name" => "physical_example",
"facts" => {}
}

DUMMY_NORMAL_EXPECTED_SUB = {
"rhel"=> [
"d2e16e6ef52a45b7468f1da56bba1953",
"e78f5438b48b39bcbdea61b73679449d",
"a98931d104a7fb8f30450547d97e7ca5"
],
"els"=> [
"7f9a983a540e00931a69382161bdd265"
],
"smartmanagement"=> [
"439a7d9b0548adbedcce838e37e84ba1"
]
}


def test_normal_parse
evgeni marked this conversation as resolved.
Show resolved Hide resolved
yaml = read_yaml_fixture("merge_sub_file")
parsed_sub = get_sub_for_host(yaml["subs"], DUMMY_NORMAL)
assert_equal DUMMY_NORMAL_EXPECTED_SUB, parsed_sub
end

def test_stop_parse
yaml = read_yaml_fixture("merge_sub_file")
parsed_sub = get_sub_for_host(yaml["subs"], DUMMY_STOP)
assert_equal DUMMY_STOP_EXPECTED_SUB, parsed_sub
end

def test_overdrive_parse
yaml = read_yaml_fixture("merge_sub_file")
parsed_sub = get_sub_for_host(yaml["subs"], DUMMY_OVERRIDE)
assert_equal DUMMY_OVERRIDE_EXPECTED_SUB, parsed_sub
end

def test_merge_parse
yaml = read_yaml_fixture("merge_sub_file")
parsed_sub = get_sub_for_host(yaml["subs"], DUMMY_MERGE)
assert_equal DUMMY_MERGE_EXPECTED_SUB, parsed_sub
end

def test_keep_parse
yaml = read_yaml_fixture("merge_sub_file")
parsed_sub = get_sub_for_host(yaml["subs"], DUMMY_KEEP_PARSE)
assert_equal DUMMY_KEEP_PARSE_EXPECTED_SUB, parsed_sub
end

end
21 changes: 21 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,29 @@
require 'json'
require 'yaml'
require 'katello_attach_subscription'
require 'minitest/autorun'

def read_json_fixture(file)
json = File.expand_path(File.join('..', 'fixtures', "#{file}.json"), __FILE__)
JSON.parse(File.read(json))
end

def read_yaml_fixture(file)
yaml = File.expand_path(File.join('..', 'fixtures', "#{file}.yaml"), __FILE__)
YAML.load_file(yaml)
end

def get_sub_for_host(subs, host)
parsed_final = nil
subs.each do |single_sub|
parsed = single_sub['sub_parsed']
if KatelloAttachSubscription::HostMatcher.match_host(host, single_sub)
layer_command = single_sub['sub_layer'] || 'stop_parsing'
parsed_final = KatelloAttachSubscription::Utils.merge_subs(parsed_final, parsed, layer_command)
if layer_command == 'stop_parsing'
break
end
end
end
return parsed_final
end