foreman_remote_execution 1.6.2 → 1.6.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c69660ec871252ef2e050387571203f0bc88304fa95178ef4c8483f728fd2324
4
- data.tar.gz: 42aa074014895c236544f7ae4500214df93cb28f3590faa9a31fd3ac166746aa
3
+ metadata.gz: 5f8f8c5208313baaca0c289321f6cc4c07c8d27d9f8d97c83e764d58a902f152
4
+ data.tar.gz: cf6df45271fa254133e0c15e1084f835984e857247b1b8980b61555db9b43ae2
5
5
  SHA512:
6
- metadata.gz: b207852afa534924b6a029b756492ebb7543ec39064e010a8c66bfd1ab68cd9ff53911bd437736f53308f78b7d55cbee73413e6c267ecbdf14777d78b7380a3c
7
- data.tar.gz: 66e6b7ed2f4780c3b33b468691c90ace64fe3cc1f62fad6446c039c119fa7d8193cd6b15cf6566a73c48c90c0ed4199d26eb66190ff3383ccacd5db86fd809df
6
+ metadata.gz: 8c0ebcfd20e690e37e882e7a1d93be312989252d9b875977852e4587b7b3fe2232bc745f89f7d5d83bce1dc6c6480871ad4daae5d30b482d3f9b7fccf64089fd
7
+ data.tar.gz: 1fc408ceb6aebaddd2fb83fe91ceb9f7674ae3735bc2eb89c522903dc1f67175f348261557a95ae30d091dc409aa20cfc9a4133426b1f42913c2f6da165c3781
@@ -49,6 +49,8 @@ module Actions
49
49
  job_invocation.password = job_invocation.key_passphrase = job_invocation.sudo_password = nil
50
50
  job_invocation.save!
51
51
 
52
+ Rails.logger.debug "cleaning cache for keys that begin with 'job_invocation_#{job_invocation.id}'"
53
+ Rails.cache.delete_matched(/\A#{JobInvocation::CACHE_PREFIX}_#{job_invocation.id}/)
52
54
  # creating the success notification should be the very last thing this tasks do
53
55
  job_invocation.build_notification.deliver!
54
56
  end
@@ -15,6 +15,14 @@ module ForemanRemoteExecution
15
15
  !!@preview
16
16
  end
17
17
 
18
+ def cached(key, &block)
19
+ return yield if preview?
20
+
21
+ cache_key = "#{JobInvocation::CACHE_PREFIX}_#{invocation.job_invocation_id}_#{key}"
22
+ Rails.logger.debug "cache hit for #{cache_key}" if Rails.cache.exist?(cache_key)
23
+ Rails.cache.fetch(cache_key, &block)
24
+ end
25
+
18
26
  def render_template(template_name, input_values = {}, options = {})
19
27
  options.assert_valid_keys(:with_foreign_input_set)
20
28
  with_foreign_input_set = options.fetch(:with_foreign_input_set, true)
@@ -1,4 +1,6 @@
1
1
  class JobInvocation < ApplicationRecord
2
+ CACHE_PREFIX = "job_invocation".freeze
3
+
2
4
  audited :except => [:task_id, :targeting_id, :task_group_id, :triggering_id]
3
5
 
4
6
  include Authorizable
@@ -25,7 +25,13 @@ class RemoteExecutionFeature < ApplicationRecord
25
25
 
26
26
  # rubocop:disable Metrics/PerceivedComplexity
27
27
  def self.register(label, name, options = {})
28
- return false if Foreman.in_setup_db_rake? || !RemoteExecutionFeature.table_exists?
28
+ begin
29
+ return false unless RemoteExecutionFeature.table_exists?
30
+ rescue ActiveRecord::NoDatabaseError => e
31
+ # just ignore the problem if DB does not exist yet (rake db:create call)
32
+ return false
33
+ end
34
+
29
35
  options.assert_valid_keys(*VALID_OPTIONS)
30
36
  options[:host_action_button] = false unless options.key?(:host_action_button)
31
37
 
@@ -1,3 +1,3 @@
1
1
  module ForemanRemoteExecution
2
- VERSION = '1.6.2'.freeze
2
+ VERSION = '1.6.3'.freeze
3
3
  end
@@ -0,0 +1,49 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class RendererScopeInputTest < ActiveSupport::TestCase
4
+ let(:source) { Foreman::Renderer::Source::String.new(content: '') }
5
+
6
+ describe 'caching helper in real mode' do
7
+ let(:input) do
8
+ input = ForemanRemoteExecution::Renderer::Scope::Input.new(source: source)
9
+ input.stubs(:invocation => OpenStruct.new(:job_invocation_id => 1))
10
+ input
11
+ end
12
+
13
+ it 'caches the value under given key' do
14
+ i = 1
15
+ result = input.cached('some_key') { i }
16
+ result.must_equal 1
17
+
18
+ i += 1
19
+ result = input.cached('some_key') { i }
20
+ result.must_equal 1
21
+
22
+ i += 1
23
+ result = input.cached('different_key') { i }
24
+ result.must_equal 3
25
+ end
26
+ end
27
+
28
+ describe 'caching helper in preview mode' do
29
+ let(:input) do
30
+ input = ForemanRemoteExecution::Renderer::Scope::Input.new(source: source)
31
+ input.stubs(:invocation => OpenStruct.new(:job_invocation_id => 1), :preview? => true)
32
+ input
33
+ end
34
+
35
+ it 'does not cache the value' do
36
+ i = 1
37
+ result = input.cached('some_key') { i }
38
+ result.must_equal 1
39
+
40
+ i += 1
41
+ result = input.cached('some_key') { i }
42
+ result.must_equal 2
43
+
44
+ i += 1
45
+ result = input.cached('different_key') { i }
46
+ result.must_equal 3
47
+ end
48
+ end
49
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_remote_execution
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Foreman Remote Execution team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-07 00:00:00.000000000 Z
11
+ date: 2018-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deface
@@ -384,6 +384,7 @@ files:
384
384
  - test/unit/job_template_test.rb
385
385
  - test/unit/remote_execution_feature_test.rb
386
386
  - test/unit/remote_execution_provider_test.rb
387
+ - test/unit/renderer_scope_input.rb
387
388
  - test/unit/targeting_test.rb
388
389
  - test/unit/template_input_test.rb
389
390
  - test/unit/template_invocation_input_value_test.rb
@@ -449,6 +450,7 @@ test_files:
449
450
  - test/unit/job_template_test.rb
450
451
  - test/unit/remote_execution_feature_test.rb
451
452
  - test/unit/remote_execution_provider_test.rb
453
+ - test/unit/renderer_scope_input.rb
452
454
  - test/unit/targeting_test.rb
453
455
  - test/unit/template_input_test.rb
454
456
  - test/unit/template_invocation_input_value_test.rb