2017-02-20 23:18:43 +03:00
#!/usr/bin/python
2017-05-11 19:26:36 +03:00
# coding: utf-8 -*-
2017-02-20 23:18:43 +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-02-20 23:18:43 +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-02-20 23:18:43 +03:00
DOCUMENTATION = '''
- - -
module : tower_role
version_added : " 2.3 "
2017-03-09 19:20:25 +03:00
author : " Wayne Witzel III (@wwitzel3) "
2017-02-20 23:18:43 +03:00
short_description : create , update , or destroy Ansible Tower role .
description :
- Create , update , or destroy Ansible Tower roles . See
U ( https : / / www . ansible . com / tower ) for an overview .
options :
user :
description :
- User that receives the permissions specified by the role .
2019-09-30 23:01:44 +03:00
type : str
2017-02-20 23:18:43 +03:00
team :
description :
- Team that receives the permissions specified by the role .
2019-09-30 23:01:44 +03:00
type : str
2017-02-20 23:18:43 +03:00
role :
description :
- The role type to grant / revoke .
required : True
2019-05-08 20:11:51 +03:00
choices : [ " admin " , " read " , " member " , " execute " , " adhoc " , " update " , " use " , " auditor " , " project_admin " , " inventory_admin " , " credential_admin " ,
" workflow_admin " , " notification_admin " , " job_template_admin " ]
2019-09-30 23:01:44 +03:00
type : str
2017-02-20 23:18:43 +03:00
target_team :
description :
- Team that the role acts on .
2019-09-30 23:01:44 +03:00
type : str
2017-02-20 23:18:43 +03:00
inventory :
description :
- Inventory the role acts on .
2019-09-30 23:01:44 +03:00
type : str
2017-02-20 23:18:43 +03:00
job_template :
description :
2018-03-15 06:58:50 +03:00
- The job template the role acts on .
2019-09-30 23:01:44 +03:00
type : str
2017-02-20 23:18:43 +03:00
credential :
description :
- Credential the role acts on .
2019-09-30 23:01:44 +03:00
type : str
2017-02-20 23:18:43 +03:00
organization :
description :
2018-03-15 06:58:50 +03:00
- Organization the role acts on .
2019-09-30 23:01:44 +03:00
type : str
2017-02-20 23:18:43 +03:00
project :
description :
- Project the role acts on .
2019-09-30 23:01:44 +03:00
type : str
2017-02-20 23:18:43 +03:00
state :
description :
- Desired state of the resource .
default : " present "
choices : [ " present " , " absent " ]
2019-09-30 23:01:44 +03:00
type : str
2019-09-18 15:43:36 +03:00
extends_documentation_fragment : awx . awx . auth
2017-02-20 23:18:43 +03:00
'''
EXAMPLES = '''
- name : Add jdoe to the member role of My Team
tower_role :
user : jdoe
target_team : " My Team "
role : member
state : present
tower_config_file : " ~/tower_cli.cfg "
'''
2019-08-31 00:11:01 +03:00
from . . module_utils . ansible_tower import TowerModule , tower_auth_config , tower_check_mode
2017-10-02 23:21:24 +03:00
2017-02-20 23:18:43 +03:00
try :
import tower_cli
2019-01-09 17:31:21 +03:00
import tower_cli . exceptions as exc
2017-02-20 23:18:43 +03:00
from tower_cli . conf import settings
except ImportError :
2017-10-02 23:21:24 +03:00
pass
2017-02-20 23:18:43 +03:00
def update_resources ( module , p ) :
''' update_resources attempts to fetch any of the resources given
by name using their unique field ( identity )
'''
params = p . copy ( )
identity_map = {
2017-05-11 19:26:36 +03:00
' user ' : ' username ' ,
' team ' : ' name ' ,
' target_team ' : ' name ' ,
' inventory ' : ' name ' ,
' job_template ' : ' name ' ,
' credential ' : ' name ' ,
' organization ' : ' name ' ,
' project ' : ' name ' ,
2017-02-20 23:18:43 +03:00
}
2017-05-11 19:26:36 +03:00
for k , v in identity_map . items ( ) :
2017-02-20 23:18:43 +03:00
try :
if params [ k ] :
key = ' team ' if k == ' target_team ' else k
2017-05-11 19:26:36 +03:00
result = tower_cli . get_resource ( key ) . get ( * * { v : params [ k ] } )
2017-02-20 23:18:43 +03:00
params [ k ] = result [ ' id ' ]
except ( exc . NotFound ) as excinfo :
module . fail_json ( msg = ' Failed to update role, {0} not found: {1} ' . format ( k , excinfo ) , changed = False )
return params
def main ( ) :
2017-10-02 23:21:24 +03:00
2018-08-02 18:17:39 +03:00
argument_spec = dict (
2017-10-02 23:21:24 +03:00
user = dict ( ) ,
team = dict ( ) ,
2019-05-08 20:11:51 +03:00
role = dict ( choices = [ " admin " , " read " , " member " , " execute " , " adhoc " , " update " , " use " , " auditor " , " project_admin " , " inventory_admin " , " credential_admin " ,
" workflow_admin " , " notification_admin " , " job_template_admin " ] ) ,
2017-10-02 23:21:24 +03:00
target_team = dict ( ) ,
inventory = dict ( ) ,
job_template = dict ( ) ,
credential = dict ( ) ,
organization = dict ( ) ,
project = dict ( ) ,
state = dict ( choices = [ ' present ' , ' absent ' ] , default = ' present ' ) ,
2018-08-02 18:17:39 +03:00
)
2017-10-02 23:21:24 +03:00
2018-08-02 18:17:39 +03:00
module = TowerModule ( argument_spec = argument_spec , supports_check_mode = True )
2017-02-20 23:18:43 +03:00
role_type = module . params . pop ( ' role ' )
2018-05-26 02:03:12 +03:00
state = module . params . pop ( ' state ' )
2017-02-20 23:18:43 +03:00
json_output = { ' role ' : role_type , ' state ' : state }
tower_auth = tower_auth_config ( module )
with settings . runtime_values ( * * tower_auth ) :
tower_check_mode ( module )
role = tower_cli . get_resource ( ' role ' )
params = update_resources ( module , module . params )
params [ ' type ' ] = role_type
try :
if state == ' present ' :
result = role . grant ( * * params )
json_output [ ' id ' ] = result [ ' id ' ]
elif state == ' absent ' :
result = role . revoke ( * * params )
2019-03-06 14:18:43 +03:00
except ( exc . ConnectionError , exc . BadRequest , exc . NotFound , exc . AuthError ) as excinfo :
2017-02-20 23:18:43 +03:00
module . fail_json ( msg = ' Failed to update role: {0} ' . format ( excinfo ) , changed = False )
json_output [ ' changed ' ] = result [ ' changed ' ]
module . exit_json ( * * json_output )
if __name__ == ' __main__ ' :
main ( )