from ganeti import constants
from ganeti import objects
from ganeti import ssconf
+from ganeti import hypervisor
def _InitSSHSetup():
raise errors.OpPrereqError("Init.d script '%s' missing or not"
" executable." % constants.NODE_INITD_SCRIPT)
- utils.CheckBEParams(beparams)
+ dirs = [(constants.RUN_GANETI_DIR, constants.RUN_DIRS_MODE)]
+ utils.EnsureDirs(dirs)
+
+ utils.ForceDictType(beparams, constants.BES_PARAMETER_TYPES)
+ # hvparams is a mapping of hypervisor->hvparams dict
+ for hv_name, hv_params in hvparams.iteritems():
+ utils.ForceDictType(hv_params, constants.HVS_PARAMETER_TYPES)
+ hv_class = hypervisor.GetHypervisor(hv_name)
+ hv_class.CheckParameterSyntax(hv_params)
# set up the inter-node password and certificate
_InitGanetiServerSetup()
secondary_ip=secondary_ip,
serial_no=1,
master_candidate=True,
- offline=False,
+ offline=False, drained=False,
)
sscfg = InitConfig(constants.CONFIG_VERSION,
@param cfg_file: configuration file path
@rtype: L{ssconf.SimpleConfigWriter}
- @returns: initialized config instance
+ @return: initialized config instance
"""
nodes = {
"%s!EOF.\n"
"cat > '%s' << '!EOF.' && \n"
"%s!EOF.\n"
+ "chmod 0400 %s %s && "
"%s restart" %
(constants.SSL_CERT_FILE, noded_cert,
constants.RAPI_CERT_FILE, rapi_cert,
+ constants.SSL_CERT_FILE, constants.RAPI_CERT_FILE,
constants.NODE_INITD_SCRIPT))
result = sshrunner.Run(node, 'root', mycommand, batch=False,
return rcode
+def GetMaster():
+ """Returns the current master node.
+
+ This is a separate function in bootstrap since it's needed by
+ gnt-cluster, and instead of importing directly ssconf, it's better
+ to abstract it in bootstrap, where we do use ssconf in other
+ functions too.
+
+ """
+ sstore = ssconf.SimpleStore()
+
+ old_master, _ = ssconf.GetMasterAndMyself(sstore)
+
+ return old_master
+
+
def GatherMasterVotes(node_list):
"""Check the agreement on who is the master.