Statistics
| Branch: | Tag: | Revision:

root / htools @ 1dbceab9

# Date Author Comment
9cda4d6a 12/04/2012 01:44 pm Iustin Pop

Fix long lines in Ganeti.HTools.Types and add Make check

Since hlint doesn't check style issues but rather code only issues,
let's add a simple Makefile check for too-long lines, and fix the
single bad case we have currently.

Signed-off-by: Iustin Pop <>...

fa10983e 12/04/2012 01:44 pm Iustin Pop

Rework custom fields handling

This patch changes a bit the handling of custom fields. Since in
general we use custom fields to aggregate multiple entries in the JSON
object into a safer data-type, we should also have a way to declare
which extra entries this field covers (so that in the future we can...

3929e782 12/04/2012 01:44 pm Iustin Pop

Add a function for all fields of a given OP_ID

This patch changes THH to export a new function which defines all
fields of a given OP_ID. Not very clean, since for an invalid OP_ID we
return empty list, but since it will only be used in tests it should
be good enough....

3d7e87b8 12/04/2012 01:44 pm Iustin Pop

Rework/enhance original htools opcodes

The original htools opcodes were minimalistic and not 1:1 equivalent
with the Python ones. Let's add all missing fields and, since we
changed the order, switch to more readable record syntax for building
the opcodes....

67fc4de7 12/04/2012 01:44 pm Iustin Pop

Add a few missing fields from opcodes

Due to manual conversion, a few fields were missing from the
conversion, but as they were optional our type equivalence checking
didn't detect this.

Signed-off-by: Iustin Pop <>
Reviewed-by: Guido Trotter <>

1dbceab9 12/04/2012 01:44 pm Iustin Pop

Fix Haskell OpNetworkAdd

Commit 213076f (“Fix locking in networks”) changed Python OpNetworkAdd
without corresponding Haskell definition changes.

Signed-off-by: Iustin Pop <>
Reviewed-by: Guido Trotter <>

07ac4aaf 12/03/2012 01:35 pm Guido Trotter

Fix variable names in Loader.assignIndices

This function can be applied to any type of class "Element" but its
internal variables used to refer to a list of tuples containing these
elements and their names as "nodes". Moreover it built a list of name to
indices tuples referring to it as "na" (which is not very clear)....

9de303af 12/03/2012 12:45 pm Michele Tartara

Add unit tests for the JSON serialization of DRBD status

The serialization itself is done by Text.JSON, so the tests deal with checking
that Text.JSON objects are created correctly from the DRBD parser data
structures.

Signed-off-by: Michele Tartara <>...

2188740e 12/03/2012 12:45 pm Michele Tartara

Add JSON serialization capabilities for DRBD status

The serialized JSON is not a 1:1 dump of the data structures
populated by the parser. This is done intentionally, with the
aim of producing a more stable and more meaningful output to
be used by the (future) monitoring agent and stand-alone data...

3c8e6d09 12/03/2012 12:45 pm Michele Tartara

Add two support functions for building JSON objects

The new support functions in module Ganeti.JSON will be used by the next
commits to build JSON objects with optional (Maybe) fields, excluding
them when they contain Nothing.

Signed-off-by: Michele Tartara <>...

0ff01075 11/30/2012 06:33 pm Guido Trotter

Change -G option description

The new one is more consistent with the rest of the nodegroup
terminology and more generic for use in different htools.

Signed-off-by: Guido Trotter <>
Reviewed-by: Iustin Pop <>

d277b075 11/30/2012 04:17 pm Iustin Pop

Optimise recursive Query filters

Currently, the And and Or filters use very nice code, e.g. in case of
OrFilter:

any id <$> mapM evaluateFilter flts

However, looking at the memory profiles shows that application of
any/id to monadic values via '<$>' does not work nicely, losing the...

228ef0f2 11/30/2012 04:17 pm Iustin Pop

Make Query operators enforce strictness

Currently, the query operators (binop, etc.) create thunks, instead of
forcing the evaluation of the simple boolean results. This results in
higher than needed memory use.

Signed-off-by: Iustin Pop <>...

08fd383d 11/30/2012 03:57 pm Iustin Pop

Fix htools/rpc-test after recent changes

Since this program is not built normally, a few recent commits broke
it:

- 707cd3d (“Use exitErr instead of explicit error message and
exitWith”) introduced wrong syntax (missing '$')
- 29a3053 (“Remove unsafePerformIO usage”) changed the signature of...

139c0683 11/30/2012 03:54 pm Iustin Pop

Remove read instances from our Haskell code

It turns out that optimising 'read' derived instances (via -O) for
complex data types (like OpCode, or the various objects) can be slow
to very slow. Disabling such instances results in (time make
$all_our_haskell_binaries) large compile-time savings and also smaller...

f9556d33 11/30/2012 03:54 pm Iustin Pop

Replace hand-coded 'live' field of OpInstanceMigrate

This is the last inline-written field; I've done it separately from
the last patch due to changes being needed in HTools (field changed
type).

Signed-off-by: Iustin Pop <>
Reviewed-by: Helga Velroyen <>

7d421386 11/30/2012 03:54 pm Iustin Pop

Remove remaining in-line parameters

… except one, and replace them with separately-defined ones in
OpParams.

Signed-off-by: Iustin Pop <>
Reviewed-by: Helga Velroyen <>

3131adc7 11/30/2012 03:54 pm Iustin Pop

Abstract query common opcode definitions

It would be even better if the opcodes would actually have all the
same definitions, until then we have two sets of definitions.

Signed-off-by: Iustin Pop <>
Reviewed-by: Helga Velroyen <>

1cd563e2 11/30/2012 03:54 pm Iustin Pop

Add two last missing opcodes

OpInstanceQuery was missing accidentally, whereas OpRestrictedCommand
was just recently added without Haskell definitions.

The patch also slightly improves the OpNodeQuery arbitrary generation.

Signed-off-by: Iustin Pop <>...

8d239fa4 11/30/2012 03:54 pm Iustin Pop

Add types, parameters and the opcodes for networks

This completes the last missing opcode group. The only difficulty was
with the ip addresses, where we used simple strings to represent them
and (for IPv4) a few helpers to generate arbitrary instances;
otherwise, the patch is trivial....

497beee2 11/30/2012 03:54 pm Iustin Pop

Move NICMode from Objects.hs to Types.hs

Also add some unittests for this type.

Signed-off-by: Iustin Pop <>
Reviewed-by: Helga Velroyen <>

a3f02317 11/30/2012 03:54 pm Iustin Pop

Complete the Test opcodes

This adds the OpTestAllocator, OpTestJqueue and OpTestDummy
opcodes. The OpTestAllocator seems to need some cleanup (on the Python
side), for now we implement it as is. As for the other two, while not
used in production, we should have full coverage for them as well....

a451dae2 11/30/2012 03:54 pm Iustin Pop

Complete the Tag opcodes and fix OpTestDelay missing param

The regexp in OpTagsSearch is loaded as is, without testing for
validity; the rest of the patch is trivial.

Signed-off-by: Iustin Pop <>
Reviewed-by: Helga Velroyen <>

398e9066 11/30/2012 03:54 pm Iustin Pop

Add Group, OS and Backup opcodes

This also corrects a docstring in OpBackupExport on the Python side.

Signed-off-by: Iustin Pop <>
Reviewed-by: Helga Velroyen <>

c2d3219b 11/30/2012 03:54 pm Iustin Pop

Complete the instance OpCodes and parameters

Only the original instance opcodes (used in htools) are left
non-converted to only parameter style; they'll be cleaned up later,
once the htools codebase itself migrates to safer types.

Signed-off-by: Iustin Pop <>...

6d558717 11/30/2012 03:48 pm Iustin Pop

Add types and parameters for OpInstanceCreate

This is a "big" opcode, so sending it separately.

A few types needed changing, and a few parameters were renamed to make
it more clear which are cluster-level and which are instance-level
parameters.

Signed-off-by: Iustin Pop <>...

c65621d7 11/30/2012 03:48 pm Iustin Pop

Move FileDriver from Objects to Types

Another base type that we need in opcodes as well.

Signed-off-by: Iustin Pop <>
Reviewed-by: Helga Velroyen <>

fd80be11 11/27/2012 12:06 pm Michele Tartara

Small improvements to the DRBD parser and tests

  • Now the parser completely consumes the input, up to the end of the text.
  • Name of the test suite module changed to adhere to naming conventions.
  • Some reformatting of the source code.

Signed-off-by: Michele Tartara <>...

b22b93dc 11/22/2012 01:56 pm Michele Tartara

Implement the correct handling of numbers without commas

commaInt now recognizes only the first 3 digits for numbers without commas.

It was erroneously recognizing numbers of any size before the first comma.

Signed-off-by: Michele Tartara <>...

6a28e02c 11/21/2012 04:58 pm Iustin Pop

Add two more basic types

These are needed for completing the node opcode parameters.

Signed-off-by: Iustin Pop <>
Reviewed-by: Guido Trotter <>

d6979f35 11/21/2012 04:58 pm Iustin Pop

Add many more opcode parameters

This is a bulk add of all node parameters needed for node and cluster
opcodes. The parameters are defined with a few helper functions in
this module, and, opposite from opcodes.py, there won't be any (new)
opcode attributes declared in-line (without a separate field...

c7d249d0 11/21/2012 04:58 pm Iustin Pop

Convert a few existing opcode parameters to safer types

This does a partial conversion of existing opcodes to the new
non-empty string type, which is needed so that we don't add even more
opcodes without this safety net (and to have consistent "target_node",...

c66f09f5 11/21/2012 04:58 pm Iustin Pop

Bulk add of remaining cluster/node opcodes

These are tested for equivalence with the Python code using existing
tests. These tests are not perfect - for many "TDict" we simply send
empty dicts, as we don't have a way to generate proper data, but the
tests did catch many trivial errors during writing of this patch...

417ab39c 11/21/2012 04:58 pm Iustin Pop

A few more hlint fixes

I'm ignoring the use of Control.Arrow.*** since it's a non-obvious
function, and we're not widely using Arrows in the code base, so I
think switching to it would make the code less readable to most
people.

Signed-off-by: Iustin Pop <>...

d696bbef 11/21/2012 03:51 pm Iustin Pop

Add more basic Ganeti types

These are needed both in opcodes and (potentially) outside, so we add
them in the main Types module.

Signed-off-by: Iustin Pop <>
Reviewed-by: Michael Hanselmann <>

edc1acde 11/21/2012 03:51 pm Iustin Pop

Generalise the JSON "Container" type

Currently, we have some types that we kept as dictionaries in the
objects representation (due to inconsistent behaviour, or other
technical reasons). This should be improved in the future, but in the
meantime we can improve the Container type by allowing its keys to be...

22381768 11/21/2012 03:51 pm Iustin Pop

Move the 'Hypervisor' type from Objects to Types

This is a very basic type and 'Objects' is a heavy-weight module. By
moving it to 'types' we simplify (in the future) the import chains.

Signed-off-by: Iustin Pop <>
Reviewed-by: Adeodato Simo <>

1283cc38 11/21/2012 03:51 pm Iustin Pop

Split 'Query.Language.ItemType' in two sub-types

The QR_VIA_OP/QR_VIA_LUXI types in Python are using yet another
validation mode: QR_VIA_OP is the base type, and QR_VIA_LUXI extends
it (when doing luxi queries). But on the wire they have the same
representation....

48755fac 11/21/2012 03:51 pm Iustin Pop

Move StorageType from RPC.hs to Types.hs

This fixes a FIXME actually recommending this move :)

Signed-off-by: Iustin Pop <>
Reviewed-by: Guido Trotter <>

edb5a1c8 11/20/2012 05:39 pm Iustin Pop

Add more basic validation types

This mirrors the ht.py types PositiveInt, NonNegative, etc., except
that they work at a more generic level (any numeric type, respectively
any non-empty list).

Signed-off-by: Iustin Pop <>
Reviewed-by: Adeodato Simo <>

3c1915df 11/20/2012 01:02 pm Michele Tartara

Add parser for DRBD /proc file

A new directory for haskell modules about block devices has been created
The parser is divided in two modules:
  • one exports the data types describing the DRBD status
  • one exports the parser itself

Signed-off-by: Michele Tartara <>...

1a865afe 11/20/2012 12:12 pm Iustin Pop

Properly log errors when setting up daemon FDs

While writing the pipe-based reporting and trying various ways to
break the startup, I fought for a while trying to understand why error
reporting was different when running the daemon as a user (with no
rights). It turns out that setupDaemonFDs wants to open the log file...

8ee2994a 11/20/2012 11:28 am Iustin Pop

Switch opcode data type from normal to record constructors

Currently, the OpCode definitions are using normal constructors:

data OpCode = OpTestDelay Double Bool [String]
            | OpInstanceFailover String Bool (Maybe String)

While this works for a few opcodes, it becomes unwieldy when dealing...

51d991d7 11/20/2012 11:26 am Iustin Pop

Fix docstrings for the Filter type

While looking at the opcode docs and clicking accidentally on the
filter type, I saw that the haddock formatting is broken due to
non-escaped use of special chars. Let's convert the ascii-like
formatting to haddock, and have nicer apidoc....

92f51573 11/20/2012 11:16 am Iustin Pop

Split OpCode.hs and add module for opcode parameters

Due to TemplateHaskell stage restrictions, we can't define parameters
in the same module as we're using them for TH, so we have to define
all module parameters in a separate module.

This patch therefore splits OpCodes.hs in two, adding that module and...

5e9deac0 11/20/2012 11:16 am Iustin Pop

Create a new Ganeti/Types.hs module

There are already three cases where we copied type definitions between
the htools-specific types into the main ganeti code. Let's stop doing
this ☺ and create a common types module that holds these.

Note that there already exists BasicTypes.hs, but that refers to very...

32a569fe 11/15/2012 12:20 pm Iustin Pop

Cleanup THH function use from built module namespace

Currently, THH.hs "injects" into the built code names of library
functions like Text.JSON.makeObj, Ganeti.JSON.fromObj, etc. built
directly from strings, via (e.g.)

varE (mkName "makeObj")

This means that the "makeObj" name must exist in the target module,...

f63ffb37 11/13/2012 09:28 pm Michael Hanselmann

Expose changing job priority via LUXI

A new LUXI request is added, in both Python and Haskell.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Bernardo Dal Seno <>
Reviewed-by: Iustin Pop <>

67e4fcf4 11/13/2012 10:28 am Iustin Pop

Fix two hlint warnings

Sorry, I broke lint again :), by introducing two sub-standard changes.

Additionally, this silences an older existing warning that only
triggers with some versions of hlint (e.g. 1.8.28 which is present in
Wheezy).

Signed-off-by: Iustin Pop <>...

551a29df 11/12/2012 06:17 pm Iustin Pop

Merge branch 'devel-2.6' into master

  • devel-2.6:
    Improve error message when migration status fail
    Fix type error in kvm/GetMigrationStatus
    Fix PID file writing in Haskell daemons

Conflicts (both trivial):
htools/Ganeti/Daemon.hs (_writePidFile rename)...

112b6e89 11/12/2012 06:05 pm Iustin Pop

Merge branch 'stable-2.6' into devel-2.6

  • stable-2.6:
    Improve error message when migration status fail
    Fix type error in kvm/GetMigrationStatus
    Fix PID file writing in Haskell daemons

Signed-off-by: Iustin Pop <>
Reviewed-by: Guido Trotter <>

a4c0fe1e 11/12/2012 01:29 pm Iustin Pop

Fix PID file writing in Haskell daemons

Currently, the code uses createFile, which has the effect of always
truncating the file. This is bad, as the content of the PID file is
wiped even when we wouldn't be able to lock it!

We switch to openFd (createFile is just a wrapper over that), and we...

29a30533 11/12/2012 01:21 pm Iustin Pop

Remove unsafePerformIO usage

We need to change a few things, most importantly CLI options defaults,
but otherwise we already used the path to files from functions which
were already in the I/O monad, so we don't have to change much of the
code flow.

Additionally, Path.hs now has an explicit export list, to stop...

37904802 11/12/2012 01:21 pm Iustin Pop

Change keyToFilename/readSSconfFile interaction

Currently, keyToFilename uses itself the default config path. In the
light of making that an function in the IO monad, let's remove the
"default" path functionality from this function and make it always
require the config path; its caller, readSSConfFile, can then do the...

d66aa238 11/12/2012 01:19 pm Iustin Pop

Change type of program options to 'IO [Options]'

Some options have defaults that depend on the environment, and we
could handle these in two ways:

- use a place-holder value (e.g. data X a = Default | Custom a) that
is later read from the environment
- move the options list to IO monad, where it can read the...

73b16ca1 11/12/2012 12:02 pm Iustin Pop

Annotate confd startup/luxi binding error

The luxi binding is now annotated for better readability.

Signed-off-by: Iustin Pop <>
Reviewed-by: Michael Hanselmann <>

48483a2e 11/12/2012 12:02 pm Iustin Pop

Two small logging improvements

The "starting" message is changed to match the Python one, and in case
the preparation fails, we also log the error (beside printing it on
stderr or writing it to the error reporting pipe), as at this time
logging is usually set up....

4c3f55b8 11/12/2012 12:02 pm Iustin Pop

Split queryd run into prepare and exec

This will help with the general daemon split of prepare/run, and flag
errors earlier in the startup.

Signed-off-by: Iustin Pop <>
Reviewed-by: Michael Hanselmann <>

ef3de7b0 11/12/2012 12:02 pm Iustin Pop

Move preparation steps of confd in prepMain

This does the address parsing earlier, before we fork, for
better/faster error reporting.

Signed-off-by: Iustin Pop <>
Reviewed-by: Michael Hanselmann <>

b9097468 11/12/2012 12:02 pm Iustin Pop

Switch daemon startup to pipe-based error reporting

This changes the daemon reporting error to the same mechanism as in
Python: use a pipe which is written to from the forked children.

Signed-off-by: Iustin Pop <>
Reviewed-by: Michael Hanselmann <>

7413b229 11/12/2012 12:02 pm Iustin Pop

Move and rename BasicTypes.annotateIOError

It turns out that annotateIOError already exists in the standard
library, with a different purpose (this made me waste 10 minutes
trying to understand why the types were wrong…). Let's move this out
of BasicTypes, since it's used only in Daemon.hs, and also rename it....

e14b84e9 11/12/2012 12:02 pm Iustin Pop

Switch writing of PID file to new reporting style

Currently, the writing of the PID file uses a "standard" error
reporting: catch exception, transform it into a 'Result' type, leave
handling of that to the caller. However, for daemon startup, we
actually want exceptions to be propagated up until the handler which...

d8e7c45e 11/12/2012 12:00 pm Iustin Pop

Convert tag objects to a safer type

Currently, we keep information about the "target" of a tag operation
in a data type similar to (TagKind, Maybe String). This is unsafe, as
nothing (at the type level) prevents us from accidentally having
(TagCluster, Just "instance1.example.com"), or (TagInstance, Nothing)....

88609f00 11/12/2012 11:44 am Iustin Pop

Switch Luxi TH code from simple to custom fields

This is needed so that we have more flexibility in generating Luxi
serialisation code (deserialisation is still custom). Also, only
exceptions are now using the 'simple' field types, so we might be able
later to convert and remove that TH code as well....

92ad1f44 11/12/2012 11:44 am Iustin Pop

Make THH:genSaveOpCode a bit more general

This can be improved, by taking all hardcoded names as parameters, to
serve as a more-general "build save clause for a multi-constructor
data type". I'm not renaming the function as well, since I don't know
exactly how much we can abstract later....

cdc2392b 11/08/2012 02:58 pm Iustin Pop

Rename Confd.hs to Confd/Types.hs

This should be the last module rename, promise!

We rename this to conform to the other hierarchies (e.g. Query), and
to not have both Confd.hs and Confd/*.hs.

Signed-off-by: Iustin Pop <>
Reviewed-by: Guido Trotter <>

3bebda52 11/08/2012 12:31 pm Dato Simó

OpCodes.hs: add OpTagsSet and OpTagsDel

Also, adjust comment to $(genOpCode) block to avoid repetition of
"only".

Signed-off-by: Dato Simó <>
Reviewed-by: Iustin Pop <>

367c4241 11/08/2012 12:31 pm Dato Simó

htools: move TagObject from Luxi.hs to OpCodes.hs

In addition to ReqQueryTags in Luxi.hs, the TagObject ADT is also
required for the "kind" attribute of OpTagsSet and OpTagsDel, which
are coming to OpCodes.hs next. Hence, we move TagObject there, and
adjust imports accordingly....

2ac2e420 11/07/2012 05:58 pm Iustin Pop

Implement base checkFn/prepFn/execFn model for daemons

This mirrors the code in the Python code base, and is required for
clean error reporting during startup.

This patch implements the basic infrastructure; the confd daemon is
not yet modified to take advantage of this, just the types are...

7ae5d703 11/07/2012 03:39 pm Iustin Pop

One more ghc 7.6 fix

This is only in master, so needed to be fixed separately.

Signed-off-by: Iustin Pop <>
Reviewed-by: Michael Hanselmann <>

b9612abb 11/07/2012 03:06 pm Iustin Pop

Merge branch 'devel-2.6' into submit

  • devel-2.6:
    Fix compatibility with newer Haskell libraries
    Fix gnt-instance console with xl

Conflicts:
Makefile.am (reordering, fixed)
htools/Ganeti/Confd/Server.hs (hlint fixes on master)
htools/Ganeti/Daemon.hs (hlint)...

27639c4e 11/07/2012 02:08 pm Iustin Pop

Merge branch 'stable-2.6' into devel-2.6

  • stable-2.6:
    Fix compatibility with newer Haskell libraries
    Fix gnt-instance console with xl

Signed-off-by: Iustin Pop <>
Reviewed-by: Michael Hanselmann <>

1251817b 11/07/2012 10:46 am Iustin Pop

Fix compatibility with newer Haskell libraries

This small patch fixes compatibility with a few newer Haskell libraries:

- base 4.6, included with ghc 7.6, removed the deprecated 'catch'
function from Prelude, so our "import Prelude hiding (catch)" is now...

471b6c46 11/06/2012 06:48 pm Iustin Pop

Add test for Luxi calls consistency hs/py

This tests that the same Luxi calls are defined in Python and
Haskell. It doesn't test yet that their serialisation is correct
though.

Signed-off-by: Iustin Pop <>
Reviewed-by: Guido Trotter <>

7adb7dff 10/26/2012 06:05 pm Iustin Pop

Convert Luxi results to Ganeti errors

This a bit too complex patch converts the result of Luxi calls
(submitJob, query*, etc.) from Result to ErrorResult. It then
immediately revers this in the HTools/Backend/Luxi module, where we
don't need necessarily the full error type (just a nice error...

879d9290 10/26/2012 03:05 pm Iustin Pop

Move htools backends to a separate directory

Five modules under the HTools/ directories are backend
implementations, so let's move them to a separate directory, to more
clearly show the hierarchy. I wanted to do this for a while, but
merging between branches is always an issue, so let's do it know since...

bca39f5c 10/26/2012 02:23 pm Iustin Pop

Fix X509CertError definition in Haskell codebase

Thanks Dato for catching this.

Signed-off-by: Iustin Pop <>
Reviewed-by: Michael Hanselmann <>

66ad857a 10/26/2012 02:22 pm Iustin Pop

Fix a few issues found by newer hlint

Testing with a newer hlint found a few minor issues; but all are real,
valid recommendations:

- don't use "if cond then f x else f y", but "f (if cond then x else y)"
- "if a then b else True" is equivalent to the simpler "not a || b"...

9b156883 10/26/2012 02:22 pm Iustin Pop

Add support for optional fields with null serialised

This follows a conversation we had for how to deal with
optional-but-required fields in JSON serialisations: fields which are
optional (can be either a given type or 'null'), but where the 'null'
value is required. There are just a few of these in the Python code,...

86a24969 10/25/2012 08:57 pm Dato Simó

Errors.hs: improve field names for ConfigVersionMismatch

Change {exp,act}Code to {exp,act}Ver, which gives a better idea that
the integer fields represent version numbers.

Also:

- errors.py: update OpPrereqError's docstring to note that an error
code is always expected as the second argument (it was previously...
dce5d027 10/25/2012 06:43 pm Dato Simó

THH.hs: delete isOptional, no longer used

The isOptional function is no longer used after a150585 (“Convert
opcode TH code to the use of Field type”).

Signed-off-by: Dato Simó <>
Reviewed-by: Iustin Pop <>

5183e8be 10/25/2012 01:05 pm Iustin Pop

Convert query path from string errors to GanetiException

This patch converts all the call paths from 'Result' (which contains
just string errors) to 'ErrorResult', which holds
GanetiException-encoded errors. We can now return proper
OpPrereq/OpExec errors to the clients of the luxi/query socket....

f56fc1a6 10/25/2012 01:05 pm Iustin Pop

Add exception utility functions

In Python, formatError also returns the exit code, but I find that
splitting them leads to clearer code.

Signed-off-by: Iustin Pop <>
Reviewed-by: Michael Hanselmann <>

ef3ad027 10/25/2012 12:38 pm Iustin Pop

Add an Errors module mirroring the Python one

As described in the module doc string, while writing this it dawned
upon me that we're mixing all errors together into a single hierarchy
(well, type on the Haskell side), which is not good. Some errors are
used purely within noded, some in the CLI frontends, etc. so these...

185b5b0d 10/25/2012 12:38 pm Iustin Pop

Abstract Luxi template functionality

These are almost generic, so let's change the signatures a bit a make
them fully so.

Signed-off-by: Iustin Pop <>
Reviewed-by: Adeodato Simo <>

2e202a9b 10/25/2012 12:38 pm Iustin Pop

Abstract a few types in THH.hs

This 'simple' way of defining objects will be used also for errors, so
let's make it less Luxi-specific.

Signed-off-by: Iustin Pop <>
Reviewed-by: Michael Hanselmann <>

77ffd663 10/22/2012 12:31 pm Helga Velroyen

Fix setting of 'failN1' flag for corner case

This patch includes:

  • The 'failN1' flag is now only set if there is strictly less
    memory available than required for failover.
  • Unit tests for that.

Signed-off-by: Helga Velroyen <>
Reviewed-by: Iustin Pop <>

dd77da99 10/22/2012 12:29 pm Helga Velroyen

A few unittests improvements

Small simplifications of other unit tests using the (==?)
operator when possible, and typo fixes.

Signed-off-by: Helga Velroyen <>
Reviewed-by: Iustin Pop <>

98508e7f 10/19/2012 06:04 pm Dato Simó

BasicTypes.hs: fix docstring for eitherToResult

eitherToResult now converts from `Either a b` to `GenericResult`, not
necessarily from `Either String` only. Also, fix a typo.

Signed-off-by: Dato Simó <>
Reviewed-by: Iustin Pop <>

a8038349 10/18/2012 01:55 pm Iustin Pop

Remove custom OpResult type/monad

Since we now have the GeneralResult as a multi-purpose monad, we can
remove the custom OpResult monad, and just use 'GeneralResult
FailMode' as our type. This allows removal of a few bits of
specialised infrastructure, relying instead on the generic one....

707cd3d7 10/18/2012 12:11 pm Helga Velroyen

Use exitErr instead of explicit error message and exitWith

Furthermore, a few messages have their capitalisation changed (fixed).

Signed-off-by: Helga Velroyen <>
Signed-off-by: Iustin Pop <>
Reviewed-by: Iustin Pop <>

93be1ced 10/17/2012 07:53 pm Iustin Pop

Generalise the Result type

Currently, our error monad—Result—has a plain string error type. This
is not good, as we don't have structured errors, we can't pass back
proper error information to Python code, etc.

To solve this, we generalise this type as 'GenericResult a', and make...

659d769d 10/17/2012 07:45 pm Dato Simó

Merge branch 'devel-2.6' into master

  • devel-2.6:
    htools-excl.test: add test case for exclusion tags in hbal
    Instance.hs: rename 'tags' to 'exclTags', provide 'allTags'
    Group.hs: add 'allTags'; adjust loaders and test data for it
    Add hbal-excl-tags.data to Makefile.am, missed in 0397694...
6b6e335b 10/17/2012 04:13 pm Dato Simó

Group.hs: add 'allTags'; adjust loaders and test data for it

This commit adds a Group.allTags field to store the tags of node groups,
and teaches each loader backend in HTools to populate it (additionally, the
IAllocator class in lib/cmdlib.py now includes tags for groups too). Test...

2f907bad 10/17/2012 04:13 pm Dato Simó

Instance.hs: rename 'tags' to 'exclTags', provide 'allTags'

The mergeData function in Loader.hs included a step to filter an instance's
tags to include only the exclusion tags (as specified via the commandline,
or cluster-level tags). Later on, code in Node.hs assumed Instance.tags to...

11f53fdb 10/16/2012 05:43 pm Michael Hanselmann

Merge branch 'devel-2.6'

  • devel-2.6:
    ensure-dirs: Fix permissions on master socket
    Update security document for version 2.6
    Update NEWS and bump version to 2.6.1
    Text.hs: update field lists in parseData comments

Conflicts:
NEWS: Trivial
lib/tools/ensure_dirs.py: constant moved to pathutils...

19e21a6c 10/16/2012 03:14 pm Iustin Pop

Add a very simple test rpc program

This only supports test delay for now, is not built by default (only
on demand), and is also not installed anywhere.

Signed-off-by: Iustin Pop <>
Reviewed-by: Guido Trotter <>

de2a5704 10/16/2012 03:14 pm Iustin Pop

confd: add the test_delay RPC call

Also add some more haddock structure to the module. The RPC call
itself is rather trivial.

Signed-off-by: Iustin Pop <>
Reviewed-by: Guido Trotter <>

ff8f0049 10/16/2012 12:47 pm Iustin Pop

confd: fix RpcVersion call

By accident, we sent the node object as call data in this rpc call,
instead the version request (i.e. nothing). This is due to the fact
that the 'call' data comes second, not first in the function argument.

Signed-off-by: Iustin Pop <>...

01e52493 10/15/2012 07:56 pm Iustin Pop

Cleanup HTools.Types/BasicTypes imports

Before we reorganised the source tree, the 'Result' type was exported
from HTools/Types.hs. This changed during the reorg, but at that time
we didn't change the exports; instead, we kept re-exporting it from
the old module for compatibility....