foreman_remote_execution 1.4.1 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +11 -9
- data/.rubocop_todo.yml +146 -116
- data/app/controllers/api/v2/job_invocations_controller.rb +6 -1
- data/app/controllers/api/v2/job_templates_controller.rb +0 -1
- data/app/controllers/job_invocations_controller.rb +6 -1
- data/app/lib/actions/remote_execution/run_host_job.rb +1 -1
- data/app/models/concerns/foreman_remote_execution/errors_flattener.rb +3 -0
- data/app/models/concerns/foreman_remote_execution/host_extensions.rb +1 -1
- data/app/models/concerns/foreman_remote_execution/subnet_extensions.rb +1 -1
- data/app/models/foreign_input_set.rb +1 -1
- data/app/models/job_invocation.rb +1 -1
- data/app/models/job_invocation_composer.rb +2 -2
- data/app/models/job_invocation_task_group.rb +1 -1
- data/app/models/job_template.rb +3 -3
- data/app/models/job_template_effective_user.rb +1 -1
- data/app/models/remote_execution_feature.rb +1 -1
- data/app/models/target_remote_execution_proxy.rb +1 -1
- data/app/models/targeting.rb +2 -2
- data/app/models/targeting_host.rb +1 -1
- data/app/models/template_input.rb +1 -1
- data/app/models/template_invocation.rb +1 -1
- data/app/models/template_invocation_input_value.rb +1 -1
- data/db/migrate/20150612121541_add_job_template_to_template.rb +1 -1
- data/db/migrate/20150616080015_create_template_input.rb +1 -1
- data/db/migrate/20150708133241_add_targeting.rb +1 -1
- data/db/migrate/20150708133242_add_invocation.rb +1 -1
- data/db/migrate/20150708133305_add_template_invocation.rb +1 -1
- data/db/migrate/20150812110800_add_resolved_at_to_targeting.rb +1 -1
- data/db/migrate/20150812145900_add_last_task_id_to_job_invocation.rb +1 -1
- data/db/migrate/20150826191632_create_target_remote_execution_proxies.rb +1 -1
- data/db/migrate/20150827144500_change_targeting_search_query_type.rb +1 -1
- data/db/migrate/20150827152730_add_options_to_template_input.rb +1 -1
- data/db/migrate/20150903192731_add_execution_to_interface.rb +2 -2
- data/db/migrate/20150923125825_add_job_invocation_task_group.rb +1 -1
- data/db/migrate/20151013135415_add_pub_key_to_smart_proxy.rb +1 -1
- data/db/migrate/20151022105508_rename_last_task_id_column.rb +1 -1
- data/db/migrate/20151116105412_add_triggering_to_job_invocation.rb +1 -1
- data/db/migrate/20151120171100_add_effective_user_to_template_invocation.rb +1 -1
- data/db/migrate/20151124162300_create_job_template_effective_users.rb +1 -1
- data/db/migrate/20151203100824_add_description_to_job_invocation.rb +1 -1
- data/db/migrate/20151215114631_add_host_id_to_template_invocation.rb +2 -2
- data/db/migrate/20151217092555_migrate_to_task_groups.rb +2 -2
- data/db/migrate/20160108134600_create_template_input_sets.rb +1 -1
- data/db/migrate/20160108141144_make_job_name_default_to_something.rb +1 -1
- data/db/migrate/20160111113032_upcase_ssh_feature.rb +2 -2
- data/db/migrate/20160113161916_add_run_host_job_task_id_to_template_invocation.rb +1 -1
- data/db/migrate/20160113162007_expand_all_template_invocations.rb +3 -3
- data/db/migrate/20160114120200_rename_job_categories.rb +1 -1
- data/db/migrate/20160114125628_rename_job_name_to_job_category.rb +1 -1
- data/db/migrate/20160118124600_create_remote_execution_features.rb +1 -1
- data/db/migrate/20160125155108_make_job_template_name_unique.rb +1 -1
- data/db/migrate/20160127134031_add_advanced_to_template_input.rb +1 -1
- data/db/migrate/20160127162711_reword_puppet_template_description.rb +1 -1
- data/db/migrate/20160203104056_add_concurrency_options_to_job_invocation.rb +1 -1
- data/db/migrate/20160926225841_update_template_input_value.rb +1 -1
- data/db/migrate/20170110145641_add_host_action_button_to_remote_execution_feature.rb +1 -1
- data/db/migrate/20170613101039_add_timeout_to_job_templates_and_job_invocations.rb +1 -1
- data/db/migrate/20180110104432_rename_template_invocation_permission.rb +25 -0
- data/db/migrate/20180112125015_fix_taxable_taxonomies_job_template.rb +14 -0
- data/db/seeds.d/90-bookmarks.rb +1 -1
- data/foreman_remote_execution.gemspec +2 -1
- data/lib/foreman_remote_execution/engine.rb +3 -3
- data/lib/foreman_remote_execution/version.rb +1 -1
- data/test/benchmark/run_hosts_job_benchmark.rb +10 -10
- data/test/benchmark/targeting_benchmark.rb +6 -6
- data/test/factories/foreman_remote_execution_factories.rb +14 -14
- data/test/functional/api/v2/foreign_input_sets_controller_test.rb +10 -15
- data/test/functional/api/v2/job_invocations_controller_test.rb +19 -8
- data/test/functional/api/v2/job_templates_controller_test.rb +12 -16
- data/test/functional/api/v2/remote_execution_features_controller_test.rb +3 -4
- data/test/functional/api/v2/template_inputs_controller_test.rb +8 -13
- data/test/test_plugin_helper.rb +4 -4
- data/test/unit/actions/run_hosts_job_test.rb +3 -3
- data/test/unit/concerns/exportable_test.rb +1 -1
- data/test/unit/concerns/foreman_tasks_cleaner_extensions_test.rb +2 -2
- data/test/unit/concerns/host_extensions_test.rb +20 -20
- data/test/unit/concerns/nic_extensions_test.rb +1 -1
- data/test/unit/input_template_renderer_test.rb +86 -86
- data/test/unit/job_invocation_composer_test.rb +17 -16
- data/test/unit/job_invocation_test.rb +10 -10
- data/test/unit/job_template_effective_user_test.rb +2 -2
- data/test/unit/job_template_importer_test.rb +3 -3
- data/test/unit/job_template_test.rb +15 -15
- data/test/unit/remote_execution_feature_test.rb +3 -3
- data/test/unit/remote_execution_provider_test.rb +15 -15
- data/test/unit/targeting_test.rb +3 -3
- data/test/unit/template_input_test.rb +1 -1
- data/test/unit/template_invocation_input_value_test.rb +17 -17
- metadata +19 -77
- data/doc/.gitignore +0 -7
- data/doc/Gemfile +0 -7
- data/doc/Rakefile +0 -41
- data/doc/_config.yml +0 -33
- data/doc/plugins/alert_block.rb +0 -27
- data/doc/plugins/div_tag.rb +0 -24
- data/doc/plugins/graphviz.rb +0 -121
- data/doc/plugins/plantuml.rb +0 -84
- data/doc/plugins/play.rb +0 -13
- data/doc/plugins/tags.rb +0 -137
- data/doc/plugins/toc.rb +0 -19
- data/doc/source/.nojekyll +0 -0
- data/doc/source/404.md +0 -6
- data/doc/source/_includes/footer.html +0 -21
- data/doc/source/_includes/header.html +0 -59
- data/doc/source/_includes/tocify.html +0 -6
- data/doc/source/_layouts/default.html +0 -9
- data/doc/source/_layouts/page.html +0 -25
- data/doc/source/atom.xml +0 -32
- data/doc/source/design/index.md +0 -1322
- data/doc/source/design/wireframes.pdf +0 -0
- data/doc/source/index.md +0 -18
- data/doc/source/static/css/bootstrap-responsive.min.css +0 -9
- data/doc/source/static/css/bootstrap.min.css +0 -866
- data/doc/source/static/css/jquery.tocify.css +0 -128
- data/doc/source/static/css/style.css +0 -285
- data/doc/source/static/css/syntax.css +0 -60
- data/doc/source/static/images/foreman.png +0 -0
- data/doc/source/static/images/glyphicons-halflings-white.png +0 -0
- data/doc/source/static/images/glyphicons-halflings.png +0 -0
- data/doc/source/static/js/bootstrap.min.js +0 -7
- data/doc/source/static/js/jquery-ui-1.9.2.custom.min.js +0 -6
- data/doc/source/static/js/jquery.js +0 -2
- data/doc/source/static/js/jquery.tocify.min.js +0 -3
- data/doc/source/static/js/scroll.js +0 -24
@@ -4,6 +4,7 @@ RemoteExecutionProvider.register(:Mcollective, OpenStruct)
|
|
4
4
|
|
5
5
|
class JobInvocationComposerTest < ActiveSupport::TestCase
|
6
6
|
before do
|
7
|
+
setup_user('create', 'template_invocations')
|
7
8
|
setup_user('view', 'job_templates', 'name ~ trying*')
|
8
9
|
setup_user('create', 'job_templates', 'name ~ trying*')
|
9
10
|
setup_user('view', 'job_invocations')
|
@@ -15,17 +16,17 @@ class JobInvocationComposerTest < ActiveSupport::TestCase
|
|
15
16
|
setup_user('create', 'hosts')
|
16
17
|
end
|
17
18
|
|
18
|
-
let(:trying_job_template_1) {
|
19
|
-
let(:trying_job_template_2) {
|
20
|
-
let(:trying_job_template_3) {
|
21
|
-
let(:unauthorized_job_template_1) {
|
22
|
-
let(:unauthorized_job_template_2) {
|
19
|
+
let(:trying_job_template_1) { FactoryBot.create(:job_template, :job_category => 'trying_job_template_1', :name => 'trying1', :provider_type => 'SSH') }
|
20
|
+
let(:trying_job_template_2) { FactoryBot.create(:job_template, :job_category => 'trying_job_template_2', :name => 'trying2', :provider_type => 'Mcollective') }
|
21
|
+
let(:trying_job_template_3) { FactoryBot.create(:job_template, :job_category => 'trying_job_template_1', :name => 'trying3', :provider_type => 'SSH') }
|
22
|
+
let(:unauthorized_job_template_1) { FactoryBot.create(:job_template, :job_category => 'trying_job_template_1', :name => 'unauth1', :provider_type => 'SSH') }
|
23
|
+
let(:unauthorized_job_template_2) { FactoryBot.create(:job_template, :job_category => 'unauthorized_job_template_2', :name => 'unauth2', :provider_type => 'Ansible') }
|
23
24
|
|
24
25
|
|
25
|
-
let(:input1) {
|
26
|
-
let(:input2) {
|
27
|
-
let(:input3) {
|
28
|
-
let(:unauthorized_input1) {
|
26
|
+
let(:input1) { FactoryBot.create(:template_input, :template => trying_job_template_1, :input_type => 'user') }
|
27
|
+
let(:input2) { FactoryBot.create(:template_input, :template => trying_job_template_3, :input_type => 'user') }
|
28
|
+
let(:input3) { FactoryBot.create(:template_input, :template => trying_job_template_1, :input_type => 'user', :required => true) }
|
29
|
+
let(:unauthorized_input1) { FactoryBot.create(:template_input, :template => unauthorized_job_template_1, :input_type => 'user') }
|
29
30
|
|
30
31
|
let(:ansible_params) { { } }
|
31
32
|
let(:ssh_params) { { } }
|
@@ -140,7 +141,7 @@ class JobInvocationComposerTest < ActiveSupport::TestCase
|
|
140
141
|
|
141
142
|
describe '#templates_for_provider(provider_type)' do
|
142
143
|
it 'returns all templates for a given provider respecting template permissions' do
|
143
|
-
trying_job_template_4 =
|
144
|
+
trying_job_template_4 = FactoryBot.create(:job_template, :job_category => 'trying_job_template_1', :name => 'trying4', :provider_type => 'Ansible')
|
144
145
|
result = composer.templates_for_provider('SSH')
|
145
146
|
result.must_include trying_job_template_1
|
146
147
|
result.must_include trying_job_template_3
|
@@ -161,8 +162,8 @@ class JobInvocationComposerTest < ActiveSupport::TestCase
|
|
161
162
|
end
|
162
163
|
|
163
164
|
context 'extra unavailable templates id were selected' do
|
164
|
-
let(:unauthorized) {
|
165
|
-
let(:mcollective_authorized) {
|
165
|
+
let(:unauthorized) { FactoryBot.create(:job_template, :job_category => 'trying_job_template_1', :name => 'unauth3', :provider_type => 'Ansible') }
|
166
|
+
let(:mcollective_authorized) { FactoryBot.create(:job_template, :job_category => 'trying_job_template_1', :name => 'trying4', :provider_type => 'Mcollective') }
|
166
167
|
let(:ssh_params) { { :job_template_id => trying_job_template_1.id.to_s } }
|
167
168
|
let(:ansible_params) { { :job_template_id => unauthorized.id.to_s } }
|
168
169
|
let(:mcollective_params) { { :job_template_id => mcollective_authorized.id.to_s } }
|
@@ -270,7 +271,7 @@ class JobInvocationComposerTest < ActiveSupport::TestCase
|
|
270
271
|
composer.displayed_search_query.must_be_empty
|
271
272
|
end
|
272
273
|
|
273
|
-
let(:host) {
|
274
|
+
let(:host) { FactoryBot.create(:host) }
|
274
275
|
let(:bookmark) { Bookmark.create!(:query => 'b', :name => 'bookmark', :public => true, :controller => 'hosts') }
|
275
276
|
|
276
277
|
context 'all targetings parameters are present' do
|
@@ -336,7 +337,7 @@ class JobInvocationComposerTest < ActiveSupport::TestCase
|
|
336
337
|
end
|
337
338
|
|
338
339
|
describe '#targeted_hosts_count' do
|
339
|
-
let(:host) {
|
340
|
+
let(:host) { FactoryBot.create(:host) }
|
340
341
|
|
341
342
|
it 'obeys authorization' do
|
342
343
|
composer.stubs(:displayed_search_query => "name = #{host.name}")
|
@@ -402,7 +403,7 @@ class JobInvocationComposerTest < ActiveSupport::TestCase
|
|
402
403
|
end
|
403
404
|
|
404
405
|
describe '#valid?' do
|
405
|
-
let(:host) {
|
406
|
+
let(:host) { FactoryBot.create(:host) }
|
406
407
|
let(:ssh_params) do
|
407
408
|
{ :job_template_id => trying_job_template_1.id.to_s,
|
408
409
|
:job_templates => {
|
@@ -484,7 +485,7 @@ class JobInvocationComposerTest < ActiveSupport::TestCase
|
|
484
485
|
end
|
485
486
|
|
486
487
|
describe '#compose_from_invocation(existing_invocation)' do
|
487
|
-
let(:host) {
|
488
|
+
let(:host) { FactoryBot.create(:host) }
|
488
489
|
let(:ssh_params) do
|
489
490
|
{ :job_template_id => trying_job_template_1.id.to_s,
|
490
491
|
:job_templates => {
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'test_plugin_helper'
|
2
2
|
|
3
3
|
class JobInvocationTest < ActiveSupport::TestCase
|
4
|
-
let(:job_invocation) {
|
5
|
-
let(:template) {
|
4
|
+
let(:job_invocation) { FactoryBot.build(:job_invocation) }
|
5
|
+
let(:template) { FactoryBot.create(:job_template, :with_input) }
|
6
6
|
|
7
7
|
context 'search for job invocations' do
|
8
8
|
before do
|
@@ -27,7 +27,7 @@ class JobInvocationTest < ActiveSupport::TestCase
|
|
27
27
|
|
28
28
|
context 'can delete a host' do
|
29
29
|
let(:host) do
|
30
|
-
|
30
|
+
FactoryBot.create(:host)
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'can remove a host' do
|
@@ -40,17 +40,17 @@ class JobInvocationTest < ActiveSupport::TestCase
|
|
40
40
|
end
|
41
41
|
|
42
42
|
context 'has template invocations with input values' do
|
43
|
-
let(:job_invocation) {
|
43
|
+
let(:job_invocation) { FactoryBot.create(:job_invocation, :with_template) }
|
44
44
|
|
45
45
|
before do
|
46
46
|
input = job_invocation.pattern_template_invocations.first.template.template_inputs.create!(:name => 'foo', :required => true, :input_type => 'user')
|
47
47
|
input2 = job_invocation.pattern_template_invocations.first.template.template_inputs.create!(:name => 'bar', :required => true, :input_type => 'user')
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
@input_value =
|
52
|
-
|
53
|
-
|
48
|
+
FactoryBot.create(:template_invocation_input_value,
|
49
|
+
:template_invocation => job_invocation.pattern_template_invocations.first,
|
50
|
+
:template_input => input2)
|
51
|
+
@input_value = FactoryBot.create(:template_invocation_input_value,
|
52
|
+
:template_invocation => job_invocation.pattern_template_invocations.first,
|
53
|
+
:template_input => input)
|
54
54
|
job_invocation.reload
|
55
55
|
job_invocation.pattern_template_invocations.first.reload
|
56
56
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'test_plugin_helper'
|
2
2
|
|
3
3
|
class JobTemplateEffectiveUserTest < ActiveSupport::TestCase
|
4
|
-
let(:job_template) {
|
4
|
+
let(:job_template) { FactoryBot.build(:job_template, :job_category => '') }
|
5
5
|
let(:effective_user) { job_template.effective_user }
|
6
6
|
|
7
7
|
before do
|
@@ -20,7 +20,7 @@ class JobTemplateEffectiveUserTest < ActiveSupport::TestCase
|
|
20
20
|
|
21
21
|
describe 'compute value' do
|
22
22
|
it 'computes the value based on the current user when current_user set to true' do
|
23
|
-
user =
|
23
|
+
user = FactoryBot.create(:user)
|
24
24
|
User.current = user
|
25
25
|
effective_user.current_user = true
|
26
26
|
effective_user.compute_value.must_equal user.login
|
@@ -5,7 +5,7 @@ class JobTemplateImporterTest < ActiveSupport::TestCase
|
|
5
5
|
# JobTemplate tests handle most of this, we just check that the shim
|
6
6
|
# correctly loads a template returns a hash
|
7
7
|
let(:remote_execution_feature) do
|
8
|
-
|
8
|
+
FactoryBot.create(:remote_execution_feature)
|
9
9
|
end
|
10
10
|
|
11
11
|
let(:result) do
|
@@ -46,7 +46,7 @@ class JobTemplateImporterTest < ActiveSupport::TestCase
|
|
46
46
|
context 'updating locked template' do
|
47
47
|
it 'does not update locked template' do
|
48
48
|
name = 'Locked job template'
|
49
|
-
template =
|
49
|
+
template = FactoryBot.create(:job_template, :locked => true, :name => name)
|
50
50
|
res = JobTemplateImporter.import!(name, 'some text', 'metadata')
|
51
51
|
assert_equal "Skipping Template #{template.id}:#{template.name} - template is locked", res[:result]
|
52
52
|
end
|
@@ -58,7 +58,7 @@ class JobTemplateImporterTest < ActiveSupport::TestCase
|
|
58
58
|
'kind' => 'job_template',
|
59
59
|
'name' => name
|
60
60
|
}
|
61
|
-
template =
|
61
|
+
template = FactoryBot.create(:job_template, :locked => true, :name => name)
|
62
62
|
res = JobTemplateImporter.import!(name, 'some text', metadata, true)
|
63
63
|
assert_equal " Updated Template #{template.id}:Locked job template again", res[:result]
|
64
64
|
end
|
@@ -2,17 +2,17 @@ require 'test_plugin_helper'
|
|
2
2
|
|
3
3
|
class JobTemplateTest < ActiveSupport::TestCase
|
4
4
|
context 'when creating a template' do
|
5
|
-
let(:job_template) {
|
5
|
+
let(:job_template) { FactoryBot.build(:job_template, :job_category => '') }
|
6
6
|
let(:template_with_inputs) do
|
7
|
-
|
8
|
-
template.template_inputs <<
|
7
|
+
FactoryBot.build(:job_template, :template => 'test').tap do |template|
|
8
|
+
template.template_inputs << FactoryBot.build(:template_input, :name => 'command', :input_type => 'user')
|
9
9
|
template.save!
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'has a unique name' do
|
14
|
-
template1 =
|
15
|
-
template2 =
|
14
|
+
template1 = FactoryBot.create(:job_template)
|
15
|
+
template2 = FactoryBot.build(:job_template, :name => template1.name)
|
16
16
|
refute template2.valid?
|
17
17
|
end
|
18
18
|
|
@@ -27,17 +27,17 @@ class JobTemplateTest < ActiveSupport::TestCase
|
|
27
27
|
|
28
28
|
it 'validates the inputs are uniq in the template' do
|
29
29
|
job_template.job_category = 'Miscellaneous'
|
30
|
-
job_template.foreign_input_sets <<
|
31
|
-
job_template.foreign_input_sets <<
|
30
|
+
job_template.foreign_input_sets << FactoryBot.build(:foreign_input_set, :target_template => template_with_inputs)
|
31
|
+
job_template.foreign_input_sets << FactoryBot.build(:foreign_input_set, :target_template => template_with_inputs)
|
32
32
|
refute job_template.valid?
|
33
33
|
job_template.errors.full_messages.first.must_include 'Duplicated inputs detected: ["command"]'
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
context 'description format' do
|
38
|
-
let(:template_with_description) {
|
39
|
-
let(:template) {
|
40
|
-
let(:minimal_template) {
|
38
|
+
let(:template_with_description) { FactoryBot.build(:job_template, :with_description_format, :job_category => 'test job') }
|
39
|
+
let(:template) { FactoryBot.build(:job_template, :with_input, :job_category => 'test job') }
|
40
|
+
let(:minimal_template) { FactoryBot.build(:job_template) }
|
41
41
|
|
42
42
|
it 'uses the description_format attribute if set' do
|
43
43
|
template_with_description.generate_description_format.must_equal template_with_description.description_format
|
@@ -59,7 +59,7 @@ class JobTemplateTest < ActiveSupport::TestCase
|
|
59
59
|
end
|
60
60
|
|
61
61
|
context 'cloning' do
|
62
|
-
let(:job_template) {
|
62
|
+
let(:job_template) { FactoryBot.build(:job_template, :with_input) }
|
63
63
|
|
64
64
|
describe '#dup' do
|
65
65
|
it 'duplicates also template inputs' do
|
@@ -74,7 +74,7 @@ class JobTemplateTest < ActiveSupport::TestCase
|
|
74
74
|
|
75
75
|
context 'importing a new template' do
|
76
76
|
let(:remote_execution_feature) do
|
77
|
-
|
77
|
+
FactoryBot.create(:remote_execution_feature)
|
78
78
|
end
|
79
79
|
|
80
80
|
let(:template) do
|
@@ -239,7 +239,7 @@ class JobTemplateTest < ActiveSupport::TestCase
|
|
239
239
|
|
240
240
|
context 'template export' do
|
241
241
|
let(:exportable_template) do
|
242
|
-
|
242
|
+
FactoryBot.create(:job_template, :with_input)
|
243
243
|
end
|
244
244
|
|
245
245
|
let(:erb) do
|
@@ -270,7 +270,7 @@ class JobTemplateTest < ActiveSupport::TestCase
|
|
270
270
|
end
|
271
271
|
|
272
272
|
context 'there is existing template invocation of a job template' do
|
273
|
-
let(:job_invocation) {
|
273
|
+
let(:job_invocation) { FactoryBot.create(:job_invocation, :with_template) }
|
274
274
|
let(:job_template) { job_invocation.pattern_template_invocations.first.template }
|
275
275
|
|
276
276
|
describe 'job template deletion' do
|
@@ -283,7 +283,7 @@ class JobTemplateTest < ActiveSupport::TestCase
|
|
283
283
|
|
284
284
|
context 'template locked' do
|
285
285
|
it 'inputs cannot be changed' do
|
286
|
-
job_template =
|
286
|
+
job_template = FactoryBot.create(:job_template, :with_input, :locked => true)
|
287
287
|
Foreman.expects(:in_rake?).returns(false).at_least_once
|
288
288
|
assert_valid job_template
|
289
289
|
job_template.template_inputs.first.name = 'something else'
|
@@ -13,14 +13,14 @@ class RemoteExecutionFeatureTest < ActiveSupport::TestCase
|
|
13
13
|
end
|
14
14
|
|
15
15
|
let(:package_template) do
|
16
|
-
|
16
|
+
FactoryBot.create(:job_template).tap do |job_template|
|
17
17
|
job_template.job_category = 'Package Action'
|
18
18
|
job_template.name = 'Package Action - SSH Default'
|
19
19
|
job_template.template_inputs.create(:name => 'package', :input_type => 'user')
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
let(:host) {
|
23
|
+
let(:host) { FactoryBot.create(:host) }
|
24
24
|
|
25
25
|
before do
|
26
26
|
User.current = users :admin
|
@@ -76,7 +76,7 @@ class RemoteExecutionFeatureTest < ActiveSupport::TestCase
|
|
76
76
|
|
77
77
|
|
78
78
|
it 'updates a feature if it exists' do
|
79
|
-
existing =
|
79
|
+
existing = FactoryBot.create(:remote_execution_feature, :name => 'existing_feature_withou_action_button')
|
80
80
|
feature = RemoteExecutionFeature.register(existing.label, existing.name, :host_action_button => true)
|
81
81
|
feature.must_be :persisted?
|
82
82
|
existing.reload
|
@@ -51,16 +51,16 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
|
|
51
51
|
end
|
52
52
|
|
53
53
|
describe SSHExecutionProvider do
|
54
|
-
before { User.current =
|
54
|
+
before { User.current = FactoryBot.build(:user, :admin) }
|
55
55
|
after { User.current = nil }
|
56
56
|
|
57
57
|
before do
|
58
58
|
Setting::RemoteExecution.load_defaults
|
59
59
|
end
|
60
60
|
|
61
|
-
let(:job_invocation) {
|
61
|
+
let(:job_invocation) { FactoryBot.create(:job_invocation, :with_template) }
|
62
62
|
let(:template_invocation) { job_invocation.pattern_template_invocations.first }
|
63
|
-
let(:host) {
|
63
|
+
let(:host) { FactoryBot.create(:host) }
|
64
64
|
let(:proxy_options) { SSHExecutionProvider.proxy_command_options(template_invocation, host) }
|
65
65
|
|
66
66
|
describe 'effective user' do
|
@@ -73,7 +73,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
|
|
73
73
|
describe 'ssh user' do
|
74
74
|
it 'uses the remote_execution_ssh_user on the host param' do
|
75
75
|
host.params['remote_execution_ssh_user'] = 'my user'
|
76
|
-
host.host_parameters <<
|
76
|
+
host.host_parameters << FactoryBot.create(:host_parameter, :host => host, :name => 'remote_execution_ssh_user', :value => 'my user')
|
77
77
|
proxy_options[:ssh_user].must_equal 'my user'
|
78
78
|
end
|
79
79
|
end
|
@@ -81,7 +81,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
|
|
81
81
|
describe 'sudo' do
|
82
82
|
it 'uses the remote_execution_ssh_user on the host param' do
|
83
83
|
host.params['remote_execution_effective_user_method'] = 'sudo'
|
84
|
-
method_param =
|
84
|
+
method_param = FactoryBot.create(:host_parameter, :host => host, :name => 'remote_execution_effective_user_method', :value => 'sudo')
|
85
85
|
host.host_parameters << method_param
|
86
86
|
proxy_options[:effective_user_method].must_equal 'sudo'
|
87
87
|
method_param.update_attributes!(:value => 'su')
|
@@ -105,7 +105,7 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
|
|
105
105
|
describe 'ssh port from params' do
|
106
106
|
it 'takes ssh port number from params and check return type' do
|
107
107
|
host.params['remote_execution_ssh_port'] = '30'
|
108
|
-
host.host_parameters <<
|
108
|
+
host.host_parameters << FactoryBot.build(:host_parameter, :name => 'remote_execution_ssh_port', :value => '30')
|
109
109
|
host.clear_host_parameters_cache!
|
110
110
|
proxy_options[:ssh_port].must_be_kind_of Integer
|
111
111
|
proxy_options[:ssh_port].must_equal 30
|
@@ -114,9 +114,9 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
|
|
114
114
|
|
115
115
|
describe '#find_ip_or_hostname' do
|
116
116
|
let(:host) do
|
117
|
-
|
118
|
-
host.interfaces = [
|
119
|
-
|
117
|
+
FactoryBot.create(:host) do |host|
|
118
|
+
host.interfaces = [FactoryBot.build(:nic_managed, flags.merge(:ip => nil, :name => 'somehost.somedomain.org', :primary => true)),
|
119
|
+
FactoryBot.build(:nic_managed, flags.merge(:ip => '127.0.0.1'))]
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
@@ -129,8 +129,8 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
|
|
129
129
|
SSHExecutionProvider.find_ip_or_hostname(host).must_equal 'somehost.somedomain.org'
|
130
130
|
|
131
131
|
# execution wins if present
|
132
|
-
execution_interface =
|
133
|
-
|
132
|
+
execution_interface = FactoryBot.build(:nic_managed,
|
133
|
+
flags.merge(:execution => true, :name => 'special.somedomain.org'))
|
134
134
|
host.interfaces << execution_interface
|
135
135
|
host.primary_interface.update_attributes(:execution => false)
|
136
136
|
host.interfaces.each(&:save)
|
@@ -144,8 +144,8 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
|
|
144
144
|
SSHExecutionProvider.find_ip_or_hostname(host).must_equal 'somehost.somedomain.org'
|
145
145
|
|
146
146
|
# provision interface with ip while primary without
|
147
|
-
provision_interface =
|
148
|
-
|
147
|
+
provision_interface = FactoryBot.build(:nic_managed,
|
148
|
+
flags.merge(:provision => true, :ip => '10.0.0.1'))
|
149
149
|
host.interfaces << provision_interface
|
150
150
|
host.primary_interface.update_attributes(:provision => false)
|
151
151
|
host.interfaces.each(&:save)
|
@@ -158,8 +158,8 @@ class RemoteExecutionProviderTest < ActiveSupport::TestCase
|
|
158
158
|
SSHExecutionProvider.find_ip_or_hostname(host).must_equal host.primary_interface.ip
|
159
159
|
|
160
160
|
# there is an execution interface with IP: it wins
|
161
|
-
execution_interface =
|
162
|
-
|
161
|
+
execution_interface = FactoryBot.build(:nic_managed,
|
162
|
+
flags.merge(:execution => true, :ip => '10.0.0.3'))
|
163
163
|
host.interfaces << execution_interface
|
164
164
|
host.primary_interface.update_attributes(:execution => false)
|
165
165
|
host.interfaces.each(&:save)
|
data/test/unit/targeting_test.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'test_plugin_helper'
|
2
2
|
|
3
3
|
class TargetingTest < ActiveSupport::TestCase
|
4
|
-
let(:targeting) {
|
4
|
+
let(:targeting) { FactoryBot.build(:targeting) }
|
5
5
|
let(:bookmark) { bookmarks(:one) }
|
6
|
-
let(:host) {
|
6
|
+
let(:host) { FactoryBot.create(:host) }
|
7
7
|
|
8
8
|
before do
|
9
9
|
bookmark.query = 'name = bar'
|
@@ -78,7 +78,7 @@ class TargetingTest < ActiveSupport::TestCase
|
|
78
78
|
end
|
79
79
|
|
80
80
|
describe '#build_query_from_hosts(ids)' do
|
81
|
-
let(:second_host) {
|
81
|
+
let(:second_host) { FactoryBot.create(:host) }
|
82
82
|
|
83
83
|
before do
|
84
84
|
host
|
@@ -1,38 +1,38 @@
|
|
1
1
|
require 'test_plugin_helper'
|
2
2
|
|
3
3
|
class TemplateInvocationInputTest < ActiveSupport::TestCase
|
4
|
-
let(:template) {
|
4
|
+
let(:template) { FactoryBot.build(:job_template, :template => 'service restart <%= input("service_name") -%>') }
|
5
5
|
let(:renderer) { InputTemplateRenderer.new(template) }
|
6
|
-
let(:job_invocation) {
|
7
|
-
let(:template_invocation) {
|
6
|
+
let(:job_invocation) { FactoryBot.create(:job_invocation) }
|
7
|
+
let(:template_invocation) { FactoryBot.build(:template_invocation, :template => template) }
|
8
8
|
let(:result) { renderer.render }
|
9
9
|
|
10
10
|
context 'with selectable options' do
|
11
11
|
before do
|
12
12
|
result # let is lazy
|
13
|
-
template.template_inputs <<
|
14
|
-
|
13
|
+
template.template_inputs << FactoryBot.build(:template_input, :name => 'service_name', :input_type => 'user',
|
14
|
+
:required => true, :options => "foreman\nhttpd")
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'fails with an invalid option' do
|
18
|
-
refute_valid
|
19
|
-
|
20
|
-
|
18
|
+
refute_valid FactoryBot.build(:template_invocation_input_value, :template_invocation => template_invocation,
|
19
|
+
:template_input => template.template_inputs.first,
|
20
|
+
:value => 'sendmail')
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'succeeds with valid option' do
|
24
|
-
assert_valid
|
25
|
-
|
26
|
-
|
24
|
+
assert_valid FactoryBot.build(:template_invocation_input_value, :template_invocation => template_invocation,
|
25
|
+
:template_input => template.template_inputs.first,
|
26
|
+
:value => 'foreman')
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'supports large inputs' do
|
31
|
-
template.template_inputs <<
|
32
|
-
|
33
|
-
assert_valid
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
template.template_inputs << FactoryBot.build(:template_input, :name => 'service_name',
|
32
|
+
:input_type => 'user', :required => true)
|
33
|
+
assert_valid FactoryBot.create(:template_invocation_input_value,
|
34
|
+
:template_invocation => template_invocation,
|
35
|
+
:template_input => template.template_inputs.first,
|
36
|
+
:value => 'foreman' * 1_000_000)
|
37
37
|
end
|
38
38
|
end
|