dapp 0.32.10 → 0.33.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/bin/dapp +1 -23
- data/config/en/net_status.yml +7 -0
- data/lib/dapp.rb +3 -3
- data/lib/dapp/dapp.rb +13 -0
- data/lib/dapp/dapp/dappfile.rb +2 -2
- data/lib/dapp/dapp/deps/base.rb +5 -37
- data/lib/dapp/dapp/deps/common.rb +25 -0
- data/lib/dapp/dapp/deps/gitartifact.rb +2 -25
- data/lib/dapp/dapp/deps/toolchain.rb +1 -23
- data/lib/dapp/dapp/logging/base.rb +3 -3
- data/lib/dapp/dapp/ruby2go.rb +96 -0
- data/lib/dapp/dapp/sentry.rb +0 -1
- data/lib/dapp/dapp/shellout/base.rb +4 -2
- data/lib/dapp/dimg/build/stage/artifact_base.rb +7 -6
- data/lib/dapp/dimg/build/stage/base.rb +37 -7
- data/lib/dapp/dimg/build/stage/from.rb +1 -1
- data/lib/dapp/dimg/builder/ansible.rb +1 -209
- data/lib/dapp/dimg/builder/base.rb +0 -5
- data/lib/dapp/dimg/builder/none.rb +1 -34
- data/lib/dapp/dimg/builder/ruby2go.rb +51 -0
- data/lib/dapp/dimg/builder/shell.rb +1 -25
- data/lib/dapp/dimg/cli/command/dimg/bp.rb +10 -15
- data/lib/dapp/dimg/cli/command/dimg/build.rb +0 -5
- data/lib/dapp/dimg/config/directive/docker/base.rb +1 -1
- data/lib/dapp/dimg/dapp/command/build_context/export.rb +1 -1
- data/lib/dapp/dimg/dapp/command/build_context/import.rb +1 -1
- data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +59 -90
- data/lib/dapp/dimg/dapp/command/common.rb +60 -74
- data/lib/dapp/dimg/dapp/command/mrproper.rb +2 -17
- data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +9 -6
- data/lib/dapp/dimg/dimg.rb +26 -43
- data/lib/dapp/dimg/docker_registry/base/authorization.rb +1 -16
- data/lib/dapp/dimg/git_artifact.rb +142 -21
- data/lib/dapp/dimg/git_repo/base.rb +11 -0
- data/lib/dapp/dimg/git_repo/local.rb +14 -0
- data/lib/dapp/dimg/git_repo/remote.rb +25 -34
- data/lib/dapp/dimg/image/argument.rb +12 -58
- data/lib/dapp/dimg/image/stage.rb +202 -43
- data/lib/dapp/kube/kubernetes/client.rb +0 -6
- data/lib/dapp/kube/kubernetes/manager/deployment.rb +18 -30
- data/lib/dapp/version.rb +1 -1
- metadata +8 -8
- data/lib/dapp/dimg/builder/ansible/assets.rb +0 -349
- data/lib/dapp/dimg/exception/introspect_image.rb +0 -7
- data/lib/dapp/dimg/image/docker.rb +0 -144
@@ -35,12 +35,6 @@ module Dapp
|
|
35
35
|
'/apis/batch/v1' => [:job, ],
|
36
36
|
'/apis/batch/v1beta1' => [:cronjob, ],
|
37
37
|
},
|
38
|
-
'1.11' => {
|
39
|
-
'/api/v1' => [:service, :replicationcontroller, :pod, :podtemplate, ],
|
40
|
-
'/apis/apps/v1' => [:daemonset, :deployment, :replicaset, :statefulset, ],
|
41
|
-
'/apis/batch/v1' => [:job, ],
|
42
|
-
'/apis/batch/v1beta1' => [:cronjob, ],
|
43
|
-
},
|
44
38
|
'stable' => {
|
45
39
|
'/api/v1' => [:service, :replicationcontroller, :pod, :podtemplate, ],
|
46
40
|
'/apis/batch/v1' => [:job, ],
|
@@ -50,11 +50,12 @@ module Dapp
|
|
50
50
|
|
51
51
|
dapp.log_step("[#{Time.now}] Poll deployment '#{d.name}' status")
|
52
52
|
dapp.with_log_indent do
|
53
|
-
dapp.log_info("
|
54
|
-
dapp.log_info("Updated replicas: #{_field_value_for_log(d.status['updatedReplicas'])}")
|
55
|
-
dapp.log_info("Available replicas: #{_field_value_for_log(d.status['availableReplicas'])}")
|
56
|
-
dapp.log_info("Unavailable replicas: #{_field_value_for_log(d.status['unavailableReplicas'])}")
|
53
|
+
dapp.log_info("Target replicas: #{_field_value_for_log(d.replicas)}")
|
54
|
+
dapp.log_info("Updated replicas: #{_field_value_for_log(d.status['updatedReplicas'])} / #{_field_value_for_log(d.replicas)}")
|
55
|
+
dapp.log_info("Available replicas: #{_field_value_for_log(d.status['availableReplicas'])} / #{_field_value_for_log(d.replicas)}")
|
57
56
|
dapp.log_info("Ready replicas: #{_field_value_for_log(d.status['readyReplicas'])} / #{_field_value_for_log(d.replicas)}")
|
57
|
+
dapp.log_info("Old deployment.kubernetes.io/revision: #{_field_value_for_log(@revision_before_deploy)}")
|
58
|
+
dapp.log_info("Current deployment.kubernetes.io/revision: #{_field_value_for_log(d_revision)}")
|
58
59
|
end
|
59
60
|
|
60
61
|
rs = nil
|
@@ -83,16 +84,6 @@ module Dapp
|
|
83
84
|
end
|
84
85
|
|
85
86
|
if rs
|
86
|
-
dapp.with_log_indent do
|
87
|
-
dapp.log_step("Current ReplicaSet '#{rs.name}' status")
|
88
|
-
dapp.with_log_indent do
|
89
|
-
dapp.log_info("Replicas: #{_field_value_for_log(rs.status['replicas'])}")
|
90
|
-
dapp.log_info("Fully labeled replicas: #{_field_value_for_log(rs.status['fullyLabeledReplicas'])}")
|
91
|
-
dapp.log_info("Available replicas: #{_field_value_for_log(rs.status['availableReplicas'])}")
|
92
|
-
dapp.log_info("Ready replicas: #{_field_value_for_log(rs.status['readyReplicas'])} / #{_field_value_for_log(d.replicas)}")
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
87
|
# Pod'ы связанные с активным ReplicaSet
|
97
88
|
rs_pods = dapp.kubernetes.pod_list['items']
|
98
89
|
.map {|spec| Kubernetes::Client::Resource::Pod.new(spec)}
|
@@ -177,14 +168,19 @@ module Dapp
|
|
177
168
|
end # with_log_indent
|
178
169
|
end
|
179
170
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
171
|
+
if d_revision && d.replicas
|
172
|
+
if d.replicas == 0
|
173
|
+
break
|
174
|
+
else
|
175
|
+
break if begin
|
176
|
+
d.status['updatedReplicas'] &&
|
177
|
+
d.status['availableReplicas'] &&
|
178
|
+
d.status['readyReplicas'] &&
|
179
|
+
(d.status['updatedReplicas'] >= d.replicas) &&
|
180
|
+
(d.status['availableReplicas'] >= d.replicas) &&
|
181
|
+
(d.status['readyReplicas'] >= d.replicas)
|
182
|
+
end
|
183
|
+
end
|
188
184
|
end
|
189
185
|
|
190
186
|
sleep 5
|
@@ -193,14 +189,6 @@ module Dapp
|
|
193
189
|
end
|
194
190
|
end
|
195
191
|
|
196
|
-
def is_deployment_ready(d)
|
197
|
-
d.status.key?("readyReplicas") && d.status["readyReplicas"] >= d.replicas
|
198
|
-
end
|
199
|
-
|
200
|
-
def is_replicaset_ready(d, rs)
|
201
|
-
rs.status.key?("readyReplicas") && rs.status["readyReplicas"] >= d.replicas
|
202
|
-
end
|
203
|
-
|
204
192
|
private
|
205
193
|
|
206
194
|
def _field_value_for_log(value)
|
data/lib/dapp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.33.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Stolyarov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|
@@ -234,14 +234,14 @@ dependencies:
|
|
234
234
|
requirements:
|
235
235
|
- - "~>"
|
236
236
|
- !ruby/object:Gem::Version
|
237
|
-
version: '
|
237
|
+
version: '1.7'
|
238
238
|
type: :development
|
239
239
|
prerelease: false
|
240
240
|
version_requirements: !ruby/object:Gem::Requirement
|
241
241
|
requirements:
|
242
242
|
- - "~>"
|
243
243
|
- !ruby/object:Gem::Version
|
244
|
-
version: '
|
244
|
+
version: '1.7'
|
245
245
|
- !ruby/object:Gem::Dependency
|
246
246
|
name: rake
|
247
247
|
requirement: !ruby/object:Gem::Requirement
|
@@ -489,6 +489,7 @@ files:
|
|
489
489
|
- lib/dapp/dapp/dapp_config.rb
|
490
490
|
- lib/dapp/dapp/dappfile.rb
|
491
491
|
- lib/dapp/dapp/deps/base.rb
|
492
|
+
- lib/dapp/dapp/deps/common.rb
|
492
493
|
- lib/dapp/dapp/deps/gitartifact.rb
|
493
494
|
- lib/dapp/dapp/deps/toolchain.rb
|
494
495
|
- lib/dapp/dapp/git_artifact.rb
|
@@ -498,6 +499,7 @@ files:
|
|
498
499
|
- lib/dapp/dapp/logging/paint.rb
|
499
500
|
- lib/dapp/dapp/logging/process.rb
|
500
501
|
- lib/dapp/dapp/option_tags.rb
|
502
|
+
- lib/dapp/dapp/ruby2go.rb
|
501
503
|
- lib/dapp/dapp/sentry.rb
|
502
504
|
- lib/dapp/dapp/shellout/base.rb
|
503
505
|
- lib/dapp/dapp/shellout/streaming.rb
|
@@ -535,13 +537,13 @@ files:
|
|
535
537
|
- lib/dapp/dimg/build/stage/setup/setup.rb
|
536
538
|
- lib/dapp/dimg/builder.rb
|
537
539
|
- lib/dapp/dimg/builder/ansible.rb
|
538
|
-
- lib/dapp/dimg/builder/ansible/assets.rb
|
539
540
|
- lib/dapp/dimg/builder/base.rb
|
540
541
|
- lib/dapp/dimg/builder/chef.rb
|
541
542
|
- lib/dapp/dimg/builder/chef/berksfile.rb
|
542
543
|
- lib/dapp/dimg/builder/chef/cookbook.rb
|
543
544
|
- lib/dapp/dimg/builder/chef/cookbook_metadata.rb
|
544
545
|
- lib/dapp/dimg/builder/none.rb
|
546
|
+
- lib/dapp/dimg/builder/ruby2go.rb
|
545
547
|
- lib/dapp/dimg/builder/shell.rb
|
546
548
|
- lib/dapp/dimg/cli/cli.rb
|
547
549
|
- lib/dapp/dimg/cli/command/base.rb
|
@@ -639,7 +641,6 @@ files:
|
|
639
641
|
- lib/dapp/dimg/error/rugged.rb
|
640
642
|
- lib/dapp/dimg/error/tar_writer.rb
|
641
643
|
- lib/dapp/dimg/exception/base.rb
|
642
|
-
- lib/dapp/dimg/exception/introspect_image.rb
|
643
644
|
- lib/dapp/dimg/exception/registry.rb
|
644
645
|
- lib/dapp/dimg/filelock.rb
|
645
646
|
- lib/dapp/dimg/git_artifact.rb
|
@@ -649,7 +650,6 @@ files:
|
|
649
650
|
- lib/dapp/dimg/git_repo/remote.rb
|
650
651
|
- lib/dapp/dimg/image/argument.rb
|
651
652
|
- lib/dapp/dimg/image/dimg.rb
|
652
|
-
- lib/dapp/dimg/image/docker.rb
|
653
653
|
- lib/dapp/dimg/image/scratch.rb
|
654
654
|
- lib/dapp/dimg/image/stage.rb
|
655
655
|
- lib/dapp/dimg/lock/base.rb
|
@@ -744,7 +744,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
744
744
|
version: 2.5.0
|
745
745
|
requirements: []
|
746
746
|
rubyforge_project:
|
747
|
-
rubygems_version: 2.7.
|
747
|
+
rubygems_version: 2.7.7
|
748
748
|
signing_key:
|
749
749
|
specification_version: 4
|
750
750
|
summary: Build docker packaged apps using chef or shell
|
@@ -1,349 +0,0 @@
|
|
1
|
-
module Dapp
|
2
|
-
module Dimg
|
3
|
-
class Builder::Ansible::Assets
|
4
|
-
class << self
|
5
|
-
def ansible_cfg(inventory, callback_plugins, become_exe, local_tmp, remote_tmp)
|
6
|
-
%{
|
7
|
-
[defaults]
|
8
|
-
inventory = #{inventory}
|
9
|
-
transport = local
|
10
|
-
; do not generate retry files in ro volumes
|
11
|
-
retry_files_enabled = False
|
12
|
-
; more verbose stdout like ad-hoc ansible command from flant/ansible fork
|
13
|
-
callback_plugins = #{callback_plugins}
|
14
|
-
stdout_callback = dapp
|
15
|
-
; force color
|
16
|
-
force_color = 1
|
17
|
-
module_compression = 'ZIP_STORED'
|
18
|
-
local_tmp = #{local_tmp}
|
19
|
-
remote_tmp = #{remote_tmp}
|
20
|
-
; keep ansiballz for debug
|
21
|
-
;keep_remote_files = 1
|
22
|
-
[privilege_escalation]
|
23
|
-
become = yes
|
24
|
-
become_method = sudo
|
25
|
-
become_exe = #{become_exe}
|
26
|
-
become_flags = -E -H
|
27
|
-
}
|
28
|
-
end
|
29
|
-
|
30
|
-
def hosts(python_path)
|
31
|
-
%{
|
32
|
-
localhost ansible_raw_live_stdout=yes ansible_script_live_stdout=yes ansible_python_interpreter=#{python_path}
|
33
|
-
}
|
34
|
-
end
|
35
|
-
|
36
|
-
# Python script! Do not enable string interpolation!
|
37
|
-
def dapp_py
|
38
|
-
%q{
|
39
|
-
# (c) 2018, Ivan Mikheykin <ivan.mikheykin@flant.com>
|
40
|
-
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
41
|
-
|
42
|
-
# Make coding more python3-ish
|
43
|
-
from __future__ import (absolute_import, division, print_function)
|
44
|
-
__metaclass__ = type
|
45
|
-
|
46
|
-
|
47
|
-
DOCUMENTATION = '''
|
48
|
-
callback: dapp
|
49
|
-
type: stdout
|
50
|
-
short_description: live output for raw and script with dapp specific additions
|
51
|
-
version_added: "2.4"
|
52
|
-
description:
|
53
|
-
- Solo mode with live stdout for raw and script tasks
|
54
|
-
- Dapp specific error messages
|
55
|
-
requirements:
|
56
|
-
- set as stdout callback in configuration
|
57
|
-
'''
|
58
|
-
|
59
|
-
#from ansible.plugins.callback.live import CallbackModule as CallbackModule_live
|
60
|
-
# live.py moved to dapp
|
61
|
-
from callback.live import CallbackModule as CallbackModule_live
|
62
|
-
from ansible import constants as C
|
63
|
-
|
64
|
-
import os
|
65
|
-
import json
|
66
|
-
|
67
|
-
class CallbackModule(CallbackModule_live):
|
68
|
-
|
69
|
-
CALLBACK_VERSION = 2.0
|
70
|
-
CALLBACK_TYPE = 'stdout'
|
71
|
-
CALLBACK_NAME = 'dapp'
|
72
|
-
|
73
|
-
def __init__(self):
|
74
|
-
self.super_ref = super(CallbackModule, self)
|
75
|
-
self.super_ref.__init__()
|
76
|
-
|
77
|
-
def v2_runner_on_failed(self, result, ignore_errors=False):
|
78
|
-
self.super_ref.v2_runner_on_failed(result, ignore_errors)
|
79
|
-
|
80
|
-
# get config sections from dapp
|
81
|
-
# task config text is in a last tag
|
82
|
-
# doctext is in a file DAPP_DUMP_CONFIG_DOC_PATH
|
83
|
-
self._display_dapp_config(result._task)
|
84
|
-
|
85
|
-
def _read_dump_config_doc(self):
|
86
|
-
# read content from file in DAPP_DUMP_CONFIG_DOC_PATH env
|
87
|
-
if 'DAPP_DUMP_CONFIG_DOC_PATH' not in os.environ:
|
88
|
-
return ''
|
89
|
-
dump_path = os.environ['DAPP_DUMP_CONFIG_DOC_PATH']
|
90
|
-
res = ''
|
91
|
-
try:
|
92
|
-
fh = open(dump_path, 'r')
|
93
|
-
res = json.load(fh) #.read()
|
94
|
-
fh.close()
|
95
|
-
except:
|
96
|
-
pass
|
97
|
-
|
98
|
-
return res
|
99
|
-
|
100
|
-
# dapp_stage_name commented for consistency with dappfile-yml behaviour
|
101
|
-
def _display_dapp_config(self, task):
|
102
|
-
tags = task.tags
|
103
|
-
dump_config_section_key = ''
|
104
|
-
#dapp_stage_name = ''
|
105
|
-
if len(tags) > 0:
|
106
|
-
# stage name appended before dump
|
107
|
-
#dapp_stage_name = tags[-2]
|
108
|
-
# last tag is dump of section
|
109
|
-
dump_config_section_key = tags[-1]
|
110
|
-
|
111
|
-
dump_config = self._read_dump_config_doc()
|
112
|
-
dump_config_doc = dump_config['dump_config_doc']
|
113
|
-
dump_config_section = dump_config['dump_config_sections'][dump_config_section_key]
|
114
|
-
self._display.display("\n\n%s\n%s" % (dump_config_section, dump_config_doc), color=C.COLOR_DEBUG)
|
115
|
-
|
116
|
-
}
|
117
|
-
end
|
118
|
-
|
119
|
-
def crypt_py
|
120
|
-
%q{
|
121
|
-
def crypt(word, salt):
|
122
|
-
return "FAKE_CRYPT"
|
123
|
-
}
|
124
|
-
end
|
125
|
-
|
126
|
-
def live_py
|
127
|
-
%{
|
128
|
-
# (c) 2012-2014, Michael DeHaan <michael.dehaan@gmail.com>
|
129
|
-
# (c) 2017 Ansible Project
|
130
|
-
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
131
|
-
|
132
|
-
# Make coding more python3-ish
|
133
|
-
from __future__ import (absolute_import, division, print_function)
|
134
|
-
__metaclass__ = type
|
135
|
-
|
136
|
-
DOCUMENTATION = '''
|
137
|
-
callback: live
|
138
|
-
type: stdout
|
139
|
-
short_description: screen output for solo mode
|
140
|
-
version_added: historical
|
141
|
-
description:
|
142
|
-
- Solo mode with live stdout for raw and script tasks with fallback to minimal
|
143
|
-
'''
|
144
|
-
|
145
|
-
from ansible.plugins.callback import CallbackBase
|
146
|
-
from ansible import constants as C
|
147
|
-
from ansible.vars.manager import strip_internal_keys
|
148
|
-
|
149
|
-
import json, re
|
150
|
-
|
151
|
-
|
152
|
-
class CallbackModule(CallbackBase):
|
153
|
-
|
154
|
-
'''
|
155
|
-
This is the default callback interface, which simply prints messages
|
156
|
-
to stdout when new callback events are received.
|
157
|
-
'''
|
158
|
-
|
159
|
-
CALLBACK_VERSION = 2.0
|
160
|
-
CALLBACK_TYPE = 'stdout'
|
161
|
-
CALLBACK_NAME = 'live'
|
162
|
-
|
163
|
-
# name for this tasks can be generated from free_form
|
164
|
-
FREE_FORM_MODULES = ('raw', 'script', 'command', 'shell')
|
165
|
-
#ERROR! this task 'debug' has extra params, which is only allowed in the following modules: command, win_command, shell, win_shell, script, include, include_vars, include_tasks, include_role, import_tasks, import_role, add_host, group_by, set_fact, raw, meta
|
166
|
-
|
167
|
-
def __init__(self):
|
168
|
-
super(CallbackModule, self).__init__()
|
169
|
-
self._play = None
|
170
|
-
|
171
|
-
def _task_header(self, task, msg):
|
172
|
-
name = task.name
|
173
|
-
if not name:
|
174
|
-
if task.action in self.FREE_FORM_MODULES:
|
175
|
-
name = task.args.get('_raw_params', '')
|
176
|
-
if task.action == 'file':
|
177
|
-
name = task.args.get('path')
|
178
|
-
if task.action == 'copy':
|
179
|
-
name = task.args.get('dest')
|
180
|
-
if task.action == 'group':
|
181
|
-
name = task.args.get('name')
|
182
|
-
if task.action == 'user':
|
183
|
-
name = task.args.get('name')
|
184
|
-
if task.action == 'get_url':
|
185
|
-
name = task.args.get('url')
|
186
|
-
if task.action == 'getent':
|
187
|
-
db = task.args.get('database')
|
188
|
-
key = task.args.get('key')
|
189
|
-
name = '%s %s' % (db, key)
|
190
|
-
if task.action == 'apt':
|
191
|
-
name = task.args.get('name')
|
192
|
-
if task.action == 'composer':
|
193
|
-
name = task.args.get('command', 'install')
|
194
|
-
name = re.sub(r'\s+', r' ', name)
|
195
|
-
if len(name) > 25 :
|
196
|
-
name = '%s...' % name[0:22]
|
197
|
-
return u'%s [%s] %s' % (task.action, name, msg)
|
198
|
-
|
199
|
-
def _display_command_generic_msg(self, task, result, caption, color):
|
200
|
-
''' output the result of a command run '''
|
201
|
-
|
202
|
-
self._display.display("%s | rc=%s >>" % (self._task_header(task, caption), result.get('rc', -1)), color)
|
203
|
-
msg = result.get('msg')
|
204
|
-
if msg:
|
205
|
-
self._display.display(msg, color)
|
206
|
-
# prevent dublication in case of live_stdout
|
207
|
-
if not result.get('live_stdout', False):
|
208
|
-
stdout = result.get('stdout', None)
|
209
|
-
if stdout:
|
210
|
-
self._display.display("stdout was:", color=C.COLOR_HIGHLIGHT)
|
211
|
-
self._display.display(stdout)
|
212
|
-
stderr = result.get('stderr', '')
|
213
|
-
if stderr:
|
214
|
-
self._display.display("stderr was:", color=C.COLOR_HIGHLIGHT)
|
215
|
-
self._display.display(stderr, color=C.COLOR_ERROR)
|
216
|
-
|
217
|
-
|
218
|
-
def _display_debug_msg(self, task, result):
|
219
|
-
color = C.COLOR_OK
|
220
|
-
if task.args.get('msg'):
|
221
|
-
self._display.display("debug msg", color=C.COLOR_HIGHLIGHT)
|
222
|
-
self._display.display(result.get('msg', ''), color)
|
223
|
-
if task.args.get('var'):
|
224
|
-
self._display.display("debug var \'%s\'" % task.args.get('var'), color=C.COLOR_HIGHLIGHT)
|
225
|
-
var_obj = result.get(task.args.get('var'), '')
|
226
|
-
if isinstance(var_obj, str):
|
227
|
-
if 'IS NOT DEFINED' in var_obj:
|
228
|
-
color = C.COLOR_ERROR
|
229
|
-
path = task.get_path()
|
230
|
-
if path:
|
231
|
-
self._display.display(u"task path: %s" % path, color=C.COLOR_DEBUG)
|
232
|
-
self._display.display(var_obj, color)
|
233
|
-
else:
|
234
|
-
self._display.display(json.dumps(var_obj, indent=4), color)
|
235
|
-
|
236
|
-
# TODO remove stdout here if live_stdout!
|
237
|
-
# TODO handle results for looped tasks
|
238
|
-
def _dump_results(self, result, indent=None, sort_keys=True, keep_invocation=False):
|
239
|
-
|
240
|
-
if not indent and (result.get('_ansible_verbose_always') or self._display.verbosity > 2):
|
241
|
-
indent = 4
|
242
|
-
|
243
|
-
# All result keys stating with _ansible_ are internal, so remove them from the result before we output anything.
|
244
|
-
abridged_result = strip_internal_keys(result)
|
245
|
-
|
246
|
-
# remove invocation unless specifically wanting it
|
247
|
-
if not keep_invocation and self._display.verbosity < 3 and 'invocation' in result:
|
248
|
-
del abridged_result['invocation']
|
249
|
-
|
250
|
-
# remove diff information from screen output
|
251
|
-
if self._display.verbosity < 3 and 'diff' in result:
|
252
|
-
del abridged_result['diff']
|
253
|
-
|
254
|
-
# remove exception from screen output
|
255
|
-
if 'exception' in abridged_result:
|
256
|
-
del abridged_result['exception']
|
257
|
-
|
258
|
-
# remove msg, failed, changed
|
259
|
-
if 'msg' in abridged_result:
|
260
|
-
del abridged_result['msg']
|
261
|
-
if 'failed' in abridged_result:
|
262
|
-
del abridged_result['failed']
|
263
|
-
if 'changed' in abridged_result:
|
264
|
-
del abridged_result['changed']
|
265
|
-
|
266
|
-
if len(abridged_result) > 0:
|
267
|
-
return json.dumps(abridged_result, indent=indent, ensure_ascii=False, sort_keys=sort_keys)
|
268
|
-
|
269
|
-
return ''
|
270
|
-
|
271
|
-
def v2_playbook_on_play_start(self, play):
|
272
|
-
self._play = play
|
273
|
-
|
274
|
-
# command [copy artifacts] started
|
275
|
-
# stdout
|
276
|
-
# ...
|
277
|
-
# command [copy artifacts] OK/FAILED/CHANGED
|
278
|
-
# STDERR: if failed
|
279
|
-
# ...
|
280
|
-
#
|
281
|
-
def v2_playbook_on_task_start(self, task, is_conditional):
|
282
|
-
self._display.v("TASK action=%s args=%s" % (task.action, json.dumps(task.args, indent=4)))
|
283
|
-
|
284
|
-
if task.action == 'debug':
|
285
|
-
return
|
286
|
-
|
287
|
-
if self._play.strategy != 'free':
|
288
|
-
self._display.display(self._task_header(task, "started"), color=C.COLOR_HIGHLIGHT)
|
289
|
-
|
290
|
-
def v2_runner_on_ok(self, result):
|
291
|
-
self._display.v("TASK action=%s OK => %s" % (result._task.action, json.dumps(result._result, indent=4)))
|
292
|
-
|
293
|
-
self._clean_results(result._result, result._task.action)
|
294
|
-
self._handle_warnings(result._result)
|
295
|
-
|
296
|
-
task = result._task
|
297
|
-
|
298
|
-
if task.action == 'debug':
|
299
|
-
self._display_debug_msg(result._task, result._result)
|
300
|
-
elif task.action in self.FREE_FORM_MODULES:
|
301
|
-
self._display_command_generic_msg(result._task, result._result, "SUCCESS", C.COLOR_OK)
|
302
|
-
else:
|
303
|
-
if 'changed' in result._result and result._result['changed']:
|
304
|
-
self._display.display("%s => %s" % (self._task_header(result._task, "SUCCESS"), self._dump_results(result._result, indent=4)), color=C.COLOR_CHANGED)
|
305
|
-
#self._display.display(self._task_header(task, "OK")"%s | SUCCESS => %s" % (result._host.get_name(), self._dump_results(result._result, indent=4)), color=C.COLOR_CHANGED)
|
306
|
-
#self._display.display("%s | SUCCESS => %s" % (result._host.get_name(), ), color=C.COLOR_CHANGED)
|
307
|
-
else:
|
308
|
-
self._display.display("%s => %s" % (self._task_header(result._task, "SUCCESS"), self._dump_results(result._result, indent=4)), color=C.COLOR_OK)
|
309
|
-
#self._display.display("%s | SUCCESS => %s" % (result._host.get_name(), self._dump_results(result._result, indent=4)), color=C.COLOR_OK)
|
310
|
-
|
311
|
-
def v2_runner_on_failed(self, result, ignore_errors=False):
|
312
|
-
self._display.v("TASK action=%s FAILED => %s" % (result._task.action, json.dumps(result._result, indent=4)))
|
313
|
-
|
314
|
-
self._handle_exception(result._result)
|
315
|
-
self._handle_warnings(result._result)
|
316
|
-
|
317
|
-
task = result._task
|
318
|
-
|
319
|
-
if task.action in self.FREE_FORM_MODULES:
|
320
|
-
self._display_command_generic_msg(result._task, result._result, "FAILED", C.COLOR_ERROR)
|
321
|
-
#elif result._task.action in C.MODULE_NO_JSON and 'module_stderr' not in result._result:
|
322
|
-
# self._display.display(self._command_generic_msg(result._host.get_name(), result._result, "FAILED"), color=C.COLOR_ERROR)
|
323
|
-
else:
|
324
|
-
self._display.display(self._task_header(result._task, "FAILED"), color=C.COLOR_ERROR)
|
325
|
-
if 'msg' in result._result:
|
326
|
-
self._display.display(result._result['msg'], color=C.COLOR_ERROR)
|
327
|
-
# clean system values from result and return a json
|
328
|
-
dump_result = self._dump_results(result._result, indent=4)
|
329
|
-
if dump_result:
|
330
|
-
self._display.display("Task result => %s" % (self._dump_results(result._result, indent=4)), color=C.COLOR_ERROR)
|
331
|
-
|
332
|
-
|
333
|
-
def v2_runner_on_skipped(self, result):
|
334
|
-
self._display.display("%s | SKIPPED" % (result._host.get_name()), color=C.COLOR_SKIP)
|
335
|
-
|
336
|
-
def v2_runner_on_unreachable(self, result):
|
337
|
-
self._display.display("%s | UNREACHABLE! => %s" % (result._host.get_name(), self._dump_results(result._result, indent=4)), color=C.COLOR_UNREACHABLE)
|
338
|
-
|
339
|
-
def v2_on_file_diff(self, result):
|
340
|
-
if 'diff' in result._result and result._result['diff']:
|
341
|
-
self._display.display(self._get_diff(result._result['diff']))
|
342
|
-
|
343
|
-
}
|
344
|
-
end
|
345
|
-
|
346
|
-
end # << self
|
347
|
-
end # Builder::Ansible::Assets
|
348
|
-
end # Dimg
|
349
|
-
end # Dapp
|