2017-02-17 19:19:06 +03:00
#!/usr/bin/python
2017-05-11 19:26:36 +03:00
# coding: utf-8 -*-
2017-02-17 19:19:06 +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-17 19:19:06 +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-17 19:19:06 +03:00
DOCUMENTATION = '''
- - -
module : tower_group
2017-03-09 19:20:25 +03:00
author : " Wayne Witzel III (@wwitzel3) "
2017-02-17 19:19:06 +03:00
version_added : " 2.3 "
short_description : create , update , or destroy Ansible Tower group .
description :
- Create , update , or destroy Ansible Tower groups . See
U ( https : / / www . ansible . com / tower ) for an overview .
options :
name :
description :
- The name to use for the group .
required : True
description :
description :
- The description to use for the group .
required : False
default : null
inventory :
description :
- Inventory the group should be made a member of .
required : True
variables :
description :
- Variables to use for the group , use ' @ ' for a file .
required : False
default : null
credential :
description :
- Credential to use for the group .
required : False
default : null
source :
description :
- The source to use for this group .
required : False
default : null ,
choices : [ " manual " , " file " , " ec2 " , " rax " , " vmware " , " gce " , " azure " , " azure_rm " , " openstack " , " satellite6 " , " cloudforms " , " custom " ]
source_regions :
description :
- Regions for cloud provider .
required : False
default : null
source_vars :
description :
- Override variables from source with variables from this field .
required : False
default : null
instance_filters :
description :
- Comma - separated list of filter expressions for matching hosts .
required : False
default : null
group_by :
description :
- Limit groups automatically created from inventory source .
required : False
default : null
source_script :
description :
- Inventory script to be used when group type is " custom " .
required : False
default : null
overwrite :
description :
- Delete child roups and hosts not found in source .
required : False
default : False
overwrite_vars :
description :
- Override vars in child groups and hosts with those from external source .
required : False
default : null
update_on_launch :
description :
- Refresh inventory data from its source each time a job is run .
required : False
default : False
state :
description :
- Desired state of the resource .
required : False
default : " present "
choices : [ " present " , " absent " ]
2017-10-02 23:21:24 +03:00
extends_documentation_fragment : tower
2017-02-17 19:19:06 +03:00
'''
EXAMPLES = '''
- name : Add tower group
tower_group :
name : localhost
description : " Local Host Group "
inventory : " Local Inventory "
state : present
tower_config_file : " ~/tower_cli.cfg "
'''
2017-10-02 23:21:24 +03:00
import os
from ansible . module_utils . ansible_tower import tower_argument_spec , tower_auth_config , tower_check_mode , HAS_TOWER_CLI
2017-02-17 19:19:06 +03:00
try :
import tower_cli
import tower_cli . utils . exceptions as exc
from tower_cli . conf import settings
except ImportError :
2017-10-02 23:21:24 +03:00
pass
2017-02-17 19:19:06 +03:00
def main ( ) :
2017-10-02 23:21:24 +03:00
argument_spec = tower_argument_spec ( )
argument_spec . update ( dict (
name = dict ( required = True ) ,
description = dict ( ) ,
inventory = dict ( required = True ) ,
variables = dict ( ) ,
credential = dict ( ) ,
source = dict ( choices = [ " manual " , " file " , " ec2 " , " rax " , " vmware " ,
" gce " , " azure " , " azure_rm " , " openstack " ,
" satellite6 " , " cloudforms " , " custom " ] , default = " manual " ) ,
source_regions = dict ( ) ,
source_vars = dict ( ) ,
instance_filters = dict ( ) ,
group_by = dict ( ) ,
source_script = dict ( ) ,
overwrite = dict ( type = ' bool ' , default = False ) ,
overwrite_vars = dict ( ) ,
update_on_launch = dict ( type = ' bool ' , default = False ) ,
state = dict ( choices = [ ' present ' , ' absent ' ] , default = ' present ' ) ,
) )
module = AnsibleModule ( argument_spec = argument_spec , supports_check_mode = True )
2017-02-17 19:19:06 +03:00
if not HAS_TOWER_CLI :
module . fail_json ( msg = ' ansible-tower-cli required for this module ' )
name = module . params . get ( ' name ' )
inventory = module . params . get ( ' inventory ' )
credential = module . params . get ( ' credential ' )
state = module . params . get ( ' state ' )
variables = module . params . get ( ' variables ' )
if variables :
if variables . startswith ( ' @ ' ) :
filename = os . path . expanduser ( variables [ 1 : ] )
variables = module . contents_from_file ( filename )
json_output = { ' group ' : name , ' state ' : state }
tower_auth = tower_auth_config ( module )
with settings . runtime_values ( * * tower_auth ) :
tower_check_mode ( module )
group = tower_cli . get_resource ( ' group ' )
try :
params = module . params . copy ( )
params [ ' create_on_missing ' ] = True
params [ ' variables ' ] = variables
inv_res = tower_cli . get_resource ( ' inventory ' )
inv = inv_res . get ( name = inventory )
params [ ' inventory ' ] = inv [ ' id ' ]
if credential :
cred_res = tower_cli . get_resource ( ' credential ' )
cred = cred_res . get ( name = credential )
params [ ' credential ' ] = cred [ ' id ' ]
if state == ' present ' :
result = group . modify ( * * params )
json_output [ ' id ' ] = result [ ' id ' ]
elif state == ' absent ' :
result = group . delete ( * * params )
except ( exc . NotFound ) as excinfo :
module . fail_json ( msg = ' Failed to update the group, inventory not found: {0} ' . format ( excinfo ) , changed = False )
except ( exc . ConnectionError , exc . BadRequest , exc . NotFound ) as excinfo :
module . fail_json ( msg = ' Failed to update the group: {0} ' . format ( excinfo ) , changed = False )
json_output [ ' changed ' ] = result [ ' changed ' ]
module . exit_json ( * * json_output )
from ansible . module_utils . basic import AnsibleModule
if __name__ == ' __main__ ' :
main ( )