2017-03-02 17:33:56 +03:00
#!/usr/bin/python
2017-05-11 19:26:36 +03:00
# coding: utf-8 -*-
2017-03-02 17:33:56 +03:00
# (c) 2017, Wayne Witzel III <wayne@riotousliving.com>
Remove wildcard imports
Made the following changes:
* Removed wildcard imports
* Replaced long form of GPL header with short form
* Removed get_exception usage
* Added from __future__ boilerplate
* Adjust division operator to // where necessary
For the following files:
* web_infrastructure modules
* system modules
* linode, lxc, lxd, atomic, cloudscale, dimensiondata, ovh, packet,
profitbricks, pubnub, smartos, softlayer, univention modules
* compat dirs (disabled as its used intentionally)
2017-07-28 08:55:24 +03:00
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import , division , print_function
__metaclass__ = type
2017-03-02 17:33:56 +03:00
2017-08-16 06:16:38 +03:00
ANSIBLE_METADATA = { ' metadata_version ' : ' 1.1 ' ,
2017-03-14 19:07:22 +03:00
' status ' : [ ' preview ' ] ,
' supported_by ' : ' community ' }
2017-03-02 17:33:56 +03:00
DOCUMENTATION = '''
- - -
module : tower_job_cancel
2017-03-09 19:20:25 +03:00
author : " Wayne Witzel III (@wwitzel3) "
2017-03-02 17:33:56 +03:00
version_added : " 2.3 "
short_description : Cancel an Ansible Tower Job .
description :
- Cancel Ansible Tower jobs . See
U ( https : / / www . ansible . com / tower ) for an overview .
options :
job_id :
description :
- ID of the job to cancel
required : True
2019-09-30 23:01:44 +03:00
type : int
2017-03-02 17:33:56 +03:00
fail_if_not_running :
description :
2020-02-06 05:17:09 +03:00
- Fail loudly if the I ( job_id ) can not be canceled
2017-03-02 17:33:56 +03:00
default : False
2018-11-28 11:25:52 +03:00
type : bool
2019-09-18 15:43:36 +03:00
extends_documentation_fragment : awx . awx . auth
2017-03-02 17:33:56 +03:00
'''
EXAMPLES = '''
- name : Cancel job
tower_job_cancel :
job_id : job . id
'''
RETURN = '''
id :
description : job id requesting to cancel
returned : success
type : int
sample : 94
'''
2020-02-06 05:17:09 +03:00
from . . module_utils . tower_api import TowerModule
2017-03-02 17:33:56 +03:00
def main ( ) :
2020-02-06 05:17:09 +03:00
# Any additional arguments that are not fields of the item can be added here
2018-08-02 18:17:39 +03:00
argument_spec = dict (
2017-05-11 19:26:36 +03:00
job_id = dict ( type = ' int ' , required = True ) ,
fail_if_not_running = dict ( type = ' bool ' , default = False ) ,
2018-08-02 18:17:39 +03:00
)
2017-03-02 17:33:56 +03:00
2020-02-06 05:17:09 +03:00
# Create a module for ourselves
2018-08-02 18:17:39 +03:00
module = TowerModule (
2017-05-11 19:26:36 +03:00
argument_spec = argument_spec ,
2017-03-02 17:33:56 +03:00
supports_check_mode = True ,
)
2020-02-06 05:17:09 +03:00
# Extract our parameters
2017-03-02 17:33:56 +03:00
job_id = module . params . get ( ' job_id ' )
2020-02-06 05:17:09 +03:00
fail_if_not_running = module . params . get ( ' fail_if_not_running ' )
# Attempt to look up the job based on the provided name
job = module . get_one ( ' jobs ' , * * {
' data ' : {
' id ' : job_id ,
}
} )
if job == None :
module . fail_json ( msg = " Unable to find job with id {0} " . format ( job_id ) )
cancel_page = module . get_endpoint ( job [ ' related ' ] [ ' cancel ' ] )
if ' json ' not in cancel_page or ' can_cancel ' not in cancel_page [ ' json ' ] :
module . fail_json ( msg = " Failed to cancel job, got unexpected response from tower " , * * { ' response ' : cancel_page } )
if not cancel_page [ ' json ' ] [ ' can_cancel ' ] :
if fail_if_not_running :
module . fail_json ( msg = " Job is not running " )
else :
module . exit_json ( * * { ' changed ' : False } )
response = module . post_endpoint ( job [ ' related ' ] [ ' cancel ' ] , * * { ' data ' : { } } )
if response [ ' status_code ' ] != 202 :
module . fail_json ( msg = " Failed to cancel job, see response for details " , * * { ' response ' : results } )
module . exit_json ( * * { ' changed ' : True } )
2017-03-02 17:33:56 +03:00
if __name__ == ' __main__ ' :
main ( )