Exemple #1
0
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,
    )
Exemple #3
0
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,
    )
Exemple #4
0
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,
    )
Exemple #7
0
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,
    )
Exemple #8
0
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,
    )
Exemple #10
0
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,
    )
Exemple #12
0
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,
    )
Exemple #13
0
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,
    )
Exemple #14
0
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)
Exemple #15
0
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,
    )
Exemple #16
0
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)
Exemple #18
0
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,
    )
Exemple #20
0
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,
    )
Exemple #21
0
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,
    )
Exemple #22
0
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,
    )
Exemple #23
0
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,
    )
Exemple #24
0
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,
    )
Exemple #25
0
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,
    )
Exemple #26
0
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,
    )
Exemple #27
0
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,
    )
Exemple #28
0
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,
    )
Exemple #29
0
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,
    )
Exemple #30
0
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,
    )