foreman-tasks 0.8.6 → 0.9.0
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 +4 -4
- data/.rubocop.yml +35 -0
- data/.rubocop_todo.yml +138 -0
- data/app/controllers/foreman_tasks/api/recurring_logics_controller.rb +3 -4
- data/app/controllers/foreman_tasks/api/tasks_controller.rb +56 -72
- data/app/controllers/foreman_tasks/concerns/hosts_controller_extension.rb +2 -4
- data/app/controllers/foreman_tasks/recurring_logics_controller.rb +2 -5
- data/app/controllers/foreman_tasks/tasks_controller.rb +7 -8
- data/app/helpers/foreman_tasks/foreman_tasks_helper.rb +44 -46
- data/app/helpers/foreman_tasks/tasks_helper.rb +1 -1
- data/app/lib/actions/action_with_sub_plans.rb +6 -8
- data/app/lib/actions/base.rb +6 -7
- data/app/lib/actions/bulk_action.rb +13 -9
- data/app/lib/actions/entry_action.rb +1 -3
- data/app/lib/actions/foreman/host/import_facts.rb +2 -5
- data/app/lib/actions/foreman/puppetclass/import.rb +1 -1
- data/app/lib/actions/helpers/args_serialization.rb +0 -1
- data/app/lib/actions/helpers/humanizer.rb +16 -21
- data/app/lib/actions/helpers/with_continuous_output.rb +0 -1
- data/app/lib/actions/helpers/with_delegated_action.rb +2 -2
- data/app/lib/actions/middleware/inherit_task_groups.rb +3 -5
- data/app/lib/actions/middleware/keep_current_user.rb +0 -3
- data/app/lib/actions/middleware/recurring_logic.rb +0 -1
- data/app/lib/actions/proxy_action.rb +8 -8
- data/app/lib/actions/serializers/active_record_serializer.rb +0 -3
- data/app/lib/proxy_api/foreman_dynflow/dynflow_proxy.rb +3 -3
- data/app/models/foreman_tasks/concerns/action_subject.rb +4 -6
- data/app/models/foreman_tasks/concerns/action_triggering.rb +20 -33
- data/app/models/foreman_tasks/concerns/host_action_subject.rb +5 -5
- data/app/models/foreman_tasks/lock.rb +29 -37
- data/app/models/foreman_tasks/recurring_logic.rb +23 -24
- data/app/models/foreman_tasks/task.rb +65 -39
- data/app/models/foreman_tasks/task/dynflow_task.rb +23 -24
- data/app/models/foreman_tasks/task/status_explicator.rb +3 -3
- data/app/models/foreman_tasks/task/summarizer.rb +3 -3
- data/app/models/foreman_tasks/task_group.rb +0 -2
- data/app/models/foreman_tasks/task_group_member.rb +0 -2
- data/app/models/foreman_tasks/task_groups/recurring_logic_task_group.rb +1 -4
- data/app/models/foreman_tasks/triggering.rb +19 -19
- data/app/models/setting/foreman_tasks.rb +8 -11
- data/app/services/foreman_tasks/proxy_selector.rb +4 -5
- data/app/views/foreman_tasks/tasks/_details.html.erb +1 -1
- data/bin/dynflow-executor +1 -1
- data/bin/foreman-tasks +1 -1
- data/config/routes.rb +1 -1
- data/db/migrate/20150814204140_add_task_type_value_index.rb +1 -1
- data/db/migrate/20160924213030_change_tasks_widget_names.rb +8 -8
- data/db/seeds.d/61-foreman_tasks_bookmarks.rb +3 -3
- data/deploy/foreman-tasks.sysconfig +6 -0
- data/extra/dynflow-debug.sh +12 -0
- data/foreman-tasks.gemspec +1 -1
- data/lib/foreman_tasks.rb +3 -3
- data/lib/foreman_tasks/authorizer_ext.rb +1 -1
- data/lib/foreman_tasks/cleaner.rb +14 -16
- data/lib/foreman_tasks/dynflow.rb +11 -9
- data/lib/foreman_tasks/dynflow/configuration.rb +8 -10
- data/lib/foreman_tasks/dynflow/console_authorizer.rb +4 -5
- data/lib/foreman_tasks/dynflow/daemon.rb +17 -19
- data/lib/foreman_tasks/dynflow/persistence.rb +5 -8
- data/lib/foreman_tasks/engine.rb +30 -31
- data/lib/foreman_tasks/task_error.rb +1 -3
- data/lib/foreman_tasks/tasks/cleanup.rake +7 -19
- data/lib/foreman_tasks/tasks/dynflow.rake +1 -1
- data/lib/foreman_tasks/tasks/export_tasks.rake +51 -59
- data/lib/foreman_tasks/test_extensions.rb +1 -1
- data/lib/foreman_tasks/version.rb +1 -1
- data/lib/tasks/gettext.rake +10 -7
- data/locale/action_names.rb +3 -6
- data/locale/en/foreman_tasks.po +189 -177
- data/locale/foreman_tasks.pot +177 -137
- data/test/controllers/api/recurring_logics_controller_test.rb +3 -5
- data/test/controllers/api/tasks_controller_test.rb +5 -7
- data/test/factories/task_factory.rb +8 -8
- data/test/factories/triggering_factory.rb +2 -3
- data/test/helpers/foreman_tasks/tasks_helper_test.rb +11 -11
- data/test/support/dummy_proxy_action.rb +3 -4
- data/test/unit/actions/action_with_sub_plans_test.rb +5 -6
- data/test/unit/actions/proxy_action_test.rb +5 -8
- data/test/unit/cleaner_test.rb +11 -12
- data/test/unit/dynflow_console_authorizer_test.rb +4 -4
- data/test/unit/proxy_selector_test.rb +3 -3
- data/test/unit/recurring_logic_test.rb +19 -17
- data/test/unit/task_groups_test.rb +3 -4
- data/test/unit/task_test.rb +72 -5
- data/test/unit/triggering_test.rb +0 -1
- metadata +7 -6
- data/app/controllers/foreman_tasks/concerns/environments_extension.rb +0 -24
@@ -1,8 +1,8 @@
|
|
1
1
|
module ForemanTasks
|
2
2
|
class Task::DynflowTask < ForemanTasks::Task
|
3
|
-
|
4
3
|
include Algebrick::TypeCheck
|
5
4
|
|
5
|
+
delegate :cancellable?, :progress, to: :execution_plan
|
6
6
|
scope :for_action, ->(action_class) { where(label: action_class.name) }
|
7
7
|
|
8
8
|
def update_from_dynflow(data)
|
@@ -11,7 +11,7 @@ module ForemanTasks
|
|
11
11
|
self.started_at = utc_zone.parse(data[:started_at]) unless data[:started_at].nil?
|
12
12
|
self.ended_at = utc_zone.parse(data[:ended_at]) unless data[:ended_at].nil?
|
13
13
|
self.state = data[:state].to_s
|
14
|
-
self.result = data[:result]
|
14
|
+
self.result = map_result(data[:result])
|
15
15
|
self.start_at = utc_zone.parse(data[:start_at]) if data[:start_at]
|
16
16
|
self.start_before = utc_zone.parse(data[:start_before]) if data[:start_before]
|
17
17
|
self.parent_task_id ||= begin
|
@@ -20,13 +20,9 @@ module ForemanTasks
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
self.label ||= main_action.class.name
|
23
|
-
changes
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
def cancellable?
|
29
|
-
execution_plan.cancellable?
|
23
|
+
changes = self.changes
|
24
|
+
save!
|
25
|
+
changes
|
30
26
|
end
|
31
27
|
|
32
28
|
def cancel
|
@@ -41,10 +37,6 @@ module ForemanTasks
|
|
41
37
|
action.is_a?(::Dynflow::Action::Cancellable)
|
42
38
|
end
|
43
39
|
|
44
|
-
def progress
|
45
|
-
execution_plan.progress
|
46
|
-
end
|
47
|
-
|
48
40
|
def execution_plan
|
49
41
|
@execution_plan ||= ForemanTasks.dynflow.world.persistence.load_execution_plan(external_id)
|
50
42
|
end
|
@@ -73,9 +65,7 @@ module ForemanTasks
|
|
73
65
|
end
|
74
66
|
|
75
67
|
def cli_example
|
76
|
-
if main_action.respond_to?(:cli_example)
|
77
|
-
main_action.cli_example
|
78
|
-
end
|
68
|
+
main_action.cli_example if main_action.respond_to?(:cli_example)
|
79
69
|
end
|
80
70
|
|
81
71
|
def main_action
|
@@ -104,30 +94,39 @@ module ForemanTasks
|
|
104
94
|
def self.consistency_check
|
105
95
|
fixed_count = 0
|
106
96
|
logger = Foreman::Logging.logger('foreman-tasks')
|
107
|
-
|
97
|
+
running.each do |task|
|
108
98
|
begin
|
109
99
|
changes = task.update_from_dynflow(task.execution_plan.to_hash)
|
110
100
|
unless changes.empty?
|
111
101
|
fixed_count += 1
|
112
|
-
logger.warn(
|
102
|
+
logger.warn('Task %s updated at consistency check: %s' % [task.id, changes.inspect])
|
113
103
|
end
|
114
104
|
rescue => e
|
115
105
|
Foreman::Logging.exception("Failed at consistency check for task #{task.id}", e, :logger => 'foreman-tasks')
|
116
106
|
end
|
117
107
|
end
|
118
|
-
|
108
|
+
fixed_count
|
119
109
|
end
|
120
110
|
|
121
111
|
def self.new_for_execution_plan(execution_plan_id, data)
|
122
|
-
|
123
|
-
|
124
|
-
|
112
|
+
new(:external_id => execution_plan_id,
|
113
|
+
:state => data[:state].to_s,
|
114
|
+
:result => data[:result].to_s)
|
125
115
|
end
|
126
116
|
|
127
|
-
private
|
128
|
-
|
129
117
|
def self.model_name
|
130
118
|
superclass.model_name
|
131
119
|
end
|
120
|
+
|
121
|
+
private
|
122
|
+
|
123
|
+
def map_result(result)
|
124
|
+
result = :cancelled if result == :error && cancelled?
|
125
|
+
result.to_s
|
126
|
+
end
|
127
|
+
|
128
|
+
def cancelled?
|
129
|
+
execution_plan.errors.map(&:exception).any? { |exception| exception.class == ::ForemanTasks::Task::TaskCancelledException }
|
130
|
+
end
|
132
131
|
end
|
133
132
|
end
|
@@ -3,9 +3,9 @@ module ForemanTasks
|
|
3
3
|
ANY = 1
|
4
4
|
ERRONEOUS_STATUSES = [
|
5
5
|
{ :state => 'paused', :result => ANY },
|
6
|
-
{ :state => ANY, :result => 'error'},
|
7
|
-
{ :state => ANY, :result => 'warning'}
|
8
|
-
]
|
6
|
+
{ :state => ANY, :result => 'error' },
|
7
|
+
{ :state => ANY, :result => 'warning' }
|
8
|
+
].freeze
|
9
9
|
def is_erroneous(task)
|
10
10
|
remainder = ERRONEOUS_STATUSES.select do |status|
|
11
11
|
(status[:state] == ANY || status[:state] == task.state) &&
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module ForemanTasks
|
2
2
|
class Task::Summarizer
|
3
|
-
def summarize_by_status(since=nil)
|
3
|
+
def summarize_by_status(since = nil)
|
4
4
|
result = ::ForemanTasks::Task.select('count(state) AS count, state, result').group(:state, :result).order(:state)
|
5
5
|
result = result.where('started_at > ?', since) if since
|
6
6
|
result
|
7
7
|
end
|
8
8
|
|
9
|
-
def latest_tasks_in_errors_warning(limit=5)
|
10
|
-
::ForemanTasks::Task.where('result in (?)',
|
9
|
+
def latest_tasks_in_errors_warning(limit = 5)
|
10
|
+
::ForemanTasks::Task.where('result in (?)', %w(error warning)).order('started_at DESC').limit(limit)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -1,16 +1,13 @@
|
|
1
1
|
module ForemanTasks
|
2
2
|
module TaskGroups
|
3
3
|
class RecurringLogicTaskGroup < ::ForemanTasks::TaskGroup
|
4
|
-
|
5
4
|
has_one :recurring_logic, :foreign_key => :task_group_id
|
6
5
|
|
7
|
-
|
6
|
+
alias resource recurring_logic
|
8
7
|
|
9
8
|
def resource_name
|
10
9
|
N_('Recurring logic')
|
11
10
|
end
|
12
|
-
|
13
11
|
end
|
14
12
|
end
|
15
13
|
end
|
16
|
-
|
@@ -2,8 +2,8 @@ module ForemanTasks
|
|
2
2
|
class Triggering < ActiveRecord::Base
|
3
3
|
PARAMS = [:start_at_raw, :start_before_raw, :max_iteration, :input_type,
|
4
4
|
:cronline, :days, :days_of_week, :time, :end_time_limited,
|
5
|
-
:end_time]
|
6
|
-
attr_accessor
|
5
|
+
:end_time].freeze
|
6
|
+
attr_accessor(*PARAMS)
|
7
7
|
|
8
8
|
before_save do
|
9
9
|
if future?
|
@@ -14,34 +14,34 @@ module ForemanTasks
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
ALLOWED_MODES = [:immediate, :future, :recurring]
|
18
|
-
ALLOWED_INPUT_TYPES = [:cronline, :monthly, :weekly, :daily, :hourly]
|
17
|
+
ALLOWED_MODES = [:immediate, :future, :recurring].freeze
|
18
|
+
ALLOWED_INPUT_TYPES = [:cronline, :monthly, :weekly, :daily, :hourly].freeze
|
19
19
|
|
20
|
-
TIME_FORMAT =
|
20
|
+
TIME_FORMAT = '%Y-%m-%d %H:%M'.freeze
|
21
21
|
TIME_REGEXP = /\A\d{4}-\d{2}-\d{2} \d{2}:\d{2}\Z/
|
22
22
|
DAYS_REGEXP = /\A(\s*\d{1,2}\s*)(,\s*\d{1,2}\s*)*\Z/
|
23
23
|
|
24
24
|
has_one :recurring_logic, :foreign_key => :triggering_id
|
25
25
|
|
26
26
|
validates :mode, :inclusion => { :in => ALLOWED_MODES,
|
27
|
-
:message => _(
|
27
|
+
:message => _('%{value} is not allowed triggering mode') }
|
28
28
|
validates :input_type, :if => :recurring?,
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
29
|
+
:inclusion => { :in => ALLOWED_INPUT_TYPES,
|
30
|
+
:message => _('%{value} is not allowed input type') }
|
31
|
+
validates :start_at_raw, format: { :with => TIME_REGEXP, :if => :future?,
|
32
|
+
:message => _('%{value} is wrong format') }
|
33
|
+
validates :start_before_raw, format: { :with => TIME_REGEXP, :if => :future?,
|
34
|
+
:message => _('%{value} is wrong format'), :allow_blank => true }
|
35
|
+
validates :days, format: { :with => DAYS_REGEXP,
|
36
|
+
:if => proc { |t| t.recurring? && t.input_type == :monthly } }
|
37
37
|
validate :can_start_recurring, :if => :recurring?
|
38
38
|
validate :can_start_future, :if => :future?
|
39
39
|
|
40
40
|
def self.new_from_params(params = {})
|
41
|
-
|
41
|
+
new(params.except(:mode, :start_at, :start_before)).tap do |triggering|
|
42
42
|
triggering.mode = params.fetch(:mode, :immediate).to_sym
|
43
43
|
triggering.input_type = params.fetch(:input_type, :daily).to_sym
|
44
|
-
triggering.end_time_limited = params[:end_time_limited] ==
|
44
|
+
triggering.end_time_limited = params[:end_time_limited] == 'true'
|
45
45
|
triggering.start_at_raw ||= Time.zone.now.strftime(TIME_FORMAT)
|
46
46
|
triggering.recurring_logic = ::ForemanTasks::RecurringLogic.new_from_triggering(triggering) if triggering.recurring?
|
47
47
|
end
|
@@ -102,14 +102,14 @@ module ForemanTasks
|
|
102
102
|
private
|
103
103
|
|
104
104
|
def can_start_recurring
|
105
|
-
|
106
|
-
|
105
|
+
errors.add(:input_type, _('No task could be started')) unless recurring_logic.valid?
|
106
|
+
errors.add(:cronline, _('%s is not valid format of cron line') % cronline) unless recurring_logic.valid_cronline?
|
107
107
|
end
|
108
108
|
|
109
109
|
def can_start_future
|
110
110
|
parse_start_before!
|
111
111
|
parse_start_at!
|
112
|
-
|
112
|
+
errors.add(:start_before_raw, _('The task could not be started')) if !start_before.nil? && start_before < start_at
|
113
113
|
end
|
114
114
|
end
|
115
115
|
end
|
@@ -1,22 +1,19 @@
|
|
1
1
|
class Setting::ForemanTasks < Setting
|
2
|
-
|
3
2
|
def self.load_defaults
|
4
3
|
# Check the table exists
|
5
4
|
return unless super
|
6
5
|
|
7
|
-
|
6
|
+
transaction do
|
8
7
|
[
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
].each { |s|
|
8
|
+
set('dynflow_allow_dangerous_actions', N_('Allow unlocking actions which can have dangerous consequences.'), false),
|
9
|
+
set('dynflow_enable_console', N_('Enable the dynflow console (/foreman_tasks/dynflow) for debugging'), true),
|
10
|
+
set('dynflow_console_require_auth', N_('Require user to be authenticated as user with admin rights when accessing dynflow console'), true),
|
11
|
+
set('foreman_tasks_proxy_action_retry_count', N_('Number of attempts to start a task on the smart proxy before failing'), 4),
|
12
|
+
set('foreman_tasks_proxy_action_retry_interval', N_('Time in seconds between retries'), 15),
|
13
|
+
set('foreman_tasks_proxy_action_start_timeout', N_('Time in second during which a task has to be started on the proxy'), 60)
|
14
|
+
].each { |s| create! s.update(:category => 'Setting::ForemanTasks') }
|
16
15
|
end
|
17
16
|
|
18
17
|
true
|
19
|
-
|
20
18
|
end
|
21
|
-
|
22
19
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module ForemanTasks
|
2
2
|
class ProxySelector
|
3
|
-
|
4
3
|
attr_reader :offline
|
5
4
|
|
6
5
|
def initialize
|
@@ -12,7 +11,7 @@ module ForemanTasks
|
|
12
11
|
[:subnet, :fallback, :global]
|
13
12
|
end
|
14
13
|
|
15
|
-
def available_proxies(*
|
14
|
+
def available_proxies(*_args)
|
16
15
|
raise NotImplementedError
|
17
16
|
end
|
18
17
|
|
@@ -34,8 +33,8 @@ module ForemanTasks
|
|
34
33
|
def select_by_jobs_count(proxies)
|
35
34
|
exclude = @tasks.keys + @offline
|
36
35
|
@tasks.merge!(get_counts(proxies - exclude))
|
37
|
-
next_proxy = @tasks.select { |proxy, _| proxies.include?(proxy) }
|
38
|
-
|
36
|
+
next_proxy = @tasks.select { |proxy, _| proxies.include?(proxy) }
|
37
|
+
.min_by { |_, job_count| job_count }.try(:first)
|
39
38
|
@tasks[next_proxy] += 1 if next_proxy.present?
|
40
39
|
next_proxy
|
41
40
|
end
|
@@ -43,7 +42,7 @@ module ForemanTasks
|
|
43
42
|
private
|
44
43
|
|
45
44
|
def get_counts(proxies)
|
46
|
-
proxies.
|
45
|
+
proxies.each_with_object({}) do |proxy, result|
|
47
46
|
begin
|
48
47
|
proxy_api = ProxyAPI::ForemanDynflow::DynflowProxy.new(:url => proxy.url)
|
49
48
|
result[proxy] = proxy_api.tasks_count('running')
|
data/bin/dynflow-executor
CHANGED
data/bin/foreman-tasks
CHANGED
data/config/routes.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
class ChangeTasksWidgetNames < ActiveRecord::Migration
|
2
2
|
def up
|
3
|
-
Widget.where(:name => 'Tasks Status table')
|
4
|
-
|
5
|
-
Widget.where(:name => 'Tasks in Error/Warning')
|
6
|
-
|
3
|
+
Widget.where(:name => 'Tasks Status table')\
|
4
|
+
.update_all(:name => 'Task Status')
|
5
|
+
Widget.where(:name => 'Tasks in Error/Warning')\
|
6
|
+
.update_all(:name => 'Latest Warning/Error Tasks')
|
7
7
|
end
|
8
8
|
|
9
9
|
def down
|
10
|
-
Widget.where(:name => 'Task Status')
|
11
|
-
|
12
|
-
Widget.where(:name => 'Latest Warning/Error Tasks')
|
13
|
-
|
10
|
+
Widget.where(:name => 'Task Status')\
|
11
|
+
.update_all(:name => 'Tasks Status table')
|
12
|
+
Widget.where(:name => 'Latest Warning/Error Tasks')\
|
13
|
+
.update_all(:name => 'Tasks in Error/Warning')
|
14
14
|
end
|
15
15
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
Bookmark.without_auditing do
|
2
2
|
[
|
3
|
-
{ :name =>
|
4
|
-
{ :name =>
|
3
|
+
{ :name => 'running', :query => 'state = running' },
|
4
|
+
{ :name => 'failed', :query => 'state = paused or result = error or result = warning' }
|
5
5
|
|
6
6
|
].each do |item|
|
7
7
|
next if Bookmark.where(:name => item[:name]).first
|
8
8
|
next if audit_modified? Bookmark, item[:name]
|
9
|
-
b = Bookmark.create({:controller =>
|
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?
|
11
11
|
end
|
12
12
|
end
|
@@ -6,3 +6,9 @@ FOREMAN_LOGGING=warn
|
|
6
6
|
FOREMAN_LOGGING_SQL=warn
|
7
7
|
FOREMAN_TASK_PARAMS="-p foreman"
|
8
8
|
FOREMAN_LOG_DIR=/var/log/foreman
|
9
|
+
|
10
|
+
RUBY_GC_MALLOC_LIMIT=4000100
|
11
|
+
RUBY_GC_MALLOC_LIMIT_MAX=16000100
|
12
|
+
RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR=1.1
|
13
|
+
RUBY_GC_OLDMALLOC_LIMIT=16000100
|
14
|
+
RUBY_GC_OLDMALLOC_LIMIT_MAX=16000100
|
data/extra/dynflow-debug.sh
CHANGED
@@ -3,5 +3,17 @@
|
|
3
3
|
# This file provides additional debug information for foreman-debug tool and is
|
4
4
|
# symlinked as /usr/share/foreman/script/foreman-debug.d/60-dynflow_debug
|
5
5
|
|
6
|
+
export_csv() {
|
7
|
+
echo "COPY ($1) TO STDOUT WITH CSV;" | su - postgres -c '/usr/bin/psql -d foreman' > $2
|
8
|
+
}
|
9
|
+
|
6
10
|
add_files /var/log/foreman/dynflow_executor*.log*
|
7
11
|
add_files /var/log/foreman/dynflow_executor*.output*
|
12
|
+
|
13
|
+
# Foreman Tasks fast export (for HTML version use foreman-rake foreman_tasks:export_tasks)
|
14
|
+
export_csv "select dynflow_execution_plans.* from foreman_tasks_tasks join dynflow_execution_plans on (foreman_tasks_tasks.external_id = dynflow_execution_plans.uuid) where foreman_tasks_tasks.started_at > 'now'::timestamp - '${DYNFLOW_EXPORT_MONTHS:-6} months'::interval" "$DIR/dynflow_execution_plans.csv"
|
15
|
+
export_csv "select dynflow_actions.* from foreman_tasks_tasks join dynflow_actions on (foreman_tasks_tasks.external_id = dynflow_actions.execution_plan_uuid) where foreman_tasks_tasks.started_at > 'now'::timestamp - '${DYNFLOW_EXPORT_MONTHS:-6} months'::interval" "$DIR/dynflow_actions.csv"
|
16
|
+
export_csv "select dynflow_steps.* from foreman_tasks_tasks join dynflow_steps on (foreman_tasks_tasks.external_id = dynflow_steps.execution_plan_uuid) where foreman_tasks_tasks.started_at > 'now'::timestamp - '${DYNFLOW_EXPORT_MONTHS:-6} months'::interval" "$DIR/dynflow_steps.csv"
|
17
|
+
export_csv "select * from dynflow_schema_info" "$DIR/dynflow_schema_info.csv"
|
18
|
+
export_csv "select * from foreman_tasks_tasks" "$DIR/foreman_tasks_tasks.csv"
|
19
|
+
|
data/foreman-tasks.gemspec
CHANGED
@@ -29,7 +29,7 @@ DESC
|
|
29
29
|
s.extra_rdoc_files = Dir['README*', 'LICENSE']
|
30
30
|
|
31
31
|
s.add_dependency "foreman-tasks-core"
|
32
|
-
s.add_dependency "dynflow", '~> 0.8.
|
32
|
+
s.add_dependency "dynflow", '~> 0.8.22'
|
33
33
|
s.add_dependency "sequel" # for Dynflow process persistence
|
34
34
|
s.add_dependency "sinatra" # for Dynflow web console
|
35
35
|
s.add_dependency "daemons" # for running remote executor
|