Method: Compliance::API.target_is_automate_server?

Defined in:
lib/bundles/inspec-compliance/api.rb

.target_is_automate_server?(url, insecure) ⇒ Boolean

Returns:

  • (Boolean)


264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
# File 'lib/bundles/inspec-compliance/api.rb', line 264

def self.target_is_automate_server?(url, insecure)
  automate_endpoint = '/compliance/version'
  response = Compliance::HTTP.get(url + automate_endpoint, nil, insecure)
  case response.code
  when '401'
    Inspec::Log.debug(
      "Received 401 from #{url}#{automate_endpoint} - " \
      'assuming target is a Chef Automate instance',
    )
    true
  when '200'
    # Chef Automate currently returns 401 for `/compliance/version` but some
    # versions of OpsWorks Chef Automate return 200 and a Chef Manage page
    # when unauthenticated requests are received.
    if response.body.include?('Are You Looking For the Chef Server?')
      Inspec::Log.debug(
        "Received 200 from #{url}#{automate_endpoint} - " \
        'assuming target is an OpsWorks Chef Automate instance',
      )
      true
    else
      Inspec::Log.debug(
        "Received 200 from #{url}#{automate_endpoint} " \
        'but did not receive the Chef Manage page - ' \
        'assuming target is not a Chef Automate instance',
      )
      false
    end
  else
    Inspec::Log.debug(
      "Received unexpected status code #{response.code} " \
      "from #{url}#{automate_endpoint} - " \
      'assuming target is not a Chef Automate instance',
    )
    false
  end
end