• 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
cmdlib.py 120 KB