From 7f7ab040b1fd1edad48a72d7e36398a32d7131b1 Mon Sep 17 00:00:00 2001
From: Alexander Olofsson <alexander.olofsson@liu.se>
Date: Fri, 29 Nov 2019 11:19:58 +0100
Subject: [PATCH] Add some debug logging for image retrieval

---
 app/models/wds_server.rb | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/app/models/wds_server.rb b/app/models/wds_server.rb
index a0c4a4d..b1f6294 100644
--- a/app/models/wds_server.rb
+++ b/app/models/wds_server.rb
@@ -208,11 +208,25 @@ class WdsServer < ApplicationRecord
   def images(type, name = nil)
     raise ArgumentError, 'Type must be :boot or :install' unless %i[boot install].include? type
 
-    objects = connection.run_wql("SELECT * FROM MSFT_Wds#{type.to_s.capitalize}Image#{" WHERE Name=\"#{name}\"" if name}")["msft_wds#{type}image".to_sym] rescue nil
-    objects = nil if objects.empty?
-    objects ||= underscore_result([JSON.parse(connection.shell(:powershell) do |s|
-      s.run("Get-WDS#{type.to_s.capitalize}Image #{"-ImageName '#{name.sub("'", "`'")}'" if name} | ConvertTo-Json -Compress")
-    end.stdout)].flatten)
+    begin
+      objects = connection.run_wql("SELECT * FROM MSFT_Wds#{type.to_s.capitalize}Image#{" WHERE Name=\"#{name}\"" if name}")["msft_wds#{type}image".to_sym]
+      objects = nil if objects.empty?
+    rescue StandardError => e
+      ::Rails.logger.debug "WQL image query failed with #{e.class}: #{e}"
+    end
+
+    unless objects
+      begin
+        result = connection.shell(:powershell) do |s|
+          s.run("Get-WDS#{type.to_s.capitalize}Image #{"-ImageName '#{name.sub("'", "`'")}'" if name} | ConvertTo-Json -Compress")
+        end
+
+        objects = underscore_result([JSON.parse(result.stdout)].flatten)
+      rescue JSON::ParserError => e
+        ::Rails.logger.error "#{e.class}: #{e}\n#{result}"
+        raise e
+      end
+    end
 
     objects.map do |obj|
       ForemanWds.const_get("Wds#{type.to_s.capitalize}Image").new obj.merge(wds_server: self)
-- 
GitLab