Merge branch 'stable-2.12' into stable-2.13
authorHelga Velroyen <helgav@google.com>
Thu, 23 Apr 2015 13:59:50 +0000 (15:59 +0200)
committerHelga Velroyen <helgav@google.com>
Thu, 23 Apr 2015 14:16:39 +0000 (16:16 +0200)
* stable-2.12
  When assigning UUIDs to disks, do so recursively
  Fix sample 2.11 configuration
  Include hypervisor parameters in SSConf
  Add SSConf keys for hypervisor parameters
  Use Hypervisor as the key in ClusterHvParams
  Re-remove final config update in renew-crypto
  Fix string formatting in private object representation
  Fix the computation of the list of reserved IP addresses

* stable-2.11
  Update configure file to version 2.11.7
  Update NEWS file for 2.11.7 release
  Add logging to RenewCrypto
  Fix format string for gnt-network info
  Replace textwrapper.wrap by a custom version for networks
  Add SSL improvements to NEWS file

* stable-2.10
  Update tag limitations
  Fix typos in doc/design-storagetypes.rst
  Make getFQDN prefer cluster protocol family
  Add version of getFQDN accepting preferences
  Make getFQDN honor vcluster

Conflicts:
  lib/cmdlib/cluster.py

Resolution:
  lib/cmdlib/cluster.py: take addition from 2.12

Signed-off-by: Helga Velroyen <helgav@google.com>
Reviewed-by: Petr Pudlak <pudlak@google.com>

1  2 
NEWS
doc/admin.rst
lib/cmdlib/cluster.py
src/Ganeti/Config.hs
src/Ganeti/Objects.hs
test/hs/Test/Ganeti/Objects.hs
tools/cfgupgrade

diff --cc NEWS
Simple merge
diff --cc doc/admin.rst
Simple merge
@@@ -107,39 -106,18 +107,43 @@@ def _UpdateMasterClientCert
  class LUClusterRenewCrypto(NoHooksLU):
    """Renew the cluster's crypto tokens.
  
 -  Note that most of this operation is done in gnt_cluster.py, this LU only
 -  takes care of the renewal of the client SSL certificates.
 -
    """
 +
    _MAX_NUM_RETRIES = 3
 +  REQ_BGL = False
  
 -  def Exec(self, feedback_fn):
 +  def ExpandNames(self):
 +    self.needed_locks = {
 +      locking.LEVEL_NODE: locking.ALL_SET,
 +      locking.LEVEL_NODE_ALLOC: locking.ALL_SET,
 +    }
 +    self.share_locks = ShareAll()
 +    self.share_locks[locking.LEVEL_NODE] = 0
 +    self.share_locks[locking.LEVEL_NODE_ALLOC] = 0
 +
 +  def CheckPrereq(self):
 +    """Check prerequisites.
 +
 +    This checks whether the cluster is empty.
 +
 +    Any errors are signaled by raising errors.OpPrereqError.
 +
 +    """
 +    self._ssh_renewal_suppressed = \
 +      not self.cfg.GetClusterInfo().modify_ssh_setup and self.op.ssh_keys
 +
 +  def _RenewNodeSslCertificates(self, feedback_fn):
 +    """Renews the nodes' SSL certificates.
 +
 +    Note that most of this operation is done in gnt_cluster.py, this LU only
 +    takes care of the renewal of the client SSL certificates.
 +
 +    """
      master_uuid = self.cfg.GetMasterNode()
+     cluster = self.cfg.GetClusterInfo()
+     logging.debug("Renewing the master's SSL node certificate."
+                   " Master's UUID: %s.", master_uuid)
  
      server_digest = utils.GetCertificateDigest(
        cert_filename=pathutils.NODED_CERT_FILE)
  
      self.cfg.RemoveNodeFromCandidateCerts("%s-SERVER" % master_uuid)
      self.cfg.RemoveNodeFromCandidateCerts("%s-OLDMASTER" % master_uuid)
+     logging.debug("Cleaned up *-SERVER and *-OLDMASTER certificate from"
+                   " master candidate cert list. Current state of the"
+                   " list: %s.", cluster.candidate_certs)
  
 +  def _RenewSshKeys(self, feedback_fn):
 +    """Renew all nodes' SSH keys.
 +
 +    """
 +    master_uuid = self.cfg.GetMasterNode()
 +
 +    nodes = self.cfg.GetAllNodesInfo()
 +    nodes_uuid_names = [(node_uuid, node_info.name) for (node_uuid, node_info)
 +                        in nodes.items() if not node_info.offline]
 +    node_names = [name for (_, name) in nodes_uuid_names]
 +    node_uuids = [uuid for (uuid, _) in nodes_uuid_names]
 +    port_map = ssh.GetSshPortMap(node_names, self.cfg)
 +    potential_master_candidates = self.cfg.GetPotentialMasterCandidates()
 +    master_candidate_uuids = self.cfg.GetMasterCandidateUuids()
 +
 +    result = self.rpc.call_node_ssh_keys_renew(
 +      [master_uuid],
 +      node_uuids, node_names, port_map,
 +      master_candidate_uuids,
 +      potential_master_candidates)
 +
 +    # Check if there were serious errors (for example master key files not
 +    # writable).
 +    result[master_uuid].Raise("Could not renew the SSH keys of all nodes")
 +
 +    # Process any non-disruptive errors (a few nodes unreachable etc.)
 +    EvaluateSshUpdateRPC(result, master_uuid, feedback_fn)
 +
 +  def Exec(self, feedback_fn):
 +    if self.op.node_certificates:
 +      feedback_fn("Renewing Node SSL certificates")
 +      self._RenewNodeSslCertificates(feedback_fn)
 +    if self.op.ssh_keys and not self._ssh_renewal_suppressed:
 +      feedback_fn("Renewing SSH keys")
 +      self._RenewSshKeys(feedback_fn)
 +    elif self._ssh_renewal_suppressed:
 +      feedback_fn("Cannot renew SSH keys if the cluster is configured to not"
 +                  " modify the SSH setup.")
 +
  
  class LUClusterActivateMasterIp(NoHooksLU):
    """Activate the master IP on the master node.
Simple merge
Simple merge
Simple merge
Simple merge