2017-02-17 19:18:40 +03:00
#!/usr/bin/python
2017-05-11 19:26:36 +03:00
# coding: utf-8 -*-
2017-02-17 19:18:40 +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:18:40 +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:18:40 +03:00
DOCUMENTATION = '''
- - -
module : tower_host
version_added : " 2.3 "
2017-03-09 19:20:25 +03:00
author : " Wayne Witzel III (@wwitzel3) "
2017-02-17 19:18:40 +03:00
short_description : create , update , or destroy Ansible Tower host .
description :
- Create , update , or destroy Ansible Tower hosts . See
U ( https : / / www . ansible . com / tower ) for an overview .
options :
name :
description :
- The name to use for the host .
required : True
2019-09-30 23:01:44 +03:00
type : str
2017-02-17 19:18:40 +03:00
description :
description :
- The description to use for the host .
2019-09-30 23:01:44 +03:00
type : str
2017-02-17 19:18:40 +03:00
inventory :
description :
- Inventory the host should be made a member of .
required : True
2019-09-30 23:01:44 +03:00
type : str
2017-02-17 19:18:40 +03:00
enabled :
description :
- If the host should be enabled .
2018-03-16 00:15:24 +03:00
type : bool
default : ' yes '
2017-02-17 19:18:40 +03:00
variables :
description :
2018-03-15 06:58:50 +03:00
- Variables to use for the host . Use C ( @ ) for a file .
2019-09-30 23:01:44 +03:00
type : str
2017-02-17 19:18:40 +03:00
state :
description :
- Desired state of the resource .
choices : [ " present " , " absent " ]
2018-03-16 00:15:24 +03:00
default : " present "
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-17 19:18:40 +03:00
'''
EXAMPLES = '''
- name : Add tower host
tower_host :
name : localhost
description : " Local Host Group "
inventory : " Local Inventory "
state : present
tower_config_file : " ~/tower_cli.cfg "
2018-11-27 16:10:18 +03:00
variables :
example_var : 123
2017-02-17 19:18:40 +03:00
'''
2017-10-02 23:21:24 +03:00
import os
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-17 19:18:40 +03:00
try :
import tower_cli
2019-01-09 17:31:21 +03:00
import tower_cli . exceptions as exc
2017-02-17 19:18:40 +03:00
from tower_cli . conf import settings
except ImportError :
2017-10-02 23:21:24 +03:00
pass
2017-02-17 19:18:40 +03:00
def main ( ) :
2018-08-02 18:17:39 +03:00
argument_spec = dict (
2017-10-02 23:21:24 +03:00
name = dict ( required = True ) ,
description = dict ( ) ,
inventory = dict ( required = True ) ,
enabled = dict ( type = ' bool ' , default = True ) ,
variables = dict ( ) ,
state = dict ( choices = [ ' present ' , ' absent ' ] , default = ' present ' ) ,
2018-08-02 18:17:39 +03:00
)
module = TowerModule ( argument_spec = argument_spec , supports_check_mode = True )
2017-02-17 19:18:40 +03:00
name = module . params . get ( ' name ' )
description = module . params . get ( ' description ' )
inventory = module . params . get ( ' inventory ' )
enabled = module . params . get ( ' enabled ' )
state = module . params . get ( ' state ' )
variables = module . params . get ( ' variables ' )
if variables :
if variables . startswith ( ' @ ' ) :
filename = os . path . expanduser ( variables [ 1 : ] )
2018-03-16 20:28:19 +03:00
with open ( filename , ' r ' ) as f :
variables = f . read ( )
2017-02-17 19:18:40 +03:00
json_output = { ' host ' : name , ' state ' : state }
tower_auth = tower_auth_config ( module )
with settings . runtime_values ( * * tower_auth ) :
tower_check_mode ( module )
host = tower_cli . get_resource ( ' host ' )
try :
inv_res = tower_cli . get_resource ( ' inventory ' )
inv = inv_res . get ( name = inventory )
if state == ' present ' :
result = host . modify ( name = name , inventory = inv [ ' id ' ] , enabled = enabled ,
2017-05-11 19:26:36 +03:00
variables = variables , description = description , create_on_missing = True )
2017-02-17 19:18:40 +03:00
json_output [ ' id ' ] = result [ ' id ' ]
elif state == ' absent ' :
result = host . delete ( name = name , inventory = inv [ ' id ' ] )
except ( exc . NotFound ) as excinfo :
module . fail_json ( msg = ' Failed to update host, inventory not found: {0} ' . format ( excinfo ) , changed = False )
2019-03-06 14:18:43 +03:00
except ( exc . ConnectionError , exc . BadRequest , exc . AuthError ) as excinfo :
2017-02-17 19:18:40 +03:00
module . fail_json ( msg = ' Failed to update host: {0} ' . format ( excinfo ) , changed = False )
json_output [ ' changed ' ] = result [ ' changed ' ]
module . exit_json ( * * json_output )
if __name__ == ' __main__ ' :
main ( )