@@ -87,18 +87,67 @@ def check_rules_updated(rules)
8787 false
8888 end
8989
90+ def https_pdb_client ( port = 8081 )
91+ client = Net ::HTTP . new ( Puppet . settings [ :certname ] , port )
92+ client . use_ssl = true
93+ client . cert = @cert ||= OpenSSL ::X509 ::Certificate . new ( File . read ( Puppet . settings [ :hostcert ] ) )
94+ client . key = @key ||= OpenSSL ::PKey ::RSA . new ( File . read ( Puppet . settings [ :hostprivkey ] ) )
95+ client . verify_mode = OpenSSL ::SSL ::VERIFY_PEER
96+ client . ca_file = Puppet . settings [ :localcacert ]
97+ client
98+ end
99+
100+ def check_nodes_with_legacy_compiler_oid
101+ pdb = https_pdb_client
102+ pdb_request = Net ::HTTP ::Get . new ( '/pdb/query/v4' )
103+ pdb_request . set_form_data ( {
104+ 'query' => 'inventory[certname,trusted.extensions] {
105+ trusted.extensions."1.3.6.1.4.1.34380.1.1.9814" is not null
106+ }'
107+ } )
108+
109+ response = pdb . request ( pdb_request )
110+
111+ unless response . code == '200'
112+ raise "Failed to query PuppetDB: HTTP #{ response . code } - #{ response . body } "
113+ end
114+
115+ nodes = JSON . parse ( response . body )
116+
117+ {
118+ 'nodes_found' => !nodes . empty? ,
119+ 'count' => nodes . size ,
120+ 'nodes' => nodes . map { |n | n [ 'certname' ] }
121+ }
122+ rescue JSON ::ParserError => e
123+ raise "Invalid JSON response from PuppetDB: #{ e . message } "
124+ rescue StandardError => e
125+ raise "Error checking for legacy compiler OID: #{ e . message } "
126+ end
127+
90128 def execute!
91129 begin
92130 group_id = get_pe_master_group_id
93131 current_rules = get_current_rules ( group_id )
94132
95- is_updated = check_rules_updated ( current_rules )
133+ rules_updated = check_rules_updated ( current_rules )
134+ legacy_compiler_nodes = check_nodes_with_legacy_compiler_oid
135+
136+ # Overall status is updated only if rules are updated AND no nodes have legacy compiler OID
137+ is_updated = rules_updated && !legacy_compiler_nodes [ 'nodes_found' ]
138+
139+ message = if !rules_updated
140+ 'PE Master rules need to be updated to support pe_compiler_legacy'
141+ elsif legacy_compiler_nodes [ 'nodes_found' ]
142+ 'PE Master rules are updated, but nodes with legacy compiler OID still exist'
143+ else
144+ 'PE Master rules have been updated with pe_compiler_legacy support and no legacy compiler OIDs found'
145+ end
96146
97147 result = {
98148 'updated' => is_updated ,
99- 'message' => is_updated ?
100- 'PE Master rules have already been updated with pe_compiler_legacy support' :
101- 'PE Master rules need to be updated to support pe_compiler_legacy'
149+ 'message' => message ,
150+ 'legacy_compiler_oid' => legacy_compiler_nodes
102151 }
103152
104153 puts result . to_json
0 commit comments