def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( url=dict(required=True), query=dict(type="str", required=False, default=""), resolved=dict(type="bool", default=False, choices=[True, False]), external=dict(type="bool", default=False, choices=[True, False]), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) icinga_object = Icinga2APIObject(module=module, path="/zones", data=[]) object_list = icinga_object.query(query=module.params["query"], resolved=module.params["resolved"]) filtered_list = object_list["data"]["objects"] if not module.params["external"]: filtered_list = [ i for i in filtered_list if i["object_type"] != "external_object" ] module.exit_json(objects=filtered_list, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True, aliases=["name"]), is_global=dict(required=False, type="bool", default=False), parent=dict(required=False), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True ) data = { "object_name": module.params["object_name"], "object_type": "object", "is_global": module.params["is_global"], } if module.params["parent"] is not None: data["parent"] = module.params["parent"] icinga_object = Icinga2APIObject(module=module, path="/zone", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True, aliases=["name"]), display_name=dict(required=False), imports=dict(type="list", elements="str", default=[], required=False), ranges=dict(type="dict", required=False), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True ) data = { "object_name": module.params["object_name"], "object_type": "object", "display_name": module.params["display_name"], "imports": module.params["imports"], "ranges": module.params["ranges"], } icinga_object = Icinga2APIObject( module=module, path="/timeperiod", data=data ) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( url=dict(required=True), query=dict(type="str", required=False, default=""), resolved=dict(type="bool", default=False, choices=[True, False]), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) icinga_object = Icinga2APIObject(module=module, path="/commands/templates", data=[]) object_list = icinga_object.query(query=module.params["query"], resolved=module.params["resolved"]) # icinga also returns normal objects when querying templates, # we need to filter these filtered_list = [ i for i in object_list["data"]["objects"] if i["object_type"] == "template" ] module.exit_json(objects=filtered_list, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( url=dict(required=True), query=dict(type="str", required=False, default=""), resolved=dict(type="bool", default=False, choices=[True, False]), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) icinga_object = Icinga2APIObject( module=module, path="/notifications/templates", data=[] ) object_list = icinga_object.query( query=module.params["query"], resolved=module.params["resolved"] ) module.exit_json( objects=object_list["data"]["objects"], )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True, aliases=["name"]), display_name=dict(required=False), assign_filter=dict(required=False), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data = { "object_name": module.params["object_name"], "object_type": "object", "display_name": module.params["display_name"], "assign_filter": module.params["assign_filter"], } icinga_object = Icinga2APIObject(module=module, path="/servicegroup", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True, aliases=["name"]), imports=dict(type="list", elements="str", required=False), apply_to=dict(required=True, choices=["service", "host"]), assign_filter=dict(required=False), disabled=dict(type="bool", required=False, default=False, choices=[True, False]), notification_interval=dict(required=False), states=dict(type="list", elements="str", required=False), users=dict(type="list", elements="str", required=False), types=dict(type="list", elements="str", required=False), vars=dict(type="dict", default={}, required=False), ) # When deleting objects, only the name is necessary, so we cannot use # required=True in the argument_spec. Instead we define here what is # necessary when state is present required_if = [("state", "present", ["imports"])] # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, required_if=required_if, ) data = { "object_name": module.params["object_name"], "object_type": "apply", "imports": module.params["imports"], "apply_to": module.params["apply_to"], "disabled": module.params["disabled"], "assign_filter": module.params["assign_filter"], "notification_interval": module.params["notification_interval"], "states": module.params["states"], "users": module.params["users"], "types": module.params["types"], "vars": module.params["vars"], } icinga_object = Icinga2APIObject(module=module, path="/notification", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # remove unnecessary argument 'force' del argument_spec["force"] del argument_spec["http_agent"] # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True), imports=dict(type="list", elements="str", required=False), apply_to=dict(required=True, choices=["service", "host"]), assign_filter=dict(required=False), notification_interval=dict(required=False), types=dict(type="list", elements="str", required=False), users=dict(type="list", elements="str", required=False), ) # When deleting objects, only the name is necessary, so we cannot use # required=True in the argument_spec. Instead we define here what is # necessary when state is present required_if = [("state", "present", ["imports"])] # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, required_if=required_if, ) data = { "object_name": module.params["object_name"], "object_type": "apply", "imports": module.params["imports"], "apply_to": module.params["apply_to"], "assign_filter": module.params["assign_filter"], "notification_interval": module.params["notification_interval"], "types": module.params["types"], "users": module.params["users"], } try: icinga_object = Icinga2APIObject(module=module, path="/notification", data=data) except Exception as e: module.fail_json( msg="unable to connect to Icinga. Exception message: %s" % e) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, object_name=module.params["object_name"], data=icinga_object.data, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # remove unnecessary argument 'force' del argument_spec["force"] del argument_spec["http_agent"] # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True), display_name=dict(required=False), groups=dict(type="list", elements="str", default=[], required=False), imports=dict(type="list", elements="str", required=True), disabled=dict(type="bool", default=False, choices=[True, False]), address=dict(required=False), address6=dict(required=False), zone=dict(required=False, default=None), vars=dict(type="dict", default=None), check_command=dict(required=False), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data = { "object_name": module.params["object_name"], "object_type": "object", "display_name": module.params["display_name"], "groups": module.params["groups"], "imports": module.params["imports"], "disabled": module.params["disabled"], "address": module.params["address"], "address6": module.params["address6"], "zone": module.params["zone"], "vars": module.params["vars"], "check_command": module.params["check_command"], } try: icinga_object = Icinga2APIObject(module=module, path="/host", data=data) except Exception as e: module.fail_json( msg="unable to connect to Icinga. Exception message: %s" % e) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, object_name=module.params["object_name"], data=icinga_object.data, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True, aliases=["name"]), display_name=dict(required=False), groups=dict(type="list", elements="str", default=[], required=False), check_command=dict(required=False), imports=dict(type="list", elements="str", required=False), disabled=dict(type="bool", default=False, choices=[True, False]), address=dict(required=False), address6=dict(required=False), zone=dict(required=False, default=None), vars=dict(type="dict", default=None), notes=dict(type="str", required=False), notes_url=dict(type="str", required=False), has_agent=dict(type="bool", choices=[True, False]), master_should_connect=dict(type="bool", choices=[True, False]), accept_config=dict(type="bool", choices=[True, False]), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data = { "object_name": module.params["object_name"], "object_type": "template", "display_name": module.params["display_name"], "groups": module.params["groups"], "check_command": module.params["check_command"], "imports": module.params["imports"], "disabled": module.params["disabled"], "address": module.params["address"], "address6": module.params["address6"], "zone": module.params["zone"], "vars": module.params["vars"], "notes": module.params["notes"], "notes_url": module.params["notes_url"], "has_agent": module.params["has_agent"], "master_should_connect": module.params["master_should_connect"], "accept_config": module.params["accept_config"], } icinga_object = Icinga2APIObject(module=module, path="/host", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True, aliases=["name"]), imports=dict(type="list", elements="str", required=False, default=[]), disabled=dict( type="bool", required=False, default=False, choices=[True, False] ), vars=dict(type="dict", default={}), command=dict(required=False), command_type=dict( default="PluginCheck", choices=["PluginCheck", "PluginNotification", "PluginEvent"], ), timeout=dict(required=False, default=None), zone=dict(required=False, default=None), arguments=dict(type="dict", default=None), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True ) # `arguments` is of type dict, default should be {} # however, the director api returns [] when no `arguments` are set, making the diff seem changed # therefore set the default to [] as well to get a clean diff output if not module.params["arguments"]: module.params["arguments"] = [] data = { "object_name": module.params["object_name"], "object_type": "template", "imports": module.params["imports"], "disabled": module.params["disabled"], "vars": module.params["vars"], "command": module.params["command"], "methods_execute": module.params["command_type"], "timeout": module.params["timeout"], "zone": module.params["zone"], "arguments": module.params["arguments"], } icinga_object = Icinga2APIObject(module=module, path="/command", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), append=dict(type="bool", choices=[True, False]), object_name=dict(required=True, aliases=["name"]), display_name=dict(required=False), disabled=dict(type="bool", default=False, choices=[True, False]), imports=dict(type="list", elements="str", required=False), email=dict(required=False), pager=dict(required=False), period=dict(required=False), groups=dict(type="list", elements="str", required=False), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data_keys = [ "object_name", "display_name", "imports", "disabled", "email", "pager", "period", "groups", ] data = {} if module.params["append"]: for k in data_keys: if module.params[k]: data[k] = module.params[k] else: for k in data_keys: data[k] = module.params[k] data["object_type"] = "object" icinga_object = Icinga2APIObject(module=module, path="/user", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True, aliases=["name"]), notification_interval=dict(required=False), states=dict(type="list", elements="str", required=False), times_begin=dict(type="int", required=False), times_end=dict(type="int", required=False), types=dict(type="list", elements="str", required=False), zone=dict(required=False, default=None), time_period=dict(required=False, aliases=["period"]), notification_command=dict(required=False, aliases=["command"]), users=dict(type="list", elements="str", required=False), user_groups=dict(type="list", elements="str", required=False), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) data = { "object_name": module.params["object_name"], "object_type": "template", "notification_interval": module.params["notification_interval"], "states": module.params["states"], "times_begin": module.params["times_begin"], "times_end": module.params["times_end"], "types": module.params["types"], "zone": module.params["zone"], "period": module.params["time_period"], "command": module.params["notification_command"], "users": module.params["users"], "user_groups": module.params["user_groups"], } icinga_object = Icinga2APIObject( module=module, path="/notification", data=data ) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # remove unnecessary argument 'force' del argument_spec['force'] del argument_spec['http_agent'] # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), object_name=dict(required=True), display_name=dict(required=False), groups=dict(type='list', default=[], required=False), check_command=dict(required=True), imports=dict(type='list', required=True), disabled=dict(type='bool', default=False, choices=[True, False]), address=dict(required=False), zone=dict(type='str', default='master', required=False), vars=dict(type='dict', default=None), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data = { 'object_name': module.params["object_name"], 'object_type': "template", 'display_name': module.params["display_name"], 'groups': module.params["groups"], 'check_command': module.params["check_command"], 'imports': module.params["imports"], 'disabled': module.params["disabled"], 'address': module.params["address"], 'zone': module.params["zone"], 'vars': module.params["vars"], } try: icinga_object = Icinga2APIObject(module=module, path="/host", data=data) except Exception as e: module.fail_json( msg="unable to connect to Icinga. Exception message: %s" % e) changed, diff = icinga_object.update(module.params["state"]) module.exit_json(changed=changed, object_name=module.params["object_name"], data=icinga_object.data, diff=diff)
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), append=dict(type="bool", choices=[True, False]), object_name=dict(required=True, aliases=["name"]), host=dict(required=False), port=dict(required=False, type="int"), log_duration=dict(required=False), zone=dict(required=False), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data_keys = [ "object_name", "host", "port", "log_duration", "zone", ] data = {} if module.params["append"]: for k in data_keys: if module.params[k]: data[k] = module.params[k] else: for k in data_keys: data[k] = module.params[k] data["object_type"] = "object" icinga_object = Icinga2APIObject(module=module, path="/endpoint", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # remove unnecessary argument 'force' del argument_spec['force'] del argument_spec['http_agent'] # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), object_name=dict(required=True), display_name=dict(required=False), disabled=dict(type='bool', default=False, choices=[True, False]), imports=dict(type='list', required=False), email=dict(required=False), pager=dict(required=False), period=dict(required=False), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data = { 'object_name': module.params["object_name"], 'object_type': "object", 'display_name': module.params["display_name"], 'imports': module.params["imports"], 'disabled': module.params["disabled"], 'email': module.params["email"], 'pager': module.params["pager"], 'period': module.params["period"], } try: icinga_object = Icinga2APIObject(module=module, path="/user", data=data) except Exception as e: module.fail_json( msg="unable to connect to Icinga. Exception message: %s" % e) changed, diff = icinga_object.update(module.params["state"]) module.exit_json(changed=changed, object_name=module.params["object_name"], data=icinga_object.data, diff=diff)
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # remove unnecessary argument 'force' del argument_spec['force'] del argument_spec['http_agent'] # add our own arguments argument_spec.update(state=dict(default="present", choices=["absent", "present"]), object_name=dict(required=True), imports=dict(type="list", required=True), apply_to=dict(required=True, choices=["service", "host"]), assign_filter=dict(required=False), notification_interval=dict(required=False), types=dict(type="list", required=False), users=dict(type="list", required=False)) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data = { 'object_name': module.params["object_name"], 'object_type': "apply", 'imports': module.params["imports"], 'apply_to': module.params["apply_to"], 'assign_filter': module.params["assign_filter"], 'notification_interval': module.params["notification_interval"], 'types': module.params["types"], 'users': module.params["users"], } try: icinga_object = Icinga2APIObject(module=module, path="/notification", data=data) except Exception as e: module.fail_json( msg="unable to connect to Icinga. Exception message: %s" % e) changed, diff = icinga_object.update(module.params["state"]) module.exit_json(changed=changed, object_name=module.params["object_name"], data=icinga_object.data, diff=diff)
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( append=dict(type="bool", choices=[True, False]), assign_filter=dict(required=False), description=dict(required=False), object_name=dict(required=True, aliases=["name"]), state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data_keys = [ "assign_filter", "description", "object_name", ] data = {} if module.params["append"]: for k in data_keys: if module.params[k]: data[k] = module.params[k] else: for k in data_keys: data[k] = module.params[k] data["object_type"] = "template" icinga_object = Icinga2APIObject(module=module, path="/serviceSet", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # remove unnecessary argument 'force' del argument_spec["force"] del argument_spec["http_agent"] # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True), imports=dict(type="list", elements="str", default=[], required=False), period=dict(required=False), enable_notifications=dict(type="bool", required=False), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True ) data = { "object_name": module.params["object_name"], "object_type": "template", "imports": module.params["imports"], "period": module.params["period"], "enable_notifications": module.params["enable_notifications"], } try: icinga_object = Icinga2APIObject(module=module, path="/user", data=data) except Exception as e: module.fail_json( msg="unable to connect to Icinga. Exception message: %s" % e ) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, object_name=module.params["object_name"], data=icinga_object.data, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # remove unnecessary argument 'force' del argument_spec["force"] del argument_spec["http_agent"] # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True), display_name=dict(required=False), assign_filter=dict(required=False), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True ) data = { "object_name": module.params["object_name"], "object_type": "object", "display_name": module.params["display_name"], "assign_filter": module.params["assign_filter"], } try: icinga_object = Icinga2APIObject( module=module, path="/hostgroup", data=data ) except Exception as e: module.fail_json( msg="unable to connect to Icinga. Exception message: %s" % e ) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, object_name=module.params["object_name"], data=icinga_object.data, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True, aliases=["name"]), host=dict(required=False), port=dict(required=False, type="int"), log_duration=dict(required=False), zone=dict(required=False), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data = { "object_name": module.params["object_name"], "object_type": "object", } for key in ("host", "port", "log_duration", "zone"): if module.params[key] is not None: data[key] = module.params[key] icinga_object = Icinga2APIObject(module=module, path="/endpoint", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), append=dict(type="bool", choices=[True, False]), object_name=dict(required=True, aliases=["name"]), display_name=dict(required=False), disabled=dict(type="bool", default=False, choices=[True, False]), zone=dict(required=False, default=None), imports=dict(type="list", elements="str", default=[], required=False), ranges=dict(type="dict", required=False), prefer_includes=dict(type="bool", default=True, choices=[True, False]), excludes=dict( type="list", elements="str", default=[], required=False, aliases=["exclude_period"], ), includes=dict( type="list", elements="str", default=[], required=False, aliases=["include_period"], ), update_method=dict(required=False, default="LegacyTimePeriod"), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data_keys = [ "object_name", "display_name", "disabled", "zone", "imports", "ranges", "prefer_includes", "excludes", "includes", "update_method", ] data = {} if module.params["append"]: for k in data_keys: if module.params[k]: data[k] = module.params[k] else: for k in data_keys: data[k] = module.params[k] data["object_type"] = "template" icinga_object = Icinga2APIObject(module=module, path="/timeperiod", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), append=dict(type="bool", choices=[True, False]), object_name=dict(required=True, aliases=["name"]), disabled=dict(type="bool", default=False, choices=[True, False]), check_command=dict(required=False), check_interval=dict(required=False), check_period=dict(required=False), check_timeout=dict(required=False), enable_active_checks=dict(type="bool", required=False), enable_event_handler=dict(type="bool", required=False), enable_notifications=dict(type="bool", required=False), enable_passive_checks=dict(type="bool", required=False), enable_perfdata=dict(type="bool", required=False), event_command=dict(type="str", required=False), groups=dict(type="list", elements="str", default=[], required=False), imports=dict(type="list", elements="str", default=[], required=False), max_check_attempts=dict(required=False), notes=dict(type="str", required=False), notes_url=dict(type="str", required=False), retry_interval=dict(required=False), use_agent=dict(type="bool", required=False), vars=dict(type="dict", default={}, required=False), volatile=dict(type="bool", required=False), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) data_keys = [ "object_name", "disabled", "check_command", "check_interval", "check_period", "check_timeout", "enable_active_checks", "enable_event_handler", "enable_notifications", "enable_passive_checks", "enable_perfdata", "event_command", "groups", "imports", "max_check_attempts", "notes", "notes_url", "retry_interval", "use_agent", "vars", "volatile", ] data = {} if module.params["append"]: for k in data_keys: if module.params[k]: data[k] = module.params[k] else: for k in data_keys: data[k] = module.params[k] data["object_type"] = "template" icinga_object = Icinga2APIObject(module=module, path="/service", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( accept_config=dict(type="bool", choices=[True, False]), address=dict(required=False), address6=dict(required=False), append=dict(type="bool", choices=[True, False]), check_command=dict(required=False), check_interval=dict(required=False), check_period=dict(type="str", required=False), check_timeout=dict(type="str", required=False), command_endpoint=dict(type="str", required=False), disabled=dict(type="bool", default=False, choices=[True, False]), display_name=dict(required=False), enable_active_checks=dict(type="bool", choices=[True, False], required=False), enable_event_handler=dict(type="bool", choices=[True, False], required=False), enable_flapping=dict(type="bool", choices=[True, False], required=False), enable_notifications=dict(type="bool", choices=[True, False], required=False), enable_passive_checks=dict(type="bool", choices=[True, False], required=False), enable_perfdata=dict(type="bool", choices=[True, False], required=False), event_command=dict(type="str", required=False), flapping_threshold_high=dict(type="str", required=False), flapping_threshold_low=dict(type="str", required=False), groups=dict(type="list", elements="str", default=[], required=False), has_agent=dict(type="bool", choices=[True, False]), icon_image_alt=dict(type="str", required=False), icon_image=dict(type="str", required=False), imports=dict(type="list", elements="str", required=False), master_should_connect=dict(type="bool", choices=[True, False]), max_check_attempts=dict(required=False), notes_url=dict(type="str", required=False), notes=dict(type="str", required=False), object_name=dict(required=True, aliases=["name"]), retry_interval=dict(required=False), state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), vars=dict(type="dict", default=None), volatile=dict(type="bool", choices=[True, False], required=False), zone=dict(required=False, default=None), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) data_keys = [ "accept_config", "address", "address6", "check_command", "check_interval", "check_period", "check_timeout", "command_endpoint", "disabled", "display_name", "enable_active_checks", "enable_event_handler", "enable_flapping", "enable_notifications", "enable_passive_checks", "enable_perfdata", "event_command", "flapping_threshold_high", "flapping_threshold_low", "groups", "has_agent", "icon_image_alt", "icon_image", "imports", "master_should_connect", "max_check_attempts", "notes_url", "notes", "object_name", "retry_interval", "vars", "volatile", "zone", ] data = {} if module.params["append"]: for k in data_keys: if module.params[k]: data[k] = module.params[k] else: for k in data_keys: data[k] = module.params[k] data["object_type"] = "template" icinga_object = Icinga2APIObject(module=module, path="/host", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( accept_config=dict(type="bool", choices=[True, False]), address=dict(required=False), address6=dict(required=False), append=dict(type="bool", choices=[True, False]), check_command=dict(required=False), check_interval=dict(required=False), check_period=dict(type="str", required=False), check_timeout=dict(type="str", required=False), command_endpoint=dict(type="str", required=False), disabled=dict(type="bool", default=False, choices=[True, False]), display_name=dict(required=False), enable_active_checks=dict( type="bool", choices=[True, False], required=False ), enable_event_handler=dict( type="bool", choices=[True, False], required=False ), enable_flapping=dict( type="bool", choices=[True, False], required=False ), enable_notifications=dict( type="bool", choices=[True, False], required=False ), enable_passive_checks=dict( type="bool", choices=[True, False], required=False ), enable_perfdata=dict( type="bool", choices=[True, False], required=False ), event_command=dict(type="str", required=False), flapping_threshold_high=dict(type="str", required=False), flapping_threshold_low=dict(type="str", required=False), groups=dict(type="list", elements="str", default=[], required=False), has_agent=dict(type="bool", choices=[True, False]), icon_image_alt=dict(type="str", required=False), icon_image=dict(type="str", required=False), imports=dict(type="list", elements="str", required=False), master_should_connect=dict(type="bool", choices=[True, False]), max_check_attempts=dict(required=False), notes_url=dict(type="str", required=False), notes=dict(type="str", required=False), object_name=dict(required=True, aliases=["name"]), retry_interval=dict(required=False), state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), vars=dict(type="dict", default=None), volatile=dict(type="bool", choices=[True, False], required=False), zone=dict(required=False, default=None), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) # When deleting objects, only the name is necessary, so we cannot use # required=True in the argument_spec. Instead we define here what is # necessary when state is present and we do not append to an existing object # We cannot use "required_if" here, because we rely on module.params. # These are defined at the same time we'd define the required_if arguments. if ( module.params["state"] == "present" and not module.params["append"] and not (module.params["imports"]) ): module.fail_json(msg="missing required arguments: imports.") data_keys = [ "accept_config", "address", "address6", "check_command", "check_interval", "check_period", "check_timeout", "command_endpoint", "disabled", "display_name", "enable_active_checks", "enable_event_handler", "enable_flapping", "enable_notifications", "enable_passive_checks", "enable_perfdata", "event_command", "flapping_threshold_high", "flapping_threshold_low", "groups", "has_agent", "icon_image_alt", "icon_image", "imports", "master_should_connect", "max_check_attempts", "notes_url", "notes", "object_name", "retry_interval", "vars", "volatile", "zone", ] data = {} if module.params["append"]: for k in data_keys: if module.params[k]: data[k] = module.params[k] else: for k in data_keys: data[k] = module.params[k] data["object_type"] = "object" icinga_object = Icinga2APIObject(module=module, path="/host", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True, aliases=["name"]), imports=dict(type="list", elements="str", required=False, default=[]), disabled=dict(type="bool", required=False, default=False, choices=[True, False]), vars=dict(type="dict", default={}), command=dict(required=False), command_type=dict( default="PluginCheck", choices=["PluginCheck", "PluginNotification", "PluginEvent"], ), timeout=dict(required=False, default=None), zone=dict(required=False, default=None), arguments=dict(type="dict", default=None), ) # When deleting objects, only the name is necessary, so we cannot use # required=True in the argument_spec. Instead we define here what is # necessary when state is present required_if = [("state", "present", ["object_name"])] # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, required_if=required_if, ) # typ von arguments ist eigentlich dict, also ohne Angabe = {} # die director API schickt hier aber ein leeres Array zurueck wenn nichts definiert # daher ueberschreiben, damit der diff besser funktioniert if not module.params["arguments"]: module.params["arguments"] = [] data = { "object_name": module.params["object_name"], "object_type": "object", "imports": module.params["imports"], "disabled": module.params["disabled"], "vars": module.params["vars"], "command": module.params["command"], "methods_execute": module.params["command_type"], "timeout": module.params["timeout"], "zone": module.params["zone"], "arguments": module.params["arguments"], } icinga_object = Icinga2APIObject(module=module, path="/command", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # remove unnecessary argument 'force' del argument_spec["force"] del argument_spec["http_agent"] # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), object_name=dict(required=True), imports=dict(type="list", required=False, default=[]), disabled=dict(type="bool", required=False, default=False, choices=[True, False]), vars=dict(type="dict", default={}), command=dict(required=False), command_type=dict( default="PluginCheck", choices=["PluginCheck", "PluginNotification", "PluginEvent"], ), timeout=dict(required=False, default=None), zone=dict(required=False, default=None), arguments=dict(type="dict", default=None), ) # Define the main module module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) # typ von arguments ist eigentlich dict, also ohne Angabe = {} # die director API schickt hier aber ein leeres Array zurueck wenn nichts definiert # daher ueberschreiben, damit der diff besser funktioniert if not module.params["arguments"]: module.params["arguments"] = [] data = { "object_name": module.params["object_name"], "object_type": "object", "imports": module.params["imports"], "disabled": module.params["disabled"], "vars": module.params["vars"], "command": module.params["command"], "methods_execute": module.params["command_type"], "timeout": module.params["timeout"], "zone": module.params["zone"], "arguments": module.params["arguments"], } try: icinga_object = Icinga2APIObject(module=module, path="/command", data=data) except Exception as e: module.fail_json( msg="unable to connect to Icinga. Exception message: %s" % e) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, object_name=module.params["object_name"], data=icinga_object.data, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # remove unnecessary argument 'force' del argument_spec["force"] del argument_spec["http_agent"] # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), object_name=dict(required=True), disabled=dict(type="bool", default=False, choices=[True, False]), check_command=dict(required=False), check_interval=dict(required=False), check_period=dict(required=False), check_timeout=dict(required=False), enable_active_checks=dict(type="bool", required=False), enable_event_handler=dict(type="bool", required=False), enable_notifications=dict(type="bool", required=False), enable_passive_checks=dict(type="bool", required=False), enable_perfdata=dict(type="bool", required=False), groups=dict(type="list", elements="str", default=[], required=False), imports=dict(type="list", elements="str", default=[], required=False), max_check_attempts=dict(required=False), notes=dict(required=False), retry_interval=dict(required=False), use_agent=dict(type="bool", required=False), vars=dict(type="dict", default={}, required=False), volatile=dict(type="bool", required=False), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True ) data = { "object_name": module.params["object_name"], "disabled": module.params["disabled"], "object_type": "template", "check_command": module.params["check_command"], "check_interval": module.params["check_interval"], "check_period": module.params["check_period"], "check_timeout": module.params["check_timeout"], "enable_active_checks": module.params["enable_active_checks"], "enable_event_handler": module.params["enable_event_handler"], "enable_notifications": module.params["enable_notifications"], "enable_passive_checks": module.params["enable_passive_checks"], "enable_perfdata": module.params["enable_perfdata"], "groups": module.params["groups"], "imports": module.params["imports"], "max_check_attempts": module.params["max_check_attempts"], "notes": module.params["notes"], "retry_interval": module.params["retry_interval"], "use_agent": module.params["use_agent"], "vars": module.params["vars"], "volatile": module.params["volatile"], } try: icinga_object = Icinga2APIObject( module=module, path="/service", data=data ) except Exception as e: module.fail_json( msg="unable to connect to Icinga. Exception message: %s" % e ) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, object_name=module.params["object_name"], data=icinga_object.data, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), append=dict(type="bool", choices=[True, False]), object_name=dict(required=True, aliases=["name"]), imports=dict(type="list", elements="str", required=False), apply_to=dict(choices=["service", "host"]), assign_filter=dict(required=False), disabled=dict( type="bool", required=False, default=False, choices=[True, False] ), notification_interval=dict(required=False), states=dict(type="list", elements="str", required=False), users=dict(type="list", elements="str", required=False), user_groups=dict(type="list", elements="str", required=False), types=dict(type="list", elements="str", required=False), vars=dict(type="dict", default={}, required=False), period=dict(required=False, aliases=["time_period"]), times_begin=dict(type="int", required=False), times_end=dict(type="int", required=False), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) # When deleting objects, only the name is necessary, so we cannot use # required=True in the argument_spec. Instead we define here what is # necessary when state is present and we do not append to an existing object # We cannot use "required_if" here, because we rely on module.params. # These are defined at the same time we'd define the required_if arguments. if ( module.params["state"] == "present" and not module.params["append"] and not (module.params["apply_to"] and module.params["imports"]) ): module.fail_json(msg="missing required arguments: imports.") data_keys = [ "object_name", "imports", "apply_to", "disabled", "assign_filter", "notification_interval", "states", "users", "user_groups", "types", "vars", "period", "times_begin", "times_end", ] data = {} if module.params["append"]: for k in data_keys: if module.params[k]: data[k] = module.params[k] else: for k in data_keys: data[k] = module.params[k] data["object_type"] = "apply" icinga_object = Icinga2APIObject( module=module, path="/notification", data=data ) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )
def main(): # use the predefined argument spec for url argument_spec = url_argument_spec() # add our own arguments argument_spec.update( state=dict(default="present", choices=["absent", "present"]), url=dict(required=True), append=dict(type="bool", choices=[True, False]), object_name=dict(required=True, aliases=["name"]), imports=dict(type="list", elements="str", required=False, default=[]), disabled=dict(type="bool", required=False, default=False, choices=[True, False]), vars=dict(type="dict", default={}), command=dict(required=False), methods_execute=dict( default="PluginCheck", choices=["PluginCheck", "PluginNotification", "PluginEvent"], aliases=["command_type"], ), timeout=dict(required=False, default=None), zone=dict(required=False, default=None), arguments=dict(type="dict", default=None), ) # Define the main module module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) # typ von arguments ist eigentlich dict, also ohne Angabe = {} # die director API schickt hier aber ein leeres Array zurueck wenn nichts definiert # daher ueberschreiben, damit der diff besser funktioniert if not module.params["arguments"]: module.params["arguments"] = [] data_keys = [ "object_name", "imports", "disabled", "vars", "command", "methods_execute", "timeout", "zone", "arguments", ] data = {} if module.params["append"]: for k in data_keys: if module.params[k]: data[k] = module.params[k] else: for k in data_keys: data[k] = module.params[k] data["object_type"] = "object" icinga_object = Icinga2APIObject(module=module, path="/command", data=data) changed, diff = icinga_object.update(module.params["state"]) module.exit_json( changed=changed, diff=diff, )