Пример #1
0
def test_modify():
    interface.create_pool("pool30-1", "10.30.1.0/24")

    assert interface.get_pool("pool30-1").category == ""
    interface.modify(["pool30-1"], category=["cat30-1"])
    assert interface.get_pool("pool30-1").category == "cat30-1"
    interface.modify(["pool30-1"], newname="pool30-2")
    assert(Pool.objects.filter(name="pool30-2")
        and interface.get_pool("pool30-2").category == "cat30-1")

    interface.create_host(host="host30-1", pool=interface.get_pool("pool30-2"),
        mac="foobar")
    assert Address.objects.get(host__name="host30-1").macaddr == "foobar"
    interface.modify(host="host30-1", mac="mac30-1")
    assert Address.objects.get(host__name="host30-1").macaddr == "mac30-1"
    interface.modify(host="host30-1", newname="host30-2")
    assert(Host.objects.filter(name="host30-2")
        and Address.objects.get(host__name="host30-2").macaddr == "mac30-1")
    hostobj = interface.get_host("host30-2")
    assert len(hostobj.alias_set.all()) == 0
    assert not hostobj.nodns
    interface.modify(host="host30-2", alias=["alias30-1", "alias30-2"], nodns=True)
    hostobj = interface.get_host("host30-2")
    assert(len(hostobj.alias_set.all()) == 2
        and hostobj.alias_set.all()[1].name == "alias30-2" and hostobj.nodns)

    assert_raises(interface.MissingParameterError,
        interface.modify, ["pool30-2"])
    assert_raises(interface.MissingParameterError,
        interface.modify, None, "host30-2")
    assert_raises(interface.InexistantObjectError, interface.modify, None)

    interface.create_host(host="host30-3", pool=interface.get_pool("pool30-2"),
        address="10.30.1.142", mac="foobar")
    interface.modify(host="host30-3", address="10.30.1.142", mac="barfoo")
    assert Address.objects.get(host__name="host30-3").macaddr == "barfoo"

    interface.create_host(host="host30-4")
    interface.modify(host="host30-4", mac="imac")
    assert Address.objects.get(host__name="host30-4").macaddr == "imac"
    hostobj = interface.get_host("host30-4")
    assert(not (hostobj.serial or hostobj.inventory or
        Address.objects.get(host__name=hostobj.name).duration))
    interface.modify(host=hostobj.name, serial="srlnm", inventory="invtnm")
    hostobj = interface.get_host("host30-4")
    assert hostobj.serial == "srlnm" and hostobj.inventory == "invtnm"

    addrobj = Address.objects.get(addr="10.30.1.0")
    assert not addrobj.comment
    interface.modify(address="10.30.1.0", comment="The quick brown fox...")
    addrobj = Address.objects.get(addr="10.30.1.0")
    assert addrobj.comment == "The quick brown fox..."
Пример #2
0
def test_macaddress():
    interface.create_pool("pool15", "10.15.0.0/24")
    interface.create_host(host="host15-1")
    assert not Address.objects.filter(host__name="host15-1")

    interface.create_host("host15-2", pool=interface.get_pool("pool15"),
        mac="mac-2")
    assert Address.objects.get(host__name="host15-2").macaddr == "mac-2"

    interface.create_host("host15-3", mac="mac-3")
    assert Address.objects.get(host__name="host15-3").macaddr == "mac-3"

    interface.create_host("host15-4", pool=interface.get_pool("pool15"),
        mac="mac-4", address="10.15.0.142")
    assert Address.objects.get(host__name="host15-4").macaddr == "mac-4"
Пример #3
0
def delete(args):
    """Delete an object from the database."""
    if args.generator:
        try:
            interface.get_generator(args.generator)
        except interface.InexistantObjectError as exc:
            logging.error(str(exc))
            sys.exit(1)
        print("Removed generator \"" + args.generator + "\".")
        models.Config.objects.filter(name=args.generator).delete()
    else:
        pool = None
        if args.pool_name:
            try:
                pool = interface.get_pool(args.pool_name[0])
            except interface.InexistantObjectError as exc:
                logging.error(str(exc))
                sys.exit(1)

        try:
            interface.delete(pool, args.address, args.host)
        except (interface.InexistantObjectError, models.AddressNotInPoolError,
                models.AddressNotAllocatedError) as exc:
            logging.error(str(exc))
            sys.exit(1)
Пример #4
0
def delete(args):
    """Delete an object from the database."""
    if args.generator:
        try:
            interface.get_generator(args.generator)
        except interface.InexistantObjectError as exc:
            logging.error(str(exc))
            sys.exit(1)
        print("Removed generator \"" + args.generator + "\".")
        models.Config.objects.filter(name=args.generator).delete()
    else:
        pool = None
        if args.pool_name:
            try:
                pool = interface.get_pool(args.pool_name[0])
            except interface.InexistantObjectError as exc:
                logging.error(str(exc))
                sys.exit(1)

        try:
            interface.delete(pool, args.address, args.host)
        except (interface.InexistantObjectError, models.AddressNotInPoolError,
                models.AddressNotAllocatedError) as exc:
            logging.error(str(exc))
            sys.exit(1)
Пример #5
0
def add_host(request):
    """Add a new host to SLAM's database."""
    if request.method == "POST":
        try:
            pool = interface.get_pool(pool_name=request.POST.get("pool_name"),
                category=request.POST.get("category"))
        except interface.InexistantObjectError:
            return error_404(request)
        alias = request.POST.get("alias")
        if alias:
            alias = alias.replace(", ", ",").split(",")
        else:
            alias = []
        if (request.POST.get("mac") and models.Address.objects.filter(
                macaddr=request.POST.get("mac"))):
            return error_view(request, 412, _("MAC adress taken"),
                _("The MAC adresse of the host you are trying to create "
                    "already belongs to host %(host)s.")
                    % {"host": models.Address.objects.filter(
                            macaddr=request.POST.get("mac"))[0].host.name})

        mac = request.POST.get("mac")
        if mac:
            mac = mac.lower()
            if not re.match("^[a-f0-9]{2}(:[a-f0-9]{2}){5}$", mac):
                return error_view(request, 400, _("Invalid MAC"),
                    _("The format of the given MAC address is invalid :"
                        " %(mac)s.") % {"mac": mac})
        try:
            hoststr, addrstr = interface.create_host(
                host=request.POST.get("name"),
                pool=pool,
                address=request.POST.get("address"),
                mac=mac,
                random=request.POST.get("random"),
                alias=alias,
                serial=request.POST.get("serial"),
                inventory=request.POST.get("inventory"),
                nodns=request.POST.get("nodns"))
        except interface.MissingParameterError:
            return error_view(request, 400, _("Missing information"),
                _("You must at least specify a name to create a new host."))
        #annomalie espace dans le name host
        except interface.PropertyFormatError:
            return error_view(request, 400, _("Format invalid"),
                _("You must specify a valid host name or alias without space, special character etc."))
        #anomalie9
        except interface.DuplicateObjectError, e:
            return error_view(request, 409, _("Could not create host"), e.args[0])
        #fin anomalie9
        except models.AddressNotInPoolError:
            return error_view(request, 412, _("Address not in pool"),
                _("The address you provided (%(addr)s) is not in the pool "
                    "%(pool)s.")
                    % {"addr": str(request.POST.get("address")),
                        "pool": str(pool.name)})
Пример #6
0
def test_getcreate_pool():
    interface.create_pool("pool20", "10.20.0.0/24", ["cat20"])
    assert(str(interface.get_pool(pool_name="pool20"))
        == "pool20 (range: 10.20.0.0/24)")
    assert interface.get_pool(category="cat20").name == "pool20"

    interface.create_pool("pool20-2", "10.20.2.0/24")
    assert(str(interface.get_pool(pool_name="pool20-2"))
        == "pool20-2 (range: 10.20.2.0/24)")

    assert_raises(interface.InexistantObjectError,
        interface.get_pool, "inexistant")
    assert_raises(interface.InexistantObjectError,
        interface.get_pool, None, "inexistant")

    assert_raises(interface.DuplicateObjectError,
        interface.create_pool, "pool20-2", "10.20.3.0/24")
    assert_raises(interface.MissingParameterError,
        interface.create_pool, "pool20-3")
Пример #7
0
def list_(args):
    """List objects in the database."""
    if args.pool_name and len(args.pool_name) > 1:
        logging.error("Please specify only one pool name.")
        sys.exit(1)

    if args.pool_name:
        try:
            pool = interface.get_pool(args.pool_name[0])
        except interface.InexistantObjectError as exc:
            logging.error(str(exc))
            sys.exit(1)

        used = models.Address.objects.filter(pool=pool).count()
        tot = pool.len()
        print("Pool: " + str(pool) + ", " + str(used) + "/" + str(tot)
            + " (" + str(used * 100 / tot) + "%)")
        if pool.category:
            print("Categories: " + ", ".join(pool.category.split(",")))
        addrs = list(models.Address.objects.filter(pool=pool))
        addrs = interface.sort_addresses(addrs)
        for addr in addrs:
            print str(addr) + "\t\t" + str(addr.host)
        for prop in models.Property.objects.filter(pool=pool).order_by("name"):
            print str(prop)
    elif args.address:
        for addrstr in args.address:
            addrs = models.Address.objects.filter(addr=addrstr)
            if not addrs.count():
                logging.error("Could not find the address: " + addrstr)
                sys.exit(1)
            for addr in addrs:
                print "Address: " + str(addr)
                if addr.pool:
                    print("\tPool: " + str(addr.pool))
                if addr.host:
                    print("\tHost: " + str(addr.host))
                if addr.duration:
                    print("\tTemporary until: " + str(addr.duration))
                if addr.comment:
                    print("\tComment:\n" + addr.comment)
    elif args.host:
        _list_hosts(args)
    #filter by property
    elif args.extra and len(args.extra) > 0:
        _list_props(args)
    elif args.generator is not None:
        _list_generator(args)
    else:
        print "Address pools:"
        for pool in models.Pool.objects.all().order_by("name"):
            print str(pool)
Пример #8
0
def list_(args):
    """List objects in the database."""
    if args.pool_name and len(args.pool_name) > 1:
        logging.error("Please specify only one pool name.")
        sys.exit(1)

    if args.pool_name:
        try:
            pool = interface.get_pool(args.pool_name[0])
        except interface.InexistantObjectError as exc:
            logging.error(str(exc))
            sys.exit(1)

        used = models.Address.objects.filter(pool=pool).count()
        tot = pool.len()
        print("Pool: " + str(pool) + ", " + str(used) + "/" + str(tot) + " (" +
              str(used * 100 / tot) + "%)")
        if pool.category:
            print("Categories: " + ", ".join(pool.category.split(",")))
        addrs = list(models.Address.objects.filter(pool=pool))
        addrs = interface.sort_addresses(addrs)
        for addr in addrs:
            print str(addr) + "\t\t" + str(addr.host)
        for prop in models.Property.objects.filter(pool=pool).order_by("name"):
            print str(prop)
    elif args.address:
        for addrstr in args.address:
            addrs = models.Address.objects.filter(addr=addrstr)
            if not addrs.count():
                logging.error("Could not find the address: " + addrstr)
                sys.exit(1)
            for addr in addrs:
                print "Address: " + str(addr)
                if addr.pool:
                    print("\tPool: " + str(addr.pool))
                if addr.host:
                    print("\tHost: " + str(addr.host))
                if addr.duration:
                    print("\tTemporary until: " + str(addr.duration))
                if addr.comment:
                    print("\tComment:\n" + addr.comment)
    elif args.host:
        _list_hosts(args)
    #filter by property
    elif args.extra and len(args.extra) > 0:
        _list_props(args)
    elif args.generator is not None:
        _list_generator(args)
    else:
        print "Address pools:"
        for pool in models.Pool.objects.all().order_by("name"):
            print str(pool)
Пример #9
0
def test_getcreate_host():
    interface.create_host(host="host10")

    hostobj = interface.get_host("host10")
    assert str(hostobj) == "host10"

    assert interface.get_host(None) is None
    assert_raises(interface.InexistantObjectError,
        interface.get_host, "inexistant")

    interface.create_pool("pool10", "10.10.0.0/24", ["cat10"])
    interface.create_host(host="host10-2", pool=interface.get_pool("pool10"))
    assert(interface.get_host("host10-2").address_set.all()[0].pool.name
        == "pool10")
    interface.create_host(host="host10-3",
        pool=interface.get_pool(category="cat10"))
    assert(interface.get_host("host10-3").address_set.all()[0].pool.name
        == "pool10")
    assert_raises(interface.DuplicateObjectError, interface.create_host,
        "host10-3")

    interface.create_host(host="host10-4", mac="mac10-4", category="cat10")
    assert(interface.get_host("host10-4").category == "cat10")
    assert(Address.objects.get(host__name="host10-4").pool.name == "pool10")
    assert(interface.get_host("host10-4").address_set.all()[0].macaddr
        == "mac10-4")

    interface.create_host(host="host10-6",
        pool=Pool.objects.get(name="pool10"), address="10.10.0.142")
    assert Address.objects.get(host__name="host10-6").addr == "10.10.0.142"

    interface.create_host(host="host10-5", pool=interface.get_pool("pool10"),
        mac="mac10-5")
    addrobj = interface.get_host("host10-5").address_set.all()[0]
    assert addrobj.addr == "10.10.0.3" and addrobj.macaddr == "mac10-5"

    interface.create_host(host="host10-15", pool=interface.get_pool("pool10"),
        alias=["alias10-1", "alias10-2"])
    hostobj = interface.get_host("host10-15")
    assert(len(hostobj.alias_set.all()) == 2 and
        hostobj.alias_set.all()[1].name == "alias10-2")

    interface.create_pool("pool10-2", "172.16.102.0/24", ["cat10"])
    interface.create_host(host="host10-25", address="172.16.102.234")
    assert(Address.objects.get(host__name="host10-25").pool.name == "pool10-2")

    interface.create_host(host="host10-30",
       pool=interface.get_pool("pool10-2"), serial="serialnum",
       inventory="inventorynum", duration=42)
    hostobj = interface.get_host("host10-30")
    assert(hostobj.serial == "serialnum"
        and hostobj.inventory == "inventorynum" and
        Address.objects.get(host__name="host10-30").duration
            > Address.objects.get(host__name="host10-30").date + datetime.timedelta(days=41))

    interface.create_host(host="host10-40", pool=interface.get_pool("pool10"), nodns=True)
    hostobj = interface.get_host("host10-40")
    assert hostobj.nodns
Пример #10
0
def test_generate():
    # most of the test are in test_generator.py
    interface.create_pool("pool40", "10.40.0.0/24")
    interface.create_host(host="host40-1", pool=interface.get_pool("pool40"))
    interface.create_host(host="host40-2", pool=interface.get_pool("pool40"))

    interface.generate(None, ["pool40"], "bind", "-", update=False)
    assert_raises(interface.ConfigurationFormatError, interface.generate, None,
        ["pool40"], "unknown", "-", None, None, False)

    handle, path = tempfile.mkstemp()
    interface.create_generator("dnsgen2", "bind", path, timeout="6H")
    interface.generate("dnsgen2", ["pool40"], output="-", update=False)
    f = open(path, "r+")
    res = f.read()
    assert(res == "\n; This section will be automatically generated by SLAM"
        + " any manual change will\n; be overwritten on the next generation of"
        + " this file.\n; Pool pool40 (range: 10.40.0.0/24)\n"
        + "host40-1\t6H\tIN\tA\t10.40.0.0\n"
        + "host40-2\t6H\tIN\tA\t10.40.0.1\n"
        + "; END of section automatically generated by SLAM\n")

    f.close()
    os.unlink(path)
Пример #11
0
def test_delete():
    interface.create_pool("pool50", "10.50.0.0/24")
    interface.create_host(host="host50-1", pool=interface.get_pool("pool50"))
    interface.create_host(host="host50-2", pool=interface.get_pool("pool50"))
    interface.create_host(host="host50-3", pool=interface.get_pool("pool50"))
    Pool.objects.get(name="pool50").allocate("10.50.0.42",
        Host.objects.get(name="host50-3"))

    assert Host.objects.filter(name="host50-1")
    interface.delete(hosts=["host50-1"])
    assert not Host.objects.filter(name="host50-1")
    assert not Address.objects.filter(addr="10.50.0.0")

    assert Address.objects.filter(host__name="host50-3").count() == 2
    interface.delete(addresses=["10.50.0.42"])
    assert Address.objects.filter(host__name="host50-3").count() == 1

    assert Pool.objects.filter(name="pool50")
    interface.delete(pool=Pool.objects.get(name="pool50"))
    assert not Pool.objects.filter(name="pool50")
    assert not Address.objects.filter(host__name="host50-2")

    assert_raises(interface.InexistantObjectError, interface.delete, None,
        ["inexistant"])
Пример #12
0
def test_prop():
    interface.create_pool("pool60", "10.60.0.0/24")
    interface.create_host(host="host60-1", pool=interface.get_pool("pool60"))

    interface.quick_set_prop("prop=value", "pool60")
    assert(Property.objects.get(
        pool__name="pool60", name="prop").value == "value")
    interface.quick_set_prop("prop2=value2", host="host60-1")
    assert(Property.objects.get(
        host__name="host60-1", name="prop2").value == "value2")

    interface.quick_set_prop("prop", "pool60", del_=True)
    assert not Property.objects.filter(pool__name="pool60")
    interface.quick_set_prop("prop2", host="host60-1", del_=True)
    assert not Property.objects.filter(host__name="host60-1")

    assert_raises(interface.PropertyFormatError, interface.quick_set_prop,
        "foobar", "pool60")
    assert_raises(interface.InexistantObjectError, interface.quick_set_prop,
        "inexistant", "pool60", del_=True)
Пример #13
0
def get(args):
    """Get new address from pool."""
    pool = None
    if args.pool_name:
        try:
            pool = interface.get_pool(args.pool_name[0])
        except (interface.InexistantObjectError,
                interface.DuplicateObjectError) as exc:
            logging.error(str(exc))
            sys.exit(1)

    if args.host:
        for host in args.host:
            try:
                hostobj = interface.get_host(host)
            except interface.InexistantObjectError as exc:
                logging.error(str(exc))
                sys.exit(1)

            addr = None
            if not args.address:
                args.address = [None]
            try:
                if args.category:
                    args.category = args.category[0]
                addr = interface.allocate_address(pool, hostobj,
                                                  args.address[0], args.random,
                                                  args.category, args.duration)
                del args.address[0]
            except (interface.MissingParameterError,
                    models.FullPoolError) as exc:
                logging.error(str(exc))
            except (models.AddressNotInPoolError,
                    models.AddressNotAvailableError) as exc:
                logging.warn(str(exc))

            if addr:
                print("Assigned " + str(addr) + " to host " + host)
    else:
        logging.error("Missing host to allocate address to.")
        sys.exit(1)
Пример #14
0
def get(args):
    """Get new address from pool."""
    pool = None
    if args.pool_name:
        try:
            pool = interface.get_pool(args.pool_name[0])
        except (interface.InexistantObjectError,
                interface.DuplicateObjectError) as exc:
            logging.error(str(exc))
            sys.exit(1)

    if args.host:
        for host in args.host:
            try:
                hostobj = interface.get_host(host)
            except interface.InexistantObjectError as exc:
                logging.error(str(exc))
                sys.exit(1)

            addr = None
            if not args.address:
                args.address = [None]
            try:
                if args.category:
                    args.category = args.category[0]
                addr = interface.allocate_address(pool, hostobj,
                    args.address[0], args.random, args.category, args.duration)
                del args.address[0]
            except (interface.MissingParameterError,
                    models.FullPoolError) as exc:
                logging.error(str(exc))
            except (models.AddressNotInPoolError,
                    models.AddressNotAvailableError) as exc:
                logging.warn(str(exc))

            if addr:
                print("Assigned " + str(addr) + " to host " + host)
    else:
        logging.error("Missing host to allocate address to.")
        sys.exit(1)
Пример #15
0
         return error_view(request, 409, _("Host or alias already exists"), e.args[0])
     #fin anomalie9
     except interface.InexistantObjectError:
         return error_404(request)
     if data.get("newname"):
         referer = "/host/" + str(data.get("newname"))
     else:
         referer = "/host/" + host_name
     return msg_view(request,
         _("Host \"%(host)s\" has been modified") % {"host": host_name},
         _("The host \"%(host)s\" has been correctly modified.")
                 % {"host": host_name}, referer=referer)
 elif request.method == "POST" and request.POST.get("allocate"):
     poolobj = None
     if request.POST.get("pool_name"):
         poolobj = interface.get_pool(request.POST.get("pool_name"))
     try:
         addr = interface.allocate_address(
             pool=poolobj,
             host=host, address=request.POST.get("address"),
             category=host.category)
     except interface.MissingParameterError:
         return error_view(request, 400, _("Missing information"),
             _("Host probably does not have a category, please add one to "
                 " it or specify a pool or an address in the previous form."))
     except models.AddressNotInPoolError:
         return error_view(request, 412, _("Address not in the given pool"),
             _("The address you provided (%(addr)s) does not belong to the "
                 "given pool."))
     except models.AddressNotAvailableError:
         return error_view(request, 412, _("Address not available."),
Пример #16
0
def create(args):
    """Create a new object."""
    pool = []
    if (args.host or args.address or args.generator) and args.pool_name:
        try:
            for pool_name in args.pool_name:
                pool.append(interface.get_pool(pool_name))
        except interface.InexistantObjectError as exc:
            logging.error(str(exc))
            sys.exit(1)

    if not args.generator and not args.extra and not pool:
        pool = [None]

    # generator creation
    if args.generator and args.extra:
        if not args.pool_name:
            args.pool_name = []
        try:
            interface.create_generator(args.generator, args.extra[0],
                                       args.output, args.default, args.header,
                                       args.footer, args.checkfile,
                                       args.timeout, args.domain,
                                       args.pool_name)
        except (interface.DuplicateObjectError,
                interface.MissingParameterError) as exc:
            logging.error(str(exc))
            sys.exit(1)
    else:
        if pool and len(pool) > 1:
            logging.error("Please specify only one pool name.")
            sys.exit(1)
        if args.pool_name and (args.host or args.address):
            pool = interface.get_pool(args.pool_name[0])
        else:
            pool = None

        # host creation
        if args.host:
            _create_host(args, pool)
        # stand-alone addresses creation
        elif args.address:
            for addr in args.address:
                try:
                    interface.allocate_address(pool, address=addr)
                    print(addr + " has been allocated")
                except (models.AddressNotInPoolError,
                        models.AddressNotAvailableError) as exc:
                    logging.warn(str(exc))
        # pool creation
        elif args.pool_name:
            if pool is None:
                try:
                    pool = interface.create_pool(args.pool_name[0], args.pool,
                                                 args.category)
                except (addrrange.InvalidAddressError,
                        interface.MissingParameterError) as exc:
                    logging.error(str(exc))
                    sys.exit(1)
            else:
                logging.error("Pool already exists :" + args.pool_name[0])
                sys.exit(1)
        else:
            logging.error("Missing parameters for object creation.")
            sys.exit(1)
Пример #17
0
def add_host(request):
    """Add a new host to SLAM's database."""
    if request.method == "POST":
        try:
            pool = interface.get_pool(pool_name=request.POST.get("pool_name"),
                                      category=request.POST.get("category"))
        except interface.InexistantObjectError:
            return error_404(request)
        alias = request.POST.get("alias")
        if alias:
            alias = alias.replace(", ", ",").split(",")
        else:
            alias = []
        if (request.POST.get("mac") and models.Address.objects.filter(
                macaddr=request.POST.get("mac"))):
            return error_view(
                request, 412, _("MAC adress taken"),
                _("The MAC adresse of the host you are trying to create "
                  "already belongs to host %(host)s.") % {
                      "host":
                      models.Address.objects.filter(
                          macaddr=request.POST.get("mac"))[0].host.name
                  })

        mac = request.POST.get("mac")
        if mac:
            mac = mac.lower()
            if not re.match("^[a-f0-9]{2}(:[a-f0-9]{2}){5}$", mac):
                return error_view(
                    request, 400, _("Invalid MAC"),
                    _("The format of the given MAC address is invalid :"
                      " %(mac)s.") % {"mac": mac})
        try:
            hoststr, addrstr = interface.create_host(
                host=request.POST.get("name"),
                pool=pool,
                address=request.POST.get("address"),
                mac=mac,
                random=request.POST.get("random"),
                alias=alias,
                serial=request.POST.get("serial"),
                inventory=request.POST.get("inventory"),
                nodns=request.POST.get("nodns"))
        except interface.MissingParameterError:
            return error_view(
                request, 400, _("Missing information"),
                _("You must at least specify a name to create a new host."))
        #annomalie espace dans le name host
        except interface.PropertyFormatError:
            return error_view(
                request, 400, _("Format invalid"),
                _("You must specify a valid host name or alias without space, special character etc."
                  ))
        #anomalie9
        except interface.DuplicateObjectError, e:
            return error_view(request, 409, _("Could not create host"),
                              e.args[0])
        #fin anomalie9
        except models.AddressNotInPoolError:
            return error_view(
                request, 412, _("Address not in pool"),
                _("The address you provided (%(addr)s) is not in the pool "
                  "%(pool)s.") % {
                      "addr": str(request.POST.get("address")),
                      "pool": str(pool.name)
                  })
Пример #18
0
     except interface.InexistantObjectError:
         return error_404(request)
     if data.get("newname"):
         referer = "/host/" + str(data.get("newname"))
     else:
         referer = "/host/" + host_name
     return msg_view(
         request,
         _("Host \"%(host)s\" has been modified") % {"host": host_name},
         _("The host \"%(host)s\" has been correctly modified.") %
         {"host": host_name},
         referer=referer)
 elif request.method == "POST" and request.POST.get("allocate"):
     poolobj = None
     if request.POST.get("pool_name"):
         poolobj = interface.get_pool(request.POST.get("pool_name"))
     try:
         addr = interface.allocate_address(
             pool=poolobj,
             host=host,
             address=request.POST.get("address"),
             category=host.category)
     except interface.MissingParameterError:
         return error_view(
             request, 400, _("Missing information"),
             _("Host probably does not have a category, please add one to "
               " it or specify a pool or an address in the previous form."))
     except models.AddressNotInPoolError:
         return error_view(
             request, 412, _("Address not in the given pool"),
             _("The address you provided (%(addr)s) does not belong to the "
Пример #19
0
def create(args):
    """Create a new object."""
    pool = []
    if (args.host or args.address or args.generator) and args.pool_name:
        try:
            for pool_name in args.pool_name:
                pool.append(interface.get_pool(pool_name))
        except interface.InexistantObjectError as exc:
            logging.error(str(exc))
            sys.exit(1)

    if not args.generator and not args.extra and not pool:
        pool = [None]

    # generator creation
    if args.generator and args.extra:
        if not args.pool_name:
            args.pool_name = []
        try:
            interface.create_generator(args.generator, args.extra[0],
                args.output, args.default, args.header, args.footer,
                args.checkfile, args.timeout, args.domain, args.pool_name)
        except (interface.DuplicateObjectError,
                interface.MissingParameterError) as exc:
            logging.error(str(exc))
            sys.exit(1)
    else:
        if pool and len(pool) > 1:
            logging.error("Please specify only one pool name.")
            sys.exit(1)
        if args.pool_name and (args.host or args.address):
            pool = interface.get_pool(args.pool_name[0])
        else:
            pool = None

        # host creation
        if args.host:
            _create_host(args, pool)
        # stand-alone addresses creation
        elif args.address:
            for addr in args.address:
                try:
                    interface.allocate_address(pool, address=addr)
                    print(addr + " has been allocated")
                except (models.AddressNotInPoolError,
                        models.AddressNotAvailableError) as exc:
                    logging.warn(str(exc))
        # pool creation
        elif args.pool_name:
            if pool is None:
                try:
                    pool = interface.create_pool(args.pool_name[0], args.pool,
                        args.category)
                except (addrrange.InvalidAddressError,
                        interface.MissingParameterError) as exc:
                    logging.error(str(exc))
                    sys.exit(1)
            else:
                logging.error("Pool already exists :" + args.pool_name[0])
                sys.exit(1)
        else:
            logging.error("Missing parameters for object creation.")
            sys.exit(1)