foreman_ansible 3.0.9 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/app/controllers/api/v2/ansible_inventories_controller.rb +50 -0
  4. data/app/models/ansible_variable.rb +1 -0
  5. data/app/models/foreman_ansible/ansible_provider.rb +25 -1
  6. data/app/models/foreman_ansible/fact_name.rb +5 -1
  7. data/app/models/setting/ansible.rb +81 -88
  8. data/app/services/foreman_ansible/fact_importer.rb +5 -8
  9. data/app/services/foreman_ansible/fact_parser.rb +16 -4
  10. data/app/services/foreman_ansible/inventory_creator.rb +1 -12
  11. data/app/views/foreman_ansible/job_templates/run_playbook-ansible_default.erb +17 -0
  12. data/config/routes.rb +1 -2
  13. data/db/migrate/20190328114657_remove_top_level_ansible_variables_setting.rb +1 -1
  14. data/db/migrate/20191010074208_remove_ansible_implementation_setting.rb +5 -0
  15. data/db/seeds.d/75_job_templates.rb +2 -2
  16. data/lib/foreman_ansible/register.rb +5 -2
  17. data/lib/foreman_ansible/remote_execution.rb +6 -0
  18. data/lib/foreman_ansible/version.rb +1 -1
  19. data/locale/Makefile +7 -0
  20. data/locale/de/LC_MESSAGES/foreman_ansible.mo +0 -0
  21. data/locale/de/foreman_ansible.po +1 -1
  22. data/locale/en/LC_MESSAGES/foreman_ansible.mo +0 -0
  23. data/locale/en/foreman_ansible.po +1 -1
  24. data/locale/es/LC_MESSAGES/foreman_ansible.mo +0 -0
  25. data/locale/es/foreman_ansible.po +1 -1
  26. data/locale/fr/LC_MESSAGES/foreman_ansible.mo +0 -0
  27. data/locale/fr/foreman_ansible.po +1 -1
  28. data/locale/it/LC_MESSAGES/foreman_ansible.mo +0 -0
  29. data/locale/it/foreman_ansible.po +1 -1
  30. data/locale/ja/LC_MESSAGES/foreman_ansible.mo +0 -0
  31. data/locale/ja/foreman_ansible.po +1 -1
  32. data/locale/ko/LC_MESSAGES/foreman_ansible.mo +0 -0
  33. data/locale/ko/foreman_ansible.po +1 -1
  34. data/locale/pt_BR/LC_MESSAGES/foreman_ansible.mo +0 -0
  35. data/locale/pt_BR/foreman_ansible.po +1 -1
  36. data/locale/ru/LC_MESSAGES/foreman_ansible.mo +0 -0
  37. data/locale/ru/foreman_ansible.po +1 -1
  38. data/locale/zh_CN/LC_MESSAGES/foreman_ansible.mo +0 -0
  39. data/locale/zh_CN/foreman_ansible.po +1 -1
  40. data/locale/zh_TW/LC_MESSAGES/foreman_ansible.mo +0 -0
  41. data/locale/zh_TW/foreman_ansible.po +1 -1
  42. data/package.json +3 -3
  43. data/test/unit/ansible_provider_test.rb +16 -0
  44. data/test/unit/ansible_variable_test.rb +10 -0
  45. data/test/unit/lib/foreman_ansible_core/ansible_runner_test.rb +51 -0
  46. data/test/unit/lib/foreman_ansible_core/playbook_runner_test.rb +34 -1
  47. data/test/unit/services/fact_importer_test.rb +4 -2
  48. data/test/unit/services/fact_parser_test.rb +57 -4
  49. data/test/unit/services/inventory_creator_test.rb +10 -25
  50. data/webpack/__mocks__/foremanReact/common/I18n.js +1 -0
  51. data/webpack/components/AnsibleRolesSwitcher/AnsibleRolesSwitcher.js +1 -0
  52. data/webpack/components/AnsibleRolesSwitcher/components/AnsiblePermissionDenied.js +1 -0
  53. data/webpack/components/AnsibleRolesSwitcher/components/AnsibleRole.js +1 -0
  54. data/webpack/components/AnsibleRolesSwitcher/components/AssignedRolesList.js +18 -23
  55. data/webpack/index.js +5 -4
  56. metadata +15 -11
  57. data/app/lib/actions/foreman_ansible/helpers/host_common.rb +0 -39
@@ -8,7 +8,6 @@ Rails.application.routes.draw do
8
8
  :defaults => { :apiv => 'v2' },
9
9
  :apiv => /v1|v2/,
10
10
  :constraints => ApiConstraints.new(:version => 2) do
11
-
12
11
  constraints(:id => %r{[^\/]+}) do
13
12
  resources :hosts, :only => [] do
14
13
  member do
@@ -75,7 +74,6 @@ Rails.application.routes.draw do
75
74
  :defaults => { :apiv => 'v2' },
76
75
  :apiv => /v1|v2/,
77
76
  :constraints => ApiConstraints.new(:version => 2) do
78
-
79
77
  resources :ansible_roles, :only => [:show, :index, :destroy] do
80
78
  collection do
81
79
  put :import
@@ -99,6 +97,7 @@ Rails.application.routes.draw do
99
97
  get :hosts
100
98
  post :hostgroups
101
99
  get :hostgroups
100
+ post :schedule
102
101
  end
103
102
  end
104
103
  end
@@ -1,6 +1,6 @@
1
1
  class RemoveTopLevelAnsibleVariablesSetting < ActiveRecord::Migration[5.2]
2
2
  def up
3
3
  setting = Setting.find_by(:name => 'top_level_ansible_vars')
4
- setting.destroy if setting
4
+ setting&.destroy
5
5
  end
6
6
  end
@@ -0,0 +1,5 @@
1
+ class RemoveAnsibleImplementationSetting < ActiveRecord::Migration[5.2]
2
+ def up
3
+ Setting.where(:name => 'ansible_implementation').destroy_all
4
+ end
5
+ end
@@ -20,8 +20,8 @@ User.as_anonymous_admin do
20
20
  :default => true,
21
21
  :locked => true,
22
22
  :update => sync)
23
- template.organizations = organizations if SETTINGS[:organizations_enabled] && template.present?
24
- template.locations = locations if SETTINGS[:locations_enabled] && template.present?
23
+ template.organizations = organizations if template.present?
24
+ template.locations = locations if template.present?
25
25
  end
26
26
  end
27
27
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  # rubocop:disable BlockLength
4
4
  Foreman::Plugin.register :foreman_ansible do
5
- requires_foreman '>= 1.22'
5
+ requires_foreman '>= 1.24'
6
6
 
7
7
  security_block :foreman_ansible do
8
8
  permission :play_roles_on_host,
@@ -71,6 +71,9 @@ Foreman::Plugin.register :foreman_ansible do
71
71
  permission :edit_hostgroups,
72
72
  { :'api/v2/hostgroups' => [:assign_ansible_roles] },
73
73
  :resource_type => 'Hostgroup'
74
+ permission :generate_report_templates,
75
+ { :'api/v2/ansible_inventories' => [:schedule] },
76
+ :resource_type => 'ReportTemplate'
74
77
  end
75
78
 
76
79
  role 'Ansible Roles Manager',
@@ -82,7 +85,7 @@ Foreman::Plugin.register :foreman_ansible do
82
85
  :edit_ansible_variables, :destroy_ansible_variables]
83
86
 
84
87
  role 'Ansible Tower Inventory Reader',
85
- [:view_hosts, :view_hostgroups, :view_facts],
88
+ [:view_hosts, :view_hostgroups, :view_facts, :generate_report_templates],
86
89
  'Permissions required for the user which is used by Ansible Tower Dynamic Inventory Item'
87
90
 
88
91
  add_all_permissions_to_default_roles
@@ -30,6 +30,12 @@ module ForemanAnsible
30
30
  :provided_inputs => %w[organization_id plan_id],
31
31
  :notification_builder => ForemanAnsible::InsightsNotificationBuilder
32
32
  )
33
+ RemoteExecutionFeature.register(
34
+ :ansible_run_playbook,
35
+ N_('Run playbook'),
36
+ :description => N_('Run an Ansible playbook against given hosts'),
37
+ :provided_inputs => %w[playbook]
38
+ )
33
39
  end
34
40
  end
35
41
  end
@@ -4,5 +4,5 @@
4
4
  # This way other parts of Foreman can just call ForemanAnsible::VERSION
5
5
  # and detect what version the plugin is running.
6
6
  module ForemanAnsible
7
- VERSION = '3.0.9'
7
+ VERSION = '4.0.0'
8
8
  end
@@ -60,3 +60,10 @@ tx-update: tx-pull reset-po $(MOFILES)
60
60
  git add ../locale/*/LC_MESSAGES
61
61
  git commit -a --amend -m "i18n - pulling from tx"
62
62
  -echo Changes commited!
63
+
64
+ mo-files: $(MOFILES)
65
+ git add $(POFILES) $(POTFILE) ../locale/*/LC_MESSAGES
66
+ git commit -m "i18n - pulling from tx"
67
+ @echo
68
+ @echo Changes commited!
69
+ @echo
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.2\n"
8
+ "Project-Id-Version: foreman_ansible 3.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -4,7 +4,7 @@
4
4
  #
5
5
  msgid ""
6
6
  msgstr ""
7
- "Project-Id-Version: foreman_ansible 3.0.2\n"
7
+ "Project-Id-Version: foreman_ansible 3.0.1\n"
8
8
  "Report-Msgid-Bugs-To: \n"
9
9
  "PO-Revision-Date: 2014-08-20 08:54+0100\n"
10
10
  "Last-Translator: Foreman Team <foreman-dev@googlegroups.com>\n"
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.2\n"
8
+ "Project-Id-Version: foreman_ansible 3.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.2\n"
8
+ "Project-Id-Version: foreman_ansible 3.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.2\n"
8
+ "Project-Id-Version: foreman_ansible 3.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.2\n"
8
+ "Project-Id-Version: foreman_ansible 3.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.2\n"
8
+ "Project-Id-Version: foreman_ansible 3.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.2\n"
8
+ "Project-Id-Version: foreman_ansible 3.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.2\n"
8
+ "Project-Id-Version: foreman_ansible 3.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.2\n"
8
+ "Project-Id-Version: foreman_ansible 3.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.2\n"
8
+ "Project-Id-Version: foreman_ansible 3.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -7,11 +7,11 @@
7
7
  "test": "test"
8
8
  },
9
9
  "dependencies": {
10
- "@theforeman/vendor": "^0.1.1",
10
+ "@theforeman/vendor": "^1.7.0",
11
11
  "react-json-tree": "^0.11.0"
12
12
  },
13
13
  "devDependencies": {
14
- "@theforeman/vendor-dev": "^0.1.1",
14
+ "@theforeman/vendor-dev": "^1.7.0",
15
15
  "babel-eslint": "^8.2.1",
16
16
  "babel-plugin-transform-class-properties": "^6.24.1",
17
17
  "babel-plugin-transform-object-assign": "^6.22.0",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "scripts": {
40
40
  "test": "node node_modules/.bin/jest webpack",
41
- "lint": "./node_modules/.bin/eslint -c .eslintrc webpack/ || exit 0"
41
+ "lint": "eslint ./webpack"
42
42
  },
43
43
  "repository": {
44
44
  "type": "git",
@@ -29,6 +29,22 @@ class AnsibleProviderTest < ActiveSupport::TestCase
29
29
  end
30
30
  end
31
31
 
32
+ context 'when using secrets' do
33
+ let(:host) { FactoryBot.build(:host) }
34
+
35
+ it 'generates secrets properly' do
36
+ params = {
37
+ 'remote_execution_ssh_password' => 'password',
38
+ 'remote_execution_sudo_password' => 'letmein'
39
+ }
40
+ host.expects(:params).twice.returns(params)
41
+ secrets = ForemanAnsible::AnsibleProvider.secrets(host)
42
+ host_secrets = secrets['per-host'][host.name]
43
+ assert_equal host_secrets['ansible_ssh_pass'], 'password'
44
+ assert_equal host_secrets['ansible_sudo_pass'], 'letmein'
45
+ end
46
+ end
47
+
32
48
  def command_options
33
49
  ForemanAnsible::AnsibleProvider.
34
50
  proxy_command_options(template_invocation, dummyhost)
@@ -11,4 +11,14 @@ class AnsibleRoleTest < ActiveSupport::TestCase
11
11
  subject { AnsibleRole.new(:name => 'foo') }
12
12
  should validate_uniqueness_of(:name)
13
13
  end
14
+
15
+ test 'should cast default_value to hash' do
16
+ variable = FactoryBot.create(
17
+ :ansible_variable,
18
+ :key_type => 'hash',
19
+ :default_value => "{\r\n \"bat\": \"man\"\r\n}\r\n",
20
+ :override => true
21
+ )
22
+ assert variable.default_value.is_a?(Hash)
23
+ end
14
24
  end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ module ForemanAnsibleCore
6
+ module Runner
7
+ class AnsibleRunnerTest < ActiveSupport::TestCase
8
+ describe AnsibleRunner do
9
+ it 'parses files without event data' do
10
+ content = <<~JSON
11
+ {"uuid": "a29d8592-f805-4d0e-b73d-7a53cc35a92e", "stdout": " [WARNING]: Consider using the yum module rather than running 'yum'. If you", "counter": 8, "end_line": 8, "runner_ident": "e2d9ae11-026a-4f9f-9679-401e4b852ab0", "start_line": 7, "event": "verbose"}
12
+ JSON
13
+
14
+ File.expects(:read).with('fake.json').returns(content)
15
+ runner = AnsibleRunner.allocate
16
+ runner.expects(:handle_broadcast_data)
17
+ assert runner.send(:handle_event_file, 'fake.json')
18
+ end
19
+ end
20
+
21
+ describe '#rebuild_secrets' do
22
+ let(:inventory) do
23
+ { 'all' => { 'hosts' => ['foreman.example.com'] },
24
+ '_meta' => { 'hostvars' => { 'foreman.example.com' => {} } } }
25
+ end
26
+ let(:input) do
27
+ host_secrets = { 'ansible_ssh_pass' => 'letmein', 'ansible_sudo_pass' => 'iamroot' }
28
+ secrets = { 'per-host' => { 'foreman.example.com' => host_secrets } }
29
+ host_input = { 'input' => { 'action_input' => { 'secrets' => secrets } } }
30
+ { 'foreman.example.com' => host_input }
31
+ end
32
+ let(:runner) { ForemanAnsibleCore::Runner::AnsibleRunner.allocate }
33
+
34
+ test 'uses secrets from inventory' do
35
+ test_inventory = inventory.merge('ssh_password' => 'sshpass', 'sudo_password' => 'sudopass')
36
+ rebuilt = runner.send(:rebuild_secrets, test_inventory, input)
37
+ host_vars = rebuilt.dig('_meta', 'hostvars', 'foreman.example.com')
38
+ assert_equal 'sshpass', host_vars['ansible_ssh_pass']
39
+ assert_equal 'sudopass', host_vars['ansible_sudo_pass']
40
+ end
41
+
42
+ test 'host secrets are used when not overriden by inventory secrest' do
43
+ rebuilt = runner.send(:rebuild_secrets, inventory, input)
44
+ host_vars = rebuilt.dig('_meta', 'hostvars', 'foreman.example.com')
45
+ assert_equal 'letmein', host_vars['ansible_ssh_pass']
46
+ assert_equal 'iamroot', host_vars['ansible_sudo_pass']
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -10,6 +10,7 @@ class PlaybookRunnerTest < ActiveSupport::TestCase
10
10
  ForemanAnsibleCore::Runner::Playbook.any_instance.stubs(:unknown_hosts).
11
11
  returns([])
12
12
  File.expects(:exist?).with(Dir.home).returns(true)
13
+ ForemanAnsibleCore::Runner::Playbook.any_instance.expects(:rebuild_secrets).returns(nil)
13
14
  runner = ForemanAnsibleCore::Runner::Playbook.new(nil, nil, :suspended_action => nil)
14
15
  assert '/etc/ansible', runner.instance_variable_get('@ansible_dir')
15
16
  end
@@ -24,6 +25,7 @@ class PlaybookRunnerTest < ActiveSupport::TestCase
24
25
  test 'creates temp one if not provided' do
25
26
  Dir.expects(:mktmpdir)
26
27
  File.expects(:exist?).with(Dir.home).returns(true)
28
+ ForemanAnsibleCore::Runner::Playbook.any_instance.expects(:rebuild_secrets).returns(nil)
27
29
  ForemanAnsibleCore::Runner::Playbook.new(nil, nil, :suspended_action => nil)
28
30
  end
29
31
 
@@ -32,6 +34,7 @@ class PlaybookRunnerTest < ActiveSupport::TestCase
32
34
  ForemanAnsibleCore.expects(:settings).returns(settings)
33
35
  File.expects(:exist?).with(settings[:ansible_dir]).returns(true)
34
36
  Dir.expects(:mktmpdir).never
37
+ ForemanAnsibleCore::Runner::Playbook.any_instance.expects(:rebuild_secrets).returns(nil)
35
38
  runner = ForemanAnsibleCore::Runner::Playbook.new(nil, nil, :suspended_action => nil)
36
39
  assert '/foo', runner.instance_variable_get('@working_dir')
37
40
  end
@@ -39,7 +42,7 @@ class PlaybookRunnerTest < ActiveSupport::TestCase
39
42
 
40
43
  context 'TOFU policy' do # Trust On First Use
41
44
  setup do
42
- @inventory = { 'all' => { 'hosts' => ['foreman.example.com'] } }.to_json
45
+ @inventory = { 'all' => { 'hosts' => ['foreman.example.com'] } }
43
46
  @output = StringIO.new
44
47
  logger = Logger.new(@output)
45
48
  ForemanAnsibleCore::Runner::Playbook.any_instance.stubs(:logger).
@@ -51,6 +54,7 @@ class PlaybookRunnerTest < ActiveSupport::TestCase
51
54
  with('foreman.example.com').returns(['somekey'])
52
55
  ForemanAnsibleCore::Runner::Playbook.any_instance.
53
56
  expects(:add_to_known_hosts).never
57
+ ForemanAnsibleCore::Runner::Playbook.any_instance.expects(:rebuild_secrets).returns(@inventory)
54
58
  ForemanAnsibleCore::Runner::Playbook.new(@inventory, nil, :suspended_action => nil)
55
59
  end
56
60
 
@@ -59,6 +63,7 @@ class PlaybookRunnerTest < ActiveSupport::TestCase
59
63
  with('foreman.example.com').returns([])
60
64
  ForemanAnsibleCore::Runner::Playbook.any_instance.
61
65
  expects(:add_to_known_hosts).with('foreman.example.com')
66
+ ForemanAnsibleCore::Runner::Playbook.any_instance.expects(:rebuild_secrets).returns(@inventory)
62
67
  ForemanAnsibleCore::Runner::Playbook.new(@inventory, nil, :suspended_action => nil)
63
68
  end
64
69
 
@@ -67,6 +72,7 @@ class PlaybookRunnerTest < ActiveSupport::TestCase
67
72
  with('foreman.example.com').returns([])
68
73
  Net::SSH::Transport::Session.expects(:new).with('foreman.example.com').
69
74
  raises(Net::Error)
75
+ ForemanAnsibleCore::Runner::Playbook.any_instance.expects(:rebuild_secrets).returns(@inventory)
70
76
  ForemanAnsibleCore::Runner::Playbook.new(@inventory, nil, :suspended_action => nil)
71
77
  assert_match(
72
78
  /ERROR.*Failed to save host key for foreman.example.com: Net::Error/,
@@ -74,4 +80,31 @@ class PlaybookRunnerTest < ActiveSupport::TestCase
74
80
  )
75
81
  end
76
82
  end
83
+
84
+ context 'rebuild secrets' do
85
+ let(:inventory) do
86
+ { 'all' => { 'hosts' => ['foreman.example.com'] },
87
+ '_meta' => { 'hostvars' => { 'foreman.example.com' => {} } } }
88
+ end
89
+ let(:secrets) do
90
+ host_secrets = { 'ansible_ssh_pass' => 'letmein', 'ansible_sudo_pass' => 'iamroot' }
91
+ { 'per-host' => { 'foreman.example.com' => host_secrets } }
92
+ end
93
+ let(:runner) { ForemanAnsibleCore::Runner::Playbook.allocate }
94
+
95
+ test 'uses secrets from inventory' do
96
+ test_inventory = inventory.merge('ssh_password' => 'sshpass', 'sudo_password' => 'sudopass')
97
+ rebuilt = runner.send(:rebuild_secrets, test_inventory, secrets)
98
+ host_vars = rebuilt.dig('_meta', 'hostvars', 'foreman.example.com')
99
+ assert_equal 'sshpass', host_vars['ansible_ssh_pass']
100
+ assert_equal 'sudopass', host_vars['ansible_sudo_pass']
101
+ end
102
+
103
+ test 'host secrets are used when not overriden by inventory secrest' do
104
+ rebuilt = runner.send(:rebuild_secrets, inventory, secrets)
105
+ host_vars = rebuilt.dig('_meta', 'hostvars', 'foreman.example.com')
106
+ assert_equal 'letmein', host_vars['ansible_ssh_pass']
107
+ assert_equal 'iamroot', host_vars['ansible_sudo_pass']
108
+ end
109
+ end
77
110
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'test_plugin_helper'
4
+
3
5
  module ForemanAnsible
4
6
  # Test for the facts importer - only verify that given
5
7
  # a set of facts it's able to import them
@@ -18,8 +20,8 @@ module ForemanAnsible
18
20
 
19
21
  test 'missing_facts returns facts we do not have in the database' do
20
22
  @fact_importer = FactImporter.new(@host, facts_json)
21
- @fact_importer.expects(:db_facts).
22
- returns('ansible_cmdline' => 'fakevalue').twice
23
+ @fact_importer.expects(:host_fact_names).
24
+ returns(['ansible_cmdline'])
23
25
  refute @fact_importer.send(:missing_facts).include?('ansible_cmdline')
24
26
  end
25
27