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.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/app/controllers/api/v2/ansible_inventories_controller.rb +50 -0
- data/app/models/ansible_variable.rb +1 -0
- data/app/models/foreman_ansible/ansible_provider.rb +25 -1
- data/app/models/foreman_ansible/fact_name.rb +5 -1
- data/app/models/setting/ansible.rb +81 -88
- data/app/services/foreman_ansible/fact_importer.rb +5 -8
- data/app/services/foreman_ansible/fact_parser.rb +16 -4
- data/app/services/foreman_ansible/inventory_creator.rb +1 -12
- data/app/views/foreman_ansible/job_templates/run_playbook-ansible_default.erb +17 -0
- data/config/routes.rb +1 -2
- data/db/migrate/20190328114657_remove_top_level_ansible_variables_setting.rb +1 -1
- data/db/migrate/20191010074208_remove_ansible_implementation_setting.rb +5 -0
- data/db/seeds.d/75_job_templates.rb +2 -2
- data/lib/foreman_ansible/register.rb +5 -2
- data/lib/foreman_ansible/remote_execution.rb +6 -0
- data/lib/foreman_ansible/version.rb +1 -1
- data/locale/Makefile +7 -0
- data/locale/de/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/de/foreman_ansible.po +1 -1
- data/locale/en/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/en/foreman_ansible.po +1 -1
- data/locale/es/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/es/foreman_ansible.po +1 -1
- data/locale/fr/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/fr/foreman_ansible.po +1 -1
- data/locale/it/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/it/foreman_ansible.po +1 -1
- data/locale/ja/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/ja/foreman_ansible.po +1 -1
- data/locale/ko/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/ko/foreman_ansible.po +1 -1
- data/locale/pt_BR/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/pt_BR/foreman_ansible.po +1 -1
- data/locale/ru/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/ru/foreman_ansible.po +1 -1
- data/locale/zh_CN/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/zh_CN/foreman_ansible.po +1 -1
- data/locale/zh_TW/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/zh_TW/foreman_ansible.po +1 -1
- data/package.json +3 -3
- data/test/unit/ansible_provider_test.rb +16 -0
- data/test/unit/ansible_variable_test.rb +10 -0
- data/test/unit/lib/foreman_ansible_core/ansible_runner_test.rb +51 -0
- data/test/unit/lib/foreman_ansible_core/playbook_runner_test.rb +34 -1
- data/test/unit/services/fact_importer_test.rb +4 -2
- data/test/unit/services/fact_parser_test.rb +57 -4
- data/test/unit/services/inventory_creator_test.rb +10 -25
- data/webpack/__mocks__/foremanReact/common/I18n.js +1 -0
- data/webpack/components/AnsibleRolesSwitcher/AnsibleRolesSwitcher.js +1 -0
- data/webpack/components/AnsibleRolesSwitcher/components/AnsiblePermissionDenied.js +1 -0
- data/webpack/components/AnsibleRolesSwitcher/components/AnsibleRole.js +1 -0
- data/webpack/components/AnsibleRolesSwitcher/components/AssignedRolesList.js +18 -23
- data/webpack/index.js +5 -4
- metadata +15 -11
- data/app/lib/actions/foreman_ansible/helpers/host_common.rb +0 -39
@@ -71,13 +71,12 @@ module ForemanAnsible
|
|
71
71
|
'_timestamp' => '2018-10-29 20:01:51 +0100',
|
72
72
|
'ansible_facts' =>
|
73
73
|
{
|
74
|
-
'ansible_interfaces' => [
|
75
|
-
'eth0'
|
76
|
-
],
|
74
|
+
'ansible_interfaces' => %w[eth0 eth1 eth2 bond0],
|
77
75
|
'ansible_eth0' => {
|
78
76
|
'active' => true,
|
79
77
|
'device' => 'eth0',
|
80
|
-
|
78
|
+
'macaddress' => '52:54:00:04:55:37',
|
79
|
+
'perm_macaddress' => '52:54:00:04:55:37',
|
81
80
|
'ipv4' => {
|
82
81
|
'address' => '10.10.0.10',
|
83
82
|
'netmask' => '255.255.0.0',
|
@@ -93,6 +92,45 @@ module ForemanAnsible
|
|
93
92
|
'mtu' => 1500,
|
94
93
|
'promisc' => false,
|
95
94
|
'type' => 'ether'
|
95
|
+
},
|
96
|
+
'ansible_eth1' => {
|
97
|
+
'active' => true,
|
98
|
+
'device' => 'eth1',
|
99
|
+
'macaddress' => '52:54:00:04:55:38',
|
100
|
+
'perm_macaddress' => '52:54:00:04:55:38',
|
101
|
+
'mtu' => 1500,
|
102
|
+
'promisc' => false,
|
103
|
+
'type' => 'ether'
|
104
|
+
},
|
105
|
+
'ansible_eth2' => {
|
106
|
+
'active' => true,
|
107
|
+
'device' => 'eth2',
|
108
|
+
'macaddress' => '52:54:00:04:55:38',
|
109
|
+
'perm_macaddress' => '52:54:00:04:55:39',
|
110
|
+
'mtu' => 1500,
|
111
|
+
'promisc' => false,
|
112
|
+
'type' => 'ether'
|
113
|
+
},
|
114
|
+
'ansible_bond0' => {
|
115
|
+
'active' => true,
|
116
|
+
'device' => 'bond0',
|
117
|
+
'macaddress' => '52:54:00:04:55:38',
|
118
|
+
'ipv4' => {
|
119
|
+
'address' => '10.10.0.11',
|
120
|
+
'netmask' => '255.255.0.0',
|
121
|
+
'network' => '10.10.0.0'
|
122
|
+
},
|
123
|
+
'ipv6' => [
|
124
|
+
{
|
125
|
+
'address' => 'fd00::5054:00ff:fe04:5538',
|
126
|
+
'prefix' => '64',
|
127
|
+
'scope' => 'host'
|
128
|
+
}
|
129
|
+
],
|
130
|
+
'mtu' => 1500,
|
131
|
+
'promisc' => false,
|
132
|
+
'slaves' => %w[eth1 eth2],
|
133
|
+
'type' => 'bonding'
|
96
134
|
}
|
97
135
|
}
|
98
136
|
)
|
@@ -105,6 +143,21 @@ module ForemanAnsible
|
|
105
143
|
assert_equal '10.10.0.10', interface['ipaddress']
|
106
144
|
assert_equal 'fd00::5054:00ff:fe04:5537', interface['ipaddress6']
|
107
145
|
end
|
146
|
+
|
147
|
+
test 'Parses MAC address correctly when bonded' do
|
148
|
+
iut0 = 'eth0'.dup
|
149
|
+
iut1 = 'eth1'.dup
|
150
|
+
iut2 = 'eth2'.dup
|
151
|
+
but0 = 'bond0'.dup
|
152
|
+
interface_eth0 = @facts_parser.get_facts_for_interface(iut0)
|
153
|
+
interface_eth1 = @facts_parser.get_facts_for_interface(iut1)
|
154
|
+
interface_eth2 = @facts_parser.get_facts_for_interface(iut2)
|
155
|
+
interface_bond0 = @facts_parser.get_facts_for_interface(but0)
|
156
|
+
assert_equal '52:54:00:04:55:37', interface_eth0['macaddress']
|
157
|
+
assert_equal '52:54:00:04:55:38', interface_eth1['macaddress']
|
158
|
+
assert_equal '52:54:00:04:55:39', interface_eth2['macaddress']
|
159
|
+
assert_equal '52:54:00:04:55:38', interface_bond0['macaddress']
|
160
|
+
end
|
108
161
|
end
|
109
162
|
|
110
163
|
# Tests for Debian parser
|
@@ -41,17 +41,14 @@ module ForemanAnsible
|
|
41
41
|
returns(2222).at_least_once
|
42
42
|
Setting.expects(:[]).with('remote_execution_ssh_user').
|
43
43
|
returns('root').at_least_once
|
44
|
-
Setting.expects(:[]).with('remote_execution_ssh_password').
|
45
|
-
returns('asafepassword').at_least_once
|
46
|
-
Setting.expects(:[]).with('remote_execution_sudo_password').
|
47
|
-
returns('foobar').at_least_once
|
48
44
|
Setting.expects(:[]).with('ansible_winrm_server_cert_validation').
|
49
45
|
returns(true).at_least_once
|
50
46
|
Setting.expects(:[]).with('ansible_connection').
|
51
47
|
returns('ssh').at_least_once
|
48
|
+
Setting.expects(:[]).with('remote_execution_effective_user_method').
|
49
|
+
returns('sudo').at_least_once
|
52
50
|
@host.expects(:host_params).returns(extra_options).at_least_once
|
53
|
-
@template_invocation.job_invocation.expects(:password).
|
54
|
-
returns(nil).at_least_once
|
51
|
+
@template_invocation.job_invocation.expects(:password).never
|
55
52
|
inventory = ForemanAnsible::InventoryCreator.new(@host,
|
56
53
|
@template_invocation)
|
57
54
|
connection_params = inventory.connection_params(@host)
|
@@ -71,26 +68,12 @@ module ForemanAnsible
|
|
71
68
|
connection_params['ansible_ssh_private_key_file']
|
72
69
|
assert_equal extra_options['ansible_port'],
|
73
70
|
connection_params['ansible_port']
|
74
|
-
assert_equal Setting['remote_execution_ssh_password'],
|
75
|
-
connection_params['ansible_ssh_pass']
|
76
|
-
assert_equal Setting['remote_execution_sudo_password'],
|
77
|
-
connection_params['ansible_sudo_pass']
|
78
71
|
assert_equal Setting['ansible_winrm_server_cert_validation'],
|
79
72
|
connection_params['ansible_winrm_server_cert_validation']
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
@template_invocation)
|
85
|
-
assert_equal(@template_invocation.job_invocation.password,
|
86
|
-
inventory.rex_ssh_password(@host))
|
87
|
-
end
|
88
|
-
|
89
|
-
test 'job invocation sudo password is passed when available' do
|
90
|
-
inventory = ForemanAnsible::InventoryCreator.new(@host,
|
91
|
-
@template_invocation)
|
92
|
-
assert_equal(@template_invocation.job_invocation.sudo_password,
|
93
|
-
inventory.rex_sudo_password(@host))
|
73
|
+
assert_equal Setting['remote_execution_effective_user_method'],
|
74
|
+
connection_params['ansible_become_method']
|
75
|
+
refute connection_params.key?('ansible_ssh_pass')
|
76
|
+
refute connection_params.key?('ansible_sudo_pass')
|
94
77
|
end
|
95
78
|
|
96
79
|
test 'ssh private key is passed when available' do
|
@@ -105,6 +88,8 @@ module ForemanAnsible
|
|
105
88
|
returns('root')
|
106
89
|
host.params.expects(:[]).with('remote_execution_ssh_port').
|
107
90
|
returns('2222')
|
91
|
+
host.params.expects(:[]).with('remote_execution_effective_user_method').
|
92
|
+
returns('sudo')
|
108
93
|
connection_params = inventory.connection_params(host)
|
109
94
|
assert_equal path_to_key,
|
110
95
|
connection_params['ansible_ssh_private_key_file']
|
@@ -123,7 +108,7 @@ module ForemanAnsible
|
|
123
108
|
template_invocation = FactoryBot.build(:template_invocation,
|
124
109
|
:template => job_template,
|
125
110
|
:job_invocation => job_invocation)
|
126
|
-
job_invocation.expects(:password).
|
111
|
+
job_invocation.expects(:password).never
|
127
112
|
input_value = FactoryBot.create(
|
128
113
|
:template_invocation_input_value,
|
129
114
|
:template_invocation => template_invocation,
|
@@ -0,0 +1 @@
|
|
1
|
+
export const translate = s => s;
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
2
2
|
import { Grid, Row, Col } from 'patternfly-react';
|
3
3
|
import { lowerCase } from 'lodash';
|
4
4
|
import PropTypes from 'prop-types';
|
5
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
5
6
|
|
6
7
|
import AvailableRolesList from './components/AvailableRolesList';
|
7
8
|
import AssignedRolesList from './components/AssignedRolesList';
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { ListView, Tooltip, OverlayTrigger } from 'patternfly-react';
|
3
3
|
import classNames from 'classnames';
|
4
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
4
5
|
|
5
6
|
import AnsibleRoleActionButton from './AnsibleRoleActionButton';
|
6
7
|
import '../AnsibleRolesSwitcher.scss';
|
@@ -16,28 +16,6 @@ const AssignedRolesList = ({
|
|
16
16
|
}) => {
|
17
17
|
const directlyAssignedRoles = assignedRoles.filter(role => !role.inherited);
|
18
18
|
|
19
|
-
const inputFields = (directlyAssignedRoles, resourceName) => {
|
20
|
-
let result;
|
21
|
-
if (isEmpty(directlyAssignedRoles)) {
|
22
|
-
result = <input type="hidden" name={`${resourceName}[ansible_role_ids][]`} value=""/>
|
23
|
-
} else {
|
24
|
-
result = directlyAssignedRoles.map(role => (
|
25
|
-
<input
|
26
|
-
key={role.id}
|
27
|
-
type="hidden"
|
28
|
-
name={`${resourceName}[ansible_role_ids][]`}
|
29
|
-
value={role.id}
|
30
|
-
/>
|
31
|
-
))
|
32
|
-
}
|
33
|
-
|
34
|
-
return (
|
35
|
-
<div>
|
36
|
-
{ result }
|
37
|
-
</div>
|
38
|
-
);
|
39
|
-
}
|
40
|
-
|
41
19
|
return (
|
42
20
|
<div>
|
43
21
|
<ListView>
|
@@ -60,7 +38,24 @@ const AssignedRolesList = ({
|
|
60
38
|
/>
|
61
39
|
))}
|
62
40
|
</ListView>
|
63
|
-
|
41
|
+
<div>
|
42
|
+
{isEmpty(directlyAssignedRoles) ? (
|
43
|
+
<input
|
44
|
+
type="hidden"
|
45
|
+
name={`${resourceName}[ansible_role_ids][]`}
|
46
|
+
value=""
|
47
|
+
/>
|
48
|
+
) : (
|
49
|
+
directlyAssignedRoles.map(role => (
|
50
|
+
<input
|
51
|
+
key={role.id}
|
52
|
+
type="hidden"
|
53
|
+
name={`${resourceName}[ansible_role_ids][]`}
|
54
|
+
value={role.id}
|
55
|
+
/>
|
56
|
+
))
|
57
|
+
)}
|
58
|
+
</div>
|
64
59
|
</div>
|
65
60
|
);
|
66
61
|
};
|
data/webpack/index.js
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
+
import $ from 'jquery';
|
1
2
|
import componentRegistry from 'foremanReact/components/componentRegistry';
|
2
3
|
import injectReducer from 'foremanReact/redux/reducers/registerReducer';
|
3
4
|
import ReportJsonViewer from './components/ReportJsonViewer';
|
4
5
|
import AnsibleRolesSwitcher from './components/AnsibleRolesSwitcher';
|
5
|
-
import $ from 'jquery';
|
6
|
-
|
7
6
|
import reducer from './reducer';
|
8
7
|
|
8
|
+
const { tfm } = window;
|
9
|
+
|
9
10
|
componentRegistry.register({
|
10
11
|
name: 'ReportJsonViewer',
|
11
12
|
type: ReportJsonViewer,
|
@@ -17,7 +18,7 @@ componentRegistry.register({
|
|
17
18
|
|
18
19
|
injectReducer('foremanAnsible', reducer);
|
19
20
|
|
20
|
-
|
21
|
+
tfm.initAnsibleRoleSwitcher = () => {
|
21
22
|
$(document).on('ContentLoad', evt => {
|
22
23
|
tfm.reactMounter.mount(
|
23
24
|
'AnsibleRolesSwitcher',
|
@@ -25,4 +26,4 @@ window.tfm.initAnsibleRoleSwitcher = () => {
|
|
25
26
|
$('#ansible_roles_switcher').data('roles')
|
26
27
|
);
|
27
28
|
});
|
28
|
-
}
|
29
|
+
};
|
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:
|
4
|
+
version: 4.0.0
|
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: 2019-10-
|
11
|
+
date: 2019-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -72,20 +72,20 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 2.0.0
|
76
76
|
- - "<"
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version: '
|
78
|
+
version: '3.0'
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
83
|
- - ">="
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
85
|
+
version: 2.0.0
|
86
86
|
- - "<"
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
88
|
+
version: '3.0'
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
90
|
name: ipaddress
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,7 +140,6 @@ files:
|
|
140
140
|
- app/helpers/foreman_ansible/ansible_reports_helper.rb
|
141
141
|
- app/helpers/foreman_ansible/ansible_roles_helper.rb
|
142
142
|
- app/helpers/foreman_ansible/hosts_helper_extensions.rb
|
143
|
-
- app/lib/actions/foreman_ansible/helpers/host_common.rb
|
144
143
|
- app/lib/actions/foreman_ansible/helpers/play_roles_description.rb
|
145
144
|
- app/lib/proxy_api/ansible.rb
|
146
145
|
- app/models/ansible_role.rb
|
@@ -213,6 +212,7 @@ files:
|
|
213
212
|
- app/views/foreman_ansible/job_templates/power_action_-_ansible_default.erb
|
214
213
|
- app/views/foreman_ansible/job_templates/puppet_run_once_-_ansible_default.erb
|
215
214
|
- app/views/foreman_ansible/job_templates/run_command_-_ansible_default.erb
|
215
|
+
- app/views/foreman_ansible/job_templates/run_playbook-ansible_default.erb
|
216
216
|
- app/views/foreman_ansible/job_templates/service_action_-_ansible_default.erb
|
217
217
|
- app/views/ui_ansible_roles/index.json.rabl
|
218
218
|
- app/views/ui_ansible_roles/main.json.rabl
|
@@ -229,6 +229,7 @@ files:
|
|
229
229
|
- db/migrate/20180628125416_add_ansible_role_id_to_lookup_keys.rb
|
230
230
|
- db/migrate/20190318094437_add_imported_attr_to_ansible_variables.rb
|
231
231
|
- db/migrate/20190328114657_remove_top_level_ansible_variables_setting.rb
|
232
|
+
- db/migrate/20191010074208_remove_ansible_implementation_setting.rb
|
232
233
|
- db/seeds.d/62_ansible_proxy_feature.rb
|
233
234
|
- db/seeds.d/75_job_templates.rb
|
234
235
|
- db/seeds.d/90_notification_blueprints.rb
|
@@ -291,6 +292,7 @@ files:
|
|
291
292
|
- test/unit/helpers/ansible_reports_helper_test.rb
|
292
293
|
- test/unit/host_ansible_role_test.rb
|
293
294
|
- test/unit/hostgroup_ansible_role_test.rb
|
295
|
+
- test/unit/lib/foreman_ansible_core/ansible_runner_test.rb
|
294
296
|
- test/unit/lib/foreman_ansible_core/command_creator_test.rb
|
295
297
|
- test/unit/lib/foreman_ansible_core/playbook_runner_test.rb
|
296
298
|
- test/unit/lib/proxy_api/ansible_test.rb
|
@@ -305,6 +307,7 @@ files:
|
|
305
307
|
- test/unit/services/roles_importer_test.rb
|
306
308
|
- test/unit/services/structured_fact_importer_test.rb
|
307
309
|
- test/unit/services/ui_roles_importer_test.rb
|
310
|
+
- webpack/__mocks__/foremanReact/common/I18n.js
|
308
311
|
- webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js
|
309
312
|
- webpack/__mocks__/foremanReact/components/common/EmptyState.js
|
310
313
|
- webpack/components/AnsibleRolesSwitcher/AnsibleRolesSwitcher.js
|
@@ -389,22 +392,23 @@ test_files:
|
|
389
392
|
- test/unit/concerns/hostgroup_extensions_test.rb
|
390
393
|
- test/unit/helpers/ansible_reports_helper_test.rb
|
391
394
|
- test/unit/lib/foreman_ansible_core/command_creator_test.rb
|
395
|
+
- test/unit/lib/foreman_ansible_core/ansible_runner_test.rb
|
392
396
|
- test/unit/lib/foreman_ansible_core/playbook_runner_test.rb
|
393
397
|
- test/unit/lib/proxy_api/ansible_test.rb
|
394
398
|
- test/unit/services/ansible_report_importer_test.rb
|
395
399
|
- test/unit/services/api_roles_importer_test.rb
|
396
|
-
- test/unit/services/fact_importer_test.rb
|
397
|
-
- test/unit/services/fact_parser_test.rb
|
398
400
|
- test/unit/services/fact_sparser_test.rb
|
399
401
|
- test/unit/services/insights_plan_runner_test.rb
|
400
402
|
- test/unit/services/roles_importer_test.rb
|
401
403
|
- test/unit/services/structured_fact_importer_test.rb
|
402
404
|
- test/unit/services/ui_roles_importer_test.rb
|
403
405
|
- test/unit/services/ansible_variables_importer_test.rb
|
406
|
+
- test/unit/services/fact_importer_test.rb
|
407
|
+
- test/unit/services/fact_parser_test.rb
|
404
408
|
- test/unit/services/inventory_creator_test.rb
|
405
|
-
- test/unit/ansible_provider_test.rb
|
406
409
|
- test/unit/ansible_role_test.rb
|
407
|
-
- test/unit/ansible_variable_test.rb
|
408
410
|
- test/unit/host_ansible_role_test.rb
|
409
411
|
- test/unit/hostgroup_ansible_role_test.rb
|
412
|
+
- test/unit/ansible_provider_test.rb
|
413
|
+
- test/unit/ansible_variable_test.rb
|
410
414
|
- test/test_plugin_helper.rb
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Actions
|
4
|
-
module ForemanAnsible
|
5
|
-
module Helpers
|
6
|
-
# Shared task methods between hostgroup and host roles actions
|
7
|
-
module HostCommon
|
8
|
-
def finalize
|
9
|
-
return unless delegated_output[:exit_status].to_s != '0'
|
10
|
-
error! _('Playbook execution failed')
|
11
|
-
end
|
12
|
-
|
13
|
-
def rescue_strategy
|
14
|
-
::Dynflow::Action::Rescue::Fail
|
15
|
-
end
|
16
|
-
|
17
|
-
def humanized_name
|
18
|
-
_('Play Ansible roles')
|
19
|
-
end
|
20
|
-
|
21
|
-
def humanized_output
|
22
|
-
continuous_output.humanize
|
23
|
-
end
|
24
|
-
|
25
|
-
def fill_continuous_output(continuous_output)
|
26
|
-
delegated_output.fetch('result', []).each do |raw_output|
|
27
|
-
continuous_output.add_raw_output(raw_output)
|
28
|
-
end
|
29
|
-
rescue StandardError => e
|
30
|
-
continuous_output.add_exception(_('Error loading data from proxy'), e)
|
31
|
-
end
|
32
|
-
|
33
|
-
def find_options
|
34
|
-
{ :verbosity_level => Setting[:ansible_verbosity] }
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|