def main(): argspec = dict(name=dict(required=True, type="str"), state=dict(required=True, choices=["present", "absent"], type="str")) module = AnsibleModule(argument_spec=argspec, supports_check_mode=True) space_request = SpaceRequest(module, ) space_request.headers = { "Content-Type": "application/hornetq.jms.queue+xml" } queue_name = to_text(module.params["name"]) if to_text(module.params["state"]) == "present": body = '<queue name="{0}"><durable>false</durable></queue>'.format( queue_name) code, response = space_request.post("/api/hornet-q/queues", payload=body, status_codes='201, 412') if code == 201: module.exit_json(return_code=code, return_body=response, changed=True) elif code == 412: module.exit_json(return_code=code, return_body=response, changed=False) elif to_text(module.params["state"]) == "absent": code, response = space_request.delete( '/api/hornet-q/queues/jms.queue.{0}'.format(queue_name), status_codes='204, 405') if code == 204: module.exit_json(return_code=code, return_body=response, changed=True) elif code == 405: module.exit_json(return_code=code, return_body=response, changed=False)
def main(): argspec = dict(state=dict(required=True, choices=["present", "absent"], type="str"), id=dict(required=False, type="int"), ip_address=dict(required=False, type="str"), username=dict(required=False, type="str", no_log=True), password=dict(required=False, type="str", no_log=True), use_ping=dict(required=False, type="bool", default=True), use_snmp=dict(required=False, type="bool", default=False), snmp_community=dict(required=False, type="str"), queue=dict(required=False, type="str")) module = AnsibleModule(argument_spec=argspec, supports_check_mode=True) space_request = SpaceRequest(module, ) space_device_manager = SpaceDeviceMgr(module, ) # Gather device details to determine if device exists if module.params["id"]: device = space_device_manager.get_device_by_id(module.params["id"]) elif module.params["ip_address"]: #FIXME: Use get_device instead so we get full device details when we implment changing existing device device = space_device_manager.get_devices( ip_address=module.params["ip_address"]) else: module.fail_json(msg='You must provide either an id or ip_address') if to_text(module.params["state"]) == "present": if device: #FIXME: Add logic for changing an existing device module.exit_json(msg='Device already present', device=device[0], changed=False) #check params else: if not module.params["ip_address"]: module.fail_json(msg='You must provide either an ip_address') elif not module.params["username"]: module.fail_json(msg='You must provide a username') elif not module.params["password"]: module.fail_json(msg='You must provide either a password') # Create the device space_request.headers = { "Accept": "application/vnd.net.juniper.space.device-management.discover-devices+json;version=1", "Content-Type": "application/vnd.net.juniper.space.device-management.discover-devices+json;version=1;charset=UTF-8" } body = { "systemDiscoveryRule": { "ipAddressDiscoveryTarget": { "exclude": "false", "ipAddress": "{}".format(module.params["ip_address"]) }, "usePing": "{}".format(module.params["use_ping"]), "manageDiscoveredSystemsFlag": "true", "sshCredential": { "userName": "******".format(module.params["username"]), "password": "******".format(module.params["password"]) }, "tagNewlyManagedDiscoveredSystemsFlag": "false" } } if module.params["snmp_community"]: body['systemDiscoveryRule']['snmpV2CSetting'] = { "communityName": "{}".format(module.params["snmp_community"]) } body['systemDiscoveryRule']['useSnmp'] = "True" code, response = space_request.post( "/api/space/device-management/discover-devices", payload=json.dumps(body)) task_id = response['task']['id'] job_status = space_request.check_job(task_id=task_id) if job_status == "DONE": device = space_device_manager.get_devices( ip_address=module.params["ip_address"]) module.exit_json(device=device, task_id=task_id, job_status=job_status, changed=True) else: module.fail_json(task_id=task_id, job_status=job_status, changed=False) elif module.params["state"] == "absent": if not device: module.exit_json(msg="Device already absent", device=device, changed=False) else: space_request.headers = { "Accept": "application/vnd.net.juniper.space.device-management.device+json;version=1" } space_request.expect_json = False code, response = space_request.delete( "/api/space/device-management/devices/{0}".format( device[0]["device-id"]), status_codes="202") if code == 202: module.exit_json(task_id=response['task']['id'], changed=True)
def main(): argspec = dict(state=dict(required=True, choices=["present", "absent"], type="str"), id=dict(required=False, type="int"), name=dict(required=False, type="str"), ip_address=dict(required=False, type="str"), address_version=dict(required=False, choices=["ipv4", "ipv6"], type="str", default="ipv4"), type=dict(required=False, choices=["ipaddress", "group"], type="str", default="ipaddress"), members=dict(required=False, type="list", elements="str")) module = AnsibleModule(argument_spec=argspec, supports_check_mode=True) space_request = SpaceRequest(module, ) sd_address_manager = SDAddressMgr(module, ) # Gather address details to determine if address exists if module.params["id"]: address = sd_address_manager.get_address_by_id(module.params["id"]) elif module.params["name"]: address = sd_address_manager.get_address(name=module.params["name"]) else: module.fail_json(msg='You must provide either an id or a name') if to_text(module.params["state"]) == "present": if address: #FIXME: Add logic for changing an existing address module.exit_json(msg='Address already present', address=address[0], changed=False) #check params else: if not module.params["name"]: module.fail_json(msg='You must provide a name') elif not module.params["ip_address"] and not module.params[ "type"] == "group": #only require IP addres if this isn't a group module.fail_json(msg='You must provide an IP address') if module.params[ "type"] == "group" and module.params["members"] is None: module.fail_json( msg= 'You must provide at least one member if the address type is GROUP' ) # Create the address space_request.headers = { "Accept": "application/json", "Content-Type": "application/json" } body = { "address": { "definition_type": "CUSTOM", "associated_metadata": "", "name": "{}".format(module.params["name"]), "description": "", "address_type": "{}".format(module.params["type"].upper()), "address_version": "{}".format(module.params["address_version"].upper()), "host_name": "", "ip_address": "{}".format(module.params["ip_address"]) } } if module.params["type"] == "group": address_refs = [] for member in module.params["members"]: response = sd_address_manager.get_address(name=member) if response is not None: address_refs.append( dict(name=response[0]['name'], uuid=response[0]['id'])) else: module.fail_json(msg="Could not find member with name: {}". format(member)) body['address']['address_refs'] = address_refs code, response = space_request.post( "/api/juniper/sd/address-management/v5/address", payload=json.dumps(body)) address = sd_address_manager.get_address_by_id( id=response['address']['uuid']) module.exit_json(address=address, changed=True) elif module.params["state"] == "absent": if not address: module.exit_json(msg="Address already absent", address=address, changed=False) else: space_request.headers = { "Accept": "application/vnd.net.juniper.space.address-management.address+json;version=1" } space_request.expect_json = False code, response = space_request.delete( "/api/juniper/sd/address-management/addresses/{0}".format( address[0]["id"]), status_codes="204, 500") if code == 204: module.exit_json(changed=True) elif code == 500: module.fail_json( msg= "Could not delete the address. Most likely it is in use by another group or policy.", response=response)
def main(): argspec = dict(state=dict(required=True, choices=["present", "absent"], type="str"), id=dict(required=False, type="int"), name=dict(required=False, type="str"), ip_address=dict(required=False, type="str"), address_version=dict(required=False, choices=["ipv4", "ipv6"], type="str", default="ipv4"), type=dict( required=False, choices=["ipaddress", "group", "network", "range"], type="str", default="ipaddress"), members=dict(required=False, type="list", elements="str")) module = AnsibleModule(argument_spec=argspec, supports_check_mode=True) space_request = SpaceRequest(module, ) sd_address_manager = SDAddressMgr(module, ) # Gather address details to determine if address exists if module.params["id"]: address = sd_address_manager.get_address_by_id(module.params["id"]) elif module.params["name"]: address = sd_address_manager.get_address(name=module.params["name"]) else: module.fail_json(msg='You must provide either an id or a name') if to_text(module.params["state"]) == "present": #check params if not module.params["name"]: module.fail_json(msg='You must provide a name') elif not module.params["ip_address"] and not module.params[ "type"] == "group": #only require IP addres if this isn't a group module.fail_json(msg='You must provide an IP address') if module.params[ "type"] == "group" and module.params["members"] is None: module.fail_json( msg= 'You must provide at least one member if the address type is GROUP' ) space_request.headers = { "Accept": "application/json", "Content-Type": "application/json" } # Create the address body body = dict( address={ "definition_type": "CUSTOM", "associated_metadata": "", "name": module.params["name"], "description": "", "address_type": module.params["type"].upper(), "address_version": module.params["address_version"].upper(), "host_name": "" }) # Add member-refs if necessary if module.params["type"] == "group": address_refs = [] for member in module.params["members"]: response = sd_address_manager.get_address(name=member) if response is not None: # address_refs.append(dict(name=response[0]['name'], uuid=response[0]['uuid'])) response[0].pop('uri', None) address_refs.append(response[0]) else: module.fail_json(msg="Could not find member with name: {}". format(member)) body['address']['address_refs'] = address_refs else: # only set ip_address key if this isn't a group body['address']['ip_address'] = module.params["ip_address"] # Logic for changing an existing address if address: # make a copy patch_address = dict(address=address[0].copy()) #update the patch with the prepared body patch_address['address'].update(body['address']) #compare for differences if address[0] == patch_address['address']: module.exit_json(msg='Address already up to date', address=address[0], changed=False) else: code, response = space_request.put( "/api/juniper/sd/address-management/v5/address/{0}".format( address[0]["uuid"]), payload=json.dumps(patch_address)) module.exit_json(msg='Address updated', address=response['address'], changed=True) if address[0]["address-type"] == "GROUP": for member in body["address"]["address_refs"]: if not any(d["uuid"] == member["uuid"] for d in a): pass # update body with edit-version and set method to PUT module.exit_json(msg='Address already present', address=address[0], changed=False) code, response = space_request.post( "/api/juniper/sd/address-management/v5/address", payload=json.dumps(body)) module.exit_json(address=response['address'], changed=True) elif module.params["state"] == "absent": if not address: module.exit_json(msg="Address already absent", address=address, changed=False) else: space_request.headers = { "Accept": "application/vnd.net.juniper.space.address-management.address+json;version=1" } space_request.expect_json = False code, response = space_request.delete( "/api/juniper/sd/address-management/addresses/{0}".format( address[0]["uuid"]), status_codes="204, 500") if code == 204: module.exit_json(changed=True) elif code == 500: module.fail_json( msg= "Could not delete the address. Most likely it is in use by another group or policy.", response=response)