foreman_ansible_core 4.1.2 → 4.2.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f2a3786cc1745dadafd2d12dd0a38dfbb23e0ee19880c3f5bef7eb15c87993a0
4
- data.tar.gz: 4a31b5d21235e36f4805c2b47e4f4dd6c7baec453393e7f546b2fc7c6ec612a8
3
+ metadata.gz: 4190abc17a0eee69b79be6b96cce64f9813ca58012ec72903b473900376a51e6
4
+ data.tar.gz: 95296e3167e0f253521339a2f0fa9adda9da93005792ffe05ab67fbed1369d8f
5
5
  SHA512:
6
- metadata.gz: 5ea0819d7adc9d36166f507e3115b154d14954f7000ed00f1727940033e45e08990b17ad492e85332fd7129c1efc666c1cd64528d86b1c6b51f33392cfe85bce
7
- data.tar.gz: 3c33ec4701cf6b2822800ed1d474bfa1ac344554c3cdb333822ae5ddc37a173f42b5a29127918ca99a8e1a64548ef20abbc34d06d0fe222f518f8d2407d6156f
6
+ metadata.gz: f976b6b266d7add05e3e8e0fad2efc91fcbea5fcb9fd1211d6d85a6eb1574335aaf99535801b5ca79201ac444d5fc6f5a2df7be35f33248c0af35d19d36dc7cd
7
+ data.tar.gz: e2433cece5f34f707a931ac291340e579eb75ec50b5bbada3c3a5ac81024c2cb3be9f40d60b10c75365418ee56551c671935e6c2b8b2a4c5baf054a79dd8744a
@@ -1,4 +1,5 @@
1
1
  require 'shellwords'
2
+ require 'yaml'
2
3
 
3
4
  module ForemanAnsibleCore
4
5
  module Runner
@@ -14,12 +15,14 @@ module ForemanAnsibleCore
14
15
  @verbosity_level = action_input[:verbosity_level]
15
16
  @rex_command = action_input[:remote_execution_command]
16
17
  @check_mode = action_input[:check_mode]
18
+ @passphrase = action_input['secrets']['key_passphrase']
17
19
  end
18
20
 
19
21
  def start
20
22
  prepare_directory_structure
21
23
  write_inventory
22
24
  write_playbook
25
+ write_ssh_key if !@passphrase.nil? && !@passphrase.empty?
23
26
  start_ansible_runner
24
27
  end
25
28
 
@@ -81,13 +84,16 @@ module ForemanAnsibleCore
81
84
  log_event("broadcast", event)
82
85
  if event['event'] == 'playbook_on_stats'
83
86
  failures = event.dig('event_data', 'failures') || {}
87
+ unreachable = event.dig('event_data', 'dark') || {}
84
88
  header, *rows = event['stdout'].strip.lines.map(&:chomp)
85
89
  @outputs.keys.select { |key| key.is_a? String }.each do |host|
86
90
  line = rows.find { |row| row =~ /#{host}/ }
87
91
  publish_data_for(host, [header, line].join("\n"), 'stdout')
88
92
 
89
93
  # If the task has been rescued, it won't consider a failure
90
- publish_exit_status_for(host, 0) if @exit_statuses[host].to_i != 0 && failures[host].to_i <= 0
94
+ if @exit_statuses[host].to_i != 0 && failures[host].to_i <= 0 && unreachable[host].to_i <= 0
95
+ publish_exit_status_for(host, 0)
96
+ end
91
97
  end
92
98
  else
93
99
  broadcast_data(event['stdout'] + "\n", 'stdout')
@@ -110,6 +116,19 @@ module ForemanAnsibleCore
110
116
  File.write(File.join(@root, 'project', 'playbook.yml'), @playbook)
111
117
  end
112
118
 
119
+ def write_ssh_key
120
+ key_path = File.join(@root, 'env', 'ssh_key')
121
+ File.symlink(File.expand_path(ForemanRemoteExecutionCore.settings[:ssh_identity_key_file]), key_path)
122
+
123
+ passwords_path = File.join(@root, 'env', 'passwords')
124
+ # here we create a secrets file for ansible-runner, which uses the key as regexp
125
+ # to match line asking for password, given the limitation to match only first 100 chars
126
+ # and the fact the line contains dynamically created temp directory, the regexp
127
+ # mentions only things that are always there, such as artifacts directory and the key name
128
+ secrets = YAML.dump({ "for.*/artifacts/.*/ssh_key_data:" => @passphrase })
129
+ File.write(passwords_path, secrets, perm: 0o600)
130
+ end
131
+
113
132
  def start_ansible_runner
114
133
  env = {}
115
134
  env['FOREMAN_CALLBACK_DISABLE'] = '1' if @rex_command
@@ -129,11 +148,11 @@ module ForemanAnsibleCore
129
148
  end
130
149
 
131
150
  def check_mode?
132
- @check_mode == true
151
+ @check_mode == true && @rex_command == false
133
152
  end
134
153
 
135
154
  def prepare_directory_structure
136
- inner = %w[inventory project].map { |part| File.join(@root, part) }
155
+ inner = %w[inventory project env].map { |part| File.join(@root, part) }
137
156
  ([@root] + inner).each do |path|
138
157
  FileUtils.mkdir_p path
139
158
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ForemanAnsibleCore
4
- VERSION = '4.1.2'
4
+ VERSION = '4.2.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_ansible_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.2
4
+ version: 4.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Lobato Garcia
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-17 00:00:00.000000000 Z
11
+ date: 2021-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: foreman_remote_execution_core
@@ -77,7 +77,7 @@ homepage: https://github.com/theforeman/foreman_ansible
77
77
  licenses:
78
78
  - GPL-3.0
79
79
  metadata: {}
80
- post_install_message:
80
+ post_install_message:
81
81
  rdoc_options: []
82
82
  require_paths:
83
83
  - lib
@@ -93,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
93
  version: '0'
94
94
  requirements: []
95
95
  rubygems_version: 3.1.2
96
- signing_key:
96
+ signing_key:
97
97
  specification_version: 4
98
98
  summary: 'Ansible integration with Foreman (theforeman.org): core bits'
99
99
  test_files: []