Merge branch 'stable-2.12' into stable-2.13
authorKlaus Aehlig <aehlig@google.com>
Thu, 14 Jan 2016 13:07:02 +0000 (14:07 +0100)
committerKlaus Aehlig <aehlig@google.com>
Thu, 14 Jan 2016 13:34:16 +0000 (14:34 +0100)
* stable-2.12
  Increase minimal sizes of test online nodes
  Also log the high-level upgrade steps
  Add function to provide logged user feedback
  Run renew-crypto in upgrades in debug mode
  Unconditionally log upgrades at debug level
  Document healthy-majority restriction on master-failover
  Check for healthy majority on master failover with voting
  Add a predicate testing that a majority of nodes is healthy
  Fix outdated comment
  Pass arguments to correct daemons during master-failover
  Fix documentation for master-failover

* stable-2.11
  (no changes)

* stable-2.10
  KVM: explicitly configure routed NICs late

Signed-off-by: Klaus Aehlig <aehlig@google.com>
Reviewed-by: Helga Velroyen <helgav@google.com>

1  2 
lib/backend.py
lib/bootstrap.py
lib/cli.py
lib/client/gnt_cluster.py
lib/hypervisor/hv_kvm/__init__.py
man/gnt-cluster.rst
tools/post-upgrade

diff --cc lib/backend.py
Simple merge
Simple merge
diff --cc lib/cli.py
Simple merge
@@@ -2179,43 -2075,38 +2187,43 @@@ def _VersionSpecificDowngrade()
  
    @return: True upon success
    """
-   ToStdout("Performing version-specific downgrade tasks.")
+   ToStdoutAndLoginfo("Performing version-specific downgrade tasks.")
  
 +  # Determine if this cluster is set up with SSH handling
 +  # (aka not using --no-ssh-init), check if the public
 +  # keyfile exists.
 +  update_keys = os.path.exists(pathutils.SSH_PUB_KEYS)
 +
 +  if not update_keys:
 +    return True
 +
 +  ToStdout("Replace nodes' SSH keys with the master's keys.")
 +  (_, root_keyfiles) = \
 +    ssh.GetAllUserFiles(constants.SSH_LOGIN_USER, mkdir=False, dircheck=False)
 +
 +  dsa_root_keyfiles = dict((kind, value) for (kind, value)
 +                           in root_keyfiles.items()
 +                           if kind == constants.SSHK_DSA)
 +  master_private_keyfile, master_public_keyfile = \
 +      dsa_root_keyfiles[constants.SSHK_DSA]
 +
    nodes = ssconf.SimpleStore().GetOnlineNodeList()
 +  master_node = ssconf.SimpleStore().GetMasterNode()
    cluster_name = ssconf.SimpleStore().GetClusterName()
 -  ssh_ports = ssconf.SimpleStore().GetSshPortMap()
  
 -  for node in nodes:
 -    data = {
 -      constants.NDS_CLUSTER_NAME: cluster_name,
 -      constants.NDS_NODE_DAEMON_CERTIFICATE:
 -        utils.ReadFile(pathutils.NODED_CERT_FILE),
 -      constants.NDS_NODE_NAME: node,
 -      constants.NDS_ACTION: constants.CRYPTO_ACTION_DELETE,
 -      }
 +  # If master node is in 'nodes', remove it
 +  if master_node in nodes:
 +    nodes.remove(master_node)
  
 -    try:
 -      bootstrap.RunNodeSetupCmd(
 -          cluster_name,
 -          node,
 -          pathutils.SSL_UPDATE,
 -          True, # debug
 -          True, # verbose,
 -          True, # use cluster key
 -          False, # ask key
 -          True, # strict host check
 -          ssh_ports[node],
 -          data)
 -    except Exception as e: # pylint: disable=W0703
 -      # As downgrading can fail if a node is temporarily unreachable
 -      # only output the error, but do not abort the entire operation.
 -      ToStderr("Downgrading SSL setup of node '%s' failed: %s." %
 -               (node, e))
 +  srun = ssh.SshRunner(cluster_name=cluster_name)
 +  for name in nodes:
 +    for key_file in [master_private_keyfile, master_public_keyfile]:
 +      command = utils.text.ShellQuoteArgs([
 +          "scp", key_file, "%s:%s" % (name, key_file)])
 +      result = srun.Run(master_node, constants.SSH_LOGIN_USER, command)
 +      if result.exit_code != 0:
 +        ToStderr("Overiding SSH key '%s' of node '%s' failed. You might"
 +                 " want to clean up manually." % (key_file, name))
  
    return True
  
Simple merge
Simple merge
Simple merge