commit 64a924d53c56fc659f32ba022ec69e2b6a660468
Merge: bacd275 0de1e68
Author: Helga Velroyen <[email protected]>
Date: Thu Apr 23 15:59:50 2015 +0200
Merge branch 'stable-2.12' into stable-2.13
* 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
diff --cc lib/cmdlib/cluster.py
index b56ca61,ac3fa6d..f4bf913
--- a/lib/cmdlib/cluster.py
+++ b/lib/cmdlib/cluster.py
@@@ -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)
@@@ -210,46 -216,10 +242,49 @@@
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.