1. 26 Sep, 2007 1 commit
    • Michael Hanselmann's avatar
      Enhance QA. · 5d640672
      Michael Hanselmann authored
      - Test “gnt-backup export” and “gnt-backup import”.
      - Move “ResolveInstanceName” to qa_utils.py.
      - Fix tests for “ganeti-watcher”.
      - Make instance shutdown and startup configurable.
      
      Reviewed-by: schreiberal
      
      5d640672
  2. 25 Sep, 2007 4 commits
  3. 24 Sep, 2007 3 commits
  4. 21 Sep, 2007 5 commits
    • Iustin Pop's avatar
      Change class hierarchy in objects.py · ec29fe40
      Iustin Pop authored
      It makes sense to make the TaggableObject a child of the ConfigObject,
      since in this case we can derive the Instance, Node and Cluster objects
      only from the TaggableObject and have a cleaner hierarchy.
      
      For consistency child classes will have to declare their slots by adding
      their parents on top.
      
      Reviewed-by: imsnah,ultrotter
      ec29fe40
    • Iustin Pop's avatar
      Remove requirement that host names are FQDN · 89e1fc26
      Iustin Pop authored
      We currently require that hostnames are FQDN not short names
      (node1.example.com instead of node1). We can allow short names as long
      as:
        - we always resolve the names as returned by socket.gethostname()
        - we rely on having a working resolver
      
      These issues are not as big as may seem, as we only did gethostname() in
      a few places in order to check for the master; we already required
      working resolver all over the code for the other nodes names (and thus
      requiring the same for the current node name is normal).  The patch
      moves some resolver calls from within execution path to the checking
      path (which can abort without any problems). It is important that after
      this patch is applied, no name resolving is called from the execution
      path (LU.Exec() or other code that is called from within those methods)
      as in this case we get much better code flow.
      
      This patch also changes the functions for doing name lookups and
      encapsulates all functionality in a single class.
      
      The final change is that, by requiring working resolver at all times, we
      can change the 'return None' into an exception and thus we don't have to
      check manually each time; only some special cases will check
      (ganeti-daemon and ganeti-watcher which are not covered by the
      generalized exception handling in cli.py). The code is cleaner this way.
      
      Reviewed-by: imsnah
      89e1fc26
    • Iustin Pop's avatar
      Move a constant from ganeti-master to constants.py · 619fdc8e
      Iustin Pop authored
      The EXIT_NODESETUP_ERROR is a useful constant and ganeti-watcher could
      use it too. This patch moves it to constants.py and modifed the
      ganeti-master script to use it from there.
      
      Reviewed-by: imsnah
      619fdc8e
    • Iustin Pop's avatar
      Fix tools/burnin w.r.t. OpCreateInstance.ip_check · e9f745aa
      Iustin Pop authored
      Since we added a new, required parameter to OpCreateInstance, we need to
      update burnin to build the correct opcode.
      
      Reviewed-by: schreiberal
      e9f745aa
    • Iustin Pop's avatar
      Add __slots__ on TaggableObject · 2057f6c7
      Iustin Pop authored
      Unless we use __slots__ on all parents, we don't get the benefits that
      __slots__ bring. This patch adds this attribute to the TaggableObject so
      that Instances, Nodes and the Clusters behave as intended.
      
      Reviewed-by: schreiberal,imsnah
      2057f6c7
  5. 20 Sep, 2007 1 commit
    • Iustin Pop's avatar
      Ask for confirmation when touching multiple instances · 804a1e8e
      Iustin Pop authored
      This patch makes the new startup/shutdown multi-instance operations to
      ask for confirmation when touching more than one instance (and unless
      --force-multi is given).
      
      The code is not very short, but it does present a nice (IMO) user
      interface.
      
      Reviewed-by: ultrotter
      804a1e8e
  6. 19 Sep, 2007 3 commits
    • Iustin Pop's avatar
      Improve the cli.AskUser() function · 47988778
      Iustin Pop authored
      This patch improves the AskUser function by allowing it to:
       - choose from multiple choices (instead of only y/n)
       - give help to the user
       - preserve line breaks and whitespace formatting in the message
      
      With this patch, an instance removal looks like this:
      root@xen-test1-4:~# gnt-instance remove tsetest1
      This will remove the volumes of the instance tsetest1 (including
      mirrors), thus removing all the data of the instance. Continue?
      y/[n]/?: ?
       y - Perform the operation
       n - Do not perform the operation
      
      This will remove the volumes of the instance tsetest1 (including
      mirrors), thus removing all the data of the instance. Continue?
      y/[n]/?: y
      
      The patch also removed the _ask_user member of the opts argument, since
      external code was using it (and thus it makes no sense for it to be a
      private member); now gnt-* scripts are using the AskUser function
      directly.
      
      Reviewed-by: ultrotter
      47988778
    • Iustin Pop's avatar
      Allow 'add instance' to not start the new instance · bdd55f71
      Iustin Pop authored
      This patch allows 'gnt-instance add' to not start the newly-created
      instance. It also allow 'gnt-instance add' and 'gnt-backup import' to
      not check for IP conflicts (only when not starting the instance).
      
      Reviewed-by: ultrotter
      bdd55f71
    • Iustin Pop's avatar
      Change resolved hostname from dict to a class · bcf043c9
      Iustin Pop authored
      The current result of utils.LookupHostname() is a dict, but this does
      not allow static checkers to check the correctness of the code. This
      patch introduces a new class names HostInfo and changes LookupHostname
      to return an instance of this class; this allows better checking of the
      code (and also the code is cleaner).
      
      Reviewed-by: ultrotter
      bcf043c9
  7. 18 Sep, 2007 2 commits
    • Iustin Pop's avatar
      Implement cluster rename operation · 07bd8a51
      Iustin Pop authored
      This patch adds a new OpCode (and corresponding LU) that implements the
      cluster rename functionality.
      
      This is done by shutting down the master role, making the needed sstore
      modifications and distributing the changed files to all nodes, and then
      re-enabling the master role.
      
      The modification to the man page of gnt-cluster also moves the section
      on gnt-cluster destroy in order to correct alphabetical ordering.
      
      Reviewed-by: imsnah
      07bd8a51
    • Guido Trotter's avatar
      Fix a docstring · 4ab0b9e3
      Guido Trotter authored
      Reviewed-by: iustinp
      4ab0b9e3
  8. 17 Sep, 2007 7 commits
    • Alexander Schreiber's avatar
      Cleanup up selective imports for utils and utils unit test. · 4ca1b175
      Alexander Schreiber authored
      Reviewed-by: iustinp, imsnah
      
      4ca1b175
    • Iustin Pop's avatar
      A few minor fixes in backend.py · 9716fdce
      Iustin Pop authored
      This uses the recently-added Instance.FindDisk() method instead of
      hard coded find-disk code.
      
      It also renames one parameter to AddNode from ssh to sshkey in order not
      to shadow the ganeti.ssh module.
      
      Reviewed-by: imsnah
      9716fdce
    • Iustin Pop's avatar
      Implement instance rename operation · decd5f45
      Iustin Pop authored
      This patch adds support for instance rename operation at all remaining
      layers: RPC, OpCode/LU and CLI.
      
      Reviewed-by: imsnah
      decd5f45
    • Alexander Schreiber's avatar
      Added TcpPing to do ping-alike via TCP connect(2) with defined source address. · 2c30e9d7
      Alexander Schreiber authored
      To be used to replace the currently fping(8) based reachability test.
      
      Reviewed-by: imsnah
      
      2c30e9d7
    • Iustin Pop's avatar
      Add support for rename operation in the OS API · 386b57af
      Iustin Pop authored
      This patch adds support for renaming at OS level. Because of this, we
      need to bump up the version of the OS api from 4 to 5.
      
      The patch also documents the new script interface in the
      ganeti-os-interface(7) man page and adds a section on upgrading the OS
      definitions to the new version.
      
      Reviewed-by: imsnah
      386b57af
    • Iustin Pop's avatar
      Allow start/stop of multiple instances at once · 312ac745
      Iustin Pop authored
      This is an initial version of the multi-instance start/stop, which
      allows the gnt-instance startup and shutdown subcommands to work on
      multiple instances at once.
      
      The available selections are:
        - "gnt-instance startup --instance name..." which is the default, and
          if passed only one argument it behaves like the original command)
        - "gnt-instance startup --node name..." will work on all instances
          having either primary or secondary one of the passed names
        - "gnt-instance startup --primary name..." will work on all instances
          having primary node one of the passed names
        - "gnt-instance startup --secondary name..." will work on all
          instances having as secondary node one of the passed names
        - "gnt-instance startup --all" will work on all instances
      
      This allows a simple cluster-wide shutdown or node shutdown (or
      startup).
      
      Note that this version stops at the first error - it will not try to
      start the 2nd instance selected if there is a critical error with the
      1st one.
      
      Also note that this version is not faster than simply running manually
      "gnt-instance shutdown NAME", because it doesn't parallelize the
      shutdown/startup actions.
      
      Reviewed-by: imsnah,roman.marxer
      312ac745
    • Iustin Pop's avatar
      Add rename instance support to ConfigWriter · fc95f88f
      Iustin Pop authored
      This patch adds support for renaming instances to the ConfigWriter
      class. It's needed in here in order to guarantee that we don't lose the
      instance during the rename (the instance will be there, either with the
      old name or with the new name).
      
      Reviewed-by: imsnah
      fc95f88f
  9. 15 Sep, 2007 1 commit
    • Iustin Pop's avatar
      Documentation fix for missing dependencies · 116b0c88
      Iustin Pop authored
      I was getting into trouble with gnt-backup and discovered reading the
      code of the debian-etch os image and the error logs that:
           1 - Debian os image shipped by ganeti depends on the availability
      of dump and restore.
      
      Based on that I had included in the section of "Installing the
      Operating System support packages" the dependency of dump/restore and
      the command to install dump/restore.
      
      Author: Leonardo Rodrigues de Mello <l@lmello.eu.org>
      Reviewed-by: iustinp
      116b0c88
  10. 14 Sep, 2007 5 commits
    • Iustin Pop's avatar
      Change OpQueryNodes nodes attribute to names · 246e180a
      Iustin Pop authored
      Change this to have the exact same parameters as OpQueryInstances.
      
      Also fix burnin which is broken since r146.
      
      Reviewed-by: imsnah
      246e180a
    • Iustin Pop's avatar
      Enable LUQueryInstances to work with a given list of instances · 069dcc86
      Iustin Pop authored
      As per the changes to LUQueryNodes, the QueryInstances LU is modified to
      accept a list of instances for which to compute and return information.
      
      Reviewed-by: imsnah
      069dcc86
    • Iustin Pop's avatar
      Remove OpQueryNodeData and LUQueryNodeData · 4a72cc75
      Iustin Pop authored
      Now that LUQueryNodes supports all the functionality of LUQueryNodeData,
      let's migrate gnt-node.ShowNodeConfig to use it and remove all traces of
      OpQueryNodeData and LUQueryNodeData.
      
      Reviewed-by: imsnah
      4a72cc75
    • Iustin Pop's avatar
      Change LUQueryNodes to return raw values and support selective listing · ec223efb
      Iustin Pop authored
      LUQueryNodes it's very similar to LUQueryNodeData, but it lacks two
      features:
        - instance list (it has count though), both primary and secondary
        - selective node listing
      
      In order to support these features, we change it to return raw values
      instead of stringified ones (like the recent change to LUQueryInstances)
      and to support query-ing of a restricted set of nodes.
      
      This CL also modifies the gnt-node script to conform to the new protocol
      and the opcode OpQueryNodes to support the new "nodes" attribute.
      
      Reviewed-by: imsnah
      ec223efb
    • Iustin Pop's avatar
      Change _GetWanted* to return names instead of objects · a7ba5e53
      Iustin Pop authored
      On closer look, all except one of the current users of _GetWantedNodes are
      using only the name of the nodes and throw away the other attributes. It makes
      sense to make this function return only the name list (as in the future this
      might be faster than computing all attributes).
      
      Reviewed-by: imsnah
      a7ba5e53
  11. 13 Sep, 2007 3 commits
    • Michael Hanselmann's avatar
      Split QA script into different modules. · cec9845c
      Michael Hanselmann authored
      Reviewed-by: iustinp
      
      cec9845c
    • Iustin Pop's avatar
      Move string formatting out of LUQueryInstances · 8a23d2d3
      Iustin Pop authored
      Currently, LUQueryInstances will provide strings for its results. This makes it
      hard for other consumers than "gnt-instance list" to use the OpQueryInstances
      opcode for whatever they wish to.
      
      The change moves the formatting in five of the six cases where this happens to
      the actual gnt-instance.ListInstances procedure and removes the unconditional
      convert to string in LUQueryInstances.Exec()
      
      Reviewed-by: imsnah
      8a23d2d3
    • Iustin Pop's avatar
      Fix the ssh change which breaks remote ssh commands · 72f0f7fd
      Iustin Pop authored
      Explanation: since we use lists and not a string, every argument we give
      is passed unchanged to the remote shell. So, for example, passing
      '/etc/init.d/ganeti restart' to the remote shell, it will try to run the
      path /etc/init.d/ganeti\ restart. With the s space included. This
      breaks, for example, gnt-node add and gnt-cluster command.
      
      The original problem with the backup routines that led to the "'" change
      is that they use a plain " ".join(list), but we don't need to quote the
      whole ssh remote command for this. We can simply use the existing
      utils.ShellQuoteCmd(list) which does the proper quoting of the ';' or
      '&&' metacharacters.
      
      With this change, both gnt-node add, gnt-cluster command and
      export/import work.
      
      This also improves the error-handling behaviour of one cat command by
      making it conditional on the preceding mkdir.
      
      Reviewed-by: ultrotter
      72f0f7fd
  12. 12 Sep, 2007 5 commits