-
Notifications
You must be signed in to change notification settings - Fork 42
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
With this commit we teach our NetworkManager how to map obtained events to appropriate target. At the moment only events concerning the three supported targets actually trigger something: ``` - network_groups - cloud_subnets - security_groups ``` while all other events are simply skipped. Signed-off-by: Miha Pleško <[email protected]>
- Loading branch information
1 parent
932edad
commit 8f42f32
Showing
7 changed files
with
342 additions
and
0 deletions.
There are no files selected for viewing
46 changes: 46 additions & 0 deletions
46
app/models/manageiq/providers/nuage/network_manager/event_target_parser.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
class ManageIQ::Providers::Nuage::NetworkManager::EventTargetParser | ||
attr_reader :ems_event | ||
|
||
# @param ems_event [EmsEvent] EmsEvent object | ||
def initialize(ems_event) | ||
@ems_event = ems_event | ||
end | ||
|
||
# Parses all targets that are present in the EmsEvent given in the initializer | ||
# | ||
# @return [Array] Array of ManagerRefresh::Target objects | ||
def parse | ||
parse_ems_event_targets(ems_event) | ||
end | ||
|
||
private | ||
|
||
# Parses list of ManagerRefresh::Target out of the given EmsEvent | ||
# | ||
# @param event [EmsEvent] EmsEvent object | ||
# @return [Array] Array of ManagerRefresh::Target objects | ||
def parse_ems_event_targets(event) | ||
target_collection = ManagerRefresh::TargetCollection.new(:manager => event.ext_management_system, :event => event) | ||
|
||
case event.full_data["entityType"] | ||
when 'enterprise' | ||
add_targets(target_collection, :network_groups, event.full_data['entities']) | ||
when 'subnet' | ||
add_targets(target_collection, :cloud_subnets, event.full_data['entities']) | ||
when 'policygroup' | ||
add_targets(target_collection, :security_groups, event.full_data['entities']) | ||
when 'domain' | ||
add_targets(target_collection, :network_groups, event.full_data['entities'], :key => 'enterpriseID') | ||
end | ||
|
||
target_collection.targets | ||
end | ||
|
||
def add_targets(target_collection, association, entities, key: 'ID') | ||
return unless entities.respond_to?(:each) | ||
entities.each do |obj| | ||
next if obj[key].to_s.empty? | ||
target_collection.add_target(:association => association, :manager_ref => {:ems_ref => obj[key]}) | ||
end | ||
end | ||
end |
38 changes: 38 additions & 0 deletions
38
spec/models/manageiq/providers/nuage/network_manager/event_catcher/alarm_create.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
{ | ||
"userName":null, | ||
"enterpriseName":null, | ||
"type":"CREATE", | ||
"entityType":"alarm", | ||
"eventReceivedTime":1481063680946, | ||
"entities":[ | ||
{ | ||
"children":null, | ||
"parentType":"nsgateway", | ||
"entityScope":"ENTERPRISE", | ||
"lastUpdatedBy":"43f8868f-4bc1-472c-9d19-533dcfcb1ee0", | ||
"lastUpdatedDate":1481063680000, | ||
"creationDate":1481063680000, | ||
"name":"NSG-Ottawa 213.50.60.102 Gateway with system-id [213.50.60.102] is disconnected", | ||
"reason":"Gateway with system-id [213.50.60.102] is disconnected", | ||
"description":"Gateway [213.50.60.102:NSG-Ottawa] was disconnected from the controller.", | ||
"alarmTimeStamp":1481063680945, | ||
"acknowledged":false, | ||
"alarmId":"NSG-Ottawa-213.50.60.102-gwstate-916ea220-c381-4701-ba33-da1e423c992d", | ||
"numberOfOccurances":1, | ||
"alarmedObjectType":"nsgateway", | ||
"alarmedObjectId":"05117fac-eac2-4ed7-b421-e70fcb42daee", | ||
"severity":"MAJOR", | ||
"errorCondition":4707, | ||
"incrementNumberOfOccurances":false, | ||
"enterpriseId":"40d29496-c5ef-41c6-aa6b-ef1cd8655457", | ||
"owner":"43f8868f-4bc1-472c-9d19-533dcfcb1ee0", | ||
"ID":"1336a16b-6d2e-46c2-bbfa-e8bf4343534c", | ||
"parentID":"05117fac-eac2-4ed7-b421-e70fcb42daee", | ||
"externalID":null | ||
} | ||
], | ||
"diffMap":null, | ||
"ignoreDiffInMediationEvents":false, | ||
"updateMechanism":"DEFAULT", | ||
"writeToDb":true | ||
} |
67 changes: 67 additions & 0 deletions
67
spec/models/manageiq/providers/nuage/network_manager/event_catcher/domain_create.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
{ | ||
"userName":"tester", | ||
"enterpriseName":"csp", | ||
"type":"CREATE", | ||
"entityType":"domain", | ||
"entityVersion":null, | ||
"assoicatedEvent":false, | ||
"eventReceivedTime":1508854852753, | ||
"entities":[ | ||
{ | ||
"children":null, | ||
"parentType":"enterprise", | ||
"entityScope":"ENTERPRISE", | ||
"lastUpdatedBy":"d2dc3ac6-01a4-4755-8686-e0be7f36f088", | ||
"lastUpdatedDate":1508854852000, | ||
"creationDate":1508854852000, | ||
"routeDistinguisher":"65534:61003", | ||
"routeTarget":"65534:26701", | ||
"name":"Finance-App", | ||
"description":"Created by Ansible", | ||
"maintenanceMode":"DISABLED", | ||
"dhcpServerAddresses":null, | ||
"underlayEnabled":"DISABLED", | ||
"policyChangeStatus":null, | ||
"backHaulRouteDistinguisher":"65534:2255", | ||
"backHaulRouteTarget":"65534:58729", | ||
"backHaulVNID":9473174, | ||
"advertiseCriteria":null, | ||
"importRouteTarget":"65534:26701", | ||
"exportRouteTarget":"65534:26701", | ||
"encryption":"DISABLED", | ||
"localAS":null, | ||
"owner":"d2dc3ac6-01a4-4755-8686-e0be7f36f088", | ||
"ID":"c3869ddf-4c4b-433b-a23f-fc3800337578", | ||
"parentID":"fda58efc-7f7c-4a51-b6b4-24b32d755785", | ||
"externalID":null, | ||
"serviceID":307942814, | ||
"customerID":236537, | ||
"DHCPBehavior":"CONSUME", | ||
"DHCPServerAddress":null, | ||
"secondaryDHCPServerAddress":null, | ||
"labelID":27767, | ||
"multicast":"DISABLED", | ||
"PATEnabled":"INHERITED", | ||
"associatedPATMapperID":null, | ||
"associatedMulticastChannelMapID":null, | ||
"stretched":false, | ||
"tunnelType":"VXLAN", | ||
"ECMPCount":1, | ||
"templateID":"2402a4b4-d309-4d03-8c65-82aa02bdfd7d", | ||
"enterpriseID":"fda58efc-7f7c-4a51-b6b4-24b32d755785", | ||
"uplinkPreference":"PRIMARY_SECONDARY", | ||
"globalRoutingEnabled":false, | ||
"leakingEnabled":false, | ||
"DPI":"DISABLED", | ||
"permittedAction":null, | ||
"associatedBGPProfileID":null, | ||
"BGPEnabled":false, | ||
"domainID":472114, | ||
"domainVLANID":0 | ||
} | ||
], | ||
"diffMap":null, | ||
"ignoreDiffInMediationEvents":false, | ||
"updateMechanism":"DEFAULT", | ||
"requestID":"c9591176-42c2-4347-a182-9a6f0bd8b63c" | ||
} |
55 changes: 55 additions & 0 deletions
55
spec/models/manageiq/providers/nuage/network_manager/event_catcher/enterprise_create.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
{ | ||
"userName":"tester", | ||
"enterpriseName":"csp", | ||
"type":"CREATE", | ||
"entityType":"enterprise", | ||
"entityVersion":null, | ||
"assoicatedEvent":false, | ||
"eventReceivedTime":1508854841922, | ||
"entities":[ | ||
{ | ||
"children":null, | ||
"parentType":null, | ||
"entityScope":"ENTERPRISE", | ||
"lastUpdatedBy":"d2dc3ac6-01a4-4755-8686-e0be7f36f088", | ||
"lastUpdatedDate":1508854841000, | ||
"creationDate":1508854841000, | ||
"name":"Ansible-Test", | ||
"description":"Created by Ansible", | ||
"avatarType":null, | ||
"avatarData":null, | ||
"floatingIPsQuota":16, | ||
"floatingIPsUsed":0, | ||
"allowTrustedForwardingClass":false, | ||
"allowAdvancedQOSConfiguration":false, | ||
"allowedForwardingClasses":[ | ||
"H" | ||
], | ||
"allowGatewayManagement":false, | ||
"enableApplicationPerformanceManagement":false, | ||
"encryptionManagementMode":"DISABLED", | ||
"localAS":null, | ||
"dictionaryVersion":2, | ||
"allowedForwardingMode":null, | ||
"owner":"d2dc3ac6-01a4-4755-8686-e0be7f36f088", | ||
"ID":"fda58efc-7f7c-4a51-b6b4-24b32d755785", | ||
"parentID":null, | ||
"externalID":null, | ||
"customerID":236537, | ||
"DHCPLeaseInterval":24, | ||
"enterpriseProfileID":"f1e5eb19-c67a-4651-90c1-3f84e23e1d36", | ||
"receiveMultiCastListID":"081169f6-cb2f-4c6e-8e94-b701224a5141", | ||
"sendMultiCastListID":"738446cc-026f-488f-9718-b13f4390857b", | ||
"associatedGroupKeyEncryptionProfileID":"de15a596-d99d-47a9-8e55-2147a1fd7b47", | ||
"associatedEnterpriseSecurityID":"a7a66d41-7cc3-4678-9289-b2faf0259144", | ||
"associatedKeyServerMonitorID":"48383e55-4171-4fe0-9c70-a74efb171d44", | ||
"LDAPEnabled":false, | ||
"LDAPAuthorizationEnabled":false, | ||
"BGPEnabled":false | ||
} | ||
], | ||
"diffMap":null, | ||
"ignoreDiffInMediationEvents":false, | ||
"updateMechanism":"DEFAULT", | ||
"requestID":"dd3b1d85-b021-48f3-9c23-50b8aeaa86f5" | ||
} |
10 changes: 10 additions & 0 deletions
10
spec/models/manageiq/providers/nuage/network_manager/event_catcher/policygroup_create.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
{ | ||
"entityType":"policygroup", | ||
"type":"CREATE", | ||
"eventReceivedTime":1508854841922, | ||
"entities":[ | ||
{ | ||
"ID":"fadd09c4-9fea-46ec-8342-73f1b6a4df74" | ||
} | ||
] | ||
} |
58 changes: 58 additions & 0 deletions
58
spec/models/manageiq/providers/nuage/network_manager/event_catcher/subnet_create.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
{ | ||
"userName":"tester", | ||
"enterpriseName":"csp", | ||
"type":"CREATE", | ||
"entityType":"subnet", | ||
"entityVersion":null, | ||
"assoicatedEvent":false, | ||
"eventReceivedTime":1508854855195, | ||
"entities":[ | ||
{ | ||
"children":null, | ||
"parentType":"zone", | ||
"entityScope":"ENTERPRISE", | ||
"lastUpdatedBy":"d2dc3ac6-01a4-4755-8686-e0be7f36f088", | ||
"lastUpdatedDate":1508854855000, | ||
"creationDate":1508854855000, | ||
"address":"10.88.88.0", | ||
"netmask":"255.255.255.0", | ||
"name":"Audit-Subnet", | ||
"dynamicIpv6Address":true, | ||
"gateway":"10.88.88.1", | ||
"description":"Created by Ansible", | ||
"maintenanceMode":"DISABLED", | ||
"routeDistinguisher":"65534:63222", | ||
"routeTarget":"65534:1739", | ||
"vnId":7540380, | ||
"underlayEnabled":"INHERITED", | ||
"underlay":false, | ||
"entityState":null, | ||
"splitSubnet":false, | ||
"encryption":"INHERITED", | ||
"owner":"d2dc3ac6-01a4-4755-8686-e0be7f36f088", | ||
"ID":"4e08bf9c-b679-4c82-a6f7-b298a3901d25", | ||
"parentID":"a1669738-b807-4af2-bd12-2e77f3e6a970", | ||
"externalID":null, | ||
"IPv6Address":null, | ||
"IPType":"IPV4", | ||
"IPv6Gateway":null, | ||
"serviceID":1569936378, | ||
"gatewayMACAddress":"68:54:ED:00:A3:78", | ||
"PATEnabled":"INHERITED", | ||
"policyGroupID":1055128306, | ||
"public":false, | ||
"templateID":null, | ||
"associatedSharedNetworkResourceID":null, | ||
"DHCPRelayStatus":"DISABLED", | ||
"proxyARP":false, | ||
"multicast":"INHERITED", | ||
"associatedMulticastChannelMapID":null, | ||
"DPI":"INHERITED", | ||
"useGlobalMAC":"DISABLED" | ||
} | ||
], | ||
"diffMap":null, | ||
"ignoreDiffInMediationEvents":false, | ||
"updateMechanism":"DEFAULT", | ||
"requestID":"56e69f6e-a1fd-457f-b4c5-844cfd790153" | ||
} |
68 changes: 68 additions & 0 deletions
68
spec/models/manageiq/providers/nuage/network_manager/event_target_parser_spec.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
describe ManageIQ::Providers::Nuage::NetworkManager::EventTargetParser do | ||
before :each do | ||
_guid, _server, zone = EvmSpecHelper.create_guid_miq_server_zone | ||
@ems = FactoryGirl.create(:ems_nuage_network, :zone => zone) | ||
|
||
allow_any_instance_of(EmsEvent).to receive(:handle_event) | ||
allow(EmsEvent).to receive(:create_completed_event) | ||
end | ||
|
||
context "Events trigger targeted refresh" do | ||
it "entityType: enterprise" do | ||
assert_event_triggers_target( | ||
'enterprise_create.json', | ||
[[:network_groups, {:ems_ref => 'fda58efc-7f7c-4a51-b6b4-24b32d755785'}]] | ||
) | ||
end | ||
|
||
it "entityType: subnet" do | ||
assert_event_triggers_target( | ||
'subnet_create.json', | ||
[[:cloud_subnets, {:ems_ref => '4e08bf9c-b679-4c82-a6f7-b298a3901d25'}]] | ||
) | ||
end | ||
|
||
it "entityType: policygroup" do | ||
assert_event_triggers_target( | ||
'policygroup_create.json', | ||
[[:security_groups, {:ems_ref => 'fadd09c4-9fea-46ec-8342-73f1b6a4df74'}]] | ||
) | ||
end | ||
|
||
it "entityType: domain" do | ||
assert_event_triggers_target( | ||
'domain_create.json', | ||
[[:network_groups, {:ems_ref => 'fda58efc-7f7c-4a51-b6b4-24b32d755785'}]] | ||
) | ||
end | ||
end | ||
|
||
context "Alarms don't trigger targeted refresh" do | ||
it "alarm" do | ||
assert_event_triggers_target('alarm_create.json', []) | ||
end | ||
end | ||
|
||
def assert_event_triggers_target(event_data, expected_targets) | ||
ems_event = create_ems_event(event_data) | ||
parsed_targets = described_class.new(ems_event).parse | ||
|
||
expect(parsed_targets.size).to eq(expected_targets.count) | ||
expect(target_references(parsed_targets)).to( | ||
match_array(expected_targets) | ||
) | ||
end | ||
|
||
def target_references(parsed_targets) | ||
parsed_targets.map { |x| [x.association, x.manager_ref] }.uniq | ||
end | ||
|
||
def response(path) | ||
JSON.parse(File.read(File.join(File.dirname(__FILE__), "/event_catcher/#{path}"))) | ||
end | ||
|
||
def create_ems_event(path) | ||
event_hash = ManageIQ::Providers::Nuage::NetworkManager::EventParser.event_to_hash(response(path), @ems.id) | ||
EmsEvent.add(@ems.id, event_hash) | ||
end | ||
end |