foreman_ansible 11.2.0 → 11.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf610471f0b7c4357d630471f3f34f4d99f84d91060904ebc7baee85a0a26162
4
- data.tar.gz: 1bf0b29be5c77f3942fd0ec3f1e00b22bdb9d4dc04deda4cb119763a25c1e042
3
+ metadata.gz: 98bb40689075e650d183fa18b3ca8d17efc0853118e25cb8336776ea7b232316
4
+ data.tar.gz: '082247e41adcf83e7bd7a4f4190550e05e01fe3d9c96cefd7d3cd03284a9e37b'
5
5
  SHA512:
6
- metadata.gz: 16c9980e47104205c17326496bf12c2bbf3913db2c80155395b20f0b35f78e7d94c25ad763778431ad11b25ae894a1c5e4c92a14483efe769012fafcc1dbf084
7
- data.tar.gz: cba6767ef45ff810159320b9351e89f9e984234364e9d2206aa72ec172d2dd5878111e2ff7febd058ae6ba9aa3642b31e9aad446997117dd799138699b0c5d1d
6
+ metadata.gz: a3416cfa163fd8cca335bf8bd35b5ad49ab68f2fccfc18286593bd9fbb9e93dad23aa2503eeb0226ea4275977ec5ebeea0dcef66a4f1aa94862a35349f35f3ae
7
+ data.tar.gz: 5814abb5d63b7a9e702b1f899e7b54626dabc0da4da9d7b2b16bc54aed88cad7853c8653b6137a6188a5f783a7dcd11120e9fd29d68ea3b18241299f03adcf7a
@@ -15,6 +15,7 @@ module ForemanAnsible
15
15
  # rubocop:disable Rails/LexicallyScopedActionFilter
16
16
  included do
17
17
  before_action :find_ansible_roles, :only => [:assign_ansible_roles]
18
+ before_action :find_hostgroup_ansible_role, :only => [:add_ansible_role, :remove_ansible_role]
18
19
 
19
20
  api :POST, '/hostgroups/:id/play_roles',
20
21
  N_('Runs all Ansible roles on a hostgroup')
@@ -64,6 +65,30 @@ module ForemanAnsible
64
65
  find_resource
65
66
  process_response @hostgroup.update(:ansible_roles => @ansible_roles)
66
67
  end
68
+
69
+ api :PUT, '/hostgroups/:id/ansible_roles',
70
+ N_('Directly add an Ansible role to a hostgroup')
71
+ param :id, :identifier, :required => true
72
+ param :ansible_role_id, :identifier,
73
+ N_('Ansible role to add to a hostgroup'),
74
+ :required => true
75
+
76
+ def add_ansible_role
77
+ process_response @hostgroup.ansible_roles << @ansible_role
78
+ rescue ActiveRecord::RecordInvalid => e
79
+ render_exception(e, :status => :unprocessable_entity)
80
+ end
81
+
82
+ api :DELETE, '/hostgroups/:id/ansible_roles/:ansible_role_id',
83
+ N_('Remove directly assigned Ansible role from a hostgroup')
84
+ param :id, :identifier, :required => true
85
+ param :ansible_role_id, :identifier,
86
+ N_('Ansible role to remove from a hostgroup'),
87
+ :required => true
88
+
89
+ def remove_ansible_role
90
+ process_response @hostgroup.ansible_roles.delete(@ansible_role)
91
+ end
67
92
  end
68
93
  # rubocop:enable Rails/LexicallyScopedActionFilter
69
94
 
@@ -87,6 +112,8 @@ module ForemanAnsible
87
112
  when 'play_roles', 'multiple_play_roles', 'ansible_roles',
88
113
  'assign_ansible_roles'
89
114
  :view
115
+ when 'add_ansible_role', 'remove_ansible_role'
116
+ :edit
90
117
  else
91
118
  super
92
119
  end
@@ -14,7 +14,9 @@ module ForemanAnsible
14
14
  # cannot extend the method properly.
15
15
  # rubocop:disable Rails/LexicallyScopedActionFilter
16
16
  included do
17
+ skip_before_action :find_resource, :only => [:add_ansible_role, :remove_ansible_role]
17
18
  before_action :find_ansible_roles, :only => [:assign_ansible_roles]
19
+ before_action :find_host_ansible_role, :only => [:add_ansible_role, :remove_ansible_role]
18
20
 
19
21
  def find_resource
20
22
  return true if params[:action] == 'multiple_play_roles'
@@ -64,6 +66,30 @@ module ForemanAnsible
64
66
  def assign_ansible_roles
65
67
  process_response @host.update(:ansible_roles => @ansible_roles)
66
68
  end
69
+
70
+ api :PUT, '/hosts/:id/ansible_roles',
71
+ N_('Directly add an Ansible role to a host')
72
+ param :id, :identifier, :required => true
73
+ param :ansible_role_id, :identifier,
74
+ N_('Ansible role to add to a host'),
75
+ :required => true
76
+
77
+ def add_ansible_role
78
+ process_response @host.ansible_roles << @ansible_role
79
+ rescue ActiveRecord::RecordInvalid => e
80
+ render_exception(e, :status => :unprocessable_entity)
81
+ end
82
+
83
+ api :DELETE, '/hosts/:id/ansible_roles/:ansible_role_id',
84
+ N_('Remove directly assigned Ansible role from a host')
85
+ param :id, :identifier, :required => true
86
+ param :ansible_role_id, :identifier,
87
+ N_('Ansible role to remove from a host'),
88
+ :required => true
89
+
90
+ def remove_ansible_role
91
+ process_response @host.ansible_roles.delete(@ansible_role)
92
+ end
67
93
  end
68
94
  # rubocop:enable Rails/LexicallyScopedActionFilter
69
95
 
@@ -74,6 +100,8 @@ module ForemanAnsible
74
100
  when 'play_roles', 'multiple_play_roles', 'ansible_roles',
75
101
  'assign_ansible_roles'
76
102
  :view
103
+ when 'add_ansible_role', 'remove_ansible_role'
104
+ :edit
77
105
  else
78
106
  super
79
107
  end
@@ -12,6 +12,26 @@ module ForemanAnsible
12
12
  rescue ActiveRecord::RecordNotFound => e
13
13
  not_found(e.message)
14
14
  end
15
+
16
+ def find_ansible_role
17
+ @ansible_role = AnsibleRole.authorized(:view_ansible_roles).find(params[:ansible_role_id])
18
+ rescue ActiveRecord::RecordNotFound => e
19
+ not_found(e.message)
20
+ end
21
+
22
+ def find_host_ansible_role
23
+ find_ansible_role
24
+ @host = Host.authorized(:view_hosts).find(params[:id])
25
+ rescue ActiveRecord::RecordNotFound => e
26
+ not_found(e.message)
27
+ end
28
+
29
+ def find_hostgroup_ansible_role
30
+ find_ansible_role
31
+ @hostgroup = Hostgroup.authorized(:view_hostgroups).find(params[:id])
32
+ rescue ActiveRecord::RecordNotFound => e
33
+ not_found(e.message)
34
+ end
15
35
  end
16
36
  end
17
37
  end
data/config/routes.rb CHANGED
@@ -13,6 +13,8 @@ Rails.application.routes.draw do
13
13
  post :play_roles
14
14
  get :ansible_roles
15
15
  post :assign_ansible_roles
16
+ put :ansible_roles, :to => 'hosts#add_ansible_role'
17
+ delete 'ansible_roles/:ansible_role_id', :to => 'hosts#remove_ansible_role', :constraints => { id: %r{[^\/]+} }
16
18
  end
17
19
  collection do
18
20
  post :multiple_play_roles
@@ -23,6 +25,8 @@ Rails.application.routes.draw do
23
25
  post :play_roles
24
26
  get :ansible_roles
25
27
  post :assign_ansible_roles
28
+ put :ansible_roles, :to => 'hostgroups#add_ansible_role'
29
+ delete 'ansible_roles/:ansible_role_id', :to => 'hostgroups#remove_ansible_role', :constraints => { id: %r{[^\/]+} }
26
30
  end
27
31
  collection do
28
32
  post :multiple_play_roles
@@ -151,10 +151,10 @@ Foreman::Plugin.register :foreman_ansible do
151
151
  :'api/v2/ansible_inventories' => [:hostgroups] },
152
152
  :resource_type => 'Hostgroup'
153
153
  permission :edit_hosts,
154
- { :'api/v2/hosts' => [:assign_ansible_roles] },
154
+ { :'api/v2/hosts' => [:assign_ansible_roles, :add_ansible_role, :remove_ansible_role] },
155
155
  :resource_type => 'Host'
156
156
  permission :edit_hostgroups,
157
- { :'api/v2/hostgroups' => [:assign_ansible_roles] },
157
+ { :'api/v2/hostgroups' => [:assign_ansible_roles, :add_ansible_role, :remove_ansible_role] },
158
158
  :resource_type => 'Hostgroup'
159
159
  permission :generate_ansible_inventory,
160
160
  { :'api/v2/ansible_inventories' => [:schedule] }
@@ -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 = '11.2.0'
7
+ VERSION = '11.2.1'
8
8
  end
@@ -63,6 +63,32 @@ module Api
63
63
  assert_response :success
64
64
  assert_equal assigns('hostgroup').ansible_roles, [@ansible_role2, @ansible_role1]
65
65
  end
66
+
67
+ test 'should append a role to a hostgroup with a correct ordering' do
68
+ hostgroup = FactoryBot.create(:hostgroup,
69
+ :ansible_role_ids => [@ansible_role1.id])
70
+ post :add_ansible_role,
71
+ :params => {
72
+ :id => hostgroup.id,
73
+ :ansible_role_id => [@ansible_role2.id]
74
+ },
75
+ :session => set_session_user
76
+ assert_response 201
77
+ assert_equal assigns('hostgroup').ansible_roles, [@ansible_role1, @ansible_role2]
78
+ end
79
+
80
+ test 'should remove only specified roles from a hostgroup' do
81
+ hostgroup = FactoryBot.create(:hostgroup,
82
+ :ansible_role_ids => [@ansible_role2.id, @ansible_role1.id])
83
+ delete :remove_ansible_role,
84
+ :params => {
85
+ :id => hostgroup.id,
86
+ :ansible_role_id => [@ansible_role2.id]
87
+ },
88
+ :session => set_session_user
89
+ assert_response :success
90
+ assert_equal assigns('hostgroup').ansible_roles, [@ansible_role1]
91
+ end
66
92
  end
67
93
  end
68
94
  end
@@ -9,6 +9,7 @@ module Api
9
9
  setup do
10
10
  @ansible_role1 = FactoryBot.create(:ansible_role)
11
11
  @ansible_role2 = FactoryBot.create(:ansible_role)
12
+ @ansible_role3 = FactoryBot.create(:ansible_role)
12
13
  @host1 = FactoryBot.create(:host)
13
14
  @host2 = FactoryBot.create(:host)
14
15
  @host3 = FactoryBot.create(:host)
@@ -87,6 +88,34 @@ module Api
87
88
  assert_response :success
88
89
  assert_equal assigns('host').ansible_roles, [@ansible_role2, @ansible_role1]
89
90
  end
91
+
92
+ test 'should append a role to a host with a correct ordering' do
93
+ host = FactoryBot.create(:host,
94
+ :managed => false,
95
+ :ansible_role_ids => [@ansible_role3.id])
96
+ post :add_ansible_role,
97
+ :params => {
98
+ :id => host.id,
99
+ :ansible_role_id => @ansible_role2.id
100
+ },
101
+ :session => set_session_user
102
+ assert_response 201
103
+ assert_equal assigns('host').ansible_roles, [@ansible_role3, @ansible_role2]
104
+ end
105
+
106
+ test 'should remove only specified roles from a host' do
107
+ host = FactoryBot.create(:host,
108
+ :managed => false,
109
+ :ansible_role_ids => [@ansible_role3.id, @ansible_role2.id, @ansible_role1.id])
110
+ delete :remove_ansible_role,
111
+ :params => {
112
+ :id => host.id,
113
+ :ansible_role_id => [@ansible_role2.id]
114
+ },
115
+ :session => set_session_user
116
+ assert_response :success
117
+ assert_equal assigns('host').ansible_roles, [@ansible_role3, @ansible_role1]
118
+ end
90
119
  end
91
120
  end
92
121
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_ansible
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.2.0
4
+ version: 11.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Lobato Garcia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-27 00:00:00.000000000 Z
11
+ date: 2023-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acts_as_list
@@ -489,9 +489,9 @@ test_files:
489
489
  - test/functional/api/v2/ansible_playbooks_controller_test.rb
490
490
  - test/functional/api/v2/ansible_roles_controller_test.rb
491
491
  - test/functional/api/v2/ansible_variables_controller_test.rb
492
+ - test/functional/api/v2/ansible_inventories_controller_test.rb
492
493
  - test/functional/api/v2/hostgroups_controller_test.rb
493
494
  - test/functional/api/v2/hosts_controller_test.rb
494
- - test/functional/api/v2/ansible_inventories_controller_test.rb
495
495
  - test/functional/hosts_controller_test.rb
496
496
  - test/functional/ui_ansible_roles_controller_test.rb
497
497
  - test/graphql/mutations/hosts/assign_ansible_roles_mutation_test.rb