foreman-tasks 0.7.7 → 0.7.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 098fddc6fc2af891ed604780f543137d9e49e820
4
- data.tar.gz: 9ae880cb667e08207995dd5e156c9960239f339e
3
+ metadata.gz: 28eae441ee8a39d7955e3d5a9fb33f87cea7b871
4
+ data.tar.gz: 21c37d4267f52e05e36ee008a33c38f3660f3fec
5
5
  SHA512:
6
- metadata.gz: 71a4d2529300e104363a53dac9c534e3a682cac5f14fe722076c7d29df48429ef0ae9f777633135b7575b68288b725b9176a449018c0276d159becd5fb0ee4fe
7
- data.tar.gz: 39364230aa8cd621e922c377685f85cb570af75dec61ccb5105942e82793e52d71bdd061ba544200227d17215b890ad9312109c51a5f4246826e21f7823a05c2
6
+ metadata.gz: 3ba85d54a8e1ee742a25b8c82299a377d685ab8628d9aee62af83009f6914d0b0e35e8cef029eacdd5bacc252c27e5b310e3b5fd5a495717112aa7e518189d35
7
+ data.tar.gz: 9278556260d43ff5f39c8269dc586e99ba6bb11205f3b680f7a5084d72fafe34d5611c046c18d4500e5c5617326ff6bf973e51ad40fa291b9ead4164c54dab57
@@ -29,7 +29,7 @@ module ForemanTasks
29
29
  class BadRequest < Apipie::ParamError
30
30
  end
31
31
 
32
- before_filter :find_resource, :only => [:show]
32
+ before_filter :find_task, :only => [:show]
33
33
 
34
34
  api :GET, "/tasks/summary", "Show task summary"
35
35
  def summary
@@ -259,6 +259,10 @@ module ForemanTasks
259
259
 
260
260
  private
261
261
 
262
+ def find_task
263
+ @task = Task.find(params[:id])
264
+ end
265
+
262
266
  def resource_scope(options = {})
263
267
  @resource_scope ||= ForemanTasks::Task.authorized("#{action_permission}_foreman_tasks")
264
268
  end
@@ -5,7 +5,7 @@ module ForemanTasks
5
5
  before_filter :restrict_dangerous_actions, :only => [:unlock, :force_unlock]
6
6
 
7
7
  def show
8
- @task = find_resource
8
+ @task = Task.find(params[:id])
9
9
  end
10
10
 
11
11
  def index
@@ -14,7 +14,7 @@ module ForemanTasks
14
14
  end
15
15
 
16
16
  def sub_tasks
17
- task = find_resource
17
+ task = Task.find(params[:id])
18
18
  @tasks = filter(task.sub_tasks)
19
19
  render :index
20
20
  end
@@ -64,7 +64,7 @@ module ForemanTasks
64
64
  def future_mode_fieldset(f, triggering)
65
65
  tags = []
66
66
  tags << text_f(f, :start_at_raw, :label => _('Start at'), :placeholder => 'YYYY-mm-dd HH:MM')
67
- tags << text_f(f, :start_before_raw, :label => _('Start before'), :placeholder => 'YYYY-mm-dd HH:MM')
67
+ tags << text_f(f, :start_before_raw, :label => _('Start before'), :placeholder => 'YYYY-mm-dd HH:MM', :help_inline => popover(_('Explanation'), _('Indicates that the action should be cancelled if it cannot be started before this time.')))
68
68
  content_tag(:fieldset, nil, :id => "trigger_mode_future", :class => "trigger_mode_form #{'hidden' unless triggering.future?}") do
69
69
  tags.join.html_safe
70
70
  end
@@ -2,7 +2,7 @@ module Actions
2
2
  class Base < Dynflow::Action
3
3
 
4
4
  def task
5
- @task ||= ::ForemanTasks::Task::DynflowTask.find_by_external_id!(execution_plan_id)
5
+ @task ||= ::ForemanTasks::Task::DynflowTask.where(:external_id => execution_plan_id).first!
6
6
  end
7
7
 
8
8
  # This method says what data form input gets into the task details in Rest API
@@ -130,7 +130,7 @@ module ForemanTasks
130
130
  if @dynflow_sync_action
131
131
  run.wait
132
132
  if run.value.error?
133
- task = ForemanTasks::Task::DynflowTask.find_by_external_id!(@execution_plan.id)
133
+ task = ForemanTasks::Task::DynflowTask.where(:external_id => @execution_plan.id).first!
134
134
  raise ForemanTasks::TaskError.new(task)
135
135
  end
136
136
  end
@@ -22,8 +22,8 @@ module ForemanTasks
22
22
  hostname.try(:downcase!)
23
23
  certname.try(:downcase!)
24
24
 
25
- host = certname.present? ? Host.find_by_certname(certname) : nil
26
- host ||= Host.find_by_name hostname
25
+ host = certname.present? ? Host.where(:certname => certname).first : nil
26
+ host ||= Host.where(:name => hostname).first
27
27
  host ||= Host.new(:name => hostname, :certname => certname) if Setting[:create_new_host_when_facts_are_uploaded]
28
28
  if host
29
29
  # if we were given a certname but found the Host by hostname we should update the certname
@@ -9,7 +9,11 @@ module ForemanTasks
9
9
  belongs_to :triggering
10
10
 
11
11
  has_many :tasks, :through => :task_group
12
- has_many :task_groups, :through => :tasks, :uniq => true
12
+ if Rails::VERSION::MAJOR < 4
13
+ has_many :task_groups, :through => :tasks, :uniq => true
14
+ else
15
+ has_many :task_groups, -> { uniq }, :through => :tasks
16
+ end
13
17
 
14
18
  validates :cron_line, :presence => true
15
19
 
@@ -116,10 +120,9 @@ module ForemanTasks
116
120
 
117
121
  def self.cronline_hash(recurring_type, time_hash, days_of_week_hash)
118
122
  hash = Hash[[:years, :months, :days, :hours, :minutes].zip(time_hash.values)]
119
-
120
123
  hash.update :days_of_week => days_of_week_hash
121
- .select { |value, index| value == "1" }
122
- .values.join(',')
124
+ .select { |key, value| value == "1" }
125
+ .keys.join(',')
123
126
  allowed_keys = case recurring_type
124
127
  when :monthly
125
128
  [:minutes, :hours, :days]
@@ -15,12 +15,19 @@ module ForemanTasks
15
15
 
16
16
  has_many :task_group_members
17
17
  has_many :task_groups, :through => :task_group_members
18
- has_many :recurring_logic_task_groups, :through => :task_group_members, :conditions => { :type => 'ForemanTasks::TaskGroups::RecurringLogicTaskGroup' }, :source => :task_group
18
+ if Rails::VERSION::MAJOR < 4
19
+ has_many :recurring_logic_task_groups, :through => :task_group_members, :conditions => { :type => 'ForemanTasks::TaskGroups::RecurringLogicTaskGroup' }, :source => :task_group
20
+ has_many :owners, :through => :locks, :source => :resource, :source_type => 'User',
21
+ :conditions => ["foreman_tasks_locks.name = ?", Lock::OWNER_LOCK_NAME]
22
+ else
23
+ has_many :recurring_logic_task_groups, -> { where :type => 'ForemanTasks::TaskGroups::RecurringLogicTaskGroup' },
24
+ :through => :task_group_members, :source => :task_group
25
+ # in fact, the task has only one owner but Rails don't let you to
26
+ # specify has_one relation though has_many relation
27
+ has_many :owners, lambda {where(["foreman_tasks_locks.name = ?", Lock::OWNER_LOCK_NAME])},
28
+ :through => :locks, :source => :resource, :source_type => 'User'
29
+ end
19
30
 
20
- # in fact, the task has only one owner but Rails don't let you to
21
- # specify has_one relation though has_many relation
22
- has_many :owners, :through => :locks, :source => :resource, :source_type => 'User',
23
- :conditions => ["foreman_tasks_locks.name = ?", Lock::OWNER_LOCK_NAME]
24
31
 
25
32
  scoped_search :on => :id, :complete_value => false
26
33
  scoped_search :on => :label, :complete_value => true
@@ -15,7 +15,7 @@ module ForemanTasks
15
15
  self.start_before = data[:start_before] if data[:start_before]
16
16
  self.parent_task_id ||= begin
17
17
  if main_action.caller_execution_plan_id
18
- DynflowTask.find_by_external_id!(main_action.caller_execution_plan_id).id
18
+ DynflowTask.where(:external_id => main_action.caller_execution_plan_id).first!.id
19
19
  end
20
20
  end
21
21
  self.label ||= main_action.class.name
@@ -1,9 +1,10 @@
1
1
  module ForemanTasks
2
2
  class Triggering < ActiveRecord::Base
3
-
4
- attr_accessor :start_at_raw, :start_before_raw, :max_iteration, :input_type,
5
- :cronline, :days, :days_of_week, :time, :end_time_limited,
6
- :end_time
3
+ PARAMS = [:start_at_raw, :start_before_raw, :max_iteration, :input_type,
4
+ :cronline, :days, :days_of_week, :time, :end_time_limited,
5
+ :end_time]
6
+ attr_accessor *PARAMS
7
+ attr_accessible *PARAMS
7
8
 
8
9
  before_save do
9
10
  if future?
@@ -39,11 +40,11 @@ module ForemanTasks
39
40
  validate :correct_cronline, :if => Proc.new { |t| t.recurring? && t.input_type == :cronline }
40
41
 
41
42
  def self.new_from_params(params = {})
42
- self.new(params).tap do |targeting|
43
- targeting.mode = params.fetch(:mode, :immediate).to_sym
44
- targeting.input_type = params.fetch(:input_type, :cronline).to_sym
45
- targeting.end_time_limited = params[:end_time_limited] == "true"
46
- targeting.start_at_raw = Time.now.strftime(TIME_FORMAT)
43
+ self.new(params.except(:mode, :start_at, :start_before)).tap do |triggering|
44
+ triggering.mode = params.fetch(:mode, :immediate).to_sym
45
+ triggering.input_type = params.fetch(:input_type, :daily).to_sym
46
+ triggering.end_time_limited = params[:end_time_limited] == "true"
47
+ triggering.start_at_raw ||= Time.now.strftime(TIME_FORMAT)
47
48
  end
48
49
  end
49
50
 
@@ -1,2 +1,2 @@
1
- f = Feature.find_or_create_by_name('Dynflow')
1
+ f = Feature.where(:name => 'Dynflow').first_or_create
2
2
  raise "Unable to create proxy feature: #{format_errors f}" if f.nil? || f.errors.any?
@@ -4,7 +4,7 @@ Bookmark.without_auditing do
4
4
  { :name => "failed", :query => "state = paused or result = error or result = warning" }
5
5
 
6
6
  ].each do |item|
7
- next if Bookmark.find_by_name(item[:name])
7
+ next if Bookmark.where(:name => item[:name]).first
8
8
  next if audit_modified? Bookmark, item[:name]
9
9
  b = Bookmark.create({:controller => "foreman_tasks_tasks", :public => true}.merge(item))
10
10
  raise "Unable to create bookmark: #{format_errors b}" if b.nil? || b.errors.any?
data/lib/foreman_tasks.rb CHANGED
@@ -27,7 +27,7 @@ module ForemanTasks
27
27
  end),
28
28
  (on ::Dynflow::World::Triggered.(execution_plan_id: ~any, future: ~any) do |id, finished|
29
29
  finished.wait if async == false
30
- ForemanTasks::Task::DynflowTask.find_by_external_id!(id)
30
+ ForemanTasks::Task::DynflowTask.where(:external_id => id).first!
31
31
  end)
32
32
  end
33
33
 
@@ -43,6 +43,6 @@ module ForemanTasks
43
43
 
44
44
  def self.delay(action, delay_options, *args)
45
45
  result = dynflow.world.delay action, delay_options, *args
46
- ForemanTasks::Task::DynflowTask.find_by_external_id!(result.id)
46
+ ForemanTasks::Task::DynflowTask.where(:external_id => result.id).first!
47
47
  end
48
48
  end
@@ -4,7 +4,7 @@ module ForemanTasks
4
4
  def initialize(env)
5
5
  @rack_request = Rack::Request.new(env)
6
6
  @user_id, @expires_at = @rack_request.session.values_at('user', 'expires_at')
7
- @user = User.find_by_id(@user_id) unless session_expired?
7
+ @user = User.where(:id => @user_id).first unless session_expired?
8
8
  end
9
9
 
10
10
  def allow?
@@ -31,15 +31,15 @@ module ForemanTasks
31
31
  raise Foreman::Exception.new('Plan is delayed but the delay record is missing') if delayed_plan.nil?
32
32
  # TODO: Rework this
33
33
  delayed_plan = ::Dynflow::DelayedPlan.new_from_hash(ForemanTasks.dynflow.world, delayed_plan)
34
- task = ::ForemanTasks::Task::DynflowTask.find_by_external_id(execution_plan_id)
34
+ task = ::ForemanTasks::Task::DynflowTask.where(:external_id => execution_plan_id).first
35
35
  task.update_from_dynflow(data.merge(:start_at => delayed_plan.start_at,
36
36
  :start_before => delayed_plan.start_before))
37
37
  when :planning
38
- task = ::ForemanTasks::Task::DynflowTask.find_by_external_id(execution_plan_id)
38
+ task = ::ForemanTasks::Task::DynflowTask.where(:external_id => execution_plan_id).first
39
39
  task.update_from_dynflow(data)
40
40
  Lock.owner!(::User.current, task.id) if ::User.current
41
41
  else
42
- if task = ::ForemanTasks::Task::DynflowTask.find_by_external_id(execution_plan_id)
42
+ if task = ::ForemanTasks::Task::DynflowTask.where(:external_id => execution_plan_id).first
43
43
  unless task.state.to_s == data[:state].to_s
44
44
  task.update_from_dynflow(data)
45
45
  end
@@ -26,11 +26,11 @@ module ForemanTasks
26
26
  permission :edit_foreman_tasks, {:'foreman_tasks/tasks' => [:resume, :unlock, :force_unlock, :cancel_step, :cancel],
27
27
  :'foreman_tasks/api/tasks' => [:bulk_resume]}, :resource_type => ForemanTasks::Task.name
28
28
 
29
- permission :create_recurring_logics, { }, :resource_type => ForemanTasks::RecurringLogic
29
+ permission :create_recurring_logics, { }, :resource_type => ForemanTasks::RecurringLogic.name
30
30
 
31
- permission :view_recurring_logics, { :'foreman_tasks/recurring_logics' => [:index, :show] }, :resource_type => ForemanTasks::RecurringLogic
31
+ permission :view_recurring_logics, { :'foreman_tasks/recurring_logics' => [:index, :show] }, :resource_type => ForemanTasks::RecurringLogic.name
32
32
 
33
- permission :edit_recurring_logics, { :'foreman_tasks/recurring_logics' => [:cancel] }, :resource_type => ForemanTasks::RecurringLogic
33
+ permission :edit_recurring_logics, { :'foreman_tasks/recurring_logics' => [:cancel] }, :resource_type => ForemanTasks::RecurringLogic.name
34
34
 
35
35
  end
36
36
 
@@ -70,7 +70,9 @@ module ForemanTasks
70
70
  end
71
71
 
72
72
  initializer "foreman_tasks.load_app_instance_data" do |app|
73
- app.config.paths['db/migrate'] += ForemanTasks::Engine.paths['db/migrate'].existent
73
+ ForemanTasks::Engine.paths['db/migrate'].existent.each do |path|
74
+ app.config.paths['db/migrate'] << path
75
+ end
74
76
  end
75
77
 
76
78
  # to enable async Foreman operations using Dynflow
@@ -1,3 +1,3 @@
1
1
  module ForemanTasks
2
- VERSION = "0.7.7"
2
+ VERSION = "0.7.8"
3
3
  end
@@ -29,7 +29,7 @@ module ForemanTasks
29
29
  triggered = ForemanTasks.trigger(Support::DummyProxyAction, Support::DummyProxyAction.proxy, 'foo' => 'bar')
30
30
  Support::DummyProxyAction.proxy.task_triggered.wait(5)
31
31
 
32
- task = ForemanTasks::Task.find_by_external_id(triggered.id)
32
+ task = ForemanTasks::Task.where(:external_id => triggered.id).first
33
33
  task.state.must_equal 'running'
34
34
  task.result.must_equal 'pending'
35
35
 
@@ -40,7 +40,7 @@ module ForemanTasks
40
40
  triggered = ForemanTasks.trigger(ParentAction, user)
41
41
  raise triggered.error if triggered.respond_to?(:error)
42
42
  triggered.finished.wait(2)
43
- ForemanTasks::Task.find_by_external_id(triggered.id)
43
+ ForemanTasks::Task.where(:external_id => triggered.id).first
44
44
  end
45
45
 
46
46
  specify "the sub-plan stores the information about its parent" do
@@ -36,6 +36,22 @@ class RecurringLogicsTest < ActiveSupport::TestCase
36
36
  parser.next_occurrence_time(reference_time).must_equal Time.new(year, month + 1, 5)
37
37
  end
38
38
 
39
+ it 'creates correct cronline hash' do
40
+ minutes = '52'
41
+ hours = '12'
42
+ days = '11'
43
+ days_of_week = { '1' => '1', '2' => '0', '3' => '0', '4' => '1', '5' => '0', '6' => '1', '7' => '0' }
44
+ time_hash = { '0' => '2015', '1' => '12', '2' => '11', '3' => hours, '4' => minutes }
45
+ expected_result_hourly = { :minutes => minutes }
46
+ expected_result_daily = { :minutes => minutes, :hours => hours }
47
+ expected_result_weekly = { :minutes => minutes, :hours => hours, :days_of_week => '1,4,6' }
48
+ expected_result_monthly = { :minutes => minutes, :hours => hours, :days => days }
49
+ ForemanTasks::RecurringLogic.cronline_hash(:hourly, time_hash, days_of_week).must_equal expected_result_hourly
50
+ ForemanTasks::RecurringLogic.cronline_hash(:daily, time_hash, days_of_week).must_equal expected_result_daily
51
+ ForemanTasks::RecurringLogic.cronline_hash(:weekly, time_hash, days_of_week).must_equal expected_result_weekly
52
+ ForemanTasks::RecurringLogic.cronline_hash(:monthly, time_hash, days_of_week).must_equal expected_result_monthly
53
+ end
54
+
39
55
  it 'can have limited number of repeats' do
40
56
  parser = ForemanTasks::RecurringLogic.new_from_cronline('* * * * *')
41
57
  parser.state = 'active'
@@ -51,7 +51,7 @@ module ForemanTasks
51
51
  triggered = ForemanTasks.trigger(action_class, *args)
52
52
  raise triggered.error if triggered.respond_to?(:error)
53
53
  triggered.finished.wait
54
- ForemanTasks::Task.find_by_external_id(triggered.id)
54
+ ForemanTasks::Task.where(:external_id => triggered.id).first
55
55
  end
56
56
  end
57
57
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman-tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.7
4
+ version: 0.7.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-01 00:00:00.000000000 Z
11
+ date: 2015-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dynflow