예제 #1
0
def main():
    argument_spec = aci_argument_spec()
    argument_spec.update(
        compare_export_policy=dict(type='str'),
        compare_snapshot=dict(type='str'),
        description=dict(type='str', aliases=['descr']),
        export_policy=dict(type='str'),
        fail_on_decrypt=dict(type='bool'),
        import_mode=dict(type='str', choices=['atomic', 'best-effort']),
        import_policy=dict(type='str'),
        import_type=dict(type='str', choices=['merge', 'replace']),
        snapshot=dict(type='str', required=True),
        state=dict(type='str',
                   default='rollback',
                   choices=['preview', 'rollback']),
    )

    module = AnsibleModule(
        argument_spec=argument_spec,
        supports_check_mode=False,
        required_if=[
            [
                'state', 'preview',
                ['compare_export_policy', 'compare_snapshot']
            ],
            ['state', 'rollback', ['import_policy']],
        ],
    )

    aci = ACIModule(module)

    description = module.params.get('description')
    export_policy = module.params.get('export_policy')
    fail_on_decrypt = aci.boolean(module.params.get('fail_on_decrypt'))
    import_mode = module.params.get('import_mode')
    import_policy = module.params.get('import_policy')
    import_type = module.params.get('import_type')
    snapshot = module.params.get('snapshot')
    state = module.params.get('state')

    if state == 'rollback':
        if snapshot.startswith('run-'):
            snapshot = snapshot.replace('run-', '', 1)

        if not snapshot.endswith('.tar.gz'):
            snapshot += '.tar.gz'

        filename = 'ce2_{0}-{1}'.format(export_policy, snapshot)

        aci.construct_url(root_class=dict(
            aci_class='configImportP',
            aci_rn='fabric/configimp-{0}'.format(import_policy),
            module_object=import_policy,
            target_filter={'name': import_policy},
        ), )

        aci.get_existing()

        aci.payload(
            aci_class='configImportP',
            class_config=dict(
                adminSt='triggered',
                descr=description,
                failOnDecryptErrors=fail_on_decrypt,
                fileName=filename,
                importMode=import_mode,
                importType=import_type,
                name=import_policy,
                snapshot='yes',
            ),
        )

        aci.get_diff(aci_class='configImportP')

        aci.post_config()

    elif state == 'preview':
        aci.url = '%(protocol)s://%(host)s/mqapi2/snapshots.diff.xml' % module.params
        aci.filter_string = (
            '?s1dn=uni/backupst/snapshots-[uni/fabric/configexp-%(export_policy)s]/snapshot-%(snapshot)s&'
            's2dn=uni/backupst/snapshots-[uni/fabric/configexp-%(compare_export_policy)s]/snapshot-%(compare_snapshot)s'
        ) % module.params

        # Generate rollback comparison
        get_preview(aci)

    aci.exit_json()
예제 #2
0
def main():
    argument_spec = aci_argument_spec()
    argument_spec.update(aci_annotation_spec())
    argument_spec.update(
        compare_export_policy=dict(type="str"),
        compare_snapshot=dict(type="str"),
        description=dict(type="str", aliases=["descr"]),
        export_policy=dict(type="str"),
        fail_on_decrypt=dict(type="bool"),
        import_mode=dict(type="str", choices=["atomic", "best-effort"]),
        import_policy=dict(type="str"),
        import_type=dict(type="str", choices=["merge", "replace"]),
        snapshot=dict(type="str", required=True),
        state=dict(type="str",
                   default="rollback",
                   choices=["preview", "rollback"]),
    )

    module = AnsibleModule(
        argument_spec=argument_spec,
        supports_check_mode=False,
        required_if=[
            [
                "state", "preview",
                ["compare_export_policy", "compare_snapshot"]
            ],
            ["state", "rollback", ["import_policy"]],
        ],
    )

    aci = ACIModule(module)

    description = module.params.get("description")
    export_policy = module.params.get("export_policy")
    fail_on_decrypt = aci.boolean(module.params.get("fail_on_decrypt"))
    import_mode = module.params.get("import_mode")
    import_policy = module.params.get("import_policy")
    import_type = module.params.get("import_type")
    snapshot = module.params.get("snapshot")
    state = module.params.get("state")

    if state == "rollback":
        if snapshot.startswith("run-"):
            snapshot = snapshot.replace("run-", "", 1)

        if not snapshot.endswith(".tar.gz"):
            snapshot += ".tar.gz"

        filename = "ce2_{0}-{1}".format(export_policy, snapshot)

        aci.construct_url(root_class=dict(
            aci_class="configImportP",
            aci_rn="fabric/configimp-{0}".format(import_policy),
            module_object=import_policy,
            target_filter={"name": import_policy},
        ), )

        aci.get_existing()

        aci.payload(
            aci_class="configImportP",
            class_config=dict(
                adminSt="triggered",
                descr=description,
                failOnDecryptErrors=fail_on_decrypt,
                fileName=filename,
                importMode=import_mode,
                importType=import_type,
                name=import_policy,
                snapshot="yes",
            ),
        )

        aci.get_diff(aci_class="configImportP")

        aci.post_config()

    elif state == "preview":
        aci.url = "%(protocol)s://%(host)s/mqapi2/snapshots.diff.xml" % module.params
        aci.filter_string = (
            "?s1dn=uni/backupst/snapshots-[uni/fabric/configexp-%(export_policy)s]/snapshot-%(snapshot)s&"
            "s2dn=uni/backupst/snapshots-[uni/fabric/configexp-%(compare_export_policy)s]/snapshot-%(compare_snapshot)s"
        ) % module.params

        # Generate rollback comparison
        get_preview(aci)

    aci.exit_json()