diff --git a/lib/refrepo/gen/puppet/clusters.rb b/lib/refrepo/gen/puppet/clusters.rb
index d75dfcf55f1732315c3580fbcdb591725eca6489..d00edd921e2ad62187fe077895151062f3ae0d3e 100644
--- a/lib/refrepo/gen/puppet/clusters.rb
+++ b/lib/refrepo/gen/puppet/clusters.rb
@@ -32,10 +32,24 @@ def generate_puppet_clusters(options)
             else
                 warrantied = f_node['chassis'].key?('warranty_end') ? DateTime.parse(f_node['chassis']['warranty_end']) > DateTime.now : false
             end
+            # A cluster has to be updated if is under warranty and that the BIOS is older than one year
+            fw_update_required = false
+            if warrantied
+                raw_date = f_node['bios']['release_date']
+                begin
+                    last_update = DateTime.parse(raw_date)
+                rescue
+                    # Some BIOS release have MM/DD/YYYY format
+                    last_update = DateTime.strptime(raw_date, "%m/%d/%Y")
+                end
+                fw_update_required = last_update < (DateTime.now << 12)
+            end
             c_data = {"queue" => queue, 
                 "disk_reservation" => disk_reservation,
                 "gpu" => gpu,
-                "warrantied" => warrantied}
+                "warrantied" => warrantied,
+                "fw_update_required" => fw_update_required
+            }
             if hiera[s_uid][c_uid] != c_data
                 diff = hiera[s_uid][c_uid].dup.delete_if { |k, v| c_data[k] == v }.merge!(c_data.dup.delete_if { |k, _v| hiera[s_uid][c_uid].has_key?(k) })
                 puts "#{s_uid}-#{c_uid}  Changes detected #{diff}"