foreman_ansible 1.5.2 → 2.0.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/Rakefile +1 -1
- data/app/controllers/foreman_ansible/api/v2/hostgroups_controller_extensions.rb +6 -21
- data/app/controllers/foreman_ansible/api/v2/hosts_controller_extensions.rb +5 -18
- data/app/controllers/foreman_ansible/concerns/hostgroups_controller_extensions.rb +12 -5
- data/app/controllers/foreman_ansible/concerns/hosts_controller_extensions.rb +20 -16
- data/app/controllers/foreman_ansible/concerns/job_invocation_helper.rb +17 -0
- data/app/helpers/foreman_ansible/ansible_plugin_helper.rb +1 -5
- data/app/helpers/foreman_ansible/ansible_reports_helper.rb +2 -1
- data/app/helpers/foreman_ansible/hosts_helper_extensions.rb +19 -18
- data/app/lib/actions/foreman_ansible/helpers/host_common.rb +1 -5
- data/app/models/ansible_role.rb +5 -0
- data/app/models/concerns/foreman_ansible/has_many_ansible_roles.rb +1 -3
- data/app/models/concerns/foreman_ansible/host_managed_extensions.rb +9 -0
- data/app/models/concerns/foreman_ansible/hostgroup_extensions.rb +0 -4
- data/app/models/foreman_ansible/ansible_provider.rb +24 -0
- data/app/models/setting/ansible.rb +4 -1
- data/app/services/foreman_ansible/fact_parser.rb +4 -2
- data/app/services/foreman_ansible/inventory_creator.rb +7 -2
- data/app/services/foreman_ansible/proxy_selector.rb +6 -0
- data/app/services/foreman_ansible/ui_roles_importer.rb +2 -0
- data/app/views/ansible_roles/index.html.erb +1 -2
- data/app/views/foreman_ansible/ansible_roles/_hostgroup_ansible_roles_button.erb +8 -7
- data/app/views/foreman_ansible/job_templates/ansible_roles.erb +17 -0
- data/config/routes.rb +1 -0
- data/db/migrate/20160705082036_create_ansible_role.rb +1 -1
- data/db/migrate/20160706074540_create_join_table_hosts_ansible_roles.rb +1 -1
- data/db/migrate/20160707195442_create_host_ansible_roles.rb +1 -1
- data/db/migrate/20160729094457_add_columns_to_ansible_role.rb +1 -1
- data/db/migrate/20160802153302_create_join_table_hostgroup_ansible_roles.rb +2 -1
- data/db/migrate/20160805094233_add_primary_key_hostgroup_ansible_roles.rb +1 -1
- data/db/migrate/20161122154057_automatically_set_role_timestamps.rb +1 -1
- data/db/seeds.d/75_job_templates.rb +20 -0
- data/lib/foreman_ansible/engine.rb +11 -53
- data/lib/foreman_ansible/register.rb +52 -0
- data/lib/foreman_ansible/remote_execution.rb +22 -0
- data/lib/foreman_ansible/version.rb +1 -1
- data/test/factories/ansible_proxy.rb +1 -1
- data/test/factories/ansible_roles.rb +1 -1
- data/test/functional/ansible_roles_controller_test.rb +4 -2
- data/test/functional/api/v2/ansible_roles_controller_test.rb +5 -3
- data/test/functional/api/v2/hostgroups_controller_test.rb +17 -25
- data/test/functional/api/v2/hosts_controller_test.rb +16 -24
- data/test/functional/hosts_controller_test.rb +33 -29
- data/test/test_plugin_helper.rb +12 -2
- data/test/unit/actions/run_ansible_job_test.rb +0 -0
- data/test/unit/actions/run_proxy_ansible_command_test.rb +0 -0
- data/test/unit/concerns/host_managed_extensions_test.rb +7 -7
- data/test/unit/concerns/hostgroup_extensions_test.rb +6 -6
- data/test/unit/helpers/foreman_ansible/ansible_reports_helper_test.rb +2 -2
- data/test/unit/host_ansible_role_test.rb +2 -2
- data/test/unit/hostgroup_ansible_role_test.rb +2 -2
- data/test/unit/lib/foreman_ansible_core/roles_reader_test.rb +4 -5
- data/test/unit/services/fact_importer_test.rb +3 -5
- data/test/unit/services/fact_parser_test.rb +0 -2
- data/test/unit/services/fact_sparser_test.rb +0 -2
- data/test/unit/services/inventory_creator_test.rb +1 -1
- data/test/unit/services/proxy_selector_test.rb +4 -4
- data/test/unit/services/roles_importer_test.rb +2 -2
- data/test/unit/services/structured_fact_importer_test.rb +1 -1
- data/test/unit/services/ui_roles_importer_test.rb +1 -1
- metadata +44 -31
- data/app/lib/actions/foreman_ansible/play_host_roles.rb +0 -42
- data/app/lib/actions/foreman_ansible/play_hostgroup_roles.rb +0 -56
- data/app/lib/actions/foreman_ansible/play_hosts_roles.rb +0 -26
- data/test/fixtures/ansible_permissions.yml +0 -11
- data/test/support/fixture_support.rb +0 -29
- data/test/support/foreman_tasks/task.rb +0 -48
- data/test/support/foreman_test_helper_additions.rb +0 -22
@@ -16,13 +16,18 @@ module ForemanAnsible
|
|
16
16
|
# more advanced cases). Therefore we have only the 'all' group
|
17
17
|
# with all hosts.
|
18
18
|
def to_hash
|
19
|
-
|
19
|
+
hosts = @hosts.map do |h|
|
20
|
+
RemoteExecutionProvider.find_ip_or_hostname(h)
|
21
|
+
end
|
22
|
+
{ 'all' => { 'hosts' => hosts },
|
20
23
|
'_meta' => { 'hostvars' => hosts_vars } }
|
21
24
|
end
|
22
25
|
|
23
26
|
def hosts_vars
|
24
27
|
hosts.reduce({}) do |hash, host|
|
25
|
-
hash.update(
|
28
|
+
hash.update(
|
29
|
+
RemoteExecutionProvider.find_ip_or_hostname(host) => host_vars(host)
|
30
|
+
)
|
26
31
|
end
|
27
32
|
end
|
28
33
|
|
@@ -3,6 +3,12 @@ module ForemanAnsible
|
|
3
3
|
class ProxySelector < ::ForemanTasks::ProxySelector
|
4
4
|
def available_proxies(host)
|
5
5
|
proxies = {}
|
6
|
+
if host.execution_interface && host.execution_interface.subnet
|
7
|
+
proxies[:subnet] = host.
|
8
|
+
execution_interface.
|
9
|
+
subnet.
|
10
|
+
remote_execution_proxies.with_features(provider)
|
11
|
+
end
|
6
12
|
proxies[:fallback] = host.smart_proxies.with_features('Ansible')
|
7
13
|
proxies[:global] = proxy_scope(host).authorized.with_features('Ansible')
|
8
14
|
proxies
|
@@ -11,6 +11,7 @@ module ForemanAnsible
|
|
11
11
|
delete_old_roles changes['obsolete'] if changes['obsolete']
|
12
12
|
end
|
13
13
|
|
14
|
+
# rubocop:disable Performance/HashEachMethods
|
14
15
|
def create_new_roles(changes)
|
15
16
|
changes.values.each do |new_role|
|
16
17
|
::AnsibleRole.create(JSON.parse(new_role))
|
@@ -22,5 +23,6 @@ module ForemanAnsible
|
|
22
23
|
::AnsibleRole.find(JSON.parse(old_role)['id']).destroy
|
23
24
|
end
|
24
25
|
end
|
26
|
+
# rubocop:enable Performance/HashEachMethods
|
25
27
|
end
|
26
28
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
<% title _("Ansible Roles") %>
|
2
2
|
|
3
|
-
<% title_actions ansible_proxy_import(hash_for_import_ansible_roles_path)
|
4
|
-
documentation_button('#4.1ImportingRoles', :root_url => ansible_doc_url) %>
|
3
|
+
<% title_actions ansible_proxy_import(hash_for_import_ansible_roles_path) %>
|
5
4
|
|
6
5
|
<table class="<%= table_css_classes 'table-fixed' %>">
|
7
6
|
<thead>
|
@@ -1,13 +1,14 @@
|
|
1
1
|
<%=
|
2
|
-
|
3
|
-
"<a title='No Roles assigned' href=\"#\">#{_('Play Roles')}</a>".html_safe
|
4
|
-
else
|
5
|
-
display_link_if_authorized(_('Play Roles'), hash_for_play_roles_hostgroup_path(:id => hostgroup), :'data-no-turbolink' => true)
|
6
|
-
end
|
7
|
-
|
2
|
+
if hostgroup.all_ansible_roles.empty?
|
8
3
|
action_buttons(
|
9
4
|
display_link_if_authorized(_('Nest'), hash_for_nest_hostgroup_path(:id => hostgroup)),
|
10
5
|
display_link_if_authorized(_('Clone'), hash_for_clone_hostgroup_path(:id => hostgroup)),
|
11
|
-
play_roles,
|
12
6
|
display_delete_if_authorized(hash_for_hostgroup_path(:id => hostgroup).merge(:auth_object => hostgroup, :authorizer => authorizer), :data => { :confirm => warning_message(hostgroup) }))
|
7
|
+
else
|
8
|
+
action_buttons(
|
9
|
+
display_link_if_authorized(_('Nest'), hash_for_nest_hostgroup_path(:id => hostgroup)),
|
10
|
+
display_link_if_authorized(_('Clone'), hash_for_clone_hostgroup_path(:id => hostgroup)),
|
11
|
+
display_link_if_authorized(_('Play Roles'), hash_for_play_roles_hostgroup_path(:id => hostgroup), :'data-no-turbolink' => true),
|
12
|
+
display_delete_if_authorized(hash_for_hostgroup_path(:id => hostgroup).merge(:auth_object => hostgroup, :authorizer => authorizer), :data => { :confirm => warning_message(hostgroup) }))
|
13
|
+
end
|
13
14
|
%>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%#
|
2
|
+
kind: job_template
|
3
|
+
name: Ansible Roles - Ansible Default
|
4
|
+
job_category: Ansible Playbook
|
5
|
+
description_format: 'Run Ansible roles for host'
|
6
|
+
feature: ansible_run_host
|
7
|
+
provider_type: Ansible
|
8
|
+
%>
|
9
|
+
|
10
|
+
---
|
11
|
+
- hosts: <%= @host.name %>
|
12
|
+
tasks:
|
13
|
+
- debug: msg=These are the parameters "{{ foreman_params }}"
|
14
|
+
roles:
|
15
|
+
<% if @host.all_ansible_roles.present? -%>
|
16
|
+
- <%= @host.all_ansible_roles.map { |role| role.name.strip }.join("\n - ") %>
|
17
|
+
<% end -%>
|
data/config/routes.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Defines the relation between Host and AnsibleRole
|
2
|
-
class CreateJoinTableHostsAnsibleRoles < ActiveRecord::Migration
|
2
|
+
class CreateJoinTableHostsAnsibleRoles < ActiveRecord::Migration[4.2]
|
3
3
|
def change
|
4
4
|
create_join_table :ansible_roles, :hosts do |t|
|
5
5
|
t.index [:host_id, :ansible_role_id]
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Renames join table between Host and Ansible Roles
|
2
|
-
class CreateHostAnsibleRoles < ActiveRecord::Migration
|
2
|
+
class CreateHostAnsibleRoles < ActiveRecord::Migration[4.2]
|
3
3
|
def change
|
4
4
|
rename_table :ansible_roles_hosts, :host_ansible_roles
|
5
5
|
add_column :host_ansible_roles, :id, :primary_key
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# to keep track of when the roles were imported
|
2
|
-
class AddColumnsToAnsibleRole < ActiveRecord::Migration
|
2
|
+
class AddColumnsToAnsibleRole < ActiveRecord::Migration[4.2]
|
3
3
|
def up
|
4
4
|
add_column :ansible_roles, :created_at, :datetime, :default => Time.now.utc
|
5
5
|
add_column :ansible_roles, :updated_at, :datetime, :default => Time.now.utc
|
@@ -1,10 +1,11 @@
|
|
1
1
|
# Defines the relation between Hostgroup and AnsibleRole
|
2
2
|
# rubocop:disable Metrics/LineLength
|
3
|
-
class CreateJoinTableHostgroupAnsibleRoles < ActiveRecord::Migration
|
3
|
+
class CreateJoinTableHostgroupAnsibleRoles < ActiveRecord::Migration[4.2]
|
4
4
|
def change
|
5
5
|
create_join_table :hostgroup, :ansible_roles, :table_name => 'hostgroup_ansible_roles' do |t|
|
6
6
|
t.index [:hostgroup_id, :ansible_role_id], :name => 'index_ansible_roles_hostgroup_on_hostgroup_id_and_role_id'
|
7
7
|
t.index [:ansible_role_id, :hostgroup_id], :name => 'index_ansible_roles_hostgroup_on_role_id_and_hostgroup_id'
|
8
|
+
# rubocop:enable Metrics/LineLength
|
8
9
|
end
|
9
10
|
end
|
10
11
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Adds primary key to join table between Hostgroup and Ansible Role
|
2
|
-
class AddPrimaryKeyHostgroupAnsibleRoles < ActiveRecord::Migration
|
2
|
+
class AddPrimaryKeyHostgroupAnsibleRoles < ActiveRecord::Migration[4.2]
|
3
3
|
def change
|
4
4
|
add_column :hostgroup_ansible_roles, :id, :primary_key
|
5
5
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Creation and updates timestamps for Ansible Roles
|
2
|
-
class AutomaticallySetRoleTimestamps < ActiveRecord::Migration
|
2
|
+
class AutomaticallySetRoleTimestamps < ActiveRecord::Migration[4.2]
|
3
3
|
def up
|
4
4
|
change_column :ansible_roles, :created_at, :datetime, :null => true,
|
5
5
|
:default => nil
|
@@ -0,0 +1,20 @@
|
|
1
|
+
User.as_anonymous_admin do
|
2
|
+
if Rails.env.test? || File.basename($0) == 'rake'
|
3
|
+
# If this file tries to import a template with a REX feature in a SeedsTest,
|
4
|
+
# it will fail - the REX feature isn't registered on SeedsTest because
|
5
|
+
# DatabaseCleaner truncates the db before every test.
|
6
|
+
# During db:seed, we also want to know the feature is registered before
|
7
|
+
# seeding the template
|
8
|
+
ForemanAnsible::Engine.register_rex_feature
|
9
|
+
end
|
10
|
+
JobTemplate.without_auditing do
|
11
|
+
Dir[File.join("#{ForemanAnsible::Engine.root}/app/views/foreman_ansible/"\
|
12
|
+
'job_templates/**/*.erb')].each do |template|
|
13
|
+
sync = !Rails.env.test? && Setting[:remote_execution_sync_templates]
|
14
|
+
JobTemplate.import_raw!(File.read(template),
|
15
|
+
:default => true,
|
16
|
+
:locked => true,
|
17
|
+
:update => sync)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -2,10 +2,10 @@ require 'deface'
|
|
2
2
|
require 'fast_gettext'
|
3
3
|
require 'gettext_i18n_rails'
|
4
4
|
require 'foreman_ansible_core'
|
5
|
+
require 'foreman_ansible/remote_execution'
|
5
6
|
|
6
7
|
module ForemanAnsible
|
7
8
|
# This engine connects ForemanAnsible with Foreman core
|
8
|
-
# rubocop:disable ClassLength
|
9
9
|
class Engine < ::Rails::Engine
|
10
10
|
engine_name 'foreman_ansible'
|
11
11
|
|
@@ -31,58 +31,8 @@ module ForemanAnsible
|
|
31
31
|
Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
|
32
32
|
end
|
33
33
|
|
34
|
-
# rubocop:disable BlockLength
|
35
34
|
initializer 'foreman_ansible.register_plugin', :before => :finisher_hook do
|
36
|
-
|
37
|
-
requires_foreman '>= 1.15'
|
38
|
-
|
39
|
-
security_block :foreman_ansible do
|
40
|
-
permission :play_roles_on_host,
|
41
|
-
{ :hosts => [:play_roles, :multiple_play_roles],
|
42
|
-
:'api/v2/hosts' => [:play_roles,
|
43
|
-
:multiple_play_roles] },
|
44
|
-
:resource_type => 'Host'
|
45
|
-
permission :play_roles_on_hostgroup,
|
46
|
-
{ :hostgroups => [:play_roles],
|
47
|
-
:'api/v2/hostgroups' => [:play_roles,
|
48
|
-
:multiple_play_roles] },
|
49
|
-
:resource_type => 'Hostgroup'
|
50
|
-
permission :view_ansible_roles,
|
51
|
-
{ :ansible_roles => [:index],
|
52
|
-
:'api/v2/ansible_roles' => [:index, :show] },
|
53
|
-
:resource_type => 'AnsibleRole'
|
54
|
-
permission :destroy_ansible_roles,
|
55
|
-
{ :ansible_roles => [:destroy],
|
56
|
-
:'api/v2/ansible_roles' => [:destroy, :obsolete] },
|
57
|
-
:resource_type => 'AnsibleRole'
|
58
|
-
permission :import_ansible_roles,
|
59
|
-
{ :ansible_roles => [:import, :confirm_import],
|
60
|
-
:'api/v2/ansible_roles' => [:import] },
|
61
|
-
:resource_type => 'AnsibleRole'
|
62
|
-
end
|
63
|
-
|
64
|
-
role 'Ansible Roles Manager',
|
65
|
-
[:play_roles_on_host, :play_roles_on_hostgroup,
|
66
|
-
:view_ansible_roles, :destroy_ansible_roles,
|
67
|
-
:import_ansible_roles]
|
68
|
-
|
69
|
-
add_all_permissions_to_default_roles
|
70
|
-
|
71
|
-
role_assignment_params = { :ansible_role_ids => [],
|
72
|
-
:ansible_roles => [] }
|
73
|
-
parameter_filter Host::Managed, role_assignment_params
|
74
|
-
parameter_filter Hostgroup, role_assignment_params
|
75
|
-
|
76
|
-
divider :top_menu, :caption => N_('Ansible'), :parent => :configure_menu
|
77
|
-
menu :top_menu, :ansible_roles,
|
78
|
-
:caption => N_('Roles'),
|
79
|
-
:url_hash => { :controller => :ansible_roles, :action => :index },
|
80
|
-
:parent => :configure_menu
|
81
|
-
|
82
|
-
apipie_documented_controllers [
|
83
|
-
"#{ForemanAnsible::Engine.root}/app/controllers/api/v2/*.rb"
|
84
|
-
]
|
85
|
-
end
|
35
|
+
require 'foreman_ansible/register'
|
86
36
|
end
|
87
37
|
|
88
38
|
initializer('foreman_ansible.require_dynflow',
|
@@ -117,6 +67,7 @@ module ForemanAnsible
|
|
117
67
|
Apipie.configuration.checksum_path += ['/foreman_ansible/api/']
|
118
68
|
end
|
119
69
|
|
70
|
+
# rubocop:disable BlockLength
|
120
71
|
config.to_prepare do
|
121
72
|
begin
|
122
73
|
foreman_version = ::Foreman::Version.new
|
@@ -146,9 +97,16 @@ module ForemanAnsible
|
|
146
97
|
::Api::V2::HostgroupsController.send(
|
147
98
|
:include, ForemanAnsible::Api::V2::HostgroupsControllerExtensions
|
148
99
|
)
|
149
|
-
rescue => e
|
100
|
+
rescue StandardError => e
|
150
101
|
Rails.logger.warn "Foreman Ansible: skipping engine hook (#{e})"
|
151
102
|
end
|
152
103
|
end
|
104
|
+
# rubocop:enable BlockLength
|
105
|
+
|
106
|
+
rake_tasks do
|
107
|
+
Rake::Task['db:seed'].enhance do
|
108
|
+
ForemanAnsible::Engine.load_seed
|
109
|
+
end
|
110
|
+
end
|
153
111
|
end
|
154
112
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# rubocop:disable BlockLength
|
2
|
+
Foreman::Plugin.register :foreman_ansible do
|
3
|
+
requires_foreman '>= 1.16'
|
4
|
+
|
5
|
+
security_block :foreman_ansible do
|
6
|
+
permission :play_roles_on_host,
|
7
|
+
{ :hosts => [:play_roles, :multiple_play_roles],
|
8
|
+
:'api/v2/hosts' => [:play_roles,
|
9
|
+
:multiple_play_roles] },
|
10
|
+
:resource_type => 'Host'
|
11
|
+
permission :play_roles_on_hostgroup,
|
12
|
+
{ :hostgroups => [:play_roles],
|
13
|
+
:'api/v2/hostgroups' => [:play_roles,
|
14
|
+
:multiple_play_roles] },
|
15
|
+
:resource_type => 'Hostgroup'
|
16
|
+
permission :view_ansible_roles,
|
17
|
+
{ :ansible_roles => [:index],
|
18
|
+
:'api/v2/ansible_roles' => [:index, :show] },
|
19
|
+
:resource_type => 'AnsibleRole'
|
20
|
+
permission :destroy_ansible_roles,
|
21
|
+
{ :ansible_roles => [:destroy],
|
22
|
+
:'api/v2/ansible_roles' => [:destroy, :obsolete] },
|
23
|
+
:resource_type => 'AnsibleRole'
|
24
|
+
permission :import_ansible_roles,
|
25
|
+
{ :ansible_roles => [:import, :confirm_import],
|
26
|
+
:'api/v2/ansible_roles' => [:import] },
|
27
|
+
:resource_type => 'AnsibleRole'
|
28
|
+
end
|
29
|
+
|
30
|
+
role 'Ansible Roles Manager',
|
31
|
+
[:play_roles_on_host, :play_roles_on_hostgroup,
|
32
|
+
:view_ansible_roles, :destroy_ansible_roles,
|
33
|
+
:import_ansible_roles]
|
34
|
+
|
35
|
+
add_all_permissions_to_default_roles
|
36
|
+
|
37
|
+
role_assignment_params = { :ansible_role_ids => [],
|
38
|
+
:ansible_roles => [] }
|
39
|
+
parameter_filter Host::Managed, role_assignment_params
|
40
|
+
parameter_filter Hostgroup, role_assignment_params
|
41
|
+
|
42
|
+
divider :top_menu, :caption => N_('Ansible'), :parent => :configure_menu
|
43
|
+
menu :top_menu, :ansible_roles,
|
44
|
+
:caption => N_('Roles'),
|
45
|
+
:url_hash => { :controller => :ansible_roles, :action => :index },
|
46
|
+
:parent => :configure_menu
|
47
|
+
|
48
|
+
apipie_documented_controllers [
|
49
|
+
"#{ForemanAnsible::Engine.root}/app/controllers/api/v2/*.rb"
|
50
|
+
]
|
51
|
+
end
|
52
|
+
# rubocop:enable BlockLength
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'foreman_remote_execution'
|
2
|
+
|
3
|
+
module ForemanAnsible
|
4
|
+
# Dependencies related with the remote execution plugin
|
5
|
+
class Engine < ::Rails::Engine
|
6
|
+
config.to_prepare do
|
7
|
+
RemoteExecutionProvider.register(
|
8
|
+
:Ansible,
|
9
|
+
ForemanAnsible::AnsibleProvider
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.register_rex_feature
|
14
|
+
RemoteExecutionFeature.register(
|
15
|
+
:ansible_run_host,
|
16
|
+
N_('Ansible: Run host roles'),
|
17
|
+
:description => N_('Runs an Ansible playbook which contains all'\
|
18
|
+
' the roles defined for a host')
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -2,14 +2,16 @@ require 'test_plugin_helper'
|
|
2
2
|
# functional tests for AnsibleRolesController
|
3
3
|
class AnsibleRolesControllerTest < ActionController::TestCase
|
4
4
|
setup do
|
5
|
-
@role =
|
5
|
+
@role = FactoryBot.create(:ansible_role)
|
6
6
|
end
|
7
7
|
|
8
8
|
basic_index_test
|
9
9
|
|
10
10
|
test 'should destroy role' do
|
11
11
|
assert_difference('AnsibleRole.count', -1) do
|
12
|
-
delete :destroy,
|
12
|
+
delete :destroy,
|
13
|
+
:params => { :id => @role.id },
|
14
|
+
:session => set_session_user
|
13
15
|
end
|
14
16
|
assert_redirected_to ansible_roles_url
|
15
17
|
end
|
@@ -5,18 +5,20 @@ module Api
|
|
5
5
|
# Tests for the controller to CRUD Ansible Roles
|
6
6
|
class AnsibleRolesControllerTest < ActionController::TestCase
|
7
7
|
setup do
|
8
|
-
@role =
|
8
|
+
@role = FactoryBot.create(:ansible_role)
|
9
9
|
end
|
10
10
|
|
11
11
|
test 'should get index' do
|
12
|
-
get :index,
|
12
|
+
get :index, :session => set_session_user
|
13
13
|
response = JSON.parse(@response.body)
|
14
14
|
refute_empty response['results']
|
15
15
|
assert_response :success
|
16
16
|
end
|
17
17
|
|
18
18
|
test 'should destroy' do
|
19
|
-
delete :destroy,
|
19
|
+
delete :destroy,
|
20
|
+
:params => { :id => @role.id },
|
21
|
+
:session => set_session_user
|
20
22
|
assert_response :ok
|
21
23
|
refute AnsibleRole.exists?(@role.id)
|
22
24
|
end
|
@@ -5,46 +5,38 @@ module Api
|
|
5
5
|
module V2
|
6
6
|
# Tests for the extra methods to play roles on Hostgroup
|
7
7
|
class HostgroupsControllerTest < ActionController::TestCase
|
8
|
-
include ::Dynflow::Testing
|
9
|
-
|
10
8
|
setup do
|
11
|
-
@host1 =
|
12
|
-
@host2 =
|
13
|
-
end
|
14
|
-
|
15
|
-
after do
|
16
|
-
::ForemanTasks::Task::DynflowTask.all.each do |task|
|
17
|
-
task.destroy
|
18
|
-
task.delete
|
19
|
-
end
|
9
|
+
@host1 = FactoryBot.create(:host, :with_hostgroup)
|
10
|
+
@host2 = FactoryBot.create(:host, :with_hostgroup)
|
20
11
|
end
|
21
12
|
|
22
13
|
test 'should return an not_found due to non-existent host_id' do
|
23
|
-
post :play_roles, :id => 'non-existent'
|
14
|
+
post :play_roles, :params => { :id => 'non-existent' }
|
24
15
|
response = JSON.parse(@response.body)
|
25
16
|
refute_empty response
|
26
17
|
assert_response :not_found
|
27
18
|
end
|
28
19
|
|
29
20
|
test 'should trigger task on host group' do
|
30
|
-
|
21
|
+
load File.join(ForemanAnsible::Engine.root,
|
22
|
+
'/db/seeds.d/75_job_templates.rb')
|
23
|
+
::JobInvocationComposer.any_instance.expects(:trigger!).returns(true)
|
24
|
+
target = @host1
|
25
|
+
post :play_roles, :params => { :id => target.hostgroup.id }
|
31
26
|
response = JSON.parse(@response.body)
|
32
|
-
|
33
|
-
assert response['message']['foreman_tasks'].key?('id'),
|
34
|
-
'task id not contained in response'
|
35
|
-
assert_equal response['message']['hostgroup']['name'],
|
36
|
-
@host1.hostgroup.name,
|
37
|
-
'host group name not contained in response'
|
38
|
-
assert_response :success
|
27
|
+
assert_job_invocation_is_ok(response, target.id)
|
39
28
|
end
|
40
29
|
|
41
30
|
test 'should trigger two host group tasks' do
|
42
|
-
|
43
|
-
|
31
|
+
load File.join(ForemanAnsible::Engine.root,
|
32
|
+
'/db/seeds.d/75_job_templates.rb')
|
33
|
+
::JobInvocationComposer.any_instance.expects(:trigger!).returns(true)
|
34
|
+
target = [@host1, @host2]
|
35
|
+
post :multiple_play_roles, :params => {
|
36
|
+
:hostgroup_ids => target.map(&:hostgroup_id)
|
37
|
+
}
|
44
38
|
response = JSON.parse(@response.body)
|
45
|
-
|
46
|
-
assert response['message'].length == 2, 'should trigger two tasks'
|
47
|
-
assert_response :success
|
39
|
+
assert_job_invocation_is_ok(response, target.map(&:id))
|
48
40
|
end
|
49
41
|
end
|
50
42
|
end
|