Example #1
0
def add_ucs_ippool(ippool_name, ippool_descr, ippool_def_gw, ippool_from,
                   ippool_to, ippool_prim_dns, ippool_sec_dns):
    from ucsmsdk.mometa.ippool.IppoolPool import IppoolPool
    from ucsmsdk.mometa.ippool.IppoolBlock import IppoolBlock

    handle = ucs_login()

    mo = IppoolPool(parent_mo_or_dn="fabric/lan/network-sets",
                    descr=ippool_descr,
                    ext_managed="external",
                    name=ippool_name)
    handle.add_mo(mo, True)

    mo = IppoolBlock(parent_mo_or_dn="fabric/lan/network-sets/ip-pool-" +
                     ippool_name,
                     def_gw=ippool_def_gw,
                     r_from=ippool_from,
                     to=ippool_to,
                     prim_dns=ippool_prim_dns,
                     sec_dns=ippool_sec_dns)
    handle.add_mo(mo, True)

    handle.commit()

    response = "IpPool: " + ippool_name + " with IP Block: " + ippool_from + "-" + ippool_to + " has been created/updated"

    ucs_logout(handle)

    print(response)
    return response
def update_ip_block(ucs, mo, ip_block, ip_version):

    remove_ip_block(ucs, mo.dn, ip_block, ip_version)
    if not ip_block['state'] == 'absent':
        if ip_version == 'v6':
            from ucsmsdk.mometa.ippool.IppoolIpV6Block import IppoolIpV6Block
            IppoolIpV6Block(parent_mo_or_dn=mo,
                            to=ip_block['ipv6_last_addr'],
                            r_from=ip_block['ipv6_first_addr'],
                            prefix=ip_block['ipv6_prefix'],
                            def_gw=ip_block['ipv6_default_gw'],
                            prim_dns=ip_block['ipv6_primary_dns'],
                            sec_dns=ip_block['ipv6_secondary_dns'])
            ucs.login_handle.add_mo(mo, True)
            ucs.login_handle.commit()
        else:
            from ucsmsdk.mometa.ippool.IppoolBlock import IppoolBlock
            IppoolBlock(parent_mo_or_dn=mo,
                        to=ip_block['last_addr'],
                        r_from=ip_block['first_addr'],
                        subnet=ip_block['subnet_mask'],
                        def_gw=ip_block['default_gw'],
                        prim_dns=ip_block['primary_dns'],
                        sec_dns=ip_block['secondary_dns'])
            ucs.login_handle.add_mo(mo, True)
            ucs.login_handle.commit()
Example #3
0
def add_ip_block(handle, r_from, to, subnet, default_gw, prim_dns, sec_dns,
                 parent_dn):
    """
    Creates IP Pool block

    Args:
        handle (UcsHandle)
        r_from (String) : Beginning IP Address
        to (String) : Ending IP Address
        subnet (String) : Subnet
        default_gw (String) : default gateway
        prim_dns (String): primary DNS server
        sec_dns (String): secondary DNS server
        parent_dn (String) : Dn of parent

    Returns:
        IppoolBlock: Managed object

    Raises:
        ValueError: If parent dn object is not present

    Example:
        add_ip_block(handle, "1.1.1.1", "1.1.1.10", "255.255.255.0",
                    "1.1.1.254")
    """

    from ucsmsdk.mometa.ippool.IppoolBlock import IppoolBlock

    obj = handle.query_dn(parent_dn)
    if obj is None:
        raise ValueError("IP pool does not exist: %s", parent_dn)
    else:
        log.debug("Creating IP block. from %s to %s, gw=%s, subnet=%s, "
                  "dns1=%s, dns2=%s" %
                  (r_from, to, default_gw, subnet, prim_dns, sec_dns))
        mo = IppoolBlock(parent_mo_or_dn=obj,
                         r_from=r_from,
                         to=to,
                         subnet=subnet,
                         def_gw=default_gw,
                         prim_dns=prim_dns,
                         sec_dns=sec_dns)
        handle.add_mo(mo, True)
        handle.commit()
        return mo
Example #4
0
def main():
    argument_spec = ucs_argument_spec
    argument_spec.update(
        org_dn=dict(type='str', default='org-root'),
        name=dict(type='str', required=True),
        descr=dict(type='str', default='', aliases=['descrption', 'description']),
        order=dict(type='str', default='default', choices=['default', 'sequential']),
        first_addr=dict(type='str'),
        last_addr=dict(type='str'),
        subnet_mask=dict(type='str', default='255.255.255.0'),
        default_gw=dict(type='str', default='0.0.0.0'),
        primary_dns=dict(type='str', default='0.0.0.0'),
        secondary_dns=dict(type='str', default='0.0.0.0'),
        ipv6_first_addr=dict(type='str'),
        ipv6_last_addr=dict(type='str'),
        ipv6_prefix=dict(type='str', default='64'),
        ipv6_default_gw=dict(type='str', default='::'),
        ipv6_primary_dns=dict(type='str', default='::'),
        ipv6_secondary_dns=dict(type='str', default='::'),
        state=dict(type='str', default='present', choices=['present', 'absent']),
    )

    module = AnsibleModule(
        argument_spec,
        supports_check_mode=True,
    )
    # UCSModule verifies ucsmsdk is present and exits on failure.  Imports are below ucs object creation.
    ucs = UCSModule(module)

    err = False

    from ucsmsdk.mometa.ippool.IppoolPool import IppoolPool
    from ucsmsdk.mometa.ippool.IppoolBlock import IppoolBlock
    from ucsmsdk.mometa.ippool.IppoolIpV6Block import IppoolIpV6Block

    changed = False
    try:
        mo_exists = False
        props_match = False
        # dn is <org_dn>/ip-pool-<name>
        dn = module.params['org_dn'] + '/ip-pool-' + module.params['name']

        mo = ucs.login_handle.query_dn(dn)
        if mo:
            mo_exists = True

        if module.params['state'] == 'absent':
            if mo_exists:
                if not module.check_mode:
                    ucs.login_handle.remove_mo(mo)
                    ucs.login_handle.commit()
                changed = True
        else:
            if mo_exists:
                # check top-level mo props
                kwargs = dict(assignment_order=module.params['order'])
                kwargs['descr'] = module.params['descr']
                if (mo.check_prop_match(**kwargs)):
                    # top-level props match, check next level mo/props
                    if module.params['last_addr'] and module.params['first_addr']:
                        # ipv4 block specified, check properties
                        block_dn = dn + '/block-' + module.params['first_addr'] + '-' + module.params['last_addr']
                        mo_1 = ucs.login_handle.query_dn(block_dn)
                        if mo_1:
                            kwargs = dict(subnet=module.params['subnet_mask'])
                            kwargs['def_gw'] = module.params['default_gw']
                            kwargs['prim_dns'] = module.params['primary_dns']
                            kwargs['sec_dns'] = module.params['secondary_dns']
                            if (mo_1.check_prop_match(**kwargs)):
                                # ipv4 block exists and properties match
                                props_match = True
                    else:
                        # no ipv4 block specified, but top-level props matched
                        props_match = True

                    # only check ipv6 props if the top-level and ipv4 props matched
                    if props_match and module.params['ipv6_last_addr'] and module.params['ipv6_first_addr']:
                        # ipv6 block specified, check properties
                        block_dn = dn + '/v6block-' + module.params['ipv6_first_addr'].lower() + '-' + module.params['ipv6_last_addr'].lower()
                        mo_1 = ucs.login_handle.query_dn(block_dn)
                        if mo_1:
                            kwargs = dict(prefix=module.params['ipv6_prefix'])
                            kwargs['def_gw'] = module.params['ipv6_default_gw']
                            kwargs['prim_dns'] = module.params['ipv6_primary_dns']
                            kwargs['sec_dns'] = module.params['ipv6_secondary_dns']
                            if (mo_1.check_prop_match(**kwargs)):
                                # ipv6 block exists and properties match
                                props_match = True
                        else:
                            # no ipv6 block specified, but previous checks matched
                            props_match = True

            if not props_match:
                if not module.check_mode:
                    # create if mo does not already exist
                    mo = IppoolPool(
                        parent_mo_or_dn=module.params['org_dn'],
                        name=module.params['name'],
                        descr=module.params['descr'],
                        assignment_order=module.params['order'],
                    )

                    if module.params['last_addr'] and module.params['first_addr']:
                        mo_1 = IppoolBlock(
                            parent_mo_or_dn=mo,
                            to=module.params['last_addr'],
                            r_from=module.params['first_addr'],
                            subnet=module.params['subnet_mask'],
                            def_gw=module.params['default_gw'],
                            prim_dns=module.params['primary_dns'],
                            sec_dns=module.params['secondary_dns'],
                        )

                    if module.params['ipv6_last_addr'] and module.params['ipv6_first_addr']:
                        mo_1 = IppoolIpV6Block(
                            parent_mo_or_dn=mo,
                            to=module.params['ipv6_last_addr'],
                            r_from=module.params['ipv6_first_addr'],
                            prefix=module.params['ipv6_prefix'],
                            def_gw=module.params['ipv6_default_gw'],
                            prim_dns=module.params['ipv6_primary_dns'],
                            sec_dns=module.params['ipv6_secondary_dns'],
                        )

                    ucs.login_handle.add_mo(mo, True)
                    ucs.login_handle.commit()

                changed = True

    except Exception as e:
        err = True
        ucs.result['msg'] = "setup error: %s " % str(e)

    ucs.result['changed'] = changed
    if err:
        module.fail_json(**ucs.result)
    module.exit_json(**ucs.result)
def main():
    from ansible.module_utils.basic import AnsibleModule
    from ansible_collections.cisco.ucs.plugins.module_utils.ucs import UCSModule, ucs_argument_spec

    ipv4_configuration_spec = dict(
        first_addr=dict(type='str'),
        last_addr=dict(type='str'),
        subnet_mask=dict(type='str', default='255.255.255.0'),
        default_gw=dict(type='str', default='0.0.0.0'),
        primary_dns=dict(type='str', default='0.0.0.0'),
        secondary_dns=dict(type='str', default='0.0.0.0'),
        state=dict(type='str',
                   default='present',
                   choices=['present', 'absent']),
    )
    ipv6_configuration_spec = dict(
        ipv6_first_addr=dict(type='str'),
        ipv6_last_addr=dict(type='str'),
        ipv6_prefix=dict(type='str', default='64'),
        ipv6_default_gw=dict(type='str', default='::'),
        ipv6_primary_dns=dict(type='str', default='::'),
        ipv6_secondary_dns=dict(type='str', default='::'),
        state=dict(type='str',
                   default='present',
                   choices=['present', 'absent']),
    )

    argument_spec = ucs_argument_spec
    argument_spec.update(
        org_dn=dict(type='str', default='org-root'),
        name=dict(type='str', required=True),
        descr=dict(type='str', default='', aliases=['description']),
        order=dict(type='str',
                   default='default',
                   choices=['default', 'sequential']),
        first_addr=dict(type='str'),
        last_addr=dict(type='str'),
        subnet_mask=dict(type='str', default='255.255.255.0'),
        default_gw=dict(type='str', default='0.0.0.0'),
        primary_dns=dict(type='str', default='0.0.0.0'),
        secondary_dns=dict(type='str', default='0.0.0.0'),
        ipv6_first_addr=dict(type='str'),
        ipv6_last_addr=dict(type='str'),
        ipv6_prefix=dict(type='str', default='64'),
        ipv6_default_gw=dict(type='str', default='::'),
        ipv6_primary_dns=dict(type='str', default='::'),
        ipv6_secondary_dns=dict(type='str', default='::'),
        state=dict(type='str',
                   default='present',
                   choices=['present', 'absent']),
        ipv4_blocks=dict(type='list',
                         default=None,
                         elements='dict',
                         options=ipv4_configuration_spec),
        ipv6_blocks=dict(type='list',
                         default=None,
                         elements='dict',
                         options=ipv6_configuration_spec),
    )

    module = AnsibleModule(
        argument_spec,
        supports_check_mode=True,
    )
    # UCSModule verifies ucsmsdk is present and exits on failure.  Imports are below ucs object creation.
    ucs = UCSModule(module)

    err = False

    from ucsmsdk.mometa.ippool.IppoolBlock import IppoolBlock
    from ucsmsdk.mometa.ippool.IppoolIpV6Block import IppoolIpV6Block

    changed = False
    try:
        mo_exists = False
        ipv4_props_match = True
        ipv6_props_match = True
        # dn is <org_dn>/ip-pool-<name>
        dn = module.params['org_dn'] + '/ip-pool-' + module.params['name']

        mo = ucs.login_handle.query_dn(dn)
        if mo:
            mo_exists = True
        if module.params['state'] == 'absent':
            if mo_exists:
                if not module.check_mode:
                    ucs.login_handle.remove_mo(mo)
                    ucs.login_handle.commit()
                changed = True
        else:
            if not mo_exists:
                if not module.check_mode:
                    mo = update_ip_pool(ucs, module)
                changed = True
            if mo_exists:
                # check top-level mo props
                kwargs = dict(assignment_order=module.params['order'])
                kwargs['descr'] = module.params['descr']
                if not mo.check_prop_match(**kwargs):
                    if not module.check_mode:
                        mo = update_ip_pool(ucs, module)
                    changed = True
                    # top-level props match, check next level mo/props
            if module.params['ipv4_blocks']:
                for ipv4_block in module.params['ipv4_blocks']:
                    if not match_existing_ipv4_block(ucs, dn, ipv4_block):
                        if not module.check_mode:
                            update_ip_block(ucs, mo, ipv4_block, 'v4')
                        changed = True
            elif module.params['last_addr'] and module.params['first_addr']:
                # ipv4 block specified, check properties
                mo_1 = get_ip_block(ucs, dn, module.params['first_addr'],
                                    module.params['last_addr'], 'v4')
                if mo_1:
                    kwargs = dict(subnet=module.params['subnet_mask'])
                    kwargs['def_gw'] = module.params['default_gw']
                    kwargs['prim_dns'] = module.params['primary_dns']
                    kwargs['sec_dns'] = module.params['secondary_dns']
                    if not mo_1.check_prop_match(**kwargs):
                        # ipv4 block exists and properties match
                        ipv4_props_match = False
                else:
                    ipv4_props_match = False

            # only check ipv6 props if the top-level and ipv4 props matched
            if module.params['ipv6_blocks']:
                for ipv6_block in module.params['ipv6_blocks']:
                    if not match_existing_ipv6_block(ucs, dn, ipv6_block):
                        if not module.check_mode:
                            update_ip_block(ucs, mo, ipv6_block, 'v6')
                        changed = True
            elif module.params['ipv6_last_addr'] and module.params[
                    'ipv6_first_addr']:
                # ipv6 block specified, check properties
                block_dn = dn + '/v6block-' + module.params[
                    'ipv6_first_addr'].lower(
                    ) + '-' + module.params['ipv6_last_addr'].lower()
                mo_1 = ucs.login_handle.query_dn(block_dn)
                if mo_1:
                    kwargs = dict(prefix=module.params['ipv6_prefix'])
                    kwargs['def_gw'] = module.params['ipv6_default_gw']
                    kwargs['prim_dns'] = module.params['ipv6_primary_dns']
                    kwargs['sec_dns'] = module.params['ipv6_secondary_dns']
                    if not mo_1.check_prop_match(**kwargs):
                        # ipv6 block exists and properties match
                        ipv6_props_match = False
                else:
                    ipv6_props_match = False

        if not ipv4_props_match or not ipv6_props_match:
            if not module.check_mode:
                if module.params['last_addr'] and module.params['first_addr']:
                    IppoolBlock(
                        parent_mo_or_dn=mo,
                        to=module.params['last_addr'],
                        r_from=module.params['first_addr'],
                        subnet=module.params['subnet_mask'],
                        def_gw=module.params['default_gw'],
                        prim_dns=module.params['primary_dns'],
                        sec_dns=module.params['secondary_dns'],
                    )

                if module.params['ipv6_last_addr'] and module.params[
                        'ipv6_first_addr']:
                    IppoolIpV6Block(
                        parent_mo_or_dn=mo,
                        to=module.params['ipv6_last_addr'],
                        r_from=module.params['ipv6_first_addr'],
                        prefix=module.params['ipv6_prefix'],
                        def_gw=module.params['ipv6_default_gw'],
                        prim_dns=module.params['ipv6_primary_dns'],
                        sec_dns=module.params['ipv6_secondary_dns'],
                    )

            ucs.login_handle.add_mo(mo, True)
            ucs.login_handle.commit()

            changed = True

    except Exception as e:
        err = True
        ucs.result['msg'] = "setup error: %s " % str(e)

    ucs.result['changed'] = changed
    if err:
        module.fail_json(**ucs.result)
    module.exit_json(**ucs.result)
Example #6
0
handle.add_mo(mo)
handle.commit()

#Create Maintenance Policy
mo = LsmaintMaintPolicy(parent_mo_or_dn=my_Full_Path_Org, uptime_disr="user-ack", name="User_Ack", descr="User Ack", trigger_config="on-next-boot", sched_name="", policy_owner="local")
handle.add_mo(mo)
handle.commit()

#Create Power Policy
mo = PowerPolicy(parent_mo_or_dn=my_Full_Path_Org, fan_speed="any", policy_owner="local", name="No_Cap", prio="no-cap", descr="No Cap")
handle.add_mo(mo)
handle.commit()

#Create IP Pool
mo = IppoolPool(parent_mo_or_dn=my_Full_Path_Org, is_net_bios_enabled="disabled", name="ext_mgmt", descr="KVM", policy_owner="local", ext_managed="internal", supports_dhcp="disabled", assignment_order="sequential")
mo_1 = IppoolBlock(parent_mo_or_dn=mo, prim_dns=my_Primary_DNS, r_from=my_kvm_pool_first, def_gw=my_KVM_Gateway, sec_dns=my_Secondary_DNS, to=my_kvm_last_addr)
handle.add_mo(mo)
handle.commit()

#Create MAC Pools
mo = MacpoolPool(parent_mo_or_dn=my_Full_Path_Org, policy_owner="local", descr="Management FI-A", assignment_order="sequential", name="MGMT-A")
mo_1 = MacpoolBlock(parent_mo_or_dn=mo, to="00:25:B5:A0:00:0F", r_from="00:25:B5:A0:00:00")
handle.add_mo(mo)
handle.commit()

mo = MacpoolPool(parent_mo_or_dn=my_Full_Path_Org, policy_owner="local", descr="Management FI-B", assignment_order="sequential", name="MGMT-B")
mo_1 = MacpoolBlock(parent_mo_or_dn=mo, to="00:25:B5:B0:00:0F", r_from="00:25:B5:B0:00:00")
handle.add_mo(mo)
handle.commit()

mo = MacpoolPool(parent_mo_or_dn=my_Full_Path_Org, policy_owner="local", descr="Production FI-A", assignment_order="sequential", name="VM-A")
Example #7
0
##### Start-Of-PythonScript #####

from ucsmsdk.mometa.ippool.IppoolPool import IppoolPool
from ucsmsdk.mometa.ippool.IppoolBlock import IppoolBlock

mo = IppoolPool(parent_mo_or_dn="org-root/org-Sub_Org_Test",
                is_net_bios_enabled="disabled",
                name="ext_mgmt",
                descr="KVM",
                policy_owner="local",
                ext_managed="internal",
                supports_dhcp="disabled",
                assignment_order="sequential")
mo_1 = IppoolBlock(parent_mo_or_dn=mo,
                   prim_dns="10.10.10.100",
                   r_from="10.10.10.10",
                   def_gw="10.10.10.1",
                   sec_dns="10.10.10.200",
                   to="10.10.10.17")
handle.add_mo(mo)

handle.commit()
##### End-Of-PythonScript #####

#Create MAC Pool
##### Start-Of-PythonScript #####

from ucsmsdk.mometa.macpool.MacpoolPool import MacpoolPool
from ucsmsdk.mometa.macpool.MacpoolBlock import MacpoolBlock

mo = MacpoolPool(parent_mo_or_dn="org-root/org-Sub_Org_Test",
                 policy_owner="local",
def addIppoolBlock(startIP, endIP, gateway, primDNS, secDNS):
    
    mo = IppoolBlock(parent_mo_or_dn="fabric/lan/network-sets/ip-pool-Test_IP_Pool", def_gw="10.1.1.254", r_from="10.1.1.1", prim_dns="208.67.220.220", sec_dns="208.67.222.222", to="10.1.1.10")
    handle.add_mo(mo)
    handle.commit()
Example #9
0
                              uplink_fail_action="link-down",
                              descr="")
        mo_1 = DpsecMac(parent_mo_or_dn=mo,
                        forge="allow",
                        policy_owner="local",
                        name="",
                        descr="")
        handle.add_mo(mo)

        handle.commit()

        # setup ext-mgmt IP pool
        from ucsmsdk.mometa.ippool.IppoolBlock import IppoolBlock

        mo = IppoolBlock(parent_mo_or_dn="org-root/ip-pool-ext-mgmt",
                         to="192.168.1.199",
                         r_from="192.168.1.100",
                         def_gw="192.168.1.1")
        handle.add_mo(mo)

        handle.commit()

        # apply settings from each row in the csv file
        csv_filename = sys.argv[2]
        csv_file = open(csv_filename, "r")
        if not csv_file:
            print "Error: could not open %s" % csv_filename
            sys.exit(1)
        csv_reader = csv.DictReader(csv_file)
        row_num = 1
        for row in csv_reader:
            row_num += 1
Example #10
0
def main():
    argument_spec = ucs_argument_spec
    argument_spec.update(ip_list=dict(required=True, type='list'),
                         org_dn=dict(type='str', default='org-root'),
                         state=dict(default='present',
                                    choices=['present', 'absent'],
                                    type='str'))
    module = AnsibleModule(argument_spec, supports_check_mode=True)
    ucs = UCSModule(module)

    err = False

    from ucsmsdk.mometa.ippool.IppoolPool import IppoolPool
    from ucsmsdk.mometa.ippool.IppoolBlock import IppoolBlock
    from ucsmsdk.mometa.ippool.IppoolIpV6Block import IppoolIpV6Block

    changed = False
    try:
        for ip in module.params['ip_list']:
            exists = False
            dn = module.params['org_dn'] + '/ip-pool-' + ip['name']
            # set default params
            if 'order' not in ip:
                ip['order'] = 'default'
            if 'descr' not in ip:
                ip['descr'] = ''
            if 'subnet_mask' not in ip:
                ip['subnet_mask'] = '255.255.255.0'
            if 'default_gw' not in ip:
                ip['default_gw'] = '0.0.0.0'
            if 'primary_dns' not in ip:
                ip['primary_dns'] = '0.0.0.0'
            if 'secondary_dns' not in ip:
                ip['secondary_dns'] = '0.0.0.0'
            if 'ipv6_prefix' not in ip:
                ip['ipv6_prefix'] = '64'
            if 'ipv6_default_gw' not in ip:
                ip['ipv6_default_gw'] = '::'
            if 'ipv6_primary_dns' not in ip:
                ip['ipv6_primary_dns'] = '::'
            if 'ipv6_secondary_dns' not in ip:
                ip['ipv6_secondary_dns'] = '::'

            mo = ucs.login_handle.query_dn(dn)
            if mo:
                # check top-level mo props
                kwargs = {}
                kwargs['assignment_order'] = ip['order']
                kwargs['descr'] = ip['descr']
                if (mo.check_prop_match(**kwargs)):
                    # top-level props match, check next level mo/props
                    exists = True
                    if 'last_addr' in ip and 'first_addr' in ip:
                        block_dn = dn + '/block-' + ip[
                            'first_addr'] + '-' + ip['last_addr']
                        mo_1 = ucs.login_handle.query_dn(block_dn)
                        if mo_1:
                            kwargs = {}
                            kwargs['subnet'] = ip['subnet_mask']
                            kwargs['def_gw'] = ip['default_gw']
                            kwargs['prim_dns'] = ip['primary_dns']
                            kwargs['sec_dns'] = ip['secondary_dns']
                            if (not mo_1.check_prop_match(**kwargs)):
                                exists = False
                        else:
                            exists = False

                    if 'ipv6_last_addr' in ip and 'ipv6_first_addr' in ip:
                        block_dn = dn + '/v6block-' + ip[
                            'ipv6_first_addr'].lower(
                            ) + '-' + ip['ipv6_last_addr'].lower()
                        mo_1 = ucs.login_handle.query_dn(block_dn)
                        if mo_1:
                            kwargs = {}
                            kwargs['prefix'] = ip['ipv6_prefix']
                            kwargs['def_gw'] = ip['ipv6_default_gw']
                            kwargs['prim_dns'] = ip['ipv6_primary_dns']
                            kwargs['sec_dns'] = ip['ipv6_secondary_dns']
                            if (not mo_1.check_prop_match(**kwargs)):
                                exists = False
                        else:
                            exists = False

            if module.params['state'] == 'absent':
                if exists:
                    if not module.check_mode:
                        ucs.login_handle.remove_mo(mo)
                        ucs.login_handle.commit()
                    changed = True
            else:
                if not exists:
                    if not module.check_mode:
                        # create if mo does not already exist
                        mo = IppoolPool(
                            parent_mo_or_dn=module.params['org_dn'],
                            name=ip['name'],
                            descr=ip['descr'],
                            assignment_order=ip['order'])

                        if 'last_addr' in ip and 'first_addr' in ip:
                            mo_1 = IppoolBlock(parent_mo_or_dn=mo,
                                               to=ip['last_addr'],
                                               r_from=ip['first_addr'],
                                               subnet=ip['subnet_mask'],
                                               def_gw=ip['default_gw'],
                                               prim_dns=ip['primary_dns'],
                                               sec_dns=ip['secondary_dns'])

                        if 'ipv6_last_addr' in ip and 'ipv6_first_addr' in ip:
                            mo_1 = IppoolIpV6Block(
                                parent_mo_or_dn=mo,
                                to=ip['ipv6_last_addr'],
                                r_from=ip['ipv6_first_addr'],
                                prefix=ip['ipv6_prefix'],
                                def_gw=ip['ipv6_default_gw'],
                                prim_dns=ip['ipv6_primary_dns'],
                                sec_dns=ip['ipv6_secondary_dns'])
                        ucs.login_handle.add_mo(mo, True)
                        ucs.login_handle.commit()
                    changed = True

    except Exception as e:
        err = True
        ucs.result['msg'] = "setup error: %s " % str(e)

    ucs.result['changed'] = changed
    if err:
        module.fail_json(**ucs.result)
    module.exit_json(**ucs.result)