Skip to content

Commit

Permalink
Add compliance information to a server
Browse files Browse the repository at this point in the history
  • Loading branch information
CharlleDaniel committed Apr 11, 2018
1 parent 2081cc4 commit 8d86983
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
require_relative 'component_parser'

module ManageIQ::Providers::Lenovo
module Parsers
class CompliancePolicyParser < ComponentParser
COMPLIANCE_NAME = 'No policy assigned'.freeze
COMPLIANCE_STATUS = {
'no' => 'Non-compliant',
'yes' => 'Compliant',
'' => 'None'
}.freeze

class << self

def parse_compliance_policy(compliance_policies)
parse_to_hash(compliance_policies)
end

private

def map_by_uuid(collection)
collection.collect do |result|
policy_name = result['policyName']
data = {
:policy_name => policy_name.empty? ? COMPLIANCE_NAME : policy_name,
:status => "#{COMPLIANCE_STATUS[result['endpointCompliant']]} #{result['message'].join(', ')}",
}
# Return a tuple [key, value] for each result
[result['uuid'], data]
end.to_h
end

def parse_to_hash(persisted_results)
persisted_results.collect do |persisted_result|
if persisted_result.xITEs.present?
map_by_uuid(persisted_result.xITEs)
elsif persisted_result.racklist.present?
map_by_uuid(persisted_result.racklist)
end
end.compact.reduce({}, :merge)
end
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@ class << self
#
# @return [Hash] containing the physical server information
#
def parse_physical_server(node, rack = nil)
def parse_physical_server(node, compliance, rack = nil)
result = parse(node, ParserDictionaryConstants::PHYSICAL_SERVER)

# Keep track of the rack where this server is in, if it is in any rack
result[:physical_rack] = rack if rack

result[:ems_compliance_name] = compliance[:policy_name]
result[:ems_compliance_status] = compliance[:status]
result[:vendor] = "lenovo"
result[:type] = ParserDictionaryConstants::MIQ_TYPES["physical_server"]
result[:power_state] = ParserDictionaryConstants::POWER_STATE_MAP[node.powerStatus]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,16 @@ def parse_physical_rack(node)
Parsers::PhysicalRackParser.parse_physical_rack(node)
end

def parse_physical_server(node, rack = nil)
Parsers::PhysicalServerParser.parse_physical_server(node, rack)
def parse_physical_server(node, compliance, rack = nil)
Parsers::PhysicalServerParser.parse_physical_server(node, compliance, rack)
end

def parse_config_pattern(config_pattern)
Parsers::ConfigPatternParser.parse_config_pattern(config_pattern)
end

def parse_compliance_policy(compliance_policies)
Parsers::CompliancePolicyParser.parse_compliance_policy(compliance_policies)
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ module Parsers
require_relative 'components/physical_server_parser'
require_relative 'components/config_pattern_parser'
require_relative 'components/physical_rack_parser'
require_relative 'components/compliance_policy_parser'
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def get_all_physical_infra
rack_uid, rack = @parser.parse_physical_rack(cab)

get_physical_servers(cab) do |node|
_, parsed = @parser.parse_physical_server(node, rack)
_, parsed = @parser.parse_physical_server(node, find_compliance(node), rack)
physical_servers << parsed
end

Expand All @@ -76,7 +76,7 @@ def get_all_physical_infra

nodes = get_physical_servers(standalone)
process_collection(nodes, :physical_servers) do |node|
@parser.parse_physical_server(node)
@parser.parse_physical_server(node, find_compliance(node))
end

@data[:physical_servers].concat(physical_servers)
Expand Down Expand Up @@ -114,6 +114,19 @@ def get_physical_servers(cabinet)
end
end

def find_compliance(node)
compliance_policies ||= @connection.fetch_compliance_policies
compliance_policies_parsed ||= @parser.parse_compliance_policy(compliance_policies)
compliance_policies_parsed[node.uuid] || create_default_compliance
end

def create_default_compliance
{
:policy_name => Parsers::CompliancePolicyParser::COMPLIANCE_NAME,
:status => Parsers::CompliancePolicyParser::COMPLIANCE_STATUS[''],
}
end

def get_config_patterns
config_patterns = @connection.discover_config_pattern
process_collection(config_patterns, :customization_scripts) { |config_pattern| @parser.parse_config_pattern(config_pattern) }
Expand Down

0 comments on commit 8d86983

Please sign in to comment.