From 6ab4dfe25db01c1cf90a0062fb3fd2c453331c67 Mon Sep 17 00:00:00 2001
From: Takashi Kajinami <tkajinam@redhat.com>
Date: Fri, 17 Sep 2021 19:35:04 +0900
Subject: [PATCH] inspector: Add support for healthcheck middleware

This change introduces support for parameters of the healthcheck
middleware, which was introduced recently to ironic-inspector.

Depends-on: https://review.opendev.org/808567
Change-Id: If77a1a6b60268379a5e87165aa6c93c6c4d40770
---
 manifests/inspector/healthcheck.pp            | 50 ++++++++++++++++
 ...nspector-healthcheck-519748f8566b5dbe.yaml |  4 ++
 .../ironic_inspector_healthcheck_spec.rb      | 60 +++++++++++++++++++
 3 files changed, 114 insertions(+)
 create mode 100644 manifests/inspector/healthcheck.pp
 create mode 100644 releasenotes/notes/inspector-healthcheck-519748f8566b5dbe.yaml
 create mode 100644 spec/classes/ironic_inspector_healthcheck_spec.rb

diff --git a/manifests/inspector/healthcheck.pp b/manifests/inspector/healthcheck.pp
new file mode 100644
index 00000000..abf20e05
--- /dev/null
+++ b/manifests/inspector/healthcheck.pp
@@ -0,0 +1,50 @@
+# == Class: ironic::inspector::healthcheck
+#
+# Configure oslo_middleware options in healthcheck section
+#
+# == Params
+#
+# [*enabled*]
+#   (Optional) Enable the healthcheck endpoint at /healthcheck.
+#   Defaults to $::os_service_default
+#
+# [*detailed*]
+#   (Optional) Show more detailed information as part of the response.
+#   Defaults to $::os_service_default
+#
+# [*backends*]
+#   (Optional) Additional backends that can perform health checks and report
+#   that information back as part of a request.
+#   Defaults to $::os_service_default
+#
+# [*disable_by_file_path*]
+#   (Optional) Check the presense of a file to determine if an application
+#   is running on a port.
+#   Defaults to $::os_service_default
+#
+# [*disable_by_file_paths*]
+#   (Optional) Check the presense of a file to determine if an application
+#   is running on a port. Expects a "port:path" list of strings.
+#   Defaults to $::os_service_default
+#
+class ironic::inspector::healthcheck (
+  $enabled               = $::os_service_default,
+  $detailed              = $::os_service_default,
+  $backends              = $::os_service_default,
+  $disable_by_file_path  = $::os_service_default,
+  $disable_by_file_paths = $::os_service_default,
+) {
+
+  include ironic::deps
+
+  ironic_inspector_config {
+    'healthcheck/enabled': value => $enabled;
+  }
+
+  oslo::healthcheck { 'ironic_inspector_config':
+    detailed              => $detailed,
+    backends              => $backends,
+    disable_by_file_path  => $disable_by_file_path,
+    disable_by_file_paths => $disable_by_file_paths,
+  }
+}
diff --git a/releasenotes/notes/inspector-healthcheck-519748f8566b5dbe.yaml b/releasenotes/notes/inspector-healthcheck-519748f8566b5dbe.yaml
new file mode 100644
index 00000000..0f29ff1b
--- /dev/null
+++ b/releasenotes/notes/inspector-healthcheck-519748f8566b5dbe.yaml
@@ -0,0 +1,4 @@
+---
+features:
+  - |
+    The new ``ironic::inspector::healthcheck`` class has been added.
diff --git a/spec/classes/ironic_inspector_healthcheck_spec.rb b/spec/classes/ironic_inspector_healthcheck_spec.rb
new file mode 100644
index 00000000..033a5f74
--- /dev/null
+++ b/spec/classes/ironic_inspector_healthcheck_spec.rb
@@ -0,0 +1,60 @@
+require 'spec_helper'
+
+describe 'ironic::inspector::healthcheck' do
+
+  shared_examples_for 'ironic::inspector::healthcheck' do
+
+    context 'with default parameters' do
+      let :params do
+        {}
+      end
+
+      it 'configures default values' do
+        is_expected.to contain_ironic_inspector_config('healthcheck/enabled').with_value('<SERVICE DEFAULT>')
+
+        is_expected.to contain_oslo__healthcheck('ironic_inspector_config').with(
+          :detailed              => '<SERVICE DEFAULT>',
+          :backends              => '<SERVICE DEFAULT>',
+          :disable_by_file_path  => '<SERVICE DEFAULT>',
+          :disable_by_file_paths => '<SERVICE DEFAULT>',
+        )
+      end
+    end
+
+    context 'with specific parameters' do
+      let :params do
+        {
+          :enabled               => true,
+          :detailed              => true,
+          :backends              => ['disable_by_file'],
+          :disable_by_file_path  => '/etc/ironic-inspector/healthcheck/disabled',
+          :disable_by_file_paths => ['5050:/etc/ironic-inspector/healthcheck/disabled'],
+        }
+      end
+
+      it 'configures specified values' do
+        is_expected.to contain_ironic_inspector_config('healthcheck/enabled').with_value(true)
+
+        is_expected.to contain_oslo__healthcheck('ironic_inspector_config').with(
+          :detailed              => true,
+          :backends              => ['disable_by_file'],
+          :disable_by_file_path  => '/etc/ironic-inspector/healthcheck/disabled',
+          :disable_by_file_paths => ['5050:/etc/ironic-inspector/healthcheck/disabled'],
+        )
+      end
+    end
+  end
+
+  on_supported_os({
+    :supported_os   => OSDefaults.get_supported_os
+  }).each do |os,facts|
+    context "on #{os}" do
+      let (:facts) do
+        facts.merge!(OSDefaults.get_facts())
+      end
+
+      it_configures 'ironic::inspector::healthcheck'
+    end
+  end
+
+end